<?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>223895</bug_id>
          
          <creation_ts>2021-03-29 13:02:51 -0700</creation_ts>
          <short_desc>[WTF] Introduce RobinHoodHashTable</short_desc>
          <delta_ts>2021-04-02 12:51:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fpizlo</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1744847</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 13:02:51 -0700</bug_when>
    <thetext>[WTF] Introduce RobinHoodHashTable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744848</commentid>
    <comment_count>1</comment_count>
      <attachid>424567</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 13:03:24 -0700</bug_when>
    <thetext>Created attachment 424567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744851</commentid>
    <comment_count>2</comment_count>
      <attachid>424568</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 13:07:38 -0700</bug_when>
    <thetext>Created attachment 424568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744924</commentid>
    <comment_count>3</comment_count>
      <attachid>424583</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 14:44:13 -0700</bug_when>
    <thetext>Created attachment 424583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744926</commentid>
    <comment_count>4</comment_count>
      <attachid>424584</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 14:47:05 -0700</bug_when>
    <thetext>Created attachment 424584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744937</commentid>
    <comment_count>5</comment_count>
      <attachid>424586</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 14:58:36 -0700</bug_when>
    <thetext>Created attachment 424586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744975</commentid>
    <comment_count>6</comment_count>
      <attachid>424599</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 16:04:21 -0700</bug_when>
    <thetext>Created attachment 424599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745032</commentid>
    <comment_count>7</comment_count>
      <attachid>424617</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-29 22:41:43 -0700</bug_when>
    <thetext>Created attachment 424617
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745052</commentid>
    <comment_count>8</comment_count>
      <attachid>424621</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-30 01:17:36 -0700</bug_when>
    <thetext>Created attachment 424621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745059</commentid>
    <comment_count>9</comment_count>
      <attachid>424623</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-30 01:36:51 -0700</bug_when>
    <thetext>Created attachment 424623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745275</commentid>
    <comment_count>10</comment_count>
      <attachid>424682</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-30 13:31:02 -0700</bug_when>
    <thetext>Created attachment 424682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745396</commentid>
    <comment_count>11</comment_count>
      <attachid>424712</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-30 16:26:47 -0700</bug_when>
    <thetext>Created attachment 424712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745567</commentid>
    <comment_count>12</comment_count>
      <attachid>424750</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-31 03:07:17 -0700</bug_when>
    <thetext>Created attachment 424750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745570</commentid>
    <comment_count>13</comment_count>
      <attachid>424752</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-31 03:43:23 -0700</bug_when>
    <thetext>Created attachment 424752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745697</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-31 11:23:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/76061870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745746</commentid>
    <comment_count>15</comment_count>
      <attachid>424810</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-31 13:12:59 -0700</bug_when>
    <thetext>Created attachment 424810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745948</commentid>
    <comment_count>16</comment_count>
      <attachid>424874</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-31 23:55:06 -0700</bug_when>
    <thetext>Created attachment 424874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745949</commentid>
    <comment_count>17</comment_count>
      <attachid>424875</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-31 23:59:03 -0700</bug_when>
    <thetext>Created attachment 424875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745951</commentid>
    <comment_count>18</comment_count>
      <attachid>424877</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 00:23:01 -0700</bug_when>
    <thetext>Created attachment 424877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745966</commentid>
    <comment_count>19</comment_count>
      <attachid>424882</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 01:56:49 -0700</bug_when>
    <thetext>Created attachment 424882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745994</commentid>
    <comment_count>20</comment_count>
      <attachid>424888</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 05:41:44 -0700</bug_when>
    <thetext>Created attachment 424888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746020</commentid>
    <comment_count>21</comment_count>
      <attachid>424888</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-04-01 07:48:12 -0700</bug_when>
    <thetext>Comment on attachment 424888
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424888&amp;action=review

&gt; Source/WTF/wtf/RobinHoodHashTable.h:312
&gt; +    while (1) {

Maybe while (true) here and elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746081</commentid>
    <comment_count>22</comment_count>
      <attachid>424888</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 10:01:00 -0700</bug_when>
    <thetext>Comment on attachment 424888
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424888&amp;action=review

&gt;&gt; Source/WTF/wtf/RobinHoodHashTable.h:312
&gt;&gt; +    while (1) {
&gt; 
&gt; Maybe while (true) here and elsewhere?

Yeah, fixed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746275</commentid>
    <comment_count>23</comment_count>
      <attachid>424950</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 14:52:36 -0700</bug_when>
    <thetext>Created attachment 424950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746323</commentid>
    <comment_count>24</comment_count>
      <attachid>424961</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 16:46:49 -0700</bug_when>
    <thetext>Created attachment 424961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746403</commentid>
    <comment_count>25</comment_count>
      <attachid>424992</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-01 23:40:24 -0700</bug_when>
    <thetext>Created attachment 424992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746416</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-02 01:33:45 -0700</bug_when>
    <thetext>Committed r275410 (236073@main): &lt;https://commits.webkit.org/236073@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746418</commentid>
    <comment_count>27</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-02 01:50:32 -0700</bug_when>
    <thetext>Committed r275411 (236074@main): &lt;https://commits.webkit.org/236074@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746615</commentid>
    <comment_count>28</comment_count>
      <attachid>424888</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-02 12:47:23 -0700</bug_when>
    <thetext>Comment on attachment 424888
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424888&amp;action=review

Very cool. I think as a follow up we should consider renaming WTF::HashTable to something more evocative of its implementation, since it is now just one of multiple table implementations one can choose.

&gt; Source/WTF/ChangeLog:23
&gt; +        1. MemoryCompactLookupOnlyRobinHoodHashSet / HashMap

Could we gain even more here by making these perfect hash tables (ala gperf)?

&gt; Source/JavaScriptCore/runtime/Identifier.h:297
&gt; +    static constexpr bool hasHashInValue = true;

I&apos;m not a huge fan of this name, as it reads to me as &quot;has hashInValue&quot; and the use of &quot;value&quot; makes me think that means it is not in the key.  Perhaps something like &quot;hashValueStoredInKey&quot;? It would also be good to document this somewhere in HashFunctions.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746618</commentid>
    <comment_count>29</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-02 12:49:48 -0700</bug_when>
    <thetext>https://blog.quarkslab.com/frozen-an-header-only-constexpr-alternative-to-gperf-for-c14-users.html as example of a perfect hash in c++.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746620</commentid>
    <comment_count>30</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-02 12:51:55 -0700</bug_when>
    <thetext>or https://github.com/Kronuz/constexpr-phf</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424567</attachid>
            <date>2021-03-29 13:03:24 -0700</date>
            <delta_ts>2021-03-29 13:28:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329130323.patch</filename>
            <type>text/plain</type>
            <size>66850</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLjNmZDRlN2VjNGY3MjQyYjRjNTg0MTE4Yzk1MGYwOTA1YjNlNmE2Y2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTA3IEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFz
aFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Vj46OnN3YXApOgorICAgICAgICAoV1RGOjpW
Pjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpm
aW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRyYWl0cz46OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmFkZCk6CisgICAgICAgIChXVEY6OlY+Ojph
ZGRWb2lkKToKKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vj46
OnJlbW92ZSk6CisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6OlY+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlY+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vj46OnRh
a2VBbnkpOgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpU
cmFpdHM+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAg
IChXVEY6Oj0gY29uc3QpOgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6CisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6YWRkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6On5S
b2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJl
Z2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFuZG9t
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAg
IChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpmaW5k
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlucyBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhj
ZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNo
b3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhw
YW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptdXN0UmVoYXNo
SW5QbGFjZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxk
U2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaHJpbmsp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlc2lyZWRJbmRleCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cHJvYmVEaXN0YW5jZSk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjptYWtlQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvciBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW52YWxpZGF0
ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemVNYXNr
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjprZXlDb3VudCBjb25z
dCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNoZWNrS2V5KToKKyAgICAgICAgKFdURjo6
S2V5VHJhaXRzPjo6bG9va3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW5saW5lTG9v
a3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW5pdGlhbGl6ZUJ1Y2tldCk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Om1h
aW50YWluUHJvYmVEaXN0YW5jZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3Np
bmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6ZmluZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZXhw
YW5kKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpSb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICog
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJp
bmdUYWJsZS5oOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKwogMjAy
MS0wMy0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIHd0Zi9W
ZWN0b3IuaDoxMjc2Ojg4OiBydW50aW1lIGVycm9yOiByZWZlcmVuY2UgYmluZGluZyB0byBudWxs
IHBvaW50ZXIgb2YgdHlwZSAnY29uc3QgV2ViQ29yZTo6U3R5bGU6OlJ1bGVGZWF0dXJlJwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAppbmRleCA3ZGM4YTkyM2Y0MDg5OGQ5NTFlZDI5MGE5YzU3NTU3ZTA5NTdi
NTk0Li43Mjc3NzJlYTFkZGQxOTg4NDliOTEyNDA5M2FmZDNjMzk0OTM0ZjljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9TaWduYWxzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIE9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8ZGlyZWN0Lmg+CkBAIC0xMjg0LDExICsxMjg1LDc1IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsCiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blByaW50U3RkT3V0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BX
YXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgUm9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHN0
cmluZ1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsK
KyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUu
YWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3Ry
aW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsg
KytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdU
YWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFM
b2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAg
ICAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlu
cyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92
ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9w
KCk7CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAg
ICByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3Rkb3V0KTsK
IH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJpbnRTdGRFcnIsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CisjaWYg
MAorICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CisgICAg
eworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytp
KSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYg
MHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihp
KSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAg
aWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1RhYmxlLmNvbnRh
aW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAg
ICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgp
KTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4oc3RvcFdhdGNo
LmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVybmFsKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBzdGRlcnIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyNmI0NWU1NTNiMDY3ZTI0MDMyN2NjODg2N2VjN2M4Yzgx
NDY3ZTVmLi5kY2ZjODgzMzY1ZTY0NmYxZjU2NjA4NTM4MWQwNjA1NWVhOTdiYTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcxNyw3ICs3MTcsOSBAQAog
CQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMxNDlBM0EyMjhCRENBQjAwQkZBNkM3IC8qIENvbmN1cnJlbnRCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMUJERTI4MjJFOTEzQ0MwMDI5QjEw
NSAvKiBNYWNoVk1TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFZN
U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMUNGMEE1MjYxMDU4NTgwMDM2
RTY3MyAvKiBSb2Jpbkhvb2RIYXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFz
aFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjAwQUI0MUU5QTUzNkQw
MDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybVJlZ2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSb2Jpbkhvb2RIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzMkEyMDczMjNDNTkwMkQwMDM0QTA5MiAvKiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYWtlZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzM5QzE2MzI0NEI0RTg3MDAzNTlEQTkgLyogRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRhUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzM0Q1Rjg3MUZCRUQ2NjcwMEJGNjI1RSAvKiBSZWN1cnNhYmxlTGFtYmRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2FibGVMYW1iZGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTEsNiArMTIxMyw4IEBACiAJCQkJQThBNDczMDMxNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAv
KiBSZXNvdXJjZVVzYWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1QjAwNDEyM0ZGIC8qIFJl
dGFpblB0ci5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhh
c2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNw
cCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJ
CTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJm
YzkxNzguLjVjNGE3NTk5ODQxYmJhMDQzODY4YjYzOWZiYjI4YjFkNzVjYTk2YjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVy
YXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAx
MGMwYTYyOTU4N2M1ZWRmMGE4Li5mNmFiYjg0M2I0MDk0MGJiODk3MmE1NjM3Y2U5ZDNiYTI5NjEy
ZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtODEsNDQgKzgxLDQ0IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNz
IEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwg
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAg
ICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgYWRkSXRlcmF0
b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKICNpZiAhQ0hFQ0tf
SEFTSFRBQkxFX0lURVJBVE9SUwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPios
Ci0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICAgICAgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxp
bmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKICNlbmRp
ZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtub3du
R29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVl
KiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVm
IFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJlZmVy
ZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsK
IAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xhc3Mg
SGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAgICAg
ICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkKICAg
ICAgICAgewpAQCAtMjQzLDE4ICsyNDMsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvciA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBz
dGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRh
YmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAg
ICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAg
ICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlw
ZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBl
OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNo
VGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRh
YmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRhYmxl
LCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93bkdv
b2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAtMzQ3
LDggKzM0Nyw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBI
YXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJh
dG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVk
ZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwogICAg
ICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTE1MTQsOSArMTUxNSw5IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIG1f
aXRlcmF0b3JzID0gMDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICAgICAgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90
YWJsZSA9IHRhYmxlOwogICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CkBAIC0xNTM2LDggKzE1
MzcsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9y
KEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhh
c2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9t
IGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFi
bGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaCBiL1Nv
dXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjU0ODg5ZmE4MTRj
ZTdjZGJkMmNmNDVkM2RkNzczOTQ5MmYwYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFNldC5oCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3N0cnVjdCBJZGVudGl0eUV4dHJh
Y3RvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhh
c2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PiBjbGFzcyBSb2Jp
bkhvb2RIYXNoU2V0OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgorY2xhc3MgUm9iaW5Ib29kSGFzaFNldCBmaW5hbCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFz
aEFyZyBIYXNoRnVuY3Rpb25zOworICAgIHR5cGVkZWYgVHJhaXRzQXJnIFZhbHVlVHJhaXRzOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlIFRha2VUeXBlOworCitw
dWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVl
VHlwZTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFJvYmluSG9vZEhhc2hUYWJsZTxWYWx1ZVR5
cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJh
aXRzLCBWYWx1ZVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKKworcHVibGljOgorICAgIC8qCisgICAg
ICogU2luY2UgZmlndXJpbmcgb3V0IHRoZSBlbnRyaWVzIG9mIGFuIGl0ZXJhdG9yIGlzIGNvbmZ1
c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0OgorICAgICAqIGNvbnN0IEtleVR5cGUmIGtleSA9
IGl0ZXJhdG9yLT5rZXk7CisgICAgICovCisgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBl
PiBjb25zdF9pdGVyYXRvcjsKKworICAgIC8qCisgICAgICogU2luY2UgZmlndXJpbmcgb3V0IHRo
ZSBlbnRyaWVzIG9mIGFuIEFkZFJlc3VsdCBpcyBjb25mdXNpbmcsIGhlcmUgaXMgYSBjaGVhdCBz
aGVldDoKKyAgICAgKiBpdGVyYXRvciBpdGVyID0gYWRkUmVzdWx0Lml0ZXJhdG9yOworICAgICAq
IGJvb2wgaXNOZXdFbnRyeSA9IGFkZFJlc3VsdC5pc05ld0VudHJ5OworICAgICAqLworICAgIHR5
cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAg
IFJvYmluSG9vZEhhc2hTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNoU2V0
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZUFyZz4gaW5pdGlhbGl6ZXJMaXN0KQorICAgIHsK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlzdCkKKyAgICAg
ICAgICAgIGFkZCh2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hT
ZXQmKTsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBjYXBhY2l0
eSgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworCisgICAgdm9pZCByZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KSB7IG1faW1wbC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGtleUNvdW50KTsgfQorCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICAgIGl0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wbC5yYW5kb20oKTsgfQorCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBWYWx1
ZVR5cGUmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYpIGNvbnN0
OworCisgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgZmluZCgpIHRoYXQgZmluZHMgdGhl
IG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3RoZXIg
dHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uLiBIYXNoVHJhbnNsYXRv
cgorICAgIC8vIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG1lbWJlcnM6CisgICAg
Ly8gICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJik7CisgICAgLy8gICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNv
bnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBi
b29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25zdDsKKworICAgIC8vIFRoZSByZXR1cm4gdmFsdWUg
aW5jbHVkZXMgYm90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUncyBsb2NhdGlvbiwK
KyAgICAvLyBhbmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIGlmIGl0IGlzIGEg
bmV3IG9yIGV4aXN0aW5nIGVudHJ5IGluIHRoZSBzZXQuCisgICAgQWRkUmVzdWx0IGFkZChjb25z
dCBWYWx1ZVR5cGUmKTsKKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKKyAgICB2b2lk
IGFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBW
YWx1ZVR5cGU+Pik7CisKKyAgICB2b2lkIGFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJik7CisgICAg
dm9pZCBhZGRWb2lkKFZhbHVlVHlwZSYmKTsKKworICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9u
IG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcK
KyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBj
b252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGluIHRoZSB0YWJsZS4g
SGFzaFRyYW5zbGF0b3IgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbWVtYmVyczoK
KyAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKKyAgICAvLyAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAgICAvLyAgIHN0YXRp
YyB0cmFuc2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hDb2RlKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gQWRkUmVzdWx0
IGFkZChjb25zdCBUJik7CisKKyAgICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5n
cyB0byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55IG9mCisgICAgLy8gdGhlbSBhcmUgbmV3
IHRvIHRoZSBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhlIHNldCBpcyB1bmNoYW5nZWQuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgIGJvb2wgYWRkKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3JUeXBlPgorICAgIGJvb2wgcmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBl
IGVuZCk7CisKKyAgICBib29sIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICBib29sIHJl
bW92ZShpdGVyYXRvcik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29s
IHJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBUYWtl
VHlwZSB0YWtlKGNvbnN0IFZhbHVlVHlwZSYpOworICAgIFRha2VUeXBlIHRha2UoaXRlcmF0b3Ip
OworICAgIFRha2VUeXBlIHRha2VBbnkoKTsKKworICAgIC8vIE92ZXJsb2FkcyBmb3Igc21hcnQg
cG9pbnRlciB2YWx1ZXMgdGhhdCB0YWtlIHRoZSByYXcgcG9pbnRlciB0eXBlIGFzIHRoZSBwYXJh
bWV0ZXIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZSBmaW5kKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJl
bW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUgdGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46
OlB0clR5cGUpOworCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlw
ZSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mKSBjb25zdDsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgT3Ro
ZXJDb2xsZWN0aW9uJikgY29uc3Q7CisKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgdm9pZCBSb2Jpbkhv
b2RIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKFJvYmluSG9vZEhhc2hTZXQmIG90aGVyKQoreworICAg
IG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFNldDxU
LCBVLCBWPjo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgdW5z
aWduZWQgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29sIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwg
Vj46OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGF1
dG8gUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgor
eworICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VCwg
VSwgVj46OmVuZCgpIGNvbnN0IC0+IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuIG1faW1wbC5lbmQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lu
bGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBl
JiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gbV9pbXBsLmZpbmQodmFs
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgor
aW5saW5lIGJvb2wgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKHZhbHVl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK3sKKyAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhh
c2hUcmFuc2xhdG9yPj4odmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFu
c2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhh
c2hTZXQ8VCwgVSwgVj46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQK
K3sKKyAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0
PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAoreworICAgIHJl
dHVybiBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hTZXQ8
VCwgVSwgVj46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICBtX2ltcGwu
YWRkKHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFs
dWVUeXBlJiYgdmFsdWUpCit7CisgICAgbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4K
K2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit7CisgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhh
c2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4K
K2lubGluZSBib29sIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUg
YmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICBjaGFuZ2VkIHw9IGFkZCgqaXRlcikuaXNOZXdFbnRyeTsKKyAgICByZXR1cm4gY2hh
bmdlZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
K3RlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KK2lubGluZSBib29sIFJvYmluSG9vZEhh
c2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBl
bmQpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgZm9yIChJdGVyYXRvclR5cGUg
aXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBjaGFuZ2VkIHw9IHJl
bW92ZSgqaXRlcik7CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0Lm1faW1wbCA9PSBt
X2ltcGwuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2ltcGwuaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICBtX2ltcGwucmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJvb2wgUm9iaW5I
b29kSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgoraW5s
aW5lIGJvb2wgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIHZv
aWQgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIoKQoreworICAgIG1faW1wbC5jbGVh
cigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgor
aW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRvciBpdCkg
LT4gVGFrZVR5cGUKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybiBWYWx1
ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gVmFsdWVUcmFpdHM6OnRha2UoV1RGTW92ZShjb25zdF9jYXN0PFZhbHVlVHlwZSY+KCpp
dCkpKTsKKyAgICByZW1vdmUoaXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhv
b2RIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VU
eXBlCit7CisgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFz
aFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit7CisgICAgcmV0dXJuIHRha2Uo
YmVnaW4oKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWPgoraW5saW5lIGF1
dG8gUm9iaW5Ib29kSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK3sK
KyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRz
LCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5h
bWUgVj4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCit7CisgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNo
U2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxW
YWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCit7CisgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gUm9i
aW5Ib29kSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK3sKKyAgICByZXR1cm4g
dGFrZShmaW5kKHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+Ojppc1Zh
bGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICBpZiAoVmFsdWVUcmFpdHM6
OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CisgICAgICAg
IGlmICh2YWx1ZSA9PSBWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0hhc2hUcmFpdHNFbXB0eVZh
bHVlPFZhbHVlVHJhaXRzPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Citpbmxp
bmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVy
Q29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoreworICAgIGlmIChzaXplKCkgIT0g
b3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
Y29uc3QgYXV0byYgb3RoZXIgOiBvdGhlckNvbGxlY3Rpb24pIHsKKyAgICAgICAgaWYgKCFjb250
YWlucyhvdGhlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgoraW5saW5lIGJvb2wgUm9iaW5I
b29kSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90
aGVyQ29sbGVjdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlckNvbGxl
Y3Rpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
Pgordm9pZCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjppbml0aWFsaXplcl9s
aXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKK3sKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogbGlzdCkKKyAgICAgICAgYWRkKHZhbHVlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAoreworICAg
IG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6Um9iaW5Ib29kSGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRh
YmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzRhOGU4OWVhN2NmMzg4MmQwYzMxZDhjYzI2YTE0MzRiZDM1Njhh
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
CkBAIC0wLDAgKzEsNzQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7
IH0KKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21w
YXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0
IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJl
cXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhh
c2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFs
dWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5
cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJp
bmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVx
dWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2Qg
SGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2ln
bmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBB
dG9taWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNo
aW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisv
LyBbMV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1
NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczov
L2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTog
aHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFj
a3dhcmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJs
ZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PjsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9y
OworICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25z
dF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKKyAgICB0eXBlZGVm
IEtleSBLZXlUeXBlOworICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYg
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gSWRlbnRp
dHlUcmFuc2xhdG9yVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRv
cj4gQWRkUmVzdWx0OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVh
c2VkV2Vha1ZhbHVlRnVuY3Rpb24pOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZh
dWx0OworICAgIH5Sb2Jpbkhvb2RIYXNoVGFibGUoKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2Nh
dGVUYWJsZShtX3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFz
aFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhv
b2RIYXNoVGFibGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBS
b2Jpbkhvb2RIYXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RI
YXNoVGFibGUmJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29k
SGFzaFRhYmxlJiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVz
dCByZXR1cm4gdGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8g
VGhpcyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwg
dGhlIGVtcHR5IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBl
bXB0eSB0YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0
b3IobV90YWJsZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29k
SXRlcmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRv
cihtX3RhYmxlKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1h
a2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAg
IGl0ZXJhdG9yIHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBh
dXRvJiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2so
KV07CisgICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9Owor
ICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRo
aXMpLT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBr
ZXlDb3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJs
ZVNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgp
OyB9CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQp
CisgICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxl
U2l6ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRz
OjptaW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6
Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOwor
CisgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAg
IG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAg
ICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2
YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBh
ZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RG
TW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0
IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBz
b21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0
aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRS
ZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
S2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyBy
ZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2
b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZv
aWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7Cisg
ICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0
cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlC
dWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkg
eyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29r
dXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMg
dm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXpl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49
IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOwor
CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgYm9vbD4gTG9va3VwVHlwZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNo
ZWNrS2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVl
VHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgaGFzaCwgdW5zaWduZWQgZGlzdGFuY2Us
IHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVtb3ZlQW5k
SW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7CisgICAg
dm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlKFZh
bHVlVHlwZSopOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRh
YmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25z
dCB7IHJldHVybiBzaG91bGRFeHBhbmQoa2V5Q291bnQoKSwgdGFibGVTaXplKCkpOyB9CisgICAg
Ym9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5M
b2FkIDwgdGFibGVTaXplKCkgKiAyOyB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7
IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgp
ID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOyB9CisgICAgVmFsdWVUeXBlKiBleHBhbmQo
VmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOworICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2go
dGFibGVTaXplKCkgLyAyLCBudWxscHRyKTsgfQorICAgIHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgp
OworCisgICAgVmFsdWVUeXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5
cGUqIGVudHJ5KTsKKyAgICBWYWx1ZVR5cGUqIHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKKworICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZXNpcmVkSW5kZXgodW5zaWduZWQgaGFzaCwgdW5z
aWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCAmIHNpemVNYXNrOwor
ICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5jZSh1bnNp
Z25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1h
c2spCisgICAgeworICAgICAgICByZXR1cm4gKGluZGV4ICsgc2l6ZSAtIGRlc2lyZWRJbmRleCho
YXNoLCBzaXplTWFzaykpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaXRlcmF0b3IgbWFrZUl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFi
bGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRv
cihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9z
LCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFi
bGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisgICAgY29uc3RfaXRlcmF0
b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNo
SXRlbUtub3duR29vZCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5j
eUV4Y2VwdFNpemUoKSB7IH0KKworICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMo
KSB7IH0KKworICAgIC8vIExvYWQtZmFjdG9yIGlzIDkwJS4KKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSA5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gMTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtaW5Mb2FkID0gNjsKKworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlDb3VudDsgfQorCisgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0
ciB9OworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fa2V5
Q291bnQgeyAwIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNoZWNrS2V5
KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChj
b25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhh
c2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hl
Y2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90
YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVu
c2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxl
U2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5
KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7Cisg
ICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNr
ZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJv
YmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4g
c3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRp
c3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0g
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0
YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBo
YXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAg
IHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7
CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQorewor
ICAgIEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46
OnRlbXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgor
QUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWRkKFQmJiBrZXksIEV4dHJh
JiYgZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihr
ZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworCisgICAgaWYgKCFtX3RhYmxlKQor
ICAgICAgICBleHBhbmQobnVsbHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAg
IHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVk
IGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0
YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1w
dHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0
ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJh
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5
S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5
SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBp
ZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBr
ZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3Io
ZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9
IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBT
dGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBp
bnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUo
KmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBz
dGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAg
ICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4
LCBlbnRyeUhhc2gsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQg
Kz0gMTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZW50cnkgPSBleHBhbmQo
ZW50cnkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIHJl
dHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CitBTFdBWVNfSU5MSU5FIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjptYWludGFpblBy
b2JlRGlzdGFuY2UoVmFsdWVUeXBlJiYgdmFsdWUsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBo
YXNoLCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2sp
Cit7CisgICAgdXNpbmcgc3RkOjpzd2FwOworICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXpl
TWFzazsKKyAgICArK2Rpc3RhbmNlOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4
dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5j
ZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAg
ICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBzd2FwKHZh
bHVlLCAqZW50cnkpOworICAgICAgICAgICAgaGFzaCA9IGVudHJ5SGFzaDsKKyAgICAgICAgICAg
IGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisK
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWRkUGFzc2lu
Z0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNo
ZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBhbmQobnVsbHB0cik7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUpOwor
CisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVN
YXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5
ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAg
ICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBm
YWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlz
dGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlz
dGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2Fw
cGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQu
CisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsK
KyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndh
cmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAg
ICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBl
bnRyeUhhc2gsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNp
emVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQgKz0g
MTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZW50cnkgPSBleHBhbmQoZW50
cnkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIHJldHVy
biBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaW5zZXJ0KFZhbHVlVHlwZSYm
IHZhbHVlKSAtPiBWYWx1ZVR5cGUqCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOworICAgIHVuc2ln
bmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6
ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFz
aChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2ly
ZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRl
eDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFs
dWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAg
ICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFu
Y2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICBzd2FwKCplbnRyeSwgdmFs
dWUpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUodmFsdWUpLCBp
bmRleCwgZW50cnlIYXNoLCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXplLCBzaXplTWFzayk7Cisg
ICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OmZpbmQoY29uc3QgVCYga2V5KSAtPiBpdGVyYXRvcgorewor
ICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IGxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQor
ICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9y
KGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIGtleSkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJl
dHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PFJvYmluSG9v
ZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYg
KCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3RlbXBsYXRlIDx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2Jvb2wgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpjb250
YWlucyhjb25zdCBUJiBrZXkpIGNvbnN0Cit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUq
Pih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0
ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsK
KyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpy
ZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVy
YXRvcnMoKTsKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92
ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShWYWx1
ZVR5cGUqIHBvcykKK3sKKyAgICBwb3MtPn5WYWx1ZVR5cGUoKTsKKyAgICBpbml0aWFsaXplQnVj
a2V0KCpwb3MpOworICAgIG1fa2V5Q291bnQgLT0gMTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0
YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAg
ICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0gcG9zIC0gbV90YWJsZTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IChpbmRleFByZXZpb3VzICsgMSkgJiBzaXplTWFzazsKKworICAgIHdoaWxlICgxKSB7
CisgICAgICAgIFZhbHVlKiBwcmV2aW91c0VudHJ5ID0gbV90YWJsZSArIGluZGV4UHJldmlvdXM7
CisgICAgICAgIFZhbHVlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOworICAgICAgICBhdXRvJiBlbnRyeUtl
eSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYg
KCFwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqcHJl
dmlvdXNFbnRyeSwgV1RGTW92ZSgqZW50cnkpKTsKKyAgICAgICAgZW50cnktPn5WYWx1ZVR5cGUo
KTsKKyAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqZW50cnkpOworCisgICAgICAgIGluZGV4UHJl
dmlvdXMgPSBpbmRleDsKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOwor
ICAgIH0KKworICAgIGlmIChzaG91bGRTaHJpbmsoKSkKKyAgICAgICAgc2hyaW5rKCk7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZv
aWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0
ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlKGNv
bnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lz
dGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlv
bikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVX
aXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yIGl0KQoreworICAgIGlm
IChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0
ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5t
X3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46
OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit7CisgICAgcmVtb3ZlKGZpbmQoa2V5KSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSh1bnNpZ25l
ZCBzaXplKSAtPiBWYWx1ZVR5cGUqCit7CisgICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVt
YmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAorICAg
IC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKKyAgICBpZiBjb25zdGV4cHIg
KFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onpl
cm9lZE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSk7CisKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNo
YXIqPihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgaW5pdGlh
bGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2
b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUs
IHVuc2lnbmVkIHNpemUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOworICAgIEhhc2hUYWJsZU1hbGxvYzo6
ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0byBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OmV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUq
Cit7CisgICAgdW5zaWduZWQgbmV3U2l6ZTsKKyAgICB1bnNpZ25lZCBvbGRTaXplID0gdGFibGVT
aXplKCk7CisgICAgaWYgKCFvbGRTaXplKQorICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjpt
aW5pbXVtVGFibGVTaXplOworICAgIGVsc2UgaWYgKG11c3RSZWhhc2hJblBsYWNlKCkpCisgICAg
ICAgIG5ld1NpemUgPSBvbGRTaXplOworICAgIGVsc2UKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNp
emUgKiAyOworCisgICAgcmV0dXJuIHJlaGFzaChuZXdTaXplLCBlbnRyeSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Citjb25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpjb21wdXRlQmVzdFRhYmxl
U2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25lZCBiZXN0VGFibGVTaXplID0g
V1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKworICAgIGlmIChzaG91bGRFeHBh
bmQoa2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7
CisKKyAgICBhdXRvIGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24gPSBbXShkb3VibGUg
bG9hZEZhY3RvciwgdW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVkIHRhYmxlU2l6ZSkKKyAgICB7
CisgICAgICAgIC8vIEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYWxjdWxhdGlv
biwgdXNpbmcgMy80IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMy80
IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAxMS8yNC4KKyAgICAgICAg
Ly8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAxMS8yNCBhbmQgMy80LCB3ZSBk
b3VibGUgdGhlIHNpemUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVpbmcgdG9vIGNsb3NlIHRvIGxv
YWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8yNC4gVGhpcworICAgICAgICAv
LyBnaXZlIHVzIGEgbG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAxNS8yNCkuCisgICAgICAgIGRv
dWJsZSBtYXhMb2FkUmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAgICBkb3VibGUgbWluTG9hZFJh
dGlvID0gMS4wIC8gbWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2ZXJhZ2VMb2FkUmF0aW8gPSAo
bWF4TG9hZFJhdGlvICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAgICAgIGRvdWJsZSBoYWxmV2F5
QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFnZUxvYWRSYXRpbyArIG1heExv
YWRSYXRpbykgLyAyOworICAgICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFs
ZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAgIH07CisKKyAgICBjb25zdGV4
cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1lcmF0
b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2Vy
RXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAg
YmVzdFRhYmxlU2l6ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNp
emUsIG1pbmltdW1UYWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OnNocmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUg
PSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmlt
dW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KCkpKSwgbnVsbHB0cik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVoYXNoKHVuc2lnbmVkIG5l
d1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgoreworICAgIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisgICAgdW5zaWduZWQgb2xk
VGFibGVTaXplID0gdGFibGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFi
bGU7CisKKyAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CisgICAgbV90YWJs
ZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICBtX3RhYmxlU2l6ZSA9IG5ld1Rh
YmxlU2l6ZTsKKyAgICBtX2tleUNvdW50ID0gb2xkS2V5Q291bnQ7CisKKyAgICBWYWx1ZSogbmV3
RW50cnkgPSBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gb2xkVGFibGVT
aXplOyArK2kpIHsKKyAgICAgICAgYXV0byYgb2xkRW50cnkgPSBvbGRUYWJsZVtpXTsKKyAgICAg
ICAgaWYgKGlzRW1wdHlCdWNrZXQob2xkRW50cnkpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3Rk
OjphZGRyZXNzb2Yob2xkRW50cnkpICE9IGVudHJ5KTsKKyAgICAgICAgICAgIG9sZEVudHJ5Ln5W
YWx1ZVR5cGUoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
VmFsdWUqIHJlaW5zZXJ0ZWRFbnRyeSA9IHJlaW5zZXJ0KFdURk1vdmUob2xkRW50cnkpKTsKKyAg
ICAgICAgb2xkRW50cnkuflZhbHVlVHlwZSgpOworICAgICAgICBpZiAoc3RkOjphZGRyZXNzb2Yo
b2xkRW50cnkpID09IGVudHJ5KSB7CisgICAgICAgICAgICBBU1NFUlQoIW5ld0VudHJ5KTsKKyAg
ICAgICAgICAgIG5ld0VudHJ5ID0gcmVpbnNlcnRlZEVudHJ5OworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIG5ld0VudHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmNsZWFyKCkKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Cisg
ICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWFsbG9jYXRlVGFibGUo
c3RkOjpleGNoYW5nZShtX3RhYmxlLCBudWxscHRyKSwgdGFibGVTaXplKCkpOworICAgIG1fdGFi
bGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK1JvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjo6Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3Ro
ZXIpCisgICAgOiBtX3RhYmxlKGFsbG9jYXRlVGFibGUob3RoZXIubV90YWJsZVNpemUpKQorICAg
ICwgbV9rZXlDb3VudChvdGhlci5tX2tleUNvdW50KQorICAgICwgbV90YWJsZVNpemUob3RoZXIu
bV90YWJsZVNpemUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3Ro
ZXIubV90YWJsZVNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgVmFsdWVUeXBlJiBvdGhlckVudHJ5
ID0gb3RoZXIubV90YWJsZVtpbmRleF07CisgICAgICAgIFZhbHVlVHlwZSYgZW50cnkgPSBtX3Rh
YmxlW2luZGV4XTsKKyAgICAgICAgbmV3ICgmZW50cnkpIFZhbHVlVHlwZShvdGhlckVudHJ5KTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChSb2Jpbkhv
b2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKCk7CisgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworCisgICAg
c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1fdGFibGVTaXplLCBvdGhl
ci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNvdW50KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRvcj0oY29uc3QgUm9i
aW5Ib29kSGFzaFRhYmxlJiBvdGhlcikgLT4gUm9iaW5Ib29kSGFzaFRhYmxlJgoreworICAgIFJv
YmluSG9vZEhhc2hUYWJsZSB0bXAob3RoZXIpOworICAgIHN3YXAodG1wKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CitpbmxpbmUgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpSb2Jpbkhvb2RI
YXNoVGFibGUoUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpCit7CisgICAgb3RoZXIuaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOworCisgICAgbV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90
YWJsZSwgbnVsbHB0cik7CisgICAgbV90YWJsZVNpemUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
dGFibGVTaXplLCAwKTsKKyAgICBtX2tleUNvdW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2tl
eUNvdW50LCAwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFi
bGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAgPSBXVEZNb3ZlKG90aGVyKTsKKyAg
ICBzd2FwKHRlbXApOworICAgIHJldHVybiAqdGhpczsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEyZGYw
YmNmZWYxNDZjM2IyZWU4OWZlNzExN2Y1ZmEuLmExOGIzY2JkODgwMDJkMzlkZmNiMmVjMTc0M2E5
NzVkNGVmNGNkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBAIC02
Myw3ICs2Myw3IEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciB7CiAKICNlbmRpZiAvLyBV
U0UoV0VCX1RIUkVBRCkKIAotdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4+OwordXNpbmcgU3RyaW5nVGFibGVJbXBsID0gQXRvbVN0cmluZ1RhYmxl
OjpTdHJpbmdUYWJsZUltcGw7CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1w
bCYgc3RyaW5nVGFibGUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKaW5k
ZXggMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZS4uYTk4MzUxNGM1Yzdj
ODY2NzEzMzM1MGYwODBlOTFlMjY0NjA5OThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJp
bmdUYWJsZS5oCkBAIC0yMiw4ICsyMiw4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzMzLDE0IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFz
cyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgorICAgIHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IFJvYmluSG9vZEhhc2hTZXQ8UGFja2VkUHRy
PFN0cmluZ0ltcGw+PjsKKwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxl
KCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4mIHRhYmxlKCkgeyByZXR1
cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxlSW1wbCYgdGFibGUoKSB7IHJldHVybiBtX3Rh
YmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+IG1f
dGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1fdGFibGU7CiB9OwogCiB9Cg==
</data>
<flag name="commit-queue"
          id="444272"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424568</attachid>
            <date>2021-03-29 13:07:38 -0700</date>
            <delta_ts>2021-03-29 14:44:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329130737.patch</filename>
            <type>text/plain</type>
            <size>66876</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLjNmZDRlN2VjNGY3MjQyYjRjNTg0MTE4Yzk1MGYwOTA1YjNlNmE2Y2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTA3IEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9yKToKKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFz
aFNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Vj46OnN3YXApOgorICAgICAgICAoV1RGOjpW
Pjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpm
aW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRyYWl0cz46OmNvbnRh
aW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OmFkZCk6CisgICAgICAgIChXVEY6OlY+Ojph
ZGRWb2lkKToKKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vj46
OnJlbW92ZSk6CisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6OlY+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlY+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vj46OnRh
a2VBbnkpOgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpU
cmFpdHM+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAg
IChXVEY6Oj0gY29uc3QpOgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6CisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6YWRkSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6On5S
b2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJl
Z2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFuZG9t
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAg
IChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpmaW5k
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlucyBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhj
ZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNo
b3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhw
YW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptdXN0UmVoYXNo
SW5QbGFjZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxk
U2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaHJpbmsp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlc2lyZWRJbmRleCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cHJvYmVEaXN0YW5jZSk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjptYWtlQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvciBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW52YWxpZGF0
ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemVNYXNr
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjprZXlDb3VudCBjb25z
dCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNoZWNrS2V5KToKKyAgICAgICAgKFdURjo6
S2V5VHJhaXRzPjo6bG9va3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW5saW5lTG9v
a3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW5pdGlhbGl6ZUJ1Y2tldCk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Om1h
aW50YWluUHJvYmVEaXN0YW5jZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3Np
bmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6ZmluZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZXhw
YW5kKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpSb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICog
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJp
bmdUYWJsZS5oOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKwogMjAy
MS0wMy0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIHd0Zi9W
ZWN0b3IuaDoxMjc2Ojg4OiBydW50aW1lIGVycm9yOiByZWZlcmVuY2UgYmluZGluZyB0byBudWxs
IHBvaW50ZXIgb2YgdHlwZSAnY29uc3QgV2ViQ29yZTo6U3R5bGU6OlJ1bGVGZWF0dXJlJwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAppbmRleCA3ZGM4YTkyM2Y0MDg5OGQ5NTFlZDI5MGE5YzU3NTU3ZTA5NTdi
NTk0Li43Mjc3NzJlYTFkZGQxOTg4NDliOTEyNDA5M2FmZDNjMzk0OTM0ZjljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9TaWduYWxzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIE9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8ZGlyZWN0Lmg+CkBAIC0xMjg0LDExICsxMjg1LDc1IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsCiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blByaW50U3RkT3V0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BX
YXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgUm9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHN0
cmluZ1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsK
KyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUu
YWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3Ry
aW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsg
KytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdU
YWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFM
b2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAg
ICAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlu
cyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92
ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9w
KCk7CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAg
ICByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3Rkb3V0KTsK
IH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJpbnRTdGRFcnIsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CisjaWYg
MAorICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CisgICAg
eworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytp
KSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYg
MHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihp
KSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAg
aWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1RhYmxlLmNvbnRh
aW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAg
ICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgp
KTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4oc3RvcFdhdGNo
LmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVybmFsKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBzdGRlcnIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyNmI0NWU1NTNiMDY3ZTI0MDMyN2NjODg2N2VjN2M4Yzgx
NDY3ZTVmLi5kY2ZjODgzMzY1ZTY0NmYxZjU2NjA4NTM4MWQwNjA1NWVhOTdiYTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcxNyw3ICs3MTcsOSBAQAog
CQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMxNDlBM0EyMjhCRENBQjAwQkZBNkM3IC8qIENvbmN1cnJlbnRCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMUJERTI4MjJFOTEzQ0MwMDI5QjEw
NSAvKiBNYWNoVk1TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFZN
U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMUNGMEE1MjYxMDU4NTgwMDM2
RTY3MyAvKiBSb2Jpbkhvb2RIYXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFz
aFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjAwQUI0MUU5QTUzNkQw
MDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybVJlZ2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSb2Jpbkhvb2RIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzMkEyMDczMjNDNTkwMkQwMDM0QTA5MiAvKiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYWtlZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzM5QzE2MzI0NEI0RTg3MDAzNTlEQTkgLyogRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRhUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzM0Q1Rjg3MUZCRUQ2NjcwMEJGNjI1RSAvKiBSZWN1cnNhYmxlTGFtYmRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2FibGVMYW1iZGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTEsNiArMTIxMyw4IEBACiAJCQkJQThBNDczMDMxNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAv
KiBSZXNvdXJjZVVzYWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1QjAwNDEyM0ZGIC8qIFJl
dGFpblB0ci5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhh
c2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNw
cCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJ
CTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJm
YzkxNzguLjVjNGE3NTk5ODQxYmJhMDQzODY4YjYzOWZiYjI4YjFkNzVjYTk2YjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVy
YXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAx
MGMwYTYyOTU4N2M1ZWRmMGE4Li5mNmFiYjg0M2I0MDk0MGJiODk3MmE1NjM3Y2U5ZDNiYTI5NjEy
ZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtODEsNDQgKzgxLDQ0IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNz
IEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwg
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAg
ICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgYWRkSXRlcmF0
b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKICNpZiAhQ0hFQ0tf
SEFTSFRBQkxFX0lURVJBVE9SUwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPios
Ci0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICAgICAgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxp
bmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKICNlbmRp
ZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtub3du
R29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVl
KiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVm
IFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJlZmVy
ZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsK
IAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xhc3Mg
SGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAgICAg
ICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkKICAg
ICAgICAgewpAQCAtMjQzLDE4ICsyNDMsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvciA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBz
dGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRh
YmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAg
ICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAg
ICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlw
ZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBl
OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNo
VGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRh
YmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRhYmxl
LCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93bkdv
b2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAtMzQ3
LDggKzM0Nyw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBI
YXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJh
dG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVk
ZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwogICAg
ICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTE1MTQsOSArMTUxNSw5IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIG1f
aXRlcmF0b3JzID0gMDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICAgICAgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90
YWJsZSA9IHRhYmxlOwogICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CkBAIC0xNTM2LDggKzE1
MzcsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9y
KEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhh
c2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9t
IGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFi
bGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaCBiL1Nv
dXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTQ5YzczNzE5YWMz
YWM4NDZiNDk2NzQ5NmFjNTZiZmZiMWZmYzdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFNldC5oCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRy
YWl0czxWYWx1ZUFyZz4+IGNsYXNzIFJvYmluSG9vZEhhc2hTZXQ7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitjbGFz
cyBSb2Jpbkhvb2RIYXNoU2V0IGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoQXJnIEhhc2hGdW5jdGlvbnM7CisgICAgdHlwZWRl
ZiBUcmFpdHNBcmcgVmFsdWVUcmFpdHM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0
czo6VGFrZVR5cGUgVGFrZVR5cGU7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFZh
bHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOworCitwcml2YXRlOgorICAgIHR5cGVkZWYg
Um9iaW5Ib29kSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBl
OworCitwdWJsaWM6CisgICAgLyoKKyAgICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJp
ZXMgb2YgYW4gaXRlcmF0b3IgaXMgY29uZnVzaW5nLCBoZXJlIGlzIGEgY2hlYXQgc2hlZXQ6Cisg
ICAgICogY29uc3QgS2V5VHlwZSYga2V5ID0gaXRlcmF0b3ItPmtleTsKKyAgICAgKi8KKyAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVl
VHlwZT4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRl
cjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgLyoKKyAg
ICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJpZXMgb2YgYW4gQWRkUmVzdWx0IGlzIGNv
bmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0OgorICAgICAqIGl0ZXJhdG9yIGl0ZXIgPSBh
ZGRSZXN1bHQuaXRlcmF0b3I7CisgICAgICogYm9vbCBpc05ld0VudHJ5ID0gYWRkUmVzdWx0Lmlz
TmV3RW50cnk7CisgICAgICovCisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpB
ZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgUm9iaW5Ib29kSGFzaFNldCgpCisgICAgeworICAg
IH0KKworICAgIFJvYmluSG9vZEhhc2hTZXQoc3RkOjppbml0aWFsaXplcl9saXN0PFZhbHVlQXJn
PiBpbml0aWFsaXplckxpc3QpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhbHVl
IDogaW5pdGlhbGl6ZXJMaXN0KQorICAgICAgICAgICAgYWRkKHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN3YXAoUm9iaW5Ib29kSGFzaFNldCYpOworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291
bnQpIHsgbV9pbXBsLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5Q291bnQpOyB9CisKKyAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0OworICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgICAg
aXRlcmF0b3IgcmFuZG9tKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLnJhbmRvbSgpOyB9CisKKyAg
ICBpdGVyYXRvciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYpIGNvbnN0OworICAgIGJvb2wgY29udGFp
bnMoY29uc3QgVmFsdWVUeXBlJikgY29uc3Q7CisKKyAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lv
biBvZiBmaW5kKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmlu
ZworICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBl
IGNvbnZlcnNpb24uIEhhc2hUcmFuc2xhdG9yCisgICAgLy8gbXVzdCBoYXZlIHRoZSBmb2xsb3dp
bmcgZnVuY3Rpb24gbWVtYmVyczoKKyAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFQmKTsKKyAgICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0
IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4g
aXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0Owor
CisgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmNsdWRlcyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRo
ZSBhZGRlZCB2YWx1ZSdzIGxvY2F0aW9uLAorICAgIC8vIGFuZCBhbiBpc05ld0VudHJ5IGJvb2wg
dGhhdCBpbmRpY2F0ZXMgaWYgaXQgaXMgYSBuZXcgb3IgZXhpc3RpbmcgZW50cnkgaW4gdGhlIHNl
dC4KKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYpOworICAgIEFkZFJlc3VsdCBh
ZGQoVmFsdWVUeXBlJiYpOworICAgIHZvaWQgYWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+KTsKKworICAgIHZvaWQgYWRkVm9p
ZChjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICB2b2lkIGFkZFZvaWQoVmFsdWVUeXBlJiYpOworCisg
ICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgYWRkKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0
IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZworICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0
byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJl
YWR5CisgICAgLy8gaW4gdGhlIHRhYmxlLiBIYXNoVHJhbnNsYXRvciBtdXN0IGhhdmUgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbiBtZW1iZXJzOgorICAgIC8vICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVCYpOworICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVUeXBlJiwg
Y29uc3QgVCYpOworICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBU
JiwgdW5zaWduZWQgaGFzaENvZGUpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBBZGRSZXN1bHQgYWRkKGNvbnN0IFQmKTsKKworICAgIC8vIEF0dGVt
cHRzIHRvIGFkZCBhIGxpc3Qgb2YgdGhpbmdzIHRvIHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBh
bnkgb2YKKyAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0
aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+
CisgICAgYm9vbCBhZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAgYm9vbCByZW1vdmUoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKTsKKworICAgIGJvb2wgcmVtb3ZlKGNvbnN0
IFZhbHVlVHlwZSYpOworICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgcmVtb3ZlSWYoY29uc3QgRnVuY3RvciYpOworICAg
IHZvaWQgY2xlYXIoKTsKKworICAgIFRha2VUeXBlIHRha2UoY29uc3QgVmFsdWVUeXBlJik7Cisg
ICAgVGFrZVR5cGUgdGFrZShpdGVyYXRvcik7CisgICAgVGFrZVR5cGUgdGFrZUFueSgpOworCisg
ICAgLy8gT3ZlcmxvYWRzIGZvciBzbWFydCBwb2ludGVyIHZhbHVlcyB0aGF0IHRha2UgdGhlIHJh
dyBwb2ludGVyIHR5cGUgYXMgdGhlIHBhcmFtZXRlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
ID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgaXRlcmF0b3I+Ojp0eXBlIGZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgY29udGFpbnMo
dHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUgcmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZSB0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSk7CisKKyAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
dGhlckNvbGxlY3Rpb24+CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlv
biYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgorICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mKSBjb25zdDsKKworICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEhhc2hUYWJsZVR5
cGUgbV9pbXBsOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OnN3YXAoUm9iaW5I
b29kSGFzaFNldCYgb3RoZXIpCit7CisgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSB1
bnNpZ25lZCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLnNpemUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KK2lubGluZSB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+
OjpjYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJv
b2wgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW1wbC5pc0VtcHR5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+Ojpi
ZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCit7CisgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5l
IGF1dG8gUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IK
K3sKKyAgICByZXR1cm4gbV9pbXBsLmVuZCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxULCBV
LCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgorewor
ICAgIHJldHVybiBtX2ltcGwuZmluZCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQs
IFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwuY29udGFpbnModmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgoreworICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxI
YXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lu
bGluZSBib29sIFJvYmluSG9vZEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4o
dmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAoreworICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lu
bGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0Cit7CisgICAgcmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5s
aW5lIHZvaWQgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKQoreworICAgIG1faW1wbC5hZGQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICBtX2ltcGwu
YWRkKFdURk1vdmUodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFNldDxW
YWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRS
ZXN1bHQKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxI
YXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgoraW5saW5lIGJvb2wgUm9iaW5Ib29kSGFzaFNldDxU
LCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKK3sKKyAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVn
aW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5p
c05ld0VudHJ5OworICAgIHJldHVybiBjaGFuZ2VkOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBl
PgoraW5saW5lIGJvb2wgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9y
VHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKK3sKKyAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCisgICAgICAgIGNoYW5nZWQgfD0gcmVtb3ZlKCppdGVyKTsKKyAgICByZXR1cm4gY2hhbmdl
ZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lu
bGluZSBib29sIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkK
K3sKKyAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIG1faW1wbC5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIG1f
aW1wbC5yZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0Lm1faW1wbCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUs
IFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHJldHVybiBtX2lt
cGwucmVtb3ZlSWYoZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+Ojpj
bGVhcigpCit7CisgICAgbV9pbXBsLmNsZWFyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFQs
IFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQoreworICAgIGlmIChpdCA9PSBl
bmQoKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlVHJhaXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0
eVZhbHVlKCkpOworCisgICAgYXV0byByZXN1bHQgPSBWYWx1ZVRyYWl0czo6dGFrZShXVEZNb3Zl
KGNvbnN0X2Nhc3Q8VmFsdWVUeXBlJj4oKml0KSkpOworICAgIHJlbW92ZShpdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3sKKyAgICByZXR1cm4gdGFrZShmaW5kKHZh
bHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlQW55KCkgLT4gVGFr
ZVR5cGUKK3sKKyAgICByZXR1cm4gdGFrZShiZWdpbigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBs
YXRlPHR5cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlw
ZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6
dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoreworICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmlu
ZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0
UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK3sKKyAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0
aW9ucz4+KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFY+Citpbmxp
bmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpy
ZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK3sKKyAg
ICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFY+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VU
eXBlPjo6dHlwZQoreworICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29sIFJvYmlu
SG9vZEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KQoreworICAgIGlmIChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IFZhbHVlVHJhaXRzOjplbXB0
eVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8VmFsdWVUcmFpdHM+KHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVu
YW1lIE90aGVyQ29sbGVjdGlvbj4KK2lubGluZSBib29sIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwg
Vj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNv
bnN0Cit7CisgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlciA6IG90aGVyQ29sbGVj
dGlvbikgeworICAgICAgICBpZiAoIWNvbnRhaW5zKG90aGVyKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxl
Y3Rpb24+CitpbmxpbmUgYm9vbCBSb2Jpbkhvb2RIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvciE9
KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit2b2lkIFJvYmluSG9vZEhhc2hTZXQ8VCwgVSwg
Vj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25z
dCBWYWx1ZVR5cGU+PiBsaXN0KQoreworICAgIGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQorICAg
ICAgICBhZGQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFNldDxULCBVLCBWPjo6Y2hlY2tD
b25zaXN0ZW5jeSgpIGNvbnN0Cit7CisgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSb2Jpbkhvb2RIYXNoU2V0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGE4ZTg5ZWE3Y2Yz
ODgyZDBjMzFkOGNjMjZhMTQzNGJkMzU2OGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKQEAgLTAsMCArMSw3NDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorY2xhc3MgUm9iaW5I
b29kSGFzaFRhYmxlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZv
aWQgYWRkSXRlcmF0b3IoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorCisvLyBSb2Jpbkhvb2QgSGFzaFRhYmxlIGhh
cyBzZXZlcmFsIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIHVzdWFsIEhhc2hUYWJsZSwgdGhhdCdz
IHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1bHQgb25lLgorLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBj
b21wdXRlcyBoYXNoIG11Y2ggbW9yZSBmcmVxdWVudGx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIEtl
eSBzaG91bGQgY2FjaGUgY29tcHV0ZWQgaGFzaC4KKy8vIEJ1dCBvdXIgZGVmYXVsdCBIYXNoVGFi
bGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2YWx1ZSBiZWNhdXNlIG9mIG1lbW9yeSB1c2FnZS4gVGhp
cyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkgdHlwZQorLy8gc2hvdWxkIGhhdmUgaGFzaCB2YWx1ZSBp
bnRydXNpdmVseSAoZS5nLiBXVEY6OlN0cmluZyBob2xkcyBoYXNoIHZhbHVlIGludGVybmFsbHkp
LgorLy8KKy8vIElmIHRoZSBhYm92ZSByZXF1aXJlbWVudHMgbWVldCB5b3VyIHVzZSBjYXNlLCB0
aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9vZCBIYXNoVGFibGUuCisvLyBUaGUgbGFyZ2VzdCBiZW5l
Zml0IGlzIHRoYXQgd2UgY2FuIHVzZSBzaWduaWZpY2FudGx5IGhpZ2ggbG9hZC1mYWN0b3IgKDkw
JSkhIFRoaXMgaXMgc3VpdGFibGUgZm9yIEF0b21pY1N0cmluZ1RhYmxlLgorLy8KKy8vIFRoZSBh
bGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxldGlvbiwg
ZGVzY3JpYmVkIGluIFsyLDNdLgorLy8KKy8vIFsxXTogaHR0cHM6Ly9hY2NpZGVudGFsbHlxdWFk
cmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0NTQ1NTk4Ny9ydXN0LWhhc2gtaXRlcmF0aW9uLXJl
aW5zZXJ0aW9uCisvLyBbMl06IGh0dHBzOi8vY29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTEvcm9i
aW4taG9vZC1oYXNoaW5nLworLy8gWzNdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzEx
LzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlvbi8jcmVmCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFi
bGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0
b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgVHJhaXRz
IFZhbHVlVHJhaXRzOworICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CisgICAgdHlwZWRlZiBWYWx1
ZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPiBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOworICAgIHR5cGVkZWYg
SGFzaFRhYmxlQWRkUmVzdWx0PGl0ZXJhdG9yPiBBZGRSZXN1bHQ7CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFLZXlUcmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbik7CisKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUoKSA9IGRlZmF1bHQ7CisgICAgflJvYmluSG9vZEhhc2hUYWJsZSgp
CisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlmIChtX3Rh
YmxlKQorICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6ZSgpKTsK
KyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxl
Jik7CisgICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIFJvYmluSG9vZEhh
c2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworCisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUmIG9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisKKyAgICAvLyBXaGVuIHRo
ZSBoYXNoIHRhYmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2FtZSBpdGVyYXRvciBmb3Ig
ZW5kIGFzIGZvciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGJlY2F1c2Ug
d2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAgICAvLyBi
dWNrZXRzLCBhbmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNhc2UgdGhh
dCdzIHdvcnRoIG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpc0Vt
cHR5KCkgPyBlbmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGl0ZXJhdG9yIGVu
ZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxlICsgdGFibGVTaXplKCkp
OyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0VtcHR5KCkg
PyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJs
ZSArIHRhYmxlU2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7CisgICAg
ICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vha1JhbmRv
bVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAgIGlmICghaXNFbXB0eUJ1
Y2tldChidWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0
b3IoJmJ1Y2tldCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgcmFu
ZG9tKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNvbnN0X2Nh
c3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsgfQorCisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAgICB1bnNpZ25lZCBjYXBh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV90YWJs
ZSk7CisgICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIG1p
bmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIHVu
c2lnbmVkIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVC
ZXN0VGFibGVTaXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFi
bGUobmV3VGFibGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7Cisg
ICAgICAgIG1fa2V5Q291bnQgPSAwOworICAgIH0KKworICAgIEFkZFJlc3VsdCBhZGQoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4
dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQorICAgIEFkZFJlc3VsdCBhZGQoVmFs
dWVUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRy
YWN0b3I6OmV4dHJhY3QodmFsdWUpLCBXVEZNb3ZlKHZhbHVlKSk7IH0KKworICAgIC8vIEEgc3Bl
Y2lhbCB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFu
ZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNv
c3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGlu
IHRoZSB0YWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXh0cmE+IEFkZFJlc3VsdCBhZGQoVCYmIGtleSwgRXh0cmEmJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4dHJhPiBBZGRSZXN1bHQgYWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYpOwor
CisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIGZpbmQ8SWRl
bnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29u
c3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KGtleSk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3Qg
eyByZXR1cm4gY29udGFpbnM8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZp
bmQoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlucyhjb25z
dCBUJikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CisgICAgdm9p
ZCByZW1vdmUoaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVu
Y3lDaGVjayhpdGVyYXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzSGFz
aFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsg
fQorICAgIHN0YXRpYyBib29sIGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBl
JiB2YWx1ZSkgeyByZXR1cm4gaXNFbXB0eUJ1Y2tldCh2YWx1ZSk7IH0KKworICAgIFZhbHVlVHlw
ZSogbG9va3VwKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXA8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogaW5saW5lTG9va3Vw
KGNvbnN0IFQmKTsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsg
fQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSgpIHsgfQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkg
eyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtl
eUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4ga2V5Q291
bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVyYXRvcjsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVUYWJsZSh1
bnNpZ25lZCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBl
KiB0YWJsZSwgdW5zaWduZWQgc2l6ZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5
cGUqLCBib29sPiBMb29rdXBUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29uc3QgVCYpOworCisgICAgdm9pZCBt
YWludGFpblByb2JlRGlzdGFuY2UoVmFsdWVUeXBlJiYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBoYXNoLCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1h
c2spOworCisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVu
Y3lDaGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVU
eXBlKik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KTsKKyAg
ICBib29sIHNob3VsZEV4cGFuZCgpIGNvbnN0IHsgcmV0dXJuIHNob3VsZEV4cGFuZChrZXlDb3Vu
dCgpLCB0YWJsZVNpemUoKSk7IH0KKyAgICBib29sIG11c3RSZWhhc2hJblBsYWNlKCkgY29uc3Qg
eyByZXR1cm4ga2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAqIDI7IH0KKyAgICBi
b29sIHNob3VsZFNocmluaygpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwg
dGFibGVTaXplKCkgJiYgdGFibGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7
IH0KKyAgICBWYWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cik7Cisg
ICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIsIG51bGxwdHIpOyB9Cisg
ICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNp
Z25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOworICAgIFZhbHVlVHlwZSogcmVp
bnNlcnQoVmFsdWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChW
YWx1ZVR5cGUmIGJ1Y2tldCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2ly
ZWRJbmRleCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAg
IHJldHVybiBoYXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBwcm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5k
ZXggKyBzaXplIC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAg
ICB9CisKKyAgICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0
X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAg
ICBpdGVyYXRvciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3du
R29vZCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihW
YWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBt
X3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisgICAgc3RhdGlj
IHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorCisgICAgc3RhdGlj
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQorCisgICAgLy8gTG9hZC1mYWN0b3IgaXMg
OTAlLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworCisgICAgdW5zaWdu
ZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25l
ZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAg
dW5zaWduZWQga2V5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisKKyAgICBW
YWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUg
eyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSBhdXRvIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6bG9va3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgorewor
ICAgIHJldHVybiBpbmxpbmVMb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19J
TkxJTkUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmlubGluZUxvb2t1cChjb25zdCBUJiBrZXkp
IC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKwor
ICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFibGUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAg
IHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2gg
PSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJl
ZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAg
ICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4
OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1haW50YWlucyB0aGlz
IGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHByb2Jpbmcgd2hlbiBk
aXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0aW5nIGVudHJ5Lgor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gs
IGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVu
dHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmluaXRpYWxpemVCdWNr
ZXQoVmFsdWVUeXBlJiBidWNrZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8
VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1
Y2tldCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0Cit7CisgICAg
Y2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KCk7CisKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIGV4cGFuZChudWxscHRyKTsKKworICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90YWJsZSk7
CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9y
OjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6
ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlwZSogZW50
cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90YWJsZSAr
IGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5
KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6
aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJh
bnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVz
dWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNp
Z25lZCBkaXN0YW5jZUZyb21EZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4
LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURl
c2lyZWQpIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRv
IG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlw
ZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5z
bGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndh
cmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RG
TW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5SGFzaCwgZGlzdGFuY2VGcm9tRGVzaXJl
ZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7
CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYgKHNob3VsZEV4cGFuZCgp
KQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFi
bGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK0FMV0FZU19JTkxJTkUgdm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46Om1haW50YWluUHJvYmVEaXN0YW5jZShWYWx1ZVR5cGUmJiB2YWx1ZSwg
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGRpc3RhbmNlLCB1bnNpZ25l
ZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7CisgICAg
aW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3
aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4Owor
ICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRy
YWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50
aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGlu
ZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBoYXNo
ID0gZW50cnlIYXNoOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNlOworICAg
ICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICAg
ICArK2Rpc3RhbmNlOworICAgIH0KK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJiBleHRy
YSkgLT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisK
KyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAg
IGV4cGFuZChudWxscHRyKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CisKKyAgICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXpl
KCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWdu
ZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXgg
PSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0g
MDsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tl
dCgqZW50cnkpKSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRy
eSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlL
ZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlI
YXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlm
IChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VL
bm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBkaXN0
YW5jZUZyb21EZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBz
aXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsK
KyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWlu
IHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGlu
Z0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRy
YW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+
KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RGTW92
ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5SGFzaCwgZGlzdGFuY2VGcm9tRGVzaXJlZCwg
c2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7Cisg
ICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQor
ICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICB1
c2luZyBzdGQ6OnN3YXA7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1
bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnks
IFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhh
c2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBkaXN0YW5j
ZUZyb21EZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXpl
TWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAg
ICAgICAgICAgIHN3YXAoKmVudHJ5LCB2YWx1ZSk7CisgICAgICAgICAgICBtYWludGFpblByb2Jl
RGlzdGFuY2UoV1RGTW92ZSh2YWx1ZSksIGluZGV4LCBlbnRyeUhhc2gsIGRpc3RhbmNlRnJvbURl
c2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAg
ICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAg
KytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25z
dCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1
cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9y
PihrZXkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJl
dHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGUg
PHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgoreworICAg
IGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7
CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9v
bCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25z
dF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+
KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCit7Cisg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
dm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBw
b3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CisgICAgcmVtb3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6cmVtb3ZlKFZhbHVlVHlwZSogcG9zKQoreworICAgIHBvcy0+flZhbHVl
VHlwZSgpOworICAgIGluaXRpYWxpemVCdWNrZXQoKnBvcyk7CisgICAgbV9rZXlDb3VudCAtPSAx
OworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGluZGV4UHJldmlvdXMgPSBwb3Mg
LSBtX3RhYmxlOworICAgIHVuc2lnbmVkIGluZGV4ID0gKGluZGV4UHJldmlvdXMgKyAxKSAmIHNp
emVNYXNrOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWUqIHByZXZpb3VzRW50cnkg
PSBtX3RhYmxlICsgaW5kZXhQcmV2aW91czsKKyAgICAgICAgVmFsdWUqIGVudHJ5ID0gbV90YWJs
ZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0VudHJ5
KSk7CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7
CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhh
c2goZW50cnlLZXkpOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZhbHVl
VHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkpOwor
ICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVja2V0KCpl
bnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNocmluaygp
KQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShp
dGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbW92ZUFuZEludmFsaWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJh
dG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvciBpdCkKK3sK
KyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZElu
dmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBl
Kj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29u
c3RfaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhj
b25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGlu
ZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3sK
KyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAv
LyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVj
aWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8
Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVU
eXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNp
emUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9j
YXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBl
KCk7CisgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRh
YmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZXhwYW5kKFZhbHVl
VHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAg
IHVuc2lnbmVkIG9sZFNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAg
ICAgIG5ld1NpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZSBpZiAo
bXVzdFJlaGFzaEluUGxhY2UoKSkKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemU7CisgICAgZWxz
ZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisKKyAgICByZXR1cm4gcmVoYXNoKG5l
d1NpemUsIGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NvbnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQoreworICAg
IHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5Q291
bnQpOworCisgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisg
ICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hvbGRGb3JF
YWdlckV4cGFuc2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlDb3VudCwg
dW5zaWduZWQgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUgcmF0aW9u
YWxlIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3IuCisgICAg
ICAgIC8vIFdpdGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFn
ZSBsb2FkIGlzIDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxmLXdheSBi
ZXR3ZWVuIDExLzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAvLyB0byBh
dm9pZCBiZWluZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlvIGNsb3Nl
IHRvIDExLzI0LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMg
WzkvMjQsIDE1LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRGYWN0b3I7
CisgICAgICAgIGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAgICAgICBk
b3VibGUgYXZlcmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0aW8pIC8g
MjsKKyAgICAgICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbyA9
IChhdmVyYWdlTG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJldHVybiBr
ZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0
aW87CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19j
YXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAg
aWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQs
IGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAgdW5zaWdu
ZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBy
ZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAg
dW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsK
KyAgICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNp
emUoa2V5Q291bnQoKSkpLCBudWxscHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAt
PiBWYWx1ZVR5cGUqCit7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRT
aXplKCk7CisKKyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBW
YWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKKworICAgIHVuc2lnbmVkIG9sZEtleUNvdW50
ID0ga2V5Q291bnQoKTsKKyAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUp
OworICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvbGRL
ZXlDb3VudDsKKworICAgIFZhbHVlKiBuZXdFbnRyeSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRF
bnRyeSA9IG9sZFRhYmxlW2ldOworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgIT0gZW50cnkp
OworICAgICAgICAgICAgb2xkRW50cnkuflZhbHVlVHlwZSgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZSogcmVpbnNlcnRlZEVudHJ5ID0gcmVpbnNl
cnQoV1RGTW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7Cisg
ICAgICAgIGlmIChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgPT0gZW50cnkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghbmV3RW50cnkpOworICAgICAgICAgICAgbmV3RW50cnkgPSByZWluc2VydGVk
RW50cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhh
c2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOwor
CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gbmV3RW50
cnk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQoreworICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRlYWxsb2NhdGVUYWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIp
LCB0YWJsZVNpemUoKSk7CisgICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fa2V5Q291bnQgPSAw
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgorUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpSb2Jpbkhvb2RIYXNoVGFibGUoY29u
c3QgUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikKKyAgICA6IG1fdGFibGUoYWxsb2NhdGVUYWJs
ZShvdGhlci5tX3RhYmxlU2l6ZSkpCisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQp
CisgICAgLCBtX3RhYmxlU2l6ZShvdGhlci5tX3RhYmxlU2l6ZSkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAg
ICAgICBWYWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAg
ICAgVmFsdWVUeXBlJiBlbnRyeSA9IG1fdGFibGVbaW5kZXhdOworICAgICAgICBuZXcgKCZlbnRy
eSkgVmFsdWVUeXBlKG90aGVyRW50cnkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNp
bmcgc3RkOjpzd2FwOworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICBvdGhlci5pbnZh
bGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOwor
ICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5
Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0byBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz46Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jp
bkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7Cisg
ICAgc3dhcCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OlJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBv
dGhlcikKK3sKKyAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBtX3RhYmxl
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6
ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291bnQsIDApOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5l
IGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYg
b3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUg
dGVtcCA9IFdURk1vdmUob3RoZXIpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1w
bC5jcHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVmYS4uYTE4
YjNjYmQ4ODAwMmQzOWRmY2IyZWMxNzQzYTk3NWQ0ZWY0Y2RiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgQXRvbVN0cmluZ1Rh
YmxlTG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBTdHJpbmdU
YWJsZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47Cit1c2luZyBTdHJpbmdU
YWJsZUltcGwgPSBBdG9tU3RyaW5nVGFibGU6OlN0cmluZ1RhYmxlSW1wbDsKIAogc3RhdGljIEFM
V0FZU19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0
ZTMwNDUxMTNhNTdlLi5hOTgzNTE0YzVjN2M4NjY3MTMzMzUwZjA4MGU5MWUyNjQ2MDk5OGYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTIyLDggKzIyLDggQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Q
YWNrZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zMywxMiArMzMsMTQg
QEAgY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21TdHJpbmdUYWJsZSB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgdXNpbmcgU3RyaW5nVGFibGVJbXBsID0g
Um9iaW5Ib29kSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+OworCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0
cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3RyaW5nVGFibGVJ
bXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoU2V0
PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJsZUltcGwgbV90
YWJsZTsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424583</attachid>
            <date>2021-03-29 14:44:13 -0700</date>
            <delta_ts>2021-03-29 14:59:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329144412.patch</filename>
            <type>text/plain</type>
            <size>102863</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLmY5MmY5ODE3Y2Q4MjFiM2ZhNjg3ZDE0NWU5NjgzNzliNjhhYzRjMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkxIEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpLZXlWYWx1ZVBhaXJUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6
Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNFbXB0eSBjb25zdCk6
CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAgIChXVEY6Olk+OjplbmQpOgorICAg
ICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZW5kIGNvbnN0
KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAgICAoV1RGOjpZPjo6ZmluZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXVEY6Olk+
OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5saW5lR2V0IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQpOgorICAgICAgICAoV1RGOjpUYWJs
ZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpzZXQpOgorICAg
ICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJh
aXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJl
KToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmVJ
Zik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olk+Ojp0YWtlKToK
KyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46OnN3YXApOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpj
YXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc0VtcHR5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5kIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+
OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+
OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpp
bmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpz
ZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjphZGQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpyZW1vdmVJZik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6dGFrZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6
Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y2FwYWNpdHkgY29uc3QpOgorICAg
ICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpiZWdpbiBj
b25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAg
IChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJh
aXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAg
KFdURjo6Vz46OmFkZFZvaWQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgor
ICAgICAgICAoV1RGOjpXPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAg
ICAgIChXVEY6Olc+Ojp0YWtlQW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1v
dmUpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpX
Pjo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6
Olc+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpp
c0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRh
aW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojph
ZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpy
ZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjbGVhcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnRha2VB
bnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46
OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAg
IChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6cmVtb3ZlSXRlcmF0b3IpOgorICAg
ICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJs
ZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2Fw
YWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1w
dHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxv
b2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpk
ZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlz
dGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVy
YXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENv
bnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVja0tl
eSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Omxvb2t1cCk6CisgICAgICAgIChXVEY6Oktl
eVRyYWl0cz46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmluaXRp
YWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjptYWludGFpblByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjpyZWluc2VydCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZpbmQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRy
YWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmV4cGFuZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNvbXB1
dGVCZXN0VGFibGVTaXplKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c2hyaW5rVG9CZXN0
U2l6ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaGFzaCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Um9iaW5Ib29k
SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c3dhcCk6CisgICAgICAgIChX
VEY6Oj0pOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAg
KiB3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1Rh
YmxlOjp0YWJsZSk6CisKIDIwMjEtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3Njo4ODogcnVudGltZSBlcnJvcjogcmVmZXJl
bmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9mIHR5cGUgJ2NvbnN0IFdlYkNvcmU6OlN0eWxl
OjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggN2RjOGE5MjNmNDA4OThkOTUx
ZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3NzcyZWExZGRkMTk4ODQ5YjkxMjQwOTNhZmQzYzM5
NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRl
IDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPgpAQCAtMTI4
NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0
b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIFJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpu
dW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAg
ICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisgICAg
ICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAg
ICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4
MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5n
OjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpu
dW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAg
ICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0K
KyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNl
ZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BX
YXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ1RhYmxl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmlu
Zzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUu
c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1v
dmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJp
bmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6
Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xu
KHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7CisgICAg
ZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICByZXR1cm4g
cHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2Uy
NDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5
ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdy
b3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBD
b25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFC
REUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9v
ZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJs
ZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFt
YmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJ
RTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQ
b29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVh
a0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUw
OUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1ODNDODI2
MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jp
bkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjEx
NUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBS
ZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2Fn
ZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywK
KwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAor
CQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJ
CQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAog
CQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RF
RDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVF
NDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLjVjNGE3NTk5
ODQxYmJhMDQzODY4YjYzOWZiYjI4YjFkNzVjYTk2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBA
IC0yMTQsNiArMjE0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAg
ICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFi
bGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQu
LjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAg
LTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRl
bXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlw
ZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3Ry
dWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZh
bHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQ
YWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+
PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0g
SGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xh
c3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1
bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3Mg
SGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlB
cmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFi
bGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi4z
NDEwM2ZmZjQ0YzYwM2Q4NzM1MDQ0MWMzMzU5Njk2Mjg4YmY0NjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0z
MSwyMCArMzEsMjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJh
Y3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgorc3RydWN0IEtleVZhbHVlUGFpclRy
YWl0cyA6IEtleVZhbHVlUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVl
OworICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBh
aXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4o
dmFsdWUua2V5KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3Mg
SGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgog
ICAgIHVzaW5nIEtleVRyYWl0cyA9IEtleVRyYWl0c0FyZzsKICAgICB1c2luZyBNYXBwZWRUcmFp
dHMgPSBNYXBwZWRUcmFpdHNBcmc7Ci0KLSAgICBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzIDog
S2V5VmFsdWVQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gewotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwot
ICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgdHlwZW5hbWUgS2V5VmFsdWVQ
YWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OlRyYWl0VHlwZSYgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtl
eVRyYWl0cz4odmFsdWUua2V5KTsKLSAgICAgICAgfQotICAgIH07CisgICAgdXNpbmcgS2V5VmFs
dWVQYWlyVHJhaXRzID0gS2V5VmFsdWVQYWlyVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
PjsKIAogcHVibGljOgogICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLZXlUcmFpdHM6OlRy
YWl0VHlwZTsKQEAgLTU3LDcgKzU5LDcgQEAgY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAKICAgICB1
c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUg
PSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFp
dHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwg
S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25z
LCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBjbGFzcyBIYXNoTWFwS2V5
c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAgLTIzMiw5MSArMjM0LDg5
IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpzd2FwKEhhc2hNYXAm
IG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAo
b3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c2l6ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVu
c2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNF
bXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSAtPiBpdGVyYXRv
cgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4oKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAog
ewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
dGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkK
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYg
dmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5
cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIAotSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBl
ZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzI0LDkgQEAgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtU
eXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCith
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzNCwxNiBAQCBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFw
cGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5l
IGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFs
dWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFw
VHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEss
IHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZVNl
dChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1
ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1Myw5MSArMzUzLDkxIEBA
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAt
PiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFp
dHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+
KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lRW5z
dXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1
bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhh
c2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVuY3RvcikpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYm
IG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZVNldChrZXksIHN0ZDo6
Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXksIFQmJiBt
YXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQo
S2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlu
bGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYg
dmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQo
SyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFs
dWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6
OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwg
VCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAg
IHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZv
cndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25z
dCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBh
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYga2V5
LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwg
c3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RB
ZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUo
a2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUo
Y29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CithdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1
bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJl
KGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6
ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0
b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJlKHN0
ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAt
PiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0eVRyYW5zbGF0b3JUeXBl
PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0
eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVk
VHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVk
UGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4ICs0NDUsOCBAQCBBTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnkt
PnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citpbmxp
bmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7
CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ1NSwyNyArNDU1LDI3IEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlSWYoRnVuY3RvciYmIGZ1
bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmVJZihG
dW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKHN0ZDo6Zm9y
d2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKGtl
eSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xlYXIoKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlwZQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlw
ZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkK
QEAgLTQ4NSwzMCArNDg1LDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFp
dHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVy
PEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxL
Pjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
ZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5
cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUg
R2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQogewogICAg
IHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBh
aXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0
clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6
dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaE1hcFRyYW5z
bGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgot
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgS2V5VmFs
dWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRl
bXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC01MTYsMjMgKzUxNiwy
MyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVl
ayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Omdl
dCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0
eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgcmV0dXJu
IGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5k
KGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewogICAgIGl0ZXJhdG9yIGl0
ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0MiwxNCArNTQyLDE0IEBA
IGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwu
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICBpZiAoS2V5VHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjUsMTMg
KzU2NSwxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5
KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2Jvb2wg
b3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBjb25zdCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICBj
b25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQsOCArNTg0LDggQEAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwg
Y29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA3NGMwOWUwNWFiZTNiMzBkMDQ1MDE3YTgxZmUyNDM3
MGI2ZTFiOGJkLi4wMzVhOTA3ZDVmOGU4NTliNTIxNjBmZDQ5MzMzYmMyZGQwNTJlZDRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdHJ1Y3QgSWRl
bnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0
c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHJpdmF0ZToKQEAgLTQxLDggKzM5LDcgQEAgY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKIAogcHJp
dmF0ZToKLSAgICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRp
dHlFeHRyYWN0b3IsCi0gICAgICAgIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRy
YWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwg
SWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0
cz47CiAKIHB1YmxpYzoKICAgICAvKgpAQCAtMTcxLDEwMiArMTY4LDEwMiBAQCBzdHJ1Y3QgSGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6
c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpz
d2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7IAog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5l
IHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNpZ25l
ZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46
OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzRW1w
dHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0IC0+
IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29uc3Qg
LT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZhbHVl
KTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5zKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlu
cyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3QgVCYg
dmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5saW5l
IGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4o
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBs
LmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBlJiYgdmFs
dWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChW
YWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5hZGQo
V1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZv
aWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKHZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKIHsK
ICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmFkZChjb25z
dCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBh
ZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKEl0ZXJhdG9yVHlwZSBi
ZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAg
ICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBA
IC0yNzQsOSArMjcxLDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJh
dG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpy
ZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JU
eXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9y
VHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBAIC0yODQsOCArMjgxLDgg
QEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdp
biwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2lt
cGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NCwyNyArMjkxLDI3IEBAIGlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmVJ
Zihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBX
Pjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBs
LnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lu
bGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xl
YXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtl
VHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoaXRlcmF0b3IgaXQp
IC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICByZXR1cm4gVmFs
dWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUoKSk7CkBAIC0zMjQsNDggKzMy
MSw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAt
PiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlw
ZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGJlZ2luKCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRv
cj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2
YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFs
dWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxI
YXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1l
IFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpj
b250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNo
U2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpy
ZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAg
ICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZh
bHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gdGFr
ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpp
c1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBpZiAoVmFsdWVUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgx
LDkgKzM3OCw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90
aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYg
b3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXplKCkgIT0gb3RoZXJDb2xsZWN0
aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0LDIyICszOTEsMjIgQEAg
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxl
Y3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
dGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvciE9
KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24m
IG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlckNv
bGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Cit2b2lkIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAgIGZvciAoYXV0byYgdmFsdWUg
OiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2hl
Y2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6
Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAxMGMwYTYy
OTU4N2M1ZWRmMGE4Li5mYTI4MDY1MTY5ZTIzNjE4MTI4ODljMzJjYmRjNDEzNWEzYzNiMDY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBj
bGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIGFkZEl0
ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRl
cmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCiAjaWYgIUNI
RUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgICAgIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAg
aW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgcmVtb3Zl
SXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCiAj
ZW5kaWYKIAogICAgIHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1L
bm93bkdvb2RUYWc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8
c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZSosIGNvbnN0IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwot
ICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlw
ZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBS
ZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5
cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAg
ICAgICAgZnJpZW5kIGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygp
CiAgICAgICAgIHsKQEAgLTI0MywxOCArMjQxLDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0
b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1
ZSwgc3RkOjpwdHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhh
c2hUYWJsZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsK
KyAgICAgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9y
OwogICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1
ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVy
VHlwZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQg
SGFzaFRhYmxlVHlwZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBl
KiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0
YWJsZSwgcG9zLCBlbmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVU
eXBlKiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25v
d25Hb29kVGFnIHRhZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAg
LTM0Nyw4ICszNDUsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNp
bmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0
eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsK
ICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC0xNTE0LDkgKzE1MTMsOSBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICBtX2l0ZXJhdG9ycyA9IDA7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0
YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisgICAgICAgIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAgICAgaXQt
Pm1fdGFibGUgPSB0YWJsZTsKICAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOwpAQCAtMTUzNiw4
ICsxNTM1LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3Ig
ZnJvbSBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5t
X3RhYmxlKSB7CkBAIC0xNTY2LDYgKzE1NjUsMTEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0
ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlw
ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9X
VEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzI2MWFiZjRmOGJkMTEwNTU0
YjM0MGVmYzRhM2FmYzJkNzI2ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
Um9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8
S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBSb2Jp
bkhvb2RIYXNoTWFwID0gSGFzaE1hcDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBSb2Jp
bkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpSb2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29k
SGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlkNDIwMGUwOTcxYzI3YTg1NWIxZDlmNTc0MDdhODBlOTQyZWZhYWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSwzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFz
aDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+Pgor
dXNpbmcgUm9iaW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0
c0FyZywgUm9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6Um9iaW5Ib29kSGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDYzNDlkZWU4OGY3MzU3NTFiYzY1ZjlhN2Q4OGMyODU5Zjk4ZWExZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBA
IC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0K
KworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21wYXJl
ZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0IG9u
ZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJlcXVl
bnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhhc2gu
CisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFsdWUg
YmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5cGUK
Ky8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJpbmcg
aG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVxdWly
ZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2QgSGFz
aFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2lnbmlm
aWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBBdG9t
aWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNoaW5n
ICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisvLyBb
MV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0
NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczovL2Nv
ZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTogaHR0
cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dh
cmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7
CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsK
KyAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9p
dGVyYXRvcjsKKyAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKKyAgICB0eXBlZGVmIEtl
eSBLZXlUeXBlOworICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSWRl
bnRpdHlIYXNoVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4g
QWRkUmVzdWx0OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2Vk
V2Vha1ZhbHVlRnVuY3Rpb24pOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0
OworICAgIH5Sb2Jpbkhvb2RIYXNoVGFibGUoKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVU
YWJsZShtX3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRh
YmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jp
bkhvb2RIYXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNo
VGFibGUmJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFz
aFRhYmxlJiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCBy
ZXR1cm4gdGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhp
cyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhl
IGVtcHR5IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0
eSB0YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3Io
bV90YWJsZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRl
cmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvciht
X3RhYmxlKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VL
bm93bkdvb2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0
ZXJhdG9yIHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRv
JiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07
CisgICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAg
IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMp
LT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlD
b3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNp
emUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9
CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6
ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjpt
aW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1h
eChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisg
ICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1f
dGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICB9
CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFk
ZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1
ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92
ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZp
bmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21l
IG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUg
b2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1
bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdI
YXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5
VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1
cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJh
bnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lk
IHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQg
cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAg
dm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4o
RXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JE
ZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNr
ZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyBy
ZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAo
Y29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRh
YmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRp
YyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgYm9vbD4gTG9va3VwVHlwZTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNr
S2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlw
ZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVu
c2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmVBbmRJbnZh
bGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSopOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBr
ZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdCB7IHJldHVybiBzaG91bGRF
eHBhbmQoa2V5Q291bnQoKSwgdGFibGVTaXplKCkpOyB9CisgICAgYm9vbCBtdXN0UmVoYXNoSW5Q
bGFjZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkg
KiAyOyB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
ICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOyB9CisgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9
IG51bGxwdHIpOworICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2godGFibGVTaXplKCkgLyAyLCBu
dWxscHRyKTsgfQorICAgIHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOworCisgICAgVmFsdWVUeXBl
KiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKKyAgICBW
YWx1ZVR5cGUqIHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBkZXNpcmVkSW5kZXgodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2l6ZU1hc2spCisg
ICAgeworICAgICAgICByZXR1cm4gaGFzaCAmIHNpemVNYXNrOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5jZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAg
ICByZXR1cm4gKGluZGV4ICsgc2l6ZSAtIGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzaykpICYg
c2l6ZU1hc2s7CisgICAgfQorCisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVT
aXplKCkpOyB9CisgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwg
SGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENv
bnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0K
KworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0K
KworICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KKworICAgIC8vIExv
YWQtZmFjdG9yIGlzIDkwJS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRO
dW1lcmF0b3IgPSA5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9t
aW5hdG9yID0gMTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsK
KworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9
CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
IC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3Vu
dDsgfQorCisgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVk
IG1fdGFibGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citp
bmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citp
bmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZh
bHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbmxpbmVMb29rdXAo
Y29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRh
YmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJs
ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1
bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFu
Y2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1f
dGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBt
YWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBw
cm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlz
dGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xh
dG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFu
Y2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpp
bml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tl
dEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxp
emU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJl
c3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBhbmQobnVs
bHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNT
RVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBI
YXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBW
YWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRy
eSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkg
eworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJh
bnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhh
c2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAg
cmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisK
KyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFuY2UoZW50
cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBk
aXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlz
dGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAg
ICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAg
ICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5
KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9i
ZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNp
cmVkLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5j
ZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5k
KCkpCisgICAgICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmIHZhbHVl
LCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2ln
bmVkIHNpemVNYXNrKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAg
ICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4
OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1
ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElk
ZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOwor
ICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gs
IGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlz
dGFuY2UpIHsKKyAgICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBk
aXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXh0cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZFBhc3NpbmdI
YXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBjaGVj
a0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsK
KworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgZXhwYW5kKG51bGxwdHIpOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFz
ayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9
IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5k
ZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhh
c2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3Rk
Ojpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBl
OjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hU
cmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFs
c2UpOworCisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9iZURpc3Rh
bmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBp
bmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50Lgor
ICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7Cisg
ICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAg
IG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlz
dGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
ICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYg
KHNob3VsZEV4cGFuZCgpKQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdCht
YWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBh
dXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IFZh
bHVlVHlwZSoKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVu
c2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxl
U2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6
aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRl
c2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOwor
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAg
VmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlz
dGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlz
dGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICBzd2FwKCplbnRyeSwg
dmFsdWUpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUodmFsdWUp
LCBpbmRleCwgZGlzdGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAg
ICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAo
IW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkg
PSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAg
cmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+
IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5k
KCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFi
bGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJ
dGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29udGFpbnMoY29u
c3QgVCYga2V5KSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcykt
Pmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVj
ayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgcmVt
b3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5k
SW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoVmFsdWVUeXBlKiBw
b3MpCit7CisgICAgcG9zLT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9z
KTsKKyAgICBtX2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXpl
KCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWdu
ZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAo
aW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAg
ICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlzRW1w
dHlCdWNrZXQoKnByZXZpb3VzRW50cnkpKTsKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmICghcHJvYmVE
aXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50
cnksIFdURk1vdmUoKmVudHJ5KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAg
ICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0g
aW5kZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5s
aW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hl
Y2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0g
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0
RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlv
bikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUo
Y29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkg
LT4gVmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5j
dGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2Mg
ZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6
OmVtcHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxW
YWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxs
b2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQg
PSByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFz
aFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNr
ZXQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25l
ZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAg
ICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgoreworICAg
IHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOwor
ICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRh
YmxlU2l6ZTsKKyAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQorICAgICAgICBuZXdT
aXplID0gb2xkU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsK
KworICAgIHJldHVybiByZWhhc2gobmV3U2l6ZSwgZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorY29uc3Rl
eHByIHVuc2lnbmVkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5z
aWduZWQga2V5Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91
bmRVcFRvUG93ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNv
dW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAg
YXV0byBhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91YmxlIGxvYWRGYWN0
b3IsIHVuc2lnbmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAgeworICAgICAg
ICAvLyBIZXJlIGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRpb24sIHVzaW5n
IDMvNCBsb2FkLWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMvNCBhbmQgbWlu
TG9hZCBhdCAxLzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAgIC8vIElmIHdl
IGFyZSBnZXR0aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2UgZG91YmxlIHRo
ZSBzaXplCisgICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBsb2FkTWF4IGFu
ZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAgLy8gZ2l2ZSB1
cyBhIGxvYWQgaW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBkb3VibGUgbWF4
TG9hZFJhdGlvID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRSYXRpbyA9IDEu
MCAvIG1pbkxvYWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0gKG1heExvYWRS
YXRpbyArIG1pbkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldheUJldHdlZW5B
dmVyYWdlQW5kTWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhMb2FkUmF0aW8p
IC8gMjsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3
ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3RleHByIGRvdWJs
ZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1h
eExvYWREZW5vbWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lv
bihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJs
ZVNpemUgKj0gMjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjpt
aW5pbXVtVGFibGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5p
bXVtVGFibGVTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpzaHJp
bmtUb0Jlc3RTaXplKCkKK3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJh
aXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVT
aXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCgpKSksIG51bGxwdHIpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNp
emUsIFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6
ZSA9IHRhYmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisg
ICAgdW5zaWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxv
Y2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7
CisgICAgbV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworCisgICAgVmFsdWUqIG5ld0VudHJ5ID0g
bnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytp
KSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KG9sZEVudHJ5KSkgeworICAgICAgICAgICAgQVNTRVJUKHN0ZDo6YWRkcmVz
c29mKG9sZEVudHJ5KSAhPSBlbnRyeSk7CisgICAgICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBl
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlKiBy
ZWluc2VydGVkRW50cnkgPSByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9s
ZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICAgICAgaWYgKHN0ZDo6YWRkcmVzc29mKG9sZEVudHJ5
KSA9PSBlbnRyeSkgeworICAgICAgICAgICAgQVNTRVJUKCFuZXdFbnRyeSk7CisgICAgICAgICAg
ICBuZXdFbnRyeSA9IHJlaW5zZXJ0ZWRFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChvbGRUYWJsZSkKKyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG9sZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOworICAgIHJldHVybiBuZXdFbnRyeTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgIGlmICgh
bV90YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhj
aGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIHRhYmxlU2l6ZSgpKTsKKyAgICBtX3RhYmxlU2l6ZSA9
IDA7CisgICAgbV9rZXlDb3VudCA9IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46
OlJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQorICAg
IDogbV90YWJsZShhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKSkKKyAgICAsIG1fa2V5
Q291bnQob3RoZXIubV9rZXlDb3VudCkKKyAgICAsIG1fdGFibGVTaXplKG90aGVyLm1fdGFibGVT
aXplKQoreworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFi
bGVTaXplOyArK2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVy
Lm1fdGFibGVbaW5kZXhdOworICAgICAgICBWYWx1ZVR5cGUmIGVudHJ5ID0gbV90YWJsZVtpbmRl
eF07CisgICAgICAgIG5ldyAoJmVudHJ5KSBWYWx1ZVR5cGUob3RoZXJFbnRyeSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnN3YXAoUm9iaW5Ib29kSGFzaFRh
YmxlJiBvdGhlcikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisKKyAgICBzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNp
emUsIG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5
Q291bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShj
b25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7
CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAg
IHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OlJv
YmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBvdGhl
ci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShv
dGhlci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV90YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fa2V5Q291bnQsIDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmluSG9v
ZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUob3Ro
ZXIpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3QgUm9i
aW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNi
MmVlODlmZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJF
QUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0lt
cGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFi
bGVJbXBsOwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1Rh
YmxlKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5
NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLmE5ODM1MTRjNWM3Yzg2NjcxMzMzNTBm
MDgwZTkxZTI2NDYwOTk4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0
cmluZ1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApA
QCAtMjIsOCArMjIsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTMzLDEyICszMywxNCBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmlu
Z1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2lu
ZyBTdHJpbmdUYWJsZUltcGwgPSBSb2Jpbkhvb2RIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj47CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAg
SGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7
IH0KKyAgICBTdHJpbmdUYWJsZUltcGwmIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCiBw
cml2YXRlOgotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOworICAg
IFN0cmluZ1RhYmxlSW1wbCBtX3RhYmxlOwogfTsKIAogfQo=
</data>
<flag name="commit-queue"
          id="444292"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424584</attachid>
            <date>2021-03-29 14:47:05 -0700</date>
            <delta_ts>2021-03-29 15:08:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329144704.patch</filename>
            <type>text/plain</type>
            <size>102911</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLmY5MmY5ODE3Y2Q4MjFiM2ZhNjg3ZDE0NWU5NjgzNzliNjhhYzRjMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkxIEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpLZXlWYWx1ZVBhaXJUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6
Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNFbXB0eSBjb25zdCk6
CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAgIChXVEY6Olk+OjplbmQpOgorICAg
ICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZW5kIGNvbnN0
KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAgICAoV1RGOjpZPjo6ZmluZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXVEY6Olk+
OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5saW5lR2V0IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQpOgorICAgICAgICAoV1RGOjpUYWJs
ZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpzZXQpOgorICAg
ICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJh
aXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJl
KToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmVJ
Zik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olk+Ojp0YWtlKToK
KyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46OnN3YXApOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpj
YXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc0VtcHR5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5kIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+
OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+
OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpp
bmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpz
ZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjphZGQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpyZW1vdmVJZik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6dGFrZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6
Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y2FwYWNpdHkgY29uc3QpOgorICAg
ICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpiZWdpbiBj
b25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAg
IChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJh
aXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAg
KFdURjo6Vz46OmFkZFZvaWQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgor
ICAgICAgICAoV1RGOjpXPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAg
ICAgIChXVEY6Olc+Ojp0YWtlQW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1v
dmUpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpX
Pjo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6
Olc+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpp
c0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRh
aW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojph
ZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpy
ZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjbGVhcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnRha2VB
bnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46
OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAg
IChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6cmVtb3ZlSXRlcmF0b3IpOgorICAg
ICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJs
ZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2Fw
YWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1w
dHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxv
b2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpk
ZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlz
dGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVy
YXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENv
bnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVja0tl
eSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Omxvb2t1cCk6CisgICAgICAgIChXVEY6Oktl
eVRyYWl0cz46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmluaXRp
YWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjptYWludGFpblByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjpyZWluc2VydCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmZpbmQpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRy
YWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmV4cGFuZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNvbXB1
dGVCZXN0VGFibGVTaXplKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c2hyaW5rVG9CZXN0
U2l6ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaGFzaCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Um9iaW5Ib29k
SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6c3dhcCk6CisgICAgICAgIChX
VEY6Oj0pOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAg
KiB3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1Rh
YmxlOjp0YWJsZSk6CisKIDIwMjEtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3Njo4ODogcnVudGltZSBlcnJvcjogcmVmZXJl
bmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9mIHR5cGUgJ2NvbnN0IFdlYkNvcmU6OlN0eWxl
OjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggN2RjOGE5MjNmNDA4OThkOTUx
ZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3NzcyZWExZGRkMTk4ODQ5YjkxMjQwOTNhZmQzYzM5
NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRl
IDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPgpAQCAtMTI4
NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0
b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIFJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpu
dW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAg
ICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisgICAg
ICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAg
ICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4
MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5n
OjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpu
dW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAg
ICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0K
KyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNl
ZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
blByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BX
YXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ1RhYmxl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmlu
Zzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUu
c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1v
dmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJp
bmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6
Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xu
KHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7CisgICAg
ZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICByZXR1cm4g
cHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2Uy
NDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5
ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdy
b3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBD
b25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFC
REUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9v
ZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJs
ZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFt
YmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJ
RTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQ
b29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVh
a0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUw
OUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1ODNDODI2
MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jp
bkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjEx
NUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBS
ZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2Fn
ZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywK
KwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAor
CQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJ
CQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAog
CQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RF
RDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVF
NDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUxZmE1NDVh
NDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBA
IC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAg
ICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoTWFw
LmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUuaAogICAg
IFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNkOWViNzhi
MzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkzLDkgKzkz
LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBsYXRlPHR5
cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0
cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0IElkZW50
aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyOwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lID0g
RGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBjbGFzcyBI
YXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0
czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3MgSGFzaE1h
cDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZh
bHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFzaFNldDsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9
IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBl
bmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+
IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBE
ZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4sIHR5
cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApp
bmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi4zNDEwM2ZmZjQ0
YzYwM2Q4NzM1MDQ0MWMzMzU5Njk2Mjg4YmY0NjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSwyMCArMzEs
MjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3Rv
ciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3Qg
VCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgorc3RydWN0IEtleVZhbHVlUGFpclRyYWl0cyA6IEtl
eVZhbHVlUGFpckhhc2hUcmFpdHM8S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHN0
YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJh
aXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6VHJhaXRUeXBlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUua2V5
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIHVzaW5n
IEtleVRyYWl0cyA9IEtleVRyYWl0c0FyZzsKICAgICB1c2luZyBNYXBwZWRUcmFpdHMgPSBNYXBw
ZWRUcmFpdHNBcmc7Ci0KLSAgICBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzIDogS2V5VmFsdWVQ
YWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz4gewotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgdHlwZW5hbWUgS2V5VmFsdWVQYWlySGFzaFRy
YWl0czxLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OlRyYWl0VHlwZSYgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4o
dmFsdWUua2V5KTsKLSAgICAgICAgfQotICAgIH07CisgICAgdXNpbmcgS2V5VmFsdWVQYWlyVHJh
aXRzID0gS2V5VmFsdWVQYWlyVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjsKIAogcHVi
bGljOgogICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLZXlUcmFpdHM6OlRyYWl0VHlwZTsK
QEAgLTU3LDcgKzU5LDcgQEAgY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAKICAgICB1c2luZyBIYXNo
RnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFi
bGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtl
eVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRy
YWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
Ojp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQ
YWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1
ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBjbGFzcyBIYXNoTWFwS2V5c1Byb3h5Owog
ICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAgLTIzMiw5MSArMjM0LDg5IEBAIHN0cnVj
dCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAob3RoZXIubV9p
bXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5z
aWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2FwYWNp
dHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNFbXB0eSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5
KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSAtPiBpdGVyYXRvcgogewogICAg
IHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgLT4g
aXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4oKSBjb25zdCAtPiBjb25z
dF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5l
bmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29u
c3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZChr
ZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9v
bCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAogewogICAgIHJl
dHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvcgot
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkKK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIC0+
IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFu
c2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIAotSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFu
c2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBl
CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPEhhc2hNYXBUcmFuc2xhdG9y
QWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogICAg
IGlmICghZW50cnkpCkBAIC0zMjQsOSArMzI0LDkgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiAgICAg
cmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVH
ZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9y
QWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogICAg
IGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzNCwxNiBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5
cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGJvb2wgSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1l
IFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRk
UmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZVNldChLJiYga2V5
LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIEFkZFJlc3VsdCByZXN1bHQgPSBpbmxp
bmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1Myw5MSArMzUzLDkxIEBAIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1BTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVB
ZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hG
dW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKEsmJiBr
ZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBFbnN1
cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9y
d2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQo
Y29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkg
LT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxU
PihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+
IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYm
IGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZVNldChX
VEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBL
LCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+
IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoSyYmIGtleSwg
ViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFk
ZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJh
aXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8
Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBl
ZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChjb25z
dCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBp
bmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFi
bGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRh
YmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3Vs
dAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4o
bWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBl
JiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFw
cGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgc3RkOjpmb3J3
YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RBZGQoS2V5VHlw
ZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUoa2V5KSwgc3Rk
Ojpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoY29uc3QgS2V5
VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
LCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBm
dW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJlKGtleSwgc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0Fy
Zz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKEtl
eVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5j
dG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJlKHN0ZDo6Zm9yd2Fy
ZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogICAg
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBl
ZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYga2V5KSBj
b25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZ
PgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzLCBZ
Pjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUK
IHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlw
ZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+
KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4ICs0NDUsOCBAQCBBTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoY29uc3Qg
S2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJl
bW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYg
KGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1
NSwyNyArNDU1LDI3IEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92
ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCitp
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmVJZihGdW5jdG9yJiYg
ZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKHN0ZDo6Zm9yd2FyZDxGdW5j
dG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZShj
b25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKGtleSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIo
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xlYXIoKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OnRh
a2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0
cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlwZQogewogICAg
IGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTQ4NSwz
MCArNDg1LDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtl
KGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5CiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNo
TWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5cGUKK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVs
cGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRh
aW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQogewog
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaE1hcFRyYW5zbGF0b3I8S2V5
VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46
OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgS2V5VmFsdWVQYWlyVHlw
ZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlu
bGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5j
dGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC01MTYsMjMgKzUxNiwyMyBAQCBpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldCh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCithdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46
OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIGlubGluZUdl
dChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVy
PEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxL
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKGtleSkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6
dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChr
ZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0MiwxNCArNTQyLDE0IEBAIGlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc1Zh
bGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICBpZiAoS2V5VHJhaXRzOjppc0RlbGV0
ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjUsMTMgKzU2NSwxMyBA
QCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtl
eVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWJvb2wgb3Bl
cmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICBjb25zdF9pdGVy
YXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQsOCArNTg0LDggQEAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwg
ViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hTZXQuaAppbmRleCA3NGMwOWUwNWFiZTNiMzBkMDQ1MDE3YTgxZmUyNDM3MGI2ZTFiOGJk
Li4wMzVhOTA3ZDVmOGU4NTliNTIxNjBmZDQ5MzMzYmMyZGQwNTJlZDRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCkBA
IC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdHJ1Y3QgSWRlbnRpdHlFeHRy
YWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNs
YXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0
ZToKQEAgLTQxLDggKzM5LDcgQEAgY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKIAogcHJpdmF0ZToKLSAg
ICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0
b3IsCi0gICAgICAgIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz47CiAKIHB1
YmxpYzoKICAgICAvKgpAQCAtMTcxLDEwMiArMTY4LDEwMiBAQCBzdHJ1Y3QgSGFzaFNldFRyYW5z
bGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6c3dhcChIYXNo
U2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpzd2FwKEhhc2hT
ZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7IAogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHVuc2lnbmVk
IEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0
PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsg
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxp
bmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1
bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzRW1wdHko
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzRW1wdHkoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5i
ZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0IC0+IGl0ZXJhdG9y
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46
OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
YXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNv
bnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZhbHVlKTsgCiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5zKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyh2YWx1ZSk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3QgVCYgdmFsdWUpIGNv
bnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRl
cmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0
b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5saW5lIGJvb2wgSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmNvbnRhaW5z
KGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29u
dGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFk
ZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFk
ZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChWYWx1ZVR5cGUm
JiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2
YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZvaWQoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKIHsKICAgICBtX2lt
cGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojph
ZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5n
SGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUs
IHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRl
cmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0
ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBAIC0yNzQsOSAr
MjcxLDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBi
ZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRl
cmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkK
IHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVy
ID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBAIC0yODQsOCArMjgxLDggQEAgaW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0
b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46
OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpy
ZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NCwyNyArMjkxLDI3IEBAIGlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmVJZihjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3Zl
SWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlm
KGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xlYXIoKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUg
YXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lu
bGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VU
eXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6
OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUoKSk7CkBAIC0zMjQsNDggKzMyMSw0OCBAQCBp
bmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlw
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0
IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlwZQogewogICAg
IHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VB
bnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2VB
bnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGJlZ2luKCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Zmlu
ZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUK
K2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVU
cmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29u
c3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJh
dG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJh
bnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5l
IGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNs
YXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUg
YXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpyZW1vdmUodHlw
ZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4g
cmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+
OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+
Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZh
bHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojppc1ZhbGlkVmFs
dWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVs
ZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgxLDkgKzM3OCw5
IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVj
dGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3Ro
ZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xs
ZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXplKCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0LDIyICszOTEsMjIgQEAgaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90
aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxl
Y3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90
aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29s
bGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlckNvbGxlY3Rpb24p
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Cit2b2lkIEhhc2hTZXQ8VCwgVSwg
ViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxj
b25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAgIGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQog
ICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2hlY2tDb25zaXN0
ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2hlY2tDb25z
aXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAxMGMwYTYyOTU4N2M1ZWRm
MGE4Li5mYTI4MDY1MTY5ZTIzNjE4MTI4ODljMzJjYmRjNDEzNWEzYzNiMDY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFi
bGUuaApAQCAtNzksNDYgKzc5LDQ0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBjbGFzcyBIYXNo
VGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xh
c3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIGFkZEl0ZXJhdG9yKGNv
bnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICAg
ICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCiAjaWYgIUNIRUNLX0hBU0hU
QUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRh
YmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qLAotICAg
ICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgICAgIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZv
aWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3Io
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCiAjZW5kaWYKIAog
ICAgIHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1Lbm93bkdvb2RU
YWc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFz
cyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZSosIGNv
bnN0IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2
YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJs
ZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFz
aFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1
ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZlcmVuY2VU
eXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAg
ICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hU
YWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAgICAgICAgZnJp
ZW5kIGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpCiAgICAgICAg
IHsKQEAgLTI0MywxOCArMjQxLDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3IgOiBwdWJs
aWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpw
dHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5
cGU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAg
dXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIFJl
ZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKIAot
ICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxl
VHlwZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJsZSwg
UG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9z
LCBlbmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJs
ZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25vd25Hb29kVGFn
IHRhZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAgLTM0Nyw4ICsz
NDUsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFzaFRh
YmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxI
YXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFRy
YWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsKICAgICAgICAg
dHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC0xNTE0LDkgKzE1MTMsOSBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBtX2l0ZXJh
dG9ycyA9IDA7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0YWJsZSwKLSAg
ICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisgICAgICAgIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAgICAgaXQtPm1fdGFibGUg
PSB0YWJsZTsKICAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOwpAQCAtMTUzNiw4ICsxNTM1LDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVU
eXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFi
bGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3Vi
bHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7
CkBAIC0xNTY2LDYgKzE1NjUsMTEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMK
IAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1
c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFk
YXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBW
YWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBz
dGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpw
dHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1Jv
YmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzI2MWFiZjRmOGJkMTEwNTU0YjM0MGVmYzRh
M2FmYzJkNzI2ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29k
SGFzaE1hcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBSb2Jpbkhvb2RIYXNo
TWFwID0gSGFzaE1hcDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBSb2Jpbkhvb2RIYXNo
VGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSb2Jpbkhv
b2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5o
IGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNDIwMGUw
OTcxYzI3YTg1NWIxZDlmNTc0MDdhODBlOTQyZWZhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFy
Zz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgUm9i
aW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgUm9i
aW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6Um9iaW5Ib29kSGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9v
ZEhhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDYzNDlkZWU4OGY3MzU3NTFiYzY1ZjlhN2Q4OGMyODU5Zjk4ZWExZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEs
NzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hU
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KK2lubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PiosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworLy8gUm9i
aW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byB1c3Vh
bCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0IG9uZS4KKy8vIFJv
YmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJlcXVlbnRseS4gVGhp
cyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhhc2guCisvLyBCdXQg
b3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFsdWUgYmVjYXVzZSBv
ZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5cGUKKy8vIHNob3Vs
ZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJpbmcgaG9sZHMgaGFz
aCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIG1l
ZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2QgSGFzaFRhYmxlLgor
Ly8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2lnbmlmaWNhbnRseSBo
aWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBBdG9taWNTdHJpbmdU
YWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNoaW5nICsgYmFja3dh
cmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisvLyBbMV06IGh0dHBz
Oi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0NTU5ODcvcnVz
dC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczovL2NvZGVjYXBzdWxl
LmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTogaHR0cHM6Ly9jb2Rl
Y2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQt
ZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6
CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB0eXBl
ZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsK
KyAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKKyAgICB0eXBlZGVmIEtleSBLZXlUeXBl
OworICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSWRlbnRpdHlIYXNo
VHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4gQWRkUmVzdWx0
OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1ZhbHVl
RnVuY3Rpb24pOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworICAgIH5S
b2Jpbkhvb2RIYXNoVGFibGUoKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3Rh
YmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0
IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFibGUm
KTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNo
VGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJik7
CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYp
OworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4gdGhl
IHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBtb3Jl
IGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5IGFu
ZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJsZSBp
cyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJsZSk7
IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IobV90
YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxlKTsg
fQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdvb2RD
b25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9yIHJh
bmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNrZXQg
PSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAgICAg
ICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKworICAg
IGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5kb20o
KSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpOyB9
CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAgICB2
b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsKKwor
ICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFi
bGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5pbXVt
VGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAgIG1f
dGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVTaXpl
ID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICB9CisKKyAgICBB
ZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAg
ICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkp
OyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBv
YmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5
cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlz
IGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQm
JiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShU
JiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5
KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25z
dF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+
IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3Qg
S2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdp
dGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0
aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVh
cigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9y
OjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVj
a2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUp
OyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9v
a3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1
ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1Rh
YmxlQ29uc2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3Vs
ZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAq
IG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5
cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxv
Y2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgYm9vbD4gTG9va3VwVHlwZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0
IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmLCB1bnNp
Z25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNp
emVNYXNrKTsKKworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNp
c3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZh
bHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSopOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7
CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdCB7IHJldHVybiBzaG91bGRFeHBhbmQoa2V5
Q291bnQoKSwgdGFibGVTaXplKCkpOyB9CisgICAgYm9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNv
bnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgKiAyOyB9Cisg
ICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9h
ZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOyB9CisgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIp
OworICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2godGFibGVTaXplKCkgLyAyLCBudWxscHRyKTsg
fQorICAgIHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOworCisgICAgVmFsdWVUeXBlKiByZWhhc2go
dW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKKyAgICBWYWx1ZVR5cGUq
IHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNr
ZXQoVmFsdWVUeXBlJiBidWNrZXQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBk
ZXNpcmVkSW5kZXgodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAg
ICAgICByZXR1cm4gaGFzaCAmIHNpemVNYXNrOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5jZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4g
KGluZGV4ICsgc2l6ZSAtIGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzaykpICYgc2l6ZU1hc2s7
CisgICAgfQorCisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyBy
ZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9
CisgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1L
bm93bkdvb2QpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0
b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBv
cywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKworICAgIHN0
YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKworICAgIHN0
YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KKworICAgIC8vIExvYWQtZmFjdG9y
IGlzIDkwJS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3Ig
PSA5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKKworICAgIHVu
c2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5z
aWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQor
ICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorCisg
ICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdGFibGVT
aXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9p
ZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoK
K3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdB
WVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbmxpbmVMb29rdXAoY29uc3QgVCYg
a2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7
CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsK
KyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBo
YXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRl
c2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOwor
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMg
dGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdo
ZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRy
eS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsK
KyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFz
aChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlI
YXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVh
bChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAg
fQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojppbml0aWFsaXpl
QnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxp
emVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxpemU8VHJhaXRz
PihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBhbmQobnVsbHB0cik7CisK
KyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFi
bGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNp
emVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNs
YXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gs
IHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUq
IGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFi
bGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAg
ICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihr
ZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFk
ZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAg
dW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBkaXN0YW5jZUZy
b21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRy
eSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1
ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hU
cmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpm
b3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNl
KFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXpl
LCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9
CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAg
ICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihl
bnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVN
YXNrKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXgg
PSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAg
ICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6
YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJh
bnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1
bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBz
aXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsK
KyAgICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9
IGVudHJ5RGlzdGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEp
ICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZShU
JiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBjaGVja0tleTxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKworICAgIGlm
ICghbV90YWJsZSkKKyAgICAgICAgZXhwYW5kKG51bGxwdHIpOworCisgICAgaW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2ln
bmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6
ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAg
dW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAg
ICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xh
dG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJk
PEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KTsKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9y
OjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisg
ICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9iZURpc3RhbmNlKGVudHJ5
SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZGlz
dGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3Rp
bmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50LgorICAgICAgICAg
ICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIG1haW50YWlu
UHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlzdGFuY2VGcm9t
RGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlz
dGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYgKHNob3VsZEV4
cGFuZCgpKQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBhdXRvIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IFZhbHVlVHlwZSoK
K3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNp
emUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRy
YWN0b3I6OmV4dHJhY3QodmFsdWUpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRl
eChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAg
ICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFp
dHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsK
KyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFuY2UoZW50
cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBk
aXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICBzd2FwKCplbnRyeSwgdmFsdWUpOwor
ICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUodmFsdWUpLCBpbmRleCwg
ZGlzdGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVN
YXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3RlbXBsYXRlIDx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8
SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVu
ZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0
ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlz
KS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisgICAgICAg
IHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihl
bnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYga2V5
KSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxI
YXNoVHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5
cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgcmVtb3ZlKHBvcyk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0
ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoVmFsdWVUeXBlKiBwb3MpCit7Cisg
ICAgcG9zLT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBt
X2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaW5kZXhQ
cmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2
aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSog
cHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSog
ZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRy
eSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlzRW1wdHlCdWNrZXQo
KnByZXZpb3VzRW50cnkpKTsKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4
dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFu
c2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmICghcHJvYmVEaXN0YW5jZShl
bnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50cnksIFdURk1v
dmUoKmVudHJ5KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgIGluaXRp
YWxpemVCdWNrZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0gaW5kZXg7Cisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpZiAo
c2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlw
ZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQg
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0
ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3Rf
Y2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
K2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lz
dGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoY29uc3QgS2V5
VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0byBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4gVmFsdWVU
eXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRo
IGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9lc24ndCBh
cHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVtcHR5VmFs
dWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUq
PihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFs
bG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0
W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHRhYmxl
W2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgoreworICAgIHVuc2lnbmVk
IG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICgh
b2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsK
KyAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQorICAgICAgICBuZXdTaXplID0gb2xk
U2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsKKworICAgIHJl
dHVybiByZWhhc2gobmV3U2l6ZSwgZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorY29uc3RleHByIHVuc2ln
bmVkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5
Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91bmRVcFRvUG93
ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNvdW50LCBiZXN0
VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAgYXV0byBhYm92
ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91YmxlIGxvYWRGYWN0b3IsIHVuc2ln
bmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAgeworICAgICAgICAvLyBIZXJl
IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRpb24sIHVzaW5nIDMvNCBsb2Fk
LWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMvNCBhbmQgbWluTG9hZCBhdCAx
LzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAgIC8vIElmIHdlIGFyZSBnZXR0
aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2UgZG91YmxlIHRoZSBzaXplCisg
ICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBsb2FkTWF4IGFuZCBicmluZyB0
aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAgLy8gZ2l2ZSB1cyBhIGxvYWQg
aW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBkb3VibGUgbWF4TG9hZFJhdGlv
ID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRSYXRpbyA9IDEuMCAvIG1pbkxv
YWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0gKG1heExvYWRSYXRpbyArIG1p
bkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldheUJldHdlZW5BdmVyYWdlQW5k
TWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhMb2FkUmF0aW8pIC8gMjsKKyAg
ICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVuQXZlcmFn
ZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3RleHByIGRvdWJsZSBsb2FkRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1heExvYWREZW5v
bWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihsb2FkRmFj
dG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNpemUgKj0g
MjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFi
bGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVT
aXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpzaHJpbmtUb0Jlc3RT
aXplKCkKK3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21w
dXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCgpKSksIG51bGxwdHIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVl
VHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxl
U2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5zaWdu
ZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxl
KG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgbV9r
ZXlDb3VudCA9IG9sZEtleUNvdW50OworCisgICAgVmFsdWUqIG5ld0VudHJ5ID0gbnVsbHB0cjsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KG9sZEVudHJ5KSkgeworICAgICAgICAgICAgQVNTRVJUKHN0ZDo6YWRkcmVzc29mKG9sZEVu
dHJ5KSAhPSBlbnRyeSk7CisgICAgICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlKiByZWluc2VydGVk
RW50cnkgPSByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5W
YWx1ZVR5cGUoKTsKKyAgICAgICAgaWYgKHN0ZDo6YWRkcmVzc29mKG9sZEVudHJ5KSA9PSBlbnRy
eSkgeworICAgICAgICAgICAgQVNTRVJUKCFuZXdFbnRyeSk7CisgICAgICAgICAgICBuZXdFbnRy
eSA9IHJlaW5zZXJ0ZWRFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvbGRUYWJs
ZSkKKyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG9sZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAg
IHJldHVybiBuZXdFbnRyeTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpj
bGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgIGlmICghbV90YWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90
YWJsZSwgbnVsbHB0ciksIHRhYmxlU2l6ZSgpKTsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAg
bV9rZXlDb3VudCA9IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OlJvYmluSG9v
ZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQorICAgIDogbV90YWJs
ZShhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKSkKKyAgICAsIG1fa2V5Q291bnQob3Ro
ZXIubV9rZXlDb3VudCkKKyAgICAsIG1fdGFibGVTaXplKG90aGVyLm1fdGFibGVTaXplKQorewor
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFibGVTaXplOyAr
K2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVyLm1fdGFibGVb
aW5kZXhdOworICAgICAgICBWYWx1ZVR5cGUmIGVudHJ5ID0gbV90YWJsZVtpbmRleF07CisgICAg
ICAgIG5ldyAoJmVudHJ5KSBWYWx1ZVR5cGUob3RoZXJFbnRyeSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhl
cikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBz
d2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVy
Lm1fdGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShjb25zdCBSb2Jp
bkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAgIHJldHVybiAq
dGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OlJvYmluSG9vZEhh
c2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBvdGhlci5pbnZhbGlk
YXRlSXRlcmF0b3JzKCk7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3Rh
YmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90
YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5
Q291bnQsIDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpv
cGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJs
ZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUob3RoZXIpOworICAg
IHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3QgUm9iaW5Ib29kSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcx
MTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBB
dG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVz
aW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3Vz
aW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwog
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4MWFhNmM3
ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLmE5ODM1MTRjNWM3Yzg2NjcxMzMzNTBmMDgwZTkxZTI2
NDYwOTk4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAtMjIsOCAr
MjIsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTMz
LDEyICszMywxNCBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2luZyBTdHJpbmdU
YWJsZUltcGwgPSBSb2Jpbkhvb2RIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47CisKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAgSGFzaFNldDxQ
YWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KKyAgICBT
dHJpbmdUYWJsZUltcGwmIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCiBwcml2YXRlOgot
ICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOworICAgIFN0cmluZ1Rh
YmxlSW1wbCBtX3RhYmxlOwogfTsKIAogfQo=
</data>
<flag name="commit-queue"
          id="444294"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424586</attachid>
            <date>2021-03-29 14:58:36 -0700</date>
            <delta_ts>2021-03-29 16:04:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329145835.patch</filename>
            <type>text/plain</type>
            <size>101894</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLmQ1MmZhNzk4YjdkNDIxZjJmMDc4MGJlNzcyYjVjNTFmMGJmNGNjNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkwIEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFz
aFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6flJvYmluSG9vZEhhc2hUYWJsZSk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YmVnaW4pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OmVuZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmVuZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFuZG9tKToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20gY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpp
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyZXNlcnZl
SW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjphZGQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmZpbmQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjppc0VtcHR5QnVja2V0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
Ojppc0VtcHR5T3JEZWxldGVkQnVja2V0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjpsb29rdXApOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNoZWNrVGFi
bGVDb25zaXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6Om11c3RSZWhhc2hJblBsYWNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpw
cm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VDb25zdEl0ZXJh
dG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25H
b29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VLbm93
bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpsb29rdXApOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpmaW5kKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OktleVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3Zl
QW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFsbG9jYXRl
VGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUpOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjpleHBhbmQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnNocmlu
a1RvQmVzdFNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZWhhc2gpOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OlJv
YmluSG9vZEhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAg
ICAgICAoV1RGOjo9KToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHA6Cisg
ICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAgIChXVEY6OkF0b21T
dHJpbmdUYWJsZTo6dGFibGUpOgorCiAyMDIxLTAzLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgd3RmL1ZlY3Rvci5oOjEyNzY6ODg6IHJ1bnRpbWUgZXJyb3I6
IHJlZmVyZW5jZSBiaW5kaW5nIHRvIG51bGwgcG9pbnRlciBvZiB0eXBlICdjb25zdCBXZWJDb3Jl
OjpTdHlsZTo6UnVsZUZlYXR1cmUnCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDdkYzhhOTIzZjQw
ODk4ZDk1MWVkMjkwYTljNTc1NTdlMDk1N2I1OTQuLjcyNzc3MmVhMWRkZDE5ODg0OWI5MTI0MDkz
YWZkM2MzOTQ5MzRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC04OCw2ICs4OCw3IEBACiAj
aW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogCiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDxkaXJlY3QuaD4K
QEAgLTEyODQsMTEgKzEyODUsNzUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJu
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWwKIAogSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJpbnRTdGRPdXQsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CisjaWYgMAorICAgIFN0b3BX
YXRjaCBzdG9wV2F0Y2g7CisgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CisgICAgeworICAgICAgICBS
b2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0
cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFi
bGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7
CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAg
ICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgx
KQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihpKSk7
CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYg
KGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1RhYmxlLmNvbnRhaW5z
KFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0
cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAg
ICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsK
KyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4oc3RvcFdhdGNoLmdl
dEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVybmFsKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBzdGRvdXQpOwogfQogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25QcmludFN0ZEVyciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAg
ICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJp
bmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7Cisg
ICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9
CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFk
ZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmlu
Z1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisgICAgICAgICAgICAgICAgc3RyaW5nVGFi
bGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9n
TG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAg
ICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RyaW5nVGFibGUuY29udGFpbnMo
U3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUo
U3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRh
dGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0KKyAgICBzdG9wV2F0Y2guc3RvcCgp
OworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOworI2VuZGlmCiAgICAg
cmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHN0ZGVycik7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2YjQ1ZTU1
M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1NjEzN2IzYzMxZDMwZGJh
YjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2OEIwMDNDMDhERSAvKiBU
aHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRHcm91
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEzQTIyOEJEQ0FCMDBCRkE2
QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBS
b2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5h
a2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRFODcwMDM1OURBOSAvKiBE
YXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFSZWYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2NzAwQkY2MjVFIC8qIFJl
Y3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdXJz
YWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM4LDYgKzc0MCw3
IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVlTWFsbG9jLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4IC8qIExpbmVCcmVha0l0
ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
aW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTND
NTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0NG
NzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0ZW1GcmVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8qIE5vbm1v
dmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMwMzE1MUE4MjVCMDA0MTIz
RkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAwOURENDQ1IC8qIFJlc291
cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIzRkYgLyogUmV0YWluUHRy
LmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAu
aCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5o
ICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jpbkhvb2RIYXNoVGFibGUu
aCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgKi8sCiAJ
CQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAqLywKIAkJCQkxNEYzQjBG
NjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2ViNjViNmQyZmM5MTc4Li5l
MWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBSZWZQ
dHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5oCisgICAgUm9iaW5Ib29k
SGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9iaW5Ib29kSGFzaFRhYmxl
LmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0ZWRBcml0aG1ldGljLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0Zv
cndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEyZDY1YWM2Mzc4OWM0Li4z
ZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC05
Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVudW1UcmFpdHM7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsKIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJsZVRyYWl0czsKK3N0cnVj
dCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1
ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3RydWN0IEtleVZhbHVlUGFp
cjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlPj4g
Y2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+IGNsYXNz
IEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0
SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhh
c2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJn
PiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxl
VHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVB
cmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFzaFNldDsKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2NDFhMTE4NWJjZi4uODkw
MWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAtMzEs
NyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0cmFjdChj
b25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0Fy
Zz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAKICAgICB1
c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUg
PSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFp
dHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwg
S2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25z
LCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBjbGFzcyBIYXNoTWFwS2V5
c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAgLTIzMiw5MSArMjMyLDg5
IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpzd2FwKEhhc2hNYXAm
IG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAo
b3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c2l6ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVu
c2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNF
bXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSAtPiBpdGVyYXRv
cgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4oKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAog
ewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
dGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkK
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYg
dmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5
cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIAotSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBl
ZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtU
eXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCith
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBAQCBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFw
cGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5l
IGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFs
dWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFw
VHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEss
IHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZVNl
dChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1
ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1Myw5MSArMzUxLDkxIEBA
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAt
PiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFp
dHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+
KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lRW5z
dXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1
bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhh
c2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVuY3RvcikpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYm
IG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZVNldChrZXksIHN0ZDo6
Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXksIFQmJiBt
YXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQo
S2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlu
bGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYg
dmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQo
SyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFs
dWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6
OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwg
VCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAg
IHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZv
cndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25z
dCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBh
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYga2V5
LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwg
c3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RB
ZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUo
a2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUo
Y29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CithdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1
bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJl
KGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6
ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0
b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5zdXJlKHN0
ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAt
PiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0eVRyYW5zbGF0b3JUeXBl
PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0
eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVk
VHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVk
UGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4ICs0NDMsOCBAQCBBTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnkt
PnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citpbmxp
bmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7
CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlSWYoRnVuY3RvciYmIGZ1
bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmVJZihG
dW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKHN0ZDo6Zm9y
d2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKGtl
eSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xlYXIoKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlwZQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlw
ZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkK
QEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFp
dHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5CiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVy
PEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxL
Pjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
ZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5
cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUg
R2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQogewogICAg
IHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBh
aXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0
clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6
dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaE1hcFRyYW5z
bGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgot
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgS2V5VmFs
dWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRl
bXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC01MTYsMjMgKzUxNCwy
MyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVl
ayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Omdl
dCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0
eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAgcmV0dXJu
IGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5k
KGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewogICAgIGl0ZXJhdG9yIGl0
ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0MiwxNCArNTQwLDE0IEBA
IGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwu
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICBpZiAoS2V5VHJhaXRz
Ojppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjUsMTMg
KzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5
KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2Jvb2wg
b3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBjb25zdCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsKICAgICBj
b25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQsOCArNTgyLDggQEAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwg
Y29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA3NGMwOWUwNWFiZTNiMzBkMDQ1MDE3YTgxZmUyNDM3
MGI2ZTFiOGJkLi4wMzVhOTA3ZDVmOGU4NTliNTIxNjBmZDQ5MzMzYmMyZGQwNTJlZDRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdHJ1Y3QgSWRl
bnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0
c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHJpdmF0ZToKQEAgLTQxLDggKzM5LDcgQEAgY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAg
dHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKIAogcHJp
dmF0ZToKLSAgICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRp
dHlFeHRyYWN0b3IsCi0gICAgICAgIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRy
YWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwg
SWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0
cz47CiAKIHB1YmxpYzoKICAgICAvKgpAQCAtMTcxLDEwMiArMTY4LDEwMiBAQCBzdHJ1Y3QgSGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6
c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpz
d2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7IAog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5l
IHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNpZ25l
ZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46
OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzRW1w
dHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0IC0+
IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29uc3Qg
LT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZhbHVl
KTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5zKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlu
cyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3QgVCYg
dmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5saW5l
IGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4o
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBs
LmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBlJiYgdmFs
dWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChW
YWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5hZGQo
V1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZv
aWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKHZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKIHsK
ICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmFkZChjb25z
dCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBh
ZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKEl0ZXJhdG9yVHlwZSBi
ZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAg
ICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBA
IC0yNzQsOSArMjcxLDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJh
dG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpy
ZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JU
eXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9y
VHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBAIC0yODQsOCArMjgxLDgg
QEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdp
biwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2lt
cGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NCwyNyArMjkxLDI3IEBAIGlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmVJ
Zihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBX
Pjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBs
LnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lu
bGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xl
YXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtl
VHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoaXRlcmF0b3IgaXQp
IC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICByZXR1cm4gVmFs
dWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUoKSk7CkBAIC0zMjQsNDggKzMy
MSw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAt
PiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlw
ZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGJlZ2luKCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRv
cj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2
YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFs
dWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxI
YXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1l
IFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpj
b250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNo
U2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpy
ZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAg
ICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZh
bHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gdGFr
ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpp
c1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBpZiAoVmFsdWVUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgx
LDkgKzM3OCw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90
aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYg
b3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXplKCkgIT0gb3RoZXJDb2xsZWN0
aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0LDIyICszOTEsMjIgQEAg
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxl
Y3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
dGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvciE9
KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24m
IG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlckNv
bGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Cit2b2lkIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAgIGZvciAoYXV0byYgdmFsdWUg
OiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2hl
Y2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6
Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAxMGMwYTYy
OTU4N2M1ZWRmMGE4Li5mYTI4MDY1MTY5ZTIzNjE4MTI4ODljMzJjYmRjNDEzNWEzYzNiMDY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBj
bGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIGFkZEl0
ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRl
cmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCiAjaWYgIUNI
RUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgICAgIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAg
aW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgcmVtb3Zl
SXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCiAj
ZW5kaWYKIAogICAgIHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1L
bm93bkdvb2RUYWc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8
c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZSosIGNvbnN0IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwot
ICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlw
ZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBS
ZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5
cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAg
ICAgICAgZnJpZW5kIGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygp
CiAgICAgICAgIHsKQEAgLTI0MywxOCArMjQxLDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0
b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1
ZSwgc3RkOjpwdHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhh
c2hUYWJsZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsK
KyAgICAgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9y
OwogICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1
ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVy
VHlwZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQg
SGFzaFRhYmxlVHlwZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBl
KiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0
YWJsZSwgcG9zLCBlbmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVU
eXBlKiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25v
d25Hb29kVGFnIHRhZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAg
LTM0Nyw4ICszNDUsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNp
bmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0
eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsK
ICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC0xNTE0LDkgKzE1MTMsOSBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICBtX2l0ZXJhdG9ycyA9IDA7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0
YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisgICAgICAgIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAgICAgaXQt
Pm1fdGFibGUgPSB0YWJsZTsKICAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOwpAQCAtMTUzNiw4
ICsxNTM1LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3Ig
ZnJvbSBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5t
X3RhYmxlKSB7CkBAIC0xNTY2LDYgKzE1NjUsMTEgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0
ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlw
ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9X
VEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzI2MWFiZjRmOGJkMTEwNTU0
YjM0MGVmYzRhM2FmYzJkNzI2ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
Um9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8
S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBSb2Jp
bkhvb2RIYXNoTWFwID0gSGFzaE1hcDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBSb2Jp
bkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpSb2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29k
SGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlkNDIwMGUwOTcxYzI3YTg1NWIxZDlmNTc0MDdhODBlOTQyZWZhYWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSwzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFz
aDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+Pgor
dXNpbmcgUm9iaW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0
c0FyZywgUm9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6Um9iaW5Ib29kSGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDYzNDlkZWU4OGY3MzU3NTFiYzY1ZjlhN2Q4OGMyODU5Zjk4ZWExZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBA
IC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0K
KworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21wYXJl
ZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0IG9u
ZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJlcXVl
bnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhhc2gu
CisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFsdWUg
YmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5cGUK
Ky8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJpbmcg
aG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVxdWly
ZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2QgSGFz
aFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2lnbmlm
aWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBBdG9t
aWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNoaW5n
ICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisvLyBb
MV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0
NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczovL2Nv
ZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTogaHR0
cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dh
cmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7
CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsK
KyAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9p
dGVyYXRvcjsKKyAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKKyAgICB0eXBlZGVmIEtl
eSBLZXlUeXBlOworICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSWRl
bnRpdHlIYXNoVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4g
QWRkUmVzdWx0OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2Vk
V2Vha1ZhbHVlRnVuY3Rpb24pOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0
OworICAgIH5Sb2Jpbkhvb2RIYXNoVGFibGUoKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVU
YWJsZShtX3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRh
YmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jp
bkhvb2RIYXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNo
VGFibGUmJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFz
aFRhYmxlJiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCBy
ZXR1cm4gdGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhp
cyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhl
IGVtcHR5IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0
eSB0YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3Io
bV90YWJsZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRl
cmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvciht
X3RhYmxlKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VL
bm93bkdvb2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0
ZXJhdG9yIHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRv
JiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07
CisgICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAg
IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMp
LT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlD
b3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNp
emUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9
CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6
ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjpt
aW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1h
eChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisg
ICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1f
dGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICB9
CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFk
ZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1
ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92
ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZp
bmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21l
IG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUg
b2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1
bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdI
YXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5
VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1
cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJh
bnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lk
IHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQg
cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAg
dm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4o
RXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JE
ZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNr
ZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyBy
ZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAo
Y29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRh
YmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRp
YyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgYm9vbD4gTG9va3VwVHlwZTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNr
S2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlw
ZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVu
c2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmVBbmRJbnZh
bGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSopOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBr
ZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdCB7IHJldHVybiBzaG91bGRF
eHBhbmQoa2V5Q291bnQoKSwgdGFibGVTaXplKCkpOyB9CisgICAgYm9vbCBtdXN0UmVoYXNoSW5Q
bGFjZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkg
KiAyOyB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
ICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOyB9CisgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9
IG51bGxwdHIpOworICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2godGFibGVTaXplKCkgLyAyLCBu
dWxscHRyKTsgfQorICAgIHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOworCisgICAgVmFsdWVUeXBl
KiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKKyAgICBW
YWx1ZVR5cGUqIHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBkZXNpcmVkSW5kZXgodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2l6ZU1hc2spCisg
ICAgeworICAgICAgICByZXR1cm4gaGFzaCAmIHNpemVNYXNrOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5jZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAg
ICByZXR1cm4gKGluZGV4ICsgc2l6ZSAtIGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzaykpICYg
c2l6ZU1hc2s7CisgICAgfQorCisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVT
aXplKCkpOyB9CisgICAgaXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwg
SGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENv
bnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0K
KworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0K
KworICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KKworICAgIC8vIExv
YWQtZmFjdG9yIGlzIDkwJS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRO
dW1lcmF0b3IgPSA5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9t
aW5hdG9yID0gMTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsK
KworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9
CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
IC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3Vu
dDsgfQorCisgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVk
IG1fdGFibGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citp
bmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citp
bmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZh
bHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbmxpbmVMb29rdXAo
Y29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRh
YmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJs
ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1
bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFu
Y2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1f
dGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBt
YWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBw
cm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlz
dGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xh
dG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFu
Y2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpp
bml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tl
dEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxp
emU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJl
c3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBhbmQobnVs
bHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNT
RVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBI
YXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBW
YWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRy
eSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkg
eworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJh
bnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhh
c2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAg
cmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisK
KyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFuY2UoZW50
cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBk
aXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlz
dGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAg
ICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAg
ICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5
KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9i
ZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNp
cmVkLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5j
ZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5k
KCkpCisgICAgICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorQUxXQVlTX0lOTElORSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmIHZhbHVl
LCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2ln
bmVkIHNpemVNYXNrKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAg
ICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4
OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1
ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElk
ZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOwor
ICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gs
IGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlz
dGFuY2UpIHsKKyAgICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBk
aXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXh0cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZFBhc3NpbmdI
YXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBjaGVj
a0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsK
KworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgZXhwYW5kKG51bGxwdHIpOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFz
ayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9
IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5k
ZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhh
c2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3Rk
Ojpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBl
OjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hU
cmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFs
c2UpOworCisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9iZURpc3Rh
bmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBp
bmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50Lgor
ICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7Cisg
ICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAg
IG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlz
dGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
ICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYg
KHNob3VsZEV4cGFuZCgpKQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdCht
YWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBh
dXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IFZh
bHVlVHlwZSoKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVu
c2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxl
U2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6
aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRl
c2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOwor
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAg
VmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlz
dGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlz
dGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICBzd2FwKCplbnRyeSwg
dmFsdWUpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUodmFsdWUp
LCBpbmRleCwgZGlzdGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAg
ICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAo
IW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkg
PSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAg
cmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+
IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5k
KCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFi
bGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJ
dGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29udGFpbnMoY29u
c3QgVCYga2V5KSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcykt
Pmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVj
ayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgcmVt
b3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5k
SW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoVmFsdWVUeXBlKiBw
b3MpCit7CisgICAgcG9zLT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9z
KTsKKyAgICBtX2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXpl
KCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWdu
ZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAo
aW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAg
ICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlzRW1w
dHlCdWNrZXQoKnByZXZpb3VzRW50cnkpKTsKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmICghcHJvYmVE
aXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50
cnksIFdURk1vdmUoKmVudHJ5KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAg
ICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0g
aW5kZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5s
aW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hl
Y2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0g
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0
RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlv
bikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUo
Y29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkg
LT4gVmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5j
dGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2Mg
ZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6
OmVtcHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxW
YWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxs
b2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQg
PSByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFz
aFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNr
ZXQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25l
ZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAg
ICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgoreworICAg
IHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOwor
ICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRh
YmxlU2l6ZTsKKyAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQorICAgICAgICBuZXdT
aXplID0gb2xkU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsK
KworICAgIHJldHVybiByZWhhc2gobmV3U2l6ZSwgZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorY29uc3Rl
eHByIHVuc2lnbmVkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5z
aWduZWQga2V5Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91
bmRVcFRvUG93ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNv
dW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAg
YXV0byBhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91YmxlIGxvYWRGYWN0
b3IsIHVuc2lnbmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAgeworICAgICAg
ICAvLyBIZXJlIGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRpb24sIHVzaW5n
IDMvNCBsb2FkLWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMvNCBhbmQgbWlu
TG9hZCBhdCAxLzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAgIC8vIElmIHdl
IGFyZSBnZXR0aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2UgZG91YmxlIHRo
ZSBzaXplCisgICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBsb2FkTWF4IGFu
ZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAgLy8gZ2l2ZSB1
cyBhIGxvYWQgaW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBkb3VibGUgbWF4
TG9hZFJhdGlvID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRSYXRpbyA9IDEu
MCAvIG1pbkxvYWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0gKG1heExvYWRS
YXRpbyArIG1pbkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldheUJldHdlZW5B
dmVyYWdlQW5kTWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhMb2FkUmF0aW8p
IC8gMjsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3
ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3RleHByIGRvdWJs
ZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1h
eExvYWREZW5vbWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lv
bihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJs
ZVNpemUgKj0gMjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjpt
aW5pbXVtVGFibGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5p
bXVtVGFibGVTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpzaHJp
bmtUb0Jlc3RTaXplKCkKK3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJh
aXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVT
aXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCgpKSksIG51bGxwdHIpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNp
emUsIFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6
ZSA9IHRhYmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisg
ICAgdW5zaWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxv
Y2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7
CisgICAgbV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworCisgICAgVmFsdWUqIG5ld0VudHJ5ID0g
bnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytp
KSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KG9sZEVudHJ5KSkgeworICAgICAgICAgICAgQVNTRVJUKHN0ZDo6YWRkcmVz
c29mKG9sZEVudHJ5KSAhPSBlbnRyeSk7CisgICAgICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBl
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlKiBy
ZWluc2VydGVkRW50cnkgPSByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9s
ZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICAgICAgaWYgKHN0ZDo6YWRkcmVzc29mKG9sZEVudHJ5
KSA9PSBlbnRyeSkgeworICAgICAgICAgICAgQVNTRVJUKCFuZXdFbnRyeSk7CisgICAgICAgICAg
ICBuZXdFbnRyeSA9IHJlaW5zZXJ0ZWRFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChvbGRUYWJsZSkKKyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG9sZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOworICAgIHJldHVybiBuZXdFbnRyeTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgIGlmICgh
bV90YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhj
aGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIHRhYmxlU2l6ZSgpKTsKKyAgICBtX3RhYmxlU2l6ZSA9
IDA7CisgICAgbV9rZXlDb3VudCA9IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46
OlJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQorICAg
IDogbV90YWJsZShhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKSkKKyAgICAsIG1fa2V5
Q291bnQob3RoZXIubV9rZXlDb3VudCkKKyAgICAsIG1fdGFibGVTaXplKG90aGVyLm1fdGFibGVT
aXplKQoreworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFi
bGVTaXplOyArK2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVy
Lm1fdGFibGVbaW5kZXhdOworICAgICAgICBWYWx1ZVR5cGUmIGVudHJ5ID0gbV90YWJsZVtpbmRl
eF07CisgICAgICAgIG5ldyAoJmVudHJ5KSBWYWx1ZVR5cGUob3RoZXJFbnRyeSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnN3YXAoUm9iaW5Ib29kSGFzaFRh
YmxlJiBvdGhlcikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisKKyAgICBzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNp
emUsIG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5
Q291bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShj
b25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7
CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAg
IHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OlJv
YmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBvdGhl
ci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShv
dGhlci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV90YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fa2V5Q291bnQsIDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmluSG9v
ZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUob3Ro
ZXIpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3QgUm9i
aW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNi
MmVlODlmZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJF
QUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0lt
cGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFi
bGVJbXBsOwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1Rh
YmxlKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5
NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLmE5ODM1MTRjNWM3Yzg2NjcxMzMzNTBm
MDgwZTkxZTI2NDYwOTk4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0
cmluZ1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApA
QCAtMjIsOCArMjIsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTMzLDEyICszMywxNCBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmlu
Z1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2lu
ZyBTdHJpbmdUYWJsZUltcGwgPSBSb2Jpbkhvb2RIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj47CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAg
SGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7
IH0KKyAgICBTdHJpbmdUYWJsZUltcGwmIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCiBw
cml2YXRlOgotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOworICAg
IFN0cmluZ1RhYmxlSW1wbCBtX3RhYmxlOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424599</attachid>
            <date>2021-03-29 16:04:21 -0700</date>
            <delta_ts>2021-03-29 22:41:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329160420.patch</filename>
            <type>text/plain</type>
            <size>107684</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLjBhZDgxZDk5OTBkMzU2YzYxYzYyNDIwYTMxNTNjNDcxNmFlOTUyZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAwIEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFz
aFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5k
b20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpkZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVja0tleSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46
Omxvb2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmlubGluZUxvb2t1cCk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OmluaXRpYWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjptYWludGFpblByb2Jl
RGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZWluc2VydCk6CisgICAgICAgIChXVEY6Oktl
eVRyYWl0cz46OmZpbmQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpmaW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lD
aGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6
S2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmRl
YWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmV4cGFuZCk6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OmNvbXB1dGVCZXN0VGFibGVTaXplKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6c2hyaW5rVG9CZXN0U2l6ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNsZWFyKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgorICAgICAgICAqIHd0Zi90ZXh0L0F0
b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaDoK
KyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp0YWJsZSk6CisKIDIwMjEtMDMtMjcgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3
Njo4ODogcnVudGltZSBlcnJvcjogcmVmZXJlbmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9m
IHR5cGUgJ2NvbnN0IFdlYkNvcmU6OlN0eWxlOjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKaW5kZXggN2RjOGE5MjNmNDA4OThkOTUxZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3Nzcy
ZWExZGRkMTk4ODQ5YjkxMjQwOTNhZmQzYzM5NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
QEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQog
I2luY2x1ZGUgPGRpcmVjdC5oPgpAQCAtMTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbAogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91
dCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
IHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQo
KTsKKyAgICB7CisgICAgICAgIFJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAg
ICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAg
IGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGkgJiAweDEpCisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3Zl
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytp
KSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCgh
c3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAg
ICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpu
dW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpu
dW1iZXIoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihz
dHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0KKyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRh
dGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHBy
aW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9w
V2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BXYXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAg
SGFzaFNldDxTdHJpbmc+IHN0cmluZ1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51
bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAg
ICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAg
ICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAg
ICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgx
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6
Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51
bWJlcihpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChz
dHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAg
IHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQor
ICAgIHN0b3BXYXRjaC5zdG9wKCk7CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2Vk
TVMoKSk7CisjZW5kaWYKICAgICByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgc3RkZXJyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYz
MGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYx
RjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
MTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZN
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9i
aW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyog
UGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
dGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIy
NjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9i
aW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIz
QzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMy
NDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFG
QkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpT
VmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1h
bGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAz
NjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxw
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFz
aE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRl
clR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVy
VHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAw
NEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEz
NDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4
QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVD
QzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIw
MDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1Njgg
LyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAv
KiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8q
IFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAv
KiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9v
cC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQy
ZGE3ZWI2NWI2ZDJmYzkxNzguLmUxZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhl
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJM
SUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWlu
UHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAg
ICBSb2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNh
dHVyYXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
IGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBh
MjE5MTJkNjVhYzYzNzg5YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgKQEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgRW51bVRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFs
dWVzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzOworc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJh
aXRzOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJn
PiBzdHJ1Y3QgS2V5VmFsdWVQYWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9
IEhhc2hUcmFpdHM8VmFsdWU+PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtl
eUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFp
dHM8TWFwcGVkQXJnPj4gY2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJn
LCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRz
PFZhbHVlQXJnPj4gY2xhc3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1l
ID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwg
dHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1l
ID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFz
cyBIYXNoU2V0OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYz
YmUxZjY0MWExMTg1YmNmLi44OTAxYjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYxYjBhZWZhOWU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93
dGYvSGFzaE1hcC5oCkBAIC0zMSw3ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBU
OjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBIYXNo
TWFwIGZpbmFsIHsKIAogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOwogCi0gICAg
dXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBl
LCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlv
bnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVU
eXBlID0gdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxLZXlUeXBl
LCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWly
VHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKIAog
ICAgIGNsYXNzIEhhc2hNYXBLZXlzUHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZhbHVlc1Byb3h5
OwpAQCAtMjMyLDkxICsyMzIsODkgQEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFwJiBvdGhlcikK
IHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2FwYWNp
dHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBt
X2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0b3IKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
OjpiZWdpbigpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkg
LT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSBj
b25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgp
IGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRl
cmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkp
IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNv
bnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KGNvbnN0IFRZUEUmIHZhbHVlKQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRy
YWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3Rf
aXRlcmF0b3IgCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdAoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRy
YWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2
YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewog
ICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1w
bGF0ZSBsb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMyNCw5ICszMjIs
OSBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVu
dHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5l
R2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1
dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBp
bmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMzNCwxNiArMzMy
LDE2IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6
cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5h
bWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYg
dmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250
YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVT
ZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxl
VHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewpA
QCAtMzUzLDkxICszNTEsOTEgQEAgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUg
SywgdHlwZW5hbWUgVj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChL
JiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xh
dG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihr
ZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0Fy
Zz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3Vs
dAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUVu
c3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1f
aW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxG
PihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBw
ZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lU2V0KGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQo
S2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+
KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewog
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hNYXBUcmFu
c2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpm
b3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQo
Y29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkg
LT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxU
PihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+
IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYm
IGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChX
VEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVz
dWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFk
ZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJl
dHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5h
bWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBh
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0
QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4K
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywg
dHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9y
KSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKGNv
bnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAg
IHJldHVybiBpbmxpbmVFbnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0
b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUo
S2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJl
dHVybiBpbmxpbmVFbnN1cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1cm4gZ2V0PElk
ZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4K
LUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Omlu
bGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYg
a2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVu
dHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVM
b29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAt
NDQ1LDggKzQ0Myw4IEBAIEFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJl
bW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5saW5lIGJvb2wg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0
cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpy
ZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2lt
cGwucmVtb3ZlSWYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBL
ZXlUeXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICBy
ZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQogewogICAgIG1f
aW1wbC5jbGVhcigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1h
cHBlZFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CithdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBLZXlUeXBlJiBr
ZXkpIC0+IE1hcHBlZFRha2VUeXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAg
ICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBw
ZWRUYWtlVHkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJh
dG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRy
YWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRl
cmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBU
cmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUg
Sz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlv
bnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
bmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtU
eXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5l
R2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9y
PEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAgaWYgKCFlbnRy
eSkKQEAgLTUxNiwyMyArNTE0LDIzIEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUKICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBr
ZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVl
LCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKIHsKICAgICByZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46
OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2
YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAg
ICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBl
ZFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBl
CiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpA
QCAtNTQyLDE0ICs1NDAsMTQgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAgIHJldHVybiB2
YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lu
bGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lzdGVuY3koKSBj
b25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29u
c3QgS2V5VHlwZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQog
ewogICAgIGlmIChLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTU2NSwxMyArNTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwg
ViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgaWYg
KGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBl
ZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9pdGVyYXRvciBl
bmQgPSBhLmVuZCgpOwogICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKQEAg
LTU4NCw4ICs1ODIsOCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYg
YikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IDc0YzA5ZTA1YWJl
M2IzMGQwNDUwMTdhODFmZTI0MzcwYjZlMWI4YmQuLjAzNWE5MDdkNWY4ZTg1OWI1MjE2MGZkNDkz
MzNiYzJkZDA1MmVkNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXN0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNDEsOCArMzksNyBAQCBjbGFzcyBI
YXNoU2V0IGZpbmFsIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5
cGUgVmFsdWVUeXBlOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlw
ZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwKLSAgICAgICAgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOworICAgIHVzaW5nIEhhc2hU
YWJsZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZh
bHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFs
dWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKIAogcHVibGljOgogICAgIC8qCkBAIC0xNzEsMTAyICsx
NjgsMTAyIEBAIHN0cnVjdCBIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhh
c2hTZXQ8VCwgVSwgViwgVz46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3
YXAob3RoZXIubV9pbXBsKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+
OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmNhcGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0Vt
cHR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRv
cgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRl
cmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFYsIFc+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5k
KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZp
bmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1
cm4gbV9pbXBsLmZpbmQodmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWLCBXPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLmNvbnRhaW5zKHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5k
KGNvbnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wg
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYg
dmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0
ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWLCBXPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAog
ewogICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46
OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWLCBXPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUs
IFY+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNl
dDxULCBVLCBWLCBXPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIG1f
aW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5
cGUmJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKFZh
bHVlVHlwZSYmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVz
dWx0CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRh
YmxlVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFk
YXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUg
YmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wg
Y2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKQEAgLTI3NCw5ICsyNzEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAg
IHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlw
ZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoSXRlcmF0b3JU
eXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRl
cikKQEAgLTI4NCw4ICsyODEsOCBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1v
dmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFu
Z2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBp
ZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Mjk0LDI3ICsyOTEsMjcgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0
ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVt
b3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBW
LCBXPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92
ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQog
ewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFY+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2xlYXIo
KQogewogICAgIG1faW1wbC5jbGVhcigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2Uo
aXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBX
Pjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKIHsKICAgICBpZiAoaXQgPT0gZW5kKCkp
CiAgICAgICAgIHJldHVybiBWYWx1ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1
ZSgpKTsKQEAgLTMyNCw0OCArMzIxLDQ4IEBAIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46
OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5
cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1
dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0
dXJuIHRha2UoYmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRy
SGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1f
aW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9u
cz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
PgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRy
VHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVs
cGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgog
dGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUg
dmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBi
b29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBUYWJsZVRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVl
LCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFp
dHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlw
ZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgViwgVz46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQog
ewogICAgIGlmIChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zODEsOSArMzc4LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgog
dGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlv
bikgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yPT0oY29u
c3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHNp
emUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zOTQsMjIgKzM5MSwyMiBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRv
cj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKQogICAgIHJldHVybiB0
cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
IHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rp
b24pIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvciE9KGNv
bnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+
PiBsaXN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK3ZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCiB7CiAg
ICAgZm9yIChhdXRvJiB2YWx1ZSA6IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBI
YXNoU2V0PFQsIFUsIFY+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2lt
cGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDZkNGIyYzhm
NzJiMmUwMzZjMTYwMDEwYzBhNjI5NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVhYzhkZWFhMzdlNDU3
OThjMjRlMmJjMDc4ZTRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC03OSw0NiArNzksNDggQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlm
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRh
YmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJh
dG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3Jz
KGNvbnN0IEhhc2hUYWJsZVR5cGUqKTsKIAogI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JT
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhh
c2hUYWJsZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAg
IGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4qKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKSB7IH0KIAog
I2VuZGlmCiAKICAgICB0eXBlZGVmIGVudW0geyBIYXNoSXRlbUtub3duR29vZCB9IEhhc2hJdGVt
S25vd25Hb29kVGFnOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9y
PHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3Qg
VmFsdWUqLCBjb25zdCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYg
UmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7Cisg
ICAgICAgIGZyaWVuZCBpdGVyYXRvcjsKIAogICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMo
KQogICAgICAgICB7CkBAIC0yNDMsMTggKzI0NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAgICAgfTsKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJh
dG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFs
dWUsIHN0ZDo6cHRyZGlmZl90LCBWYWx1ZSosIFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBI
YXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9y
OwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRv
cjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWVUeXBlJiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRl
clR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5k
IEhhc2hUYWJsZVR5cGU7CiAKICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlw
ZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kKSA6IG1faXRlcmF0b3Io
dGFibGUsIHBvcywgZW5kKSB7IH0KICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxl
VHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kLCBIYXNoSXRlbUtu
b3duR29vZFRhZyB0YWcpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBlbmQsIHRhZykgeyB9CkBA
IC0zNDcsOCArMzQ5LDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVz
aW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAg
dHlwZWRlZiBUcmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcgKzQxMCw3IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAg
IEhhc2hUYWJsZSgpOwogICAgICAgICB+SGFzaFRhYmxlKCkgCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsgCisgICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKHRoaXMpOyAKICAgICAgICAgICAgIGlmIChtX3RhYmxlKQogICAgICAgICAgICAgICAgIGRl
YWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RF
U1RSVUNUSU9OCkBAIC01NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxF
X0lURVJBVE9SUwotICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAg
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7CkBAIC04NTYsNyArODUzLDcgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBjaGVj
a0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIApAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAg
ICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRl
cmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAg
aWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtMTAxNyw3ICsx
MDE0LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICB7CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0
aGlzKTsKIAogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKQEAg
LTExMTAsMTQgKzExMDcsMTQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJ
bnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKICAg
ICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykK
ICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQpAQCAtMTM3Myw3ICsxMzcwLDcgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpjbGVhcigpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAg
IGlmICghbV90YWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTQwOSw4ICsxNDA2LDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3Rh
YmxlLCBvdGhlci5tX3RhYmxlKTsKIApAQCAtMTQzNCw3ICsxNDMxLDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgLCBtX211dGV4
KG1ha2VVbmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKLSAgICAgICAgb3RoZXIuaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAK
ICAgICAgICAgbV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZSwgbnVsbHB0cik7
CiAKQEAgLTE1MDAsMzAgKzE0OTcsMjkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRl
cmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jaygqbV9tdXRleCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0
OwotICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBu
ZXh0KSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsK
KyAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIG5leHQ7Cisg
ICAgICAgIGZvciAodHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIHAgPSB0
YWJsZS0+bV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+
bV9uZXh0OwotICAgICAgICAgICAgcC0+bV90YWJsZSA9IDA7Ci0gICAgICAgICAgICBwLT5tX25l
eHQgPSAwOwotICAgICAgICAgICAgcC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgICAgICBwLT5t
X3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fbmV4dCA9IG51bGxwdHI7CisgICAg
ICAgICAgICBwLT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBtX2l0
ZXJhdG9ycyA9IDA7CisgICAgICAgIHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51bGxwdHI7CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogdGFi
bGUsCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVU
eXBlKiB0YWJsZSwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAg
ICAgewogICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+bV9wcmV2aW91
cyA9IDA7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBJ
bnNlcnQgaXRlcmF0b3IgYXQgaGVhZCBvZiBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3Jz
LgogICAgICAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKKyAg
ICAgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAg
ICAgQVNTRVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2LDggKzE1MzIsOCBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5
cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9tIGRvdWJs
eS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFibGUpIHsK
QEAgLTE1NTksMTMgKzE1NTUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGl0
LT5tX3RhYmxlID0gMDsKLSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3By
ZXZpb3VzID0gMDsKKyAgICAgICAgaXQtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICBpdC0+
bV9uZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAg
IH0KIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAorICAgIHN0cnVjdCBI
YXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1c2luZyBUYWJsZVR5cGUg
PSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVj
dCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0
ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0
IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYzI2MWFiZjRmOGJkMTEwNTU0YjM0MGVmYzRhM2FmYzJkNzI2ZWYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCkBAIC0w
LDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxW
YWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSb2Jpbkhvb2RIYXNoTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oIGIvU291cmNlL1dURi93
dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNDIwMGUwOTcxYzI3YTg1NWIxZDlm
NTc0MDdhODBlOTQyZWZhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jp
bkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgUm9iaW5Ib29kSGFzaFNldCA9
IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgUm9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Um9iaW5Ib29kSGFz
aFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIv
U291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJiNTkzYjc4
MzRmMDhiOTA0ZWMzZDQ3MmZlMTU4OTdmNTE3YjFmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsNzUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJv
YmluSG9vZEhhc2hUYWJsZTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBs
aW1pdGF0aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBp
cyBub3QgYSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFz
aCBtdWNoIG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNh
Y2hlIGNvbXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90
IGNhY2hlIGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1l
YW5zIHRoYXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkg
KGUuZy4gV1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJ
ZiB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2Fu
IHRyeSBSb2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0
IHdlIGNhbiB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlz
IHN1aXRhYmxlIGZvciBBdG9taWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlz
IFJvYmluSG9vZC1IYXNoaW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBp
biBbMiwzXS4KKy8vCisvLyBbMV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJs
ci5jb20vcG9zdC8xNTM1NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgor
Ly8gWzJdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFz
aGluZy8KKy8vIFszXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1o
b29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2NsYXNzIFJv
YmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0
czsKKyAgICB0eXBlZGVmIEtleSBLZXlUeXBlOworICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBl
OworICAgIHR5cGVkZWYgSWRlbnRpdHlIYXNoVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1
bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUFk
ZFJlc3VsdDxpdGVyYXRvcj4gQWRkUmVzdWx0OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJh
aXRzOjpoYXNJc1JlbGVhc2VkV2Vha1ZhbHVlRnVuY3Rpb24pOworCisgICAgUm9iaW5Ib29kSGFz
aFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJvYmluSG9vZEhhc2hUYWJsZSgpCisgICAgewor
ICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgICAgICBpZiAobV90YWJsZSkK
KyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAg
fQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOwor
ICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFibGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFi
bGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmKTsKKworICAgIFJvYmluSG9v
ZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxl
JiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFz
aCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4gdGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBh
cyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRv
bid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0
cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3
b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgp
ID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJsZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQor
ICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5k
KCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0
YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9yIHJhbmRvbSgpCisgICAgeworICAgICAgICBp
ZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxl
ICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50
MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQo
YnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZi
dWNrZXQpOworICAgICAgICB9OworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJv
YmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHko
KSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodW5zaWduZWQga2V5Q291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOwor
ICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVt
VGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25l
ZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRh
YmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5l
d1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAg
ICBtX2tleUNvdW50ID0gMDsKKyAgICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0
b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlw
ZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9y
OjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwg
dmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29t
cGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9m
IHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUg
dGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRy
YT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAg
IGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihr
ZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0
dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNv
bnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYp
IGNvbnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVt
b3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hl
Y2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVj
ayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wg
aXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFp
dHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxv
b2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25z
dCBUJik7CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyAg
ICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7
IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3Vu
dCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICog
bWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWdu
ZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFi
bGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwg
Ym9vbD4gTG9va3VwVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRh
aW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlz
dGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7
CisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVt
b3ZlKFZhbHVlVHlwZSopOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRl
QmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQo
KSBjb25zdCB7IHJldHVybiBzaG91bGRFeHBhbmQoa2V5Q291bnQoKSwgdGFibGVTaXplKCkpOyB9
CisgICAgYm9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkg
KiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgKiAyOyB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBj
b25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxl
U2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOyB9CisgICAgVmFsdWVUeXBlKiBl
eHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOworICAgIHZvaWQgc2hyaW5rKCkgeyBy
ZWhhc2godGFibGVTaXplKCkgLyAyLCBudWxscHRyKTsgfQorICAgIHZvaWQgc2hyaW5rVG9CZXN0
U2l6ZSgpOworCisgICAgVmFsdWVUeXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBW
YWx1ZVR5cGUqIGVudHJ5KTsKKyAgICBWYWx1ZVR5cGUqIHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsK
KworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZXNpcmVkSW5kZXgodW5zaWduZWQgaGFz
aCwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCAmIHNpemVN
YXNrOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5j
ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQg
c2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4gKGluZGV4ICsgc2l6ZSAtIGRlc2lyZWRJ
bmRleChoYXNoLCBzaXplTWFzaykpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaXRlcmF0b3Ig
bWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3Ms
IG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJ
dGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhp
cywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgaXRlcmF0b3IgbWFrZUtub3du
R29vZEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3Ms
IG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgp
LCBIYXNoSXRlbUtub3duR29vZCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKworICAgIC8vIExvYWQtZmFjdG9yIGlzIDkwJS4KKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSA5OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gMTA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKKworICAgIHVuc2lnbmVkIHRhYmxl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5zaWduZWQgdGFibGVT
aXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVuc2lnbmVk
IGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorCisgICAgVmFsdWVUeXBl
KiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRF
UkFUT1JTCitwdWJsaWM6CisgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQg
YmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9p
dGVyYXRvcnMgeyBudWxscHRyIH07CisgICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNo
VGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9tdXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2Vu
ZGlmCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNoZWNrS2V5KGNvbnN0IFQm
KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBr
ZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xh
dG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojppbmxp
bmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFz
aFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAg
ICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNp
emUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhh
c2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAg
ICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9m
IHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6
OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHBy
b2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhh
c2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBl
bnRyeTsKKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hU
YWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRl
IGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lO
TElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEp
IC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIGlmICghbV90YWJsZSkKKyAgICAg
ICAgZXhwYW5kKG51bGxwdHIpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNp
Z25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2Ug
PSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVu
dHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9
IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2gg
PSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGVu
dHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9i
ZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYg
KGRpc3RhbmNlID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQg
c3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJp
YW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRy
eSk7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAg
IG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlz
dGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
ICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYg
KHNob3VsZEV4cGFuZCgpKQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdCht
YWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK0FMV0FZU19J
TkxJTkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om1haW50YWluUHJvYmVEaXN0YW5jZShWYWx1
ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGRpc3RhbmNlLCB1bnNpZ25l
ZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZv
ciBDKysgQURMLgorICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICArK2Rp
c3RhbmNlOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1f
dGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAg
ICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBl
bnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFj
dCgqZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFu
Y2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOwor
ICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOwor
ICAgIH0KK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjphZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0
Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKHRoaXMpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBhbmQobnVs
bHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNT
RVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBI
YXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBW
YWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRy
eSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkg
eworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50
aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVz
aXJlZCA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOwor
ICAgICAgICBpZiAoZGlzdGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAg
ICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0
YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdU
Rk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVu
dHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhh
c2gpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdF
bnRyeSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXplLCBzaXplTWFzayk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkg
JiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50
ICs9IDE7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAgICAgIGVudHJ5ID0gZXhwYW5k
KGVudHJ5KTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBy
ZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWluc2VydChWYWx1ZVR5
cGUmJiB2YWx1ZSkgLT4gVmFsdWVUeXBlKgoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9y
IEMrKyBBREwuCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBJZGVudGl0
eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25l
ZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkp
KSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1v
dmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZyb21E
ZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7
CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAgICAg
ICAgIHN3YXAoKmVudHJ5LCB2YWx1ZSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFu
Y2UoV1RGTW92ZSh2YWx1ZSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXplLCBzaXpl
TWFzayk7CisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAg
fQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmZpbmQoY29uc3QgVCYga2V5KSAtPiBpdGVy
YXRvcgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAg
VmFsdWVUeXBlKiBlbnRyeSA9IGxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAo
IWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29v
ZEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0
IFQmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisg
ICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0
PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7
CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1h
a2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK3RlbXBsYXRlIDx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2Jvb2wgUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+Ojpjb250YWlucyhjb25zdCBUJiBrZXkpIGNvbnN0Cit7CisgICAgaWYgKCFtX3RhYmxlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxSb2Jpbkhvb2RI
YXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50
cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CisgICAgcmVtb3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CisgICAgcmVtb3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6cmVtb3ZlKFZhbHVlVHlwZSogcG9zKQoreworICAgIHBvcy0+flZhbHVlVHlwZSgpOwor
ICAgIGluaXRpYWxpemVCdWNrZXQoKnBvcyk7CisgICAgbV9rZXlDb3VudCAtPSAxOworCisgICAg
dW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFi
bGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGluZGV4UHJldmlvdXMgPSBwb3MgLSBtX3RhYmxl
OworICAgIHVuc2lnbmVkIGluZGV4ID0gKGluZGV4UHJldmlvdXMgKyAxKSAmIHNpemVNYXNrOwor
CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWUqIHByZXZpb3VzRW50cnkgPSBtX3RhYmxl
ICsgaW5kZXhQcmV2aW91czsKKyAgICAgICAgVmFsdWUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4
OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0VudHJ5KSk7CisgICAg
ICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAg
IHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlL
ZXkpOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwg
c2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZhbHVlVHJhaXRzOjph
c3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkpOworICAgICAgICBl
bnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVja2V0KCplbnRyeSk7CisK
KyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAg
ICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShpdGVyYXRvciBp
dCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92
ZUFuZEludmFsaWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9z
aXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVt
b3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAo
aXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVX
aXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9p
dGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0
b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1v
dmUoZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxv
Y2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAvLyB3b3VsZCB1
c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlv
bnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAor
ICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhh
c2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsK
KworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBl
Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNpemUgKiBzaXpl
b2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUo
VmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAg
SGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZXhwYW5kKFZhbHVlVHlwZSogZW50
cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAgIHVuc2lnbmVk
IG9sZFNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAgICAgIG5ld1Np
emUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZSBpZiAobXVzdFJlaGFz
aEluUGxhY2UoKSkKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemU7CisgICAgZWxzZQorICAgICAg
ICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisKKyAgICByZXR1cm4gcmVoYXNoKG5ld1NpemUsIGVu
dHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KK2NvbnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46
OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQoreworICAgIHVuc2lnbmVk
IGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5Q291bnQpOworCisg
ICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJl
c3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFu
c2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlDb3VudCwgdW5zaWduZWQg
dGFibGVTaXplKQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUgcmF0aW9uYWxlIGJlaGlu
ZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3IuCisgICAgICAgIC8vIFdp
dGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlz
IDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxmLXdheSBiZXR3ZWVuIDEx
LzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAvLyB0byBhdm9pZCBiZWlu
ZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlvIGNsb3NlIHRvIDExLzI0
LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMgWzkvMjQsIDE1
LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRGYWN0b3I7CisgICAgICAg
IGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAgICAgICBkb3VibGUgYXZl
cmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0aW8pIC8gMjsKKyAgICAg
ICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbyA9IChhdmVyYWdl
TG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJldHVybiBrZXlDb3VudCA+
PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CisgICAg
fTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgaWYgKGFib3Zl
VGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJs
ZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAgdW5zaWduZWQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZXR1cm4gc3Rk
OjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lk
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5zaWduZWQg
bWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZWhh
c2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291
bnQoKSkpLCBudWxscHRyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpy
ZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5
cGUqCit7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CisK
KyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBWYWx1ZVR5cGUq
IG9sZFRhYmxlID0gbV90YWJsZTsKKworICAgIHVuc2lnbmVkIG9sZEtleUNvdW50ID0ga2V5Q291
bnQoKTsKKyAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOworICAgIG1f
dGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvbGRLZXlDb3VudDsK
KworICAgIFZhbHVlKiBuZXdFbnRyeSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRFbnRyeSA9IG9s
ZFRhYmxlW2ldOworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgIT0gZW50cnkpOworICAgICAg
ICAgICAgb2xkRW50cnkuflZhbHVlVHlwZSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZSogcmVpbnNlcnRlZEVudHJ5ID0gcmVpbnNlcnQoV1RGTW92
ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAgICAgIGlm
IChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbmV3RW50cnkpOworICAgICAgICAgICAgbmV3RW50cnkgPSByZWluc2VydGVkRW50cnk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1h
bGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gbmV3RW50cnk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQoreworICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBkZWFsbG9jYXRlVGFibGUoc3RkOjpleGNoYW5nZShtX3RhYmxlLCBudWxscHRyKSwgdGFi
bGVTaXplKCkpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJv
YmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCisgICAgOiBtX3RhYmxlKGFsbG9jYXRlVGFibGUob3Ro
ZXIubV90YWJsZVNpemUpKQorICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tleUNvdW50KQorICAg
ICwgbV90YWJsZVNpemUob3RoZXIubV90YWJsZVNpemUpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgb3RoZXIubV90YWJsZVNpemU7ICsraW5kZXgpIHsKKyAgICAgICAg
VmFsdWVUeXBlJiBvdGhlckVudHJ5ID0gb3RoZXIubV90YWJsZVtpbmRleF07CisgICAgICAgIFZh
bHVlVHlwZSYgZW50cnkgPSBtX3RhYmxlW2luZGV4XTsKKyAgICAgICAgbmV3ICgmZW50cnkpIFZh
bHVlVHlwZShvdGhlckVudHJ5KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cit2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjo6c3dhcChSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIHVzaW5nIHN0
ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsK
KyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBzd2FwKG1fdGFibGUsIG90
aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVyLm1fdGFibGVTaXplKTsK
KyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUm
IG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxl
IHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OlJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhv
b2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7
CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsK
KyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZVNpemUsIDApOwor
ICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291bnQsIDApOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRvcj0oUm9iaW5I
b29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jp
bkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUob3RoZXIpOworICAgIHN3YXAodGVtcCk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3QgUm9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNw
cAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcxMTdmNWZhLi5hMThiM2Ni
ZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGVM
b2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxl
SW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxl
SW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwogCiBzdGF0aWMgQUxXQVlT
X0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0
NTExM2E1N2UuLmE5ODM1MTRjNWM3Yzg2NjcxMzMzNTBmMDgwZTkxZTI2NDYwOTk4ZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAtMjIsOCArMjIsOCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTMzLDEyICszMywxNCBAQCBj
bGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBSb2Jp
bkhvb2RIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47CisKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAgSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5n
SW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KKyAgICBTdHJpbmdUYWJsZUltcGwm
IHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCiBwcml2YXRlOgotICAgIEhhc2hTZXQ8UGFj
a2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOworICAgIFN0cmluZ1RhYmxlSW1wbCBtX3RhYmxl
OwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424617</attachid>
            <date>2021-03-29 22:41:43 -0700</date>
            <delta_ts>2021-03-30 01:17:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210329224142.patch</filename>
            <type>text/plain</type>
            <size>110539</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5jYjcyODE5ODU1ZTNiMzBj
NDRhYTMyZjA1ZWEwNmU4ZWY2YWZmZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLmI5MDAxZDgyODIwMWM0MmE3MzEzOGE3YmE4M2E0NDNhMzNkNzJhNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAyIEBACisyMDIxLTAzLTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFz
aFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5k
b20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpkZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6bG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFp
blByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hh
c2hDb2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAg
KFdURjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Zmlu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJ
bnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxl
U2l6ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFi
bGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6
On5BdG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5o
OgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKwogMjAyMS0wMy0yNyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIHd0Zi9WZWN0b3IuaDox
Mjc2Ojg4OiBydW50aW1lIGVycm9yOiByZWZlcmVuY2UgYmluZGluZyB0byBudWxsIHBvaW50ZXIg
b2YgdHlwZSAnY29uc3QgV2ViQ29yZTo6U3R5bGU6OlJ1bGVGZWF0dXJlJwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCA3ZGM4YTkyM2Y0MDg5OGQ5NTFlZDI5MGE5YzU3NTU3ZTA5NTdiNTk0Li43Mjc3
NzJlYTFkZGQxOTg4NDliOTEyNDA5M2FmZDNjMzk0OTM0ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cApAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxz
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIE9TKFdJTkRPV1Mp
CiAjaW5jbHVkZSA8ZGlyZWN0Lmg+CkBAIC0xMjg0LDExICsxMjg1LDc1IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsCiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblByaW50U3Rk
T3V0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0b3BXYXRjaC5zdGFy
dCgpOworICAgIHsKKyAgICAgICAgUm9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHN0cmluZ1RhYmxl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmlu
Zzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUu
c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1v
dmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJp
bmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6
Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xu
KHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7CisgICAg
ZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICByZXR1cm4g
cHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3Rkb3V0KTsKIH0KIAogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJpbnRTdGRFcnIsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CisjaWYgMAorICAgIFN0
b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CisgICAgeworICAgICAg
ICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6
bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6
ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAg
ICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9Cisg
ICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKQorICAg
ICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAw
eDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmlu
Zzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6
bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAg
ICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICB9
CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4oc3RvcFdhdGNoLmdldEVsYXBz
ZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVybmFsKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBzdGRlcnIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAyNmI0NWU1NTNiMDY3ZTI0MDMyN2NjODg2N2VjN2M4YzgxNDY3ZTVmLi41
ZjMwYzlhNTYxMzdiM2MzMWQzMGRiYWI1MzE5MzllYjNjODk4YTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcxNyw3ICs3MTcsOSBAQAogCQlFMzExRkIx
NjFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGhyZWFkR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTMxNDlBM0EyMjhCRENBQjAwQkZBNkM3IC8qIENvbmN1cnJlbnRCdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMUJERTI4MjJFOTEzQ0MwMDI5QjEwNSAvKiBNYWNo
Vk1TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFZNU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBS
b2Jpbkhvb2RIYXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFRhYmxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAv
KiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybVJlZ2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzI1NjEx
MjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
b2Jpbkhvb2RIYXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkEyMDcz
MjNDNTkwMkQwMDM0QTA5MiAvKiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYWtlZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzM5QzE2
MzI0NEI0RTg3MDAzNTlEQTkgLyogRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Q1Rjg3
MUZCRUQ2NjcwMEJGNjI1RSAvKiBSZWN1cnNhYmxlTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2FibGVMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTczOCw2ICs3NDAsNyBAQAogCQlFM0EzMkJDMzFGQzgzMEUyMDA3RDdFNzYgLyog
SlNWYWx1ZU1hbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhbHVl
TWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQjhFNDFDMjRFN0NFOTIw
MDM2NTVEOCAvKiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCRTA5QTYyNEE1ODU0NTAwOURGMkI0IC8qIElDVUhl
bHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSUNVSGVscGVycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RI
YXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNDRjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2lu
dGVyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFBvaW50
ZXJUdXBsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0UxNTgyNTFFQURBNTND
MDA0QTA3OUQgLyogU3lzdGVtRnJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTeXN0ZW1GcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTY0RjBCMjI4
MTM0MjgwMDFFNTVCNCAvKiBOb25tb3ZhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vbm1vdmFibGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTEsNiArMTIxNCw5IEBACiAJCQkJ
QThBNDczMDMxNTFBODI1QjAwNDEyM0ZGIC8qIFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMy
NUNDODAwMDlERDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1
QjAwNDEyM0ZGIC8qIFJldGFpblB0ci5oICovLAorCQkJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2
OCAvKiBSb2Jpbkhvb2RIYXNoTWFwLmggKi8sCisJCQkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1
IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLywKKwkJCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMg
LyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8sCiAJCQkJMkNERUQwRjExODExNUM4NTAwNERCQTcw
IC8qIFJ1bkxvb3AuY3BwICovLAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5M
b29wLmggKi8sCiAJCQkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRo
bWV0aWMuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYjM1Yzc1MmQyYzAwZTFhNTIyZDE1
NDJkYTdlYjY1YjZkMmZjOTE3OC4uZTFmYTU0NWE0MDE3OGVhMzIzNzA4OTM5NjNiYjRkYThlZjU4
OGUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTIxNCw2ICsyMTQsOSBAQCBzZXQoV1RGX1BV
QkxJQ19IRUFERVJTCiAgICAgUmVmUHRyLmgKICAgICBSZXNvdXJjZVVzYWdlLmgKICAgICBSZXRh
aW5QdHIuaAorICAgIFJvYmluSG9vZEhhc2hNYXAuaAorICAgIFJvYmluSG9vZEhhc2hTZXQuaAor
ICAgIFJvYmluSG9vZEhhc2hUYWJsZS5oCiAgICAgUnVuTG9vcC5oCiAgICAgU0hBMS5oCiAgICAg
U2F0dXJhdGVkQXJpdGhtZXRpYy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggNDE5OGU4Njg4OTVjN2NkZDE0NTU3
MGEyMTkxMmQ2NWFjNjM3ODljNC4uM2Q5ZWI3OGIzNThlNzM1YWNiYTUwYTQwNjUzMTg3NjhhNzMy
ZjVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaApAQCAtOTMsOSArOTMsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0
cnVjdCBFbnVtVHJhaXRzOwogdGVtcGxhdGU8dHlwZW5hbWUgRSwgRS4uLj4gc3RydWN0IEVudW1W
YWx1ZXM7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7CiAKK3N0cnVjdCBI
YXNoVGFibGVUcmFpdHM7CitzdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+IHN0cnVjdCBLZXlWYWx1ZVBhaXJU
cmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVB
cmc+IHN0cnVjdCBLZXlWYWx1ZVBhaXI7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPiBjbGFzcyBIYXNoVGFibGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZT4sIHR5cGVuYW1l
ID0gSGFzaFRyYWl0czxWYWx1ZT4+IGNsYXNzIEhhc2hDb3VudGVkU2V0OwotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8
S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRy
YWl0czxNYXBwZWRBcmc+PiBjbGFzcyBIYXNoTWFwOwotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFp
dHM8VmFsdWVBcmc+PiBjbGFzcyBIYXNoU2V0OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5h
bWUgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFzaE1hcDsKK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5h
bWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNs
YXNzIEhhc2hTZXQ7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5o
IGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCmluZGV4IGJmNmI4YmFjNGVkYjJkZmExZjZjYzAw
ZjNiZTFmNjQxYTExODViY2YuLjg5MDFiNWYzZjI3OWI4YmUwMzY1MGM3YzJhZGViNjFiMGFlZmE5
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoTWFwLmgKQEAgLTMxLDcgKzMxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1l
IFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4K
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywg
dHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEhh
c2hNYXAgZmluYWwgewogCiAgICAgdXNpbmcgSGFzaEZ1bmN0aW9ucyA9IEhhc2hBcmc7CiAKLSAg
ICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5
cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0
aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIEhhc2hUYWJs
ZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPEtleVR5
cGUsIEtleVZhbHVlUGFpclR5cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBh
aXJUeXBlPiwgSGFzaEZ1bmN0aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+Owog
CiAgICAgY2xhc3MgSGFzaE1hcEtleXNQcm94eTsKICAgICBjbGFzcyBIYXNoTWFwVmFsdWVzUHJv
eHk7CkBAIC0yMzIsOTEgKzIzMiw4OSBAQCBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVy
IHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpzd2FwKEhhc2hNYXAmIG90aGVy
KQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBh
Y2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNhcGFjaXR5KCkgY29uc3QKIHsgCiAgICAgcmV0dXJu
IG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzRW1wdHkoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4oKSAtPiBpdGVyYXRvcgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmJlZ2luKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQo
KSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1f
aW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmJlZ2luKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigp
IGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5k
KCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSBjb25zdCAtPiBjb25zdF9p
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtl
eSkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5
KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5
KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0
IEtleVR5cGUmIGtleSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKGtleSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWly
VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25z
dF9pdGVyYXRvciAKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFs
dWUpIGNvbnN0CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNv
bnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWly
VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVFlQRT4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7
CiAgICAgYXV0byogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRl
bXBsYXRlIGxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRz
LCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzI0LDkgKzMy
Miw5IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25z
dCAtPiBNYXBwZWRQZWVrVHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppbmxp
bmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAg
YXV0byogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRl
IGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRz
LCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzM0LDE2ICsz
MzIsMTYgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXAKICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNv
bnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgY29udGFpbnM8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0
cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGlu
ZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQK
IHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKHN0ZDo6Zm9yd2FyZDxLPihrZXkp
LCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7
CkBAIC0zNTMsOTEgKzM1MSw5MSBAQCBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lUwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lQWRk
KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4g
QWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcFRyYW5z
bGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+
KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgRj4KLUFMV0FZU19JTkxJTkUgYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVz
dWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5l
RW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
bV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwRW5zdXJlVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJU
cmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJk
PEY+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1h
cHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChj
b25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBpbmxpbmVTZXQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNl
dChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxL
ZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcs
IFRhYmxlVHJhaXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJl
c3VsdAogewogICAgIHJldHVybiBpbmxpbmVTZXQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8
VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxL
ZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcs
IFRhYmxlVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaE1hcFRy
YW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6
OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFk
ZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJk
PFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkg
LT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLZXlUeXBl
JiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRk
KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0
QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZh
c3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0
dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0
b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUo
Y29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAg
ICAgcmV0dXJuIGlubGluZUVuc3VyZShrZXksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYgZnVu
Y3RvcikgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIGlubGluZUVuc3VyZShzdGQ6OmZvcndhcmQ8S2V5VHlwZT4oa2V5KSwgc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KICAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4K
LWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNvbnN0
IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3Qg
S2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIHJldHVybiBnZXQ8
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
PgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6
aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK0FMV0FZU19JTkxJTkUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OmlubGluZUdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSog
ZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGlu
ZUxvb2t1cDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogICAgIGlmICghZW50cnkpCkBA
IC00NDUsOCArNDQzLDggQEAgQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGsKICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTUsMjcgKzQ1MywyNyBAQCBpbmxpbmUgYm9v
bCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6cmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJuIG1f
aW1wbC5yZW1vdmVJZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0
IEtleVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAg
IHJldHVybiByZW1vdmUoZmluZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lk
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjbGVhcigpCiB7CiAgICAg
bV9pbXBsLmNsZWFyKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4g
TWFwcGVkVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK2F1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+Ojp0YWtlKGNvbnN0IEtleVR5cGUm
IGtleSkgLT4gTWFwcGVkVGFrZVR5cGUKIHsKICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsK
ICAgICBpZiAoaXQgPT0gZW5kKCkpCkBAIC00ODUsMzAgKzQ4MywzMCBAQCBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1h
cHBlZFRha2VUeQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRl
cmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5k
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWly
VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1
ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9p
dGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1h
cFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnModHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0
aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVl
a1R5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppbmxp
bmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBl
Pjo6dHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0
b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKICAgICBpZiAoIWVu
dHJ5KQpAQCAtNTE2LDIzICs1MTQsMjMgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZQogICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBl
IGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFs
dWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBl
Pjo6dHlwZQogewogICAgIHJldHVybiBpbmxpbmVHZXQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxL
Pjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQogewog
ICAgIHJldHVybiByZW1vdmUoZmluZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5
cGUKIHsKICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5kKCkp
CkBAIC01NDIsMTQgKzU0MCwxNCBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2hlY2tDb25zaXN0ZW5jeSgp
IGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNWYWxpZEtleShj
b25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wg
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkp
CiB7CiAgICAgaWYgKEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUoa2V5KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNTY1LDEzICs1NjMsMTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+Citib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICBp
ZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHR5
cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGEuZW5kKCk7CiAgICAgY29uc3RfaXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwpA
QCAtNTg0LDggKzU4Miw4IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggNzRjMDllMDVh
YmUzYjMwZDA0NTAxN2E4MWZlMjQzNzBiNmUxYjhiZC4uMDM1YTkwN2Q1ZjhlODU5YjUyMTYwZmQ0
OTMzM2JjMmRkMDUyZWQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaApAQCAtMjcsOSArMjcsNyBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0Fy
ZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CkBAIC00MSw4ICszOSw3IEBAIGNsYXNz
IEhhc2hTZXQgZmluYWwgewogICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRyYWl0
VHlwZSBWYWx1ZVR5cGU7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWVU
eXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLAotICAgICAgICBIYXNoRnVuY3Rpb25z
LCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+IEhhc2hUYWJsZVR5cGU7CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8
VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBW
YWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+OwogCiBwdWJsaWM6CiAgICAgLyoKQEAgLTE3MSwxMDIg
KzE2OCwxMDIgQEAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnN3YXAoSGFzaFNldCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQg
SGFzaFNldDxULCBVLCBWLCBXPjo6c3dhcChIYXNoU2V0JiBvdGhlcikKIHsKICAgICBtX2ltcGwu
c3dhcChvdGhlci5tX2ltcGwpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6c2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwg
Vj46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBX
Pjo6Y2FwYWNpdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlz
RW1wdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJh
dG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YmVnaW4oKSBjb25zdCAtPiBp
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsgCiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFY+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwg
VSwgViwgVz46OmVuZCgpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5l
bmQoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6
ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJl
dHVybiBtX2ltcGwuZmluZCh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6Y29udGFp
bnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFYsIFc+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAogewogICAg
IHJldHVybiBtX2ltcGwuY29udGFpbnModmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgoraW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZp
bmQoY29uc3QgVCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+
KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgog
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9v
bCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBU
JiB2YWx1ZSkgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgVGFibGVUcmFpdHM+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRh
cHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFk
ZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
Pjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewog
ICAgIHJldHVybiBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwg
VSwgVj46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNo
U2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAg
bV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKFZhbHVl
VHlwZSYmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZvaWQo
VmFsdWVUeXBlJiYgdmFsdWUpCiB7CiAgICAgbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxW
YWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRS
ZXN1bHQKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
VGFibGVUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJl
dHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hTZXRUcmFuc2xhdG9y
QWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlLCB2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3JUeXBlPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjc0LDkgKzI3MSw5IEBAIGlubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JU
eXBlIGVuZCkKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShJdGVyYXRv
clR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytp
dGVyKQpAQCAtMjg0LDggKzI4MSw4IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJl
bW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNo
YW5nZWQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAg
IGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yOTQsMjcgKzI5MSwyNyBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUo
aXRlcmF0b3IgaXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpy
ZW1vdmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpyZW1vdmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVt
b3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSBi
b29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5yZW1vdmVJZihmdW5jdG9yKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgVj46OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjbGVh
cigpCiB7CiAgICAgbV9pbXBsLmNsZWFyKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFr
ZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYs
IFc+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogewogICAgIGlmIChpdCA9PSBlbmQo
KSkKICAgICAgICAgcmV0dXJuIFZhbHVlVHJhaXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0eVZh
bHVlKCkpOwpAQCAtMzI0LDQ4ICszMjEsNDggQEAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
Pjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1
dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtl
VHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKIHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxp
bmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
YXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKIHsKICAgICBy
ZXR1cm4gdGFrZShiZWdpbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+
OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4g
bV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rp
b25zPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQ
dHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25z
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlw
ZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIFRhYmxlVHJhaXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRy
VHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFs
dWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQor
aW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRy
YWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0
eXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
CiB7CiAgICAgaWYgKFZhbHVlVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTM4MSw5ICszNzgsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0
aW9uKSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3I9PShj
b25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICBpZiAo
c2l6ZSgpICE9IG90aGVyQ29sbGVjdGlvbi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTM5NCwyMiArMzkxLDIyIEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJh
dG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVj
dGlvbikgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yIT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXJDb2xsZWN0aW9uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLXZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkKHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlw
ZT4+IGxpc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgordm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoc3RkOjppbml0aWFsaXpl
cl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKIHsK
ICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbGlzdCkKICAgICAgICAgYWRkKHZhbHVlKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lk
IEhhc2hTZXQ8VCwgVSwgVj46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1f
aW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKaW5kZXggNmQ0YjJj
OGY3MmIyZTAzNmMxNjAwMTBjMGE2Mjk1ODdjNWVkZjBhOC4uZDM5OTc5YTQxZWFjOGRlYWEzN2U0
NTc5OGMyNGUyYmMwNzhlNGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTc5LDQ2ICs3OSw0OCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAjZW5k
aWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+Ci0gICAgY2xhc3MgSGFzaFRhYmxlOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3Qg
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRl
cmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRv
cnMoY29uc3QgSGFzaFRhYmxlVHlwZSopOwogCiAjaWYgIUNIRUNLX0hBU0hUQUJMRV9JVEVSQVRP
UlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3Qg
SGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiopIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4K
KyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlwZSopIHsgfQog
CiAjZW5kaWYKIAogICAgIHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0
ZW1Lbm93bkdvb2RUYWc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0
b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25z
dCBWYWx1ZSosIGNvbnN0IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBl
OwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVz
aW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAg
dHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBl
JiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRl
clR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5k
IGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsK
KyAgICAgICAgZnJpZW5kIGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0
cygpCiAgICAgICAgIHsKQEAgLTI0MywxOCArMjQ1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRl
cmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBW
YWx1ZSwgc3RkOjpwdHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
IEhhc2hUYWJsZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0
b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRv
cjsKKyAgICAgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJh
dG9yOwogICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBW
YWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2lu
dGVyVHlwZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmll
bmQgSGFzaFRhYmxlVHlwZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVU
eXBlKiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRv
cih0YWJsZSwgcG9zLCBlbmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFi
bGVUeXBlKiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVt
S25vd25Hb29kVGFnIHRhZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0K
QEAgLTM0Nyw4ICszNDksOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAg
dXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlw
ZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC00MDcsNyArNDEwLDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgSGFzaFRhYmxlKCk7CiAgICAgICAgIH5IYXNoVGFibGUoKSAKICAgICAgICAgewotICAgICAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOyAKKyAgICAgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7IAogICAgICAgICAgICAgaWYgKG1fdGFibGUpCiAgICAgICAgICAgICAgICAg
ZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUpOwogI2lmIENIRUNLX0hBU0hUQUJMRV9VU0VfQUZURVJf
REVTVFJVQ1RJT04KQEAgLTU1OSwxMiArNTYyLDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQogI2VuZGlmCiAKLSNpZiBDSEVDS19IQVNIVEFC
TEVfSVRFUkFUT1JTCi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotI2Vsc2UK
LSAgICAgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQotI2VuZGlmCi0K
ICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIHNtYWxsIHRhYmxlIGlzIDc1JS4KICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFi
bGVTaXplUG9saWN5OjpzbWFsbE1heExvYWROdW1lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9s
aWN5OjpzbWFsbE1heExvYWREZW5vbWluYXRvcjsKQEAgLTg1Niw3ICs4NTMsNyBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIGNo
ZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogCkBAIC05MzIsNyArOTI5LDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAg
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAg
ICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQobnVsbHB0cik7CkBAIC0xMDE3LDcg
KzEwMTQsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFi
bGUpOwogICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KHRoaXMpOwogCiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZCgpOwpA
QCAtMTExMCwxNCArMTEwNywxNCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFu
ZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQog
ICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKHRoaXMpOwogICAgICAgICByZW1vdmUocG9zKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9z
KQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOwogICAgICAgICByZW1vdmUocG9zKTsKICAgICB9CkBAIC0xMzczLDcgKzEzNzAsNyBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNsZWFyKCkKICAgICB7Ci0gICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAg
ICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDA5LDggKzE0MDYs
OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnN3YXAoSGFzaFRhYmxlJiBvdGhlcikKICAg
ICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSAgICAgICAgb3RoZXIuaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAKICAgICAgICAgc3RkOjpzd2FwKG1f
dGFibGUsIG90aGVyLm1fdGFibGUpOwogCkBAIC0xNDM0LDcgKzE0MzEsNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAsIG1fbXV0
ZXgobWFrZVVuaXF1ZTxMb2NrPigpKQogI2VuZGlmCiAgICAgewotICAgICAgICBvdGhlci5pbnZh
bGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsK
IAogICAgICAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRy
KTsKIApAQCAtMTUwMCwzMCArMTQ5NywyOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJ
dGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlwZSogdGFibGUpCiAgICAgewotICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKCptX211dGV4KTsKLSAgICAgICAgY29uc3RfaXRlcmF0b3IqIG5l
eHQ7Ci0gICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IqIHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9
IG5leHQpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgp
OworICAgICAgICB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciogbmV4dDsK
KyAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciogcCA9
IHRhYmxlLT5tX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBw
LT5tX25leHQ7Ci0gICAgICAgICAgICBwLT5tX3RhYmxlID0gMDsKLSAgICAgICAgICAgIHAtPm1f
bmV4dCA9IDA7Ci0gICAgICAgICAgICBwLT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAgICAgIHAt
Pm1fdGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgcC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIG1f
aXRlcmF0b3JzID0gMDsKKyAgICAgICAgdGFibGUtPm1faXRlcmF0b3JzID0gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0
YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqIHRhYmxlLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkK
ICAgICB7CiAgICAgICAgIGl0LT5tX3RhYmxlID0gdGFibGU7Ci0gICAgICAgIGl0LT5tX3ByZXZp
b3VzID0gMDsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogCiAgICAgICAgIC8v
IEluc2VydCBpdGVyYXRvciBhdCBoZWFkIG9mIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRv
cnMuCiAgICAgICAgIGlmICghdGFibGUpIHsKLSAgICAgICAgICAgIGl0LT5tX25leHQgPSAwOwor
ICAgICAgICAgICAgaXQtPm1fbmV4dCA9IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7CiAgICAgICAg
ICAgICBBU1NFUlQodGFibGUtPm1faXRlcmF0b3JzICE9IGl0KTsKQEAgLTE1MzYsOCArMTUzMiw4
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
VHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAgICAgLy8gRGVsZXRlIGl0ZXJhdG9yIGZyb20gZG91
Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4KICAgICAgICAgaWYgKCFpdC0+bV90YWJsZSkg
ewpAQCAtMTU1OSwxMyArMTU1NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
aXQtPm1fdGFibGUgPSAwOwotICAgICAgICBpdC0+bV9uZXh0ID0gMDsKLSAgICAgICAgaXQtPm1f
cHJldmlvdXMgPSAwOworICAgICAgICBpdC0+bV90YWJsZSA9IG51bGxwdHI7CisgICAgICAgIGl0
LT5tX25leHQgPSBudWxscHRyOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAg
ICAgfQogCiAjZW5kaWYgLy8gQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogCisgICAgc3RydWN0
IEhhc2hUYWJsZVRyYWl0cyB7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgICAgIHVzaW5nIFRhYmxlVHlw
ZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjsKKyAgICB9OworCiAgICAgLy8gaXRlcmF0b3IgYWRhcHRlcnMKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3Ry
dWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8
c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWVUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgY29u
c3QgVmFsdWVUeXBlKiwgY29uc3QgVmFsdWVUeXBlJj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1h
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRjMjYxYWJmNGY4YmQxMTA1NTRiMzQwZWZjNGEzYWZjMmQ3MjZlZjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgKQEAg
LTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9
IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4KK3VzaW5nIFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlJvYmluSG9vZEhhc2hNYXA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmggYi9Tb3VyY2UvV1RG
L3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ0MjAwZTA5NzFjMjdhODU1YjFk
OWY1NzQwN2E4MGU5NDJlZmFhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Jv
YmluSG9vZEhhc2hTZXQuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUg
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBSb2Jpbkhvb2RIYXNoU2V0
ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBSb2Jpbkhvb2RIYXNoVGFi
bGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSb2Jpbkhvb2RI
YXNoU2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDM4ZjI0
NWQ3M2MyOTgyNjNlMTE2MmFmOTVlNWYyZTE1OWVlZjFhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKQEAgLTAsMCArMSw3NjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlOworCitzdHJ1Y3QgRGVmYXVs
dFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kgeworICAgIC8vIDkwJSBsb2FkIGZhY3Rvci4g
Um9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBhIGhpZ2ggbG9hZC1mYWN0b3Iu
CisgICAgLy8gT2JzZXJ2ZWQgcGVyZm9ybWFuY2UgaXMgc2xpZ2h0bHkgd29yc2UgdGhhbiBIYXNo
VGFibGUgKDc1JSBmb3Igc21hbGwgdGFibGUsIDUwJSBmb3IgbGFyZ2UgdGFibGUpLgorICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhv
b2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA4MCUgbG9hZCBmYWN0b3IsIHRoaXMgbWFp
bnRhaW5zIHRoZSBwZXJmb3JtYW5jZSBzYW1lIHRvIEhhc2hUYWJsZSwgc3RpbGwgdGhlIGxvYWQg
ZmFjdG9yIGlzIGhpZ2hlci4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRO
dW1lcmF0b3IgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9t
aW5hdG9yID0gNTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2Owor
fTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21w
YXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0
IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJl
cXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhh
c2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFs
dWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5
cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJp
bmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVx
dWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2Qg
SGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2ln
bmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBB
dG9taWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNo
aW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisv
LyBbMV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1
NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczov
L2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTog
aHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFj
a3dhcmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2Ns
YXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlw
ZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB0eXBlZGVmIEhhc2hUYWJs
ZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVm
IFRyYWl0cyBWYWx1ZVRyYWl0czsKKyAgICB0eXBlZGVmIEtleSBLZXlUeXBlOworICAgIHR5cGVk
ZWYgVmFsdWUgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgSWRlbnRpdHlIYXNoVHJhbnNsYXRvcjxW
YWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTsKKyAgICB0
eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4gQWRkUmVzdWx0OworCisgICAgc3Rh
dGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1ZhbHVlRnVuY3Rpb24pOwor
CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJvYmluSG9vZEhh
c2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAg
ICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlLCB0
YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmlu
SG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFibGUmKTsKKyAg
ICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUm
KTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisgICAg
Um9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYpOworCisg
ICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4gdGhlIHNhbWUg
aXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBtb3JlIGVmZmlj
aWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5IGFuZCBkZWxl
dGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJsZSBpcyBhIGNv
bW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJsZSk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IobV90YWJsZSAr
IHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxlKTsgfQorICAg
IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdvb2RDb25zdEl0
ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9yIHJhbmRvbSgp
CisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgp
OworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNrZXQgPSBtX3Rh
YmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAgICAgICAgICBp
ZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUtu
b3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKworICAgIGNvbnN0
X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJh
dG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5kb20oKSk7IH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpOyB9CisgICAg
dW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsgfQorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAgICB2b2lkIHJl
c2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsKKworICAgICAg
ICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXpl
OworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5pbXVtVGFibGVT
aXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAgIG1fdGFibGUg
PSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVTaXplID0gbmV3
VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICB9CisKKyAgICBBZGRSZXN1
bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5z
bGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICBBZGRS
ZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkpOyB9CisK
KyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3Qg
YnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRv
IGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVh
ZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQmJiBrZXks
IEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5
LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJl
dHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtl
eSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
PiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wg
Y29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlw
ZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVhcigpOwor
CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7
IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRy
YWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVja2V0KGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUpOyB9CisK
KyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPElk
ZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUq
IGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29u
c2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFu
ZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExv
YWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFs
bG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRh
YmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8VmFsdWVUeXBlKiwgYm9vbD4gTG9va3VwVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsK
KworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmLCB1bnNpZ25lZCBp
bmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNr
KTsKKworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2soVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlw
ZSopOworICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSopOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7CisgICAg
Ym9vbCBzaG91bGRFeHBhbmQoKSBjb25zdCB7IHJldHVybiBzaG91bGRFeHBhbmQoa2V5Q291bnQo
KSwgdGFibGVTaXplKCkpOyB9CisgICAgYm9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsg
cmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgKiAyOyB9CisgICAgYm9v
bCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8IHRh
YmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOyB9
CisgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOworICAg
IHZvaWQgc2hyaW5rKCkgeyByZWhhc2godGFibGVTaXplKCkgLyAyLCBudWxscHRyKTsgfQorICAg
IHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOworCisgICAgVmFsdWVUeXBlKiByZWhhc2godW5zaWdu
ZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKKyAgICBWYWx1ZVR5cGUqIHJlaW5z
ZXJ0KFZhbHVlVHlwZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFs
dWVUeXBlJiBidWNrZXQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZXNpcmVk
SW5kZXgodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICBy
ZXR1cm4gaGFzaCAmIHNpemVNYXNrOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgcHJvYmVEaXN0YW5jZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4gKGluZGV4
ICsgc2l6ZSAtIGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzaykpICYgc2l6ZU1hc2s7CisgICAg
fQorCisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4g
Y29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAg
aXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdv
b2QpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoVmFs
dWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90
YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKworICAgIHN0YXRpYyB2
b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNpemVQb2xpY3k6Om1heExvYWRO
dW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0
b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9hZDsKKworICAgIHVuc2lnbmVk
IHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5zaWduZWQg
dGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVu
c2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorCisgICAgVmFs
dWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07CisKKyNpZiBDSEVDS19IQVNIVEFC
TEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBz
aG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRv
ciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07CisgICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBz
byBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9tdXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9
OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Omxv
b2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9v
a3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNf
SU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjppbmxpbmVMb29rdXAo
Y29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRh
YmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJs
ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1
bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFu
Y2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1f
dGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBt
YWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBw
cm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlz
dGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xh
dG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKwor
ICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFu
Y2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQg
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlw
ZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1w
dHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEp
IC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIGlmICghbV90YWJsZSkKKyAgICAg
ICAgZXhwYW5kKG51bGxwdHIpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNp
Z25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2Ug
PSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVu
dHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9
IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2gg
PSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGVu
dHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9i
ZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYg
KGRpc3RhbmNlID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQg
c3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJp
YW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRy
eSk7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAg
IG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlz
dGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
ICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaWYg
KHNob3VsZEV4cGFuZCgpKQorICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdCht
YWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZShWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQg
aW5kZXgsIHVuc2lnbmVkIGRpc3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFz
aykKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICArK2Rpc3RhbmNlOworCisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAg
aWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFz
c2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5z
bGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6
ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7Cisg
ICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBl
bnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4g
QWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBl
eHBhbmQobnVsbHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwor
CisgICAgQVNTRVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgp
OworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVk
IGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0g
ZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7
CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkgeworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnks
IHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5
ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFz
aCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAo
ZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0
cmFjdCgqZW50cnkpLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25v
d25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFu
Y2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6
ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7Cisg
ICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBw
cm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdF
bnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFu
c2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihl
eHRyYSksIGhhc2gpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlKFdURk1vdmUo
ZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXplLCBzaXplTWFz
ayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisKKyAgICBt
X2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAgICAgIGVudHJ5
ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRy
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4g
VmFsdWVUeXBlKgoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAg
dW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFi
bGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBl
OjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOworICAgIHVuc2lnbmVkIGluZGV4ID0g
ZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7
CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSAr
IGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAg
ICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVu
dHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZyb21EZXNpcmVkID0gcHJvYmVE
aXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChk
aXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAgICAgICAgIHN3YXAoKmVudHJ5
LCB2YWx1ZSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RGTW92ZSh2YWx1
ZSksIGluZGV4LCBkaXN0YW5jZUZyb21EZXNpcmVkLCBzaXplLCBzaXplTWFzayk7CisgICAgICAg
ICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmZpbmQoY29u
c3QgVCYga2V5KSAtPiBpdGVyYXRvcgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGxvb2t1cDxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBy
ZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtl
eSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAg
IHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PFJvYmlu
SG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAg
aWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93
bkdvb2RDb25zdEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2Jvb2wg
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpjb250YWlucyhjb25zdCBUJiBrZXkpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hU
cmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0
RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CisgICAgcmVtb3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlQW5k
SW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgcmVtb3ZlKHBv
cyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKFZhbHVlVHlwZSogcG9zKQoreworICAgIHBvcy0+flZh
bHVlVHlwZSgpOworICAgIGluaXRpYWxpemVCdWNrZXQoKnBvcyk7CisgICAgbV9rZXlDb3VudCAt
PSAxOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNp
emVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGluZGV4UHJldmlvdXMgPSBw
b3MgLSBtX3RhYmxlOworICAgIHVuc2lnbmVkIGluZGV4ID0gKGluZGV4UHJldmlvdXMgKyAxKSAm
IHNpemVNYXNrOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWUqIHByZXZpb3VzRW50
cnkgPSBtX3RhYmxlICsgaW5kZXhQcmV2aW91czsKKyAgICAgICAgVmFsdWUqIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0Vu
dHJ5KSk7CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRy
eSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6
Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZh
bHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkp
OworICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVja2V0
KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNocmlu
aygpKQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAgICBp
ZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRh
dGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVy
YXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nh
c3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3Ig
aXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1v
dmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0PFZh
bHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGNv
bnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAvLyB3
b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFs
aXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQg
dGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hh
cio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBl
KSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFs
dWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNpemUg
KiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwg
dW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9jOjpm
cmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhwYW5k
KFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXpl
OworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUp
CisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxz
ZSBpZiAobXVzdFJlaGFzaEluUGxhY2UoKSkKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemU7Cisg
ICAgZWxzZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisKKyAgICByZXR1cm4gcmVo
YXNoKG5ld1NpemUsIGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2Nv
bnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNvbXB1dGVC
ZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQoreworICAgIHVuc2lnbmVkIGJlc3RUYWJs
ZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5Q291bnQpOworCisgICAgaWYgKHNo
b3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNp
emUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbiA9IFtd
KGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlDb3VudCwgdW5zaWduZWQgdGFibGVTaXpl
KQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNh
bGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3IuCisgICAgICAgIC8vIFdpdGggbWF4TG9h
ZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlzIDExLzI0Lgor
ICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxmLXdheSBiZXR3ZWVuIDExLzI0IGFuZCAz
LzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAvLyB0byBhdm9pZCBiZWluZyB0b28gY2xv
c2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlvIGNsb3NlIHRvIDExLzI0LiBUaGlzCisg
ICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMgWzkvMjQsIDE1LzI0KS4KKyAg
ICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRGYWN0b3I7CisgICAgICAgIGRvdWJsZSBt
aW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAgICAgICBkb3VibGUgYXZlcmFnZUxvYWRS
YXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0aW8pIC8gMjsKKyAgICAgICAgZG91Ymxl
IGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbyA9IChhdmVyYWdlTG9hZFJhdGlv
ICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNp
emUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CisgICAgfTsKKworICAg
IGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9h
ZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgaWYgKGFib3ZlVGhyZXNob2xk
Rm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQor
ICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6
ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZXR1cm4gc3RkOjptYXgoYmVz
dFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6c2hyaW5rVG9CZXN0
U2l6ZSgpCit7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsKKyAgICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29t
cHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQoKSkpLCBudWxscHRyKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlw
ZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpy
ZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5
cGUqCit7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CisK
KyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBWYWx1ZVR5cGUq
IG9sZFRhYmxlID0gbV90YWJsZTsKKworICAgIHVuc2lnbmVkIG9sZEtleUNvdW50ID0ga2V5Q291
bnQoKTsKKyAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOworICAgIG1f
dGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvbGRLZXlDb3VudDsK
KworICAgIFZhbHVlKiBuZXdFbnRyeSA9IG51bGxwdHI7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRFbnRyeSA9IG9s
ZFRhYmxlW2ldOworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgIT0gZW50cnkpOworICAgICAg
ICAgICAgb2xkRW50cnkuflZhbHVlVHlwZSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZSogcmVpbnNlcnRlZEVudHJ5ID0gcmVpbnNlcnQoV1RGTW92
ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAgICAgIGlm
IChzdGQ6OmFkZHJlc3NvZihvbGRFbnRyeSkgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbmV3RW50cnkpOworICAgICAgICAgICAgbmV3RW50cnkgPSByZWluc2VydGVkRW50cnk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1h
bGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gbmV3RW50cnk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXpl
UG9saWN5Pjo6Y2xlYXIoKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAg
aWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWFsbG9jYXRlVGFibGUoc3Rk
OjpleGNoYW5nZShtX3RhYmxlLCBudWxscHRyKSwgdGFibGVTaXplKCkpOworICAgIG1fdGFibGVT
aXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxl
KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCisgICAgOiBtX3RhYmxlKGFsbG9jYXRl
VGFibGUob3RoZXIubV90YWJsZVNpemUpKQorICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tleUNv
dW50KQorICAgICwgbV90YWJsZVNpemUob3RoZXIubV90YWJsZVNpemUpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3RoZXIubV90YWJsZVNpemU7ICsraW5kZXgpIHsK
KyAgICAgICAgVmFsdWVUeXBlJiBvdGhlckVudHJ5ID0gb3RoZXIubV90YWJsZVtpbmRleF07Cisg
ICAgICAgIFZhbHVlVHlwZSYgZW50cnkgPSBtX3RhYmxlW2luZGV4XTsKKyAgICAgICAgbmV3ICgm
ZW50cnkpIFZhbHVlVHlwZShvdGhlckVudHJ5KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6c3dhcChS
b2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9y
IEMrKyBBREwuCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOwor
ICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5
Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om9wZXJhdG9yPShjb25zdCBS
b2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7CisgICAg
Um9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAgIHJldHVy
biAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNo
VGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAg
ICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBt
X3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZVNpemUsIDApOworICAgIG1f
a2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291bnQsIDApOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
LCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmlu
SG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUo
b3RoZXIpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3Qg
Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlw
ZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBEZWZhdWx0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGlj
eT47Cit9OworCitzdHJ1Y3QgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgRmFzdFJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEyZGYwYmNmZWYxNDZj
M2IyZWU4OWZlNzExN2Y1ZmEuLmExOGIzY2JkODgwMDJkMzlkZmNiMmVjMTc0M2E5NzVkNGVmNGNk
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBAIC02Myw3ICs2Myw3
IEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciB7CiAKICNlbmRpZiAvLyBVU0UoV0VCX1RI
UkVBRCkKIAotdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5n
SW1wbD4+OwordXNpbmcgU3RyaW5nVGFibGVJbXBsID0gQXRvbVN0cmluZ1RhYmxlOjpTdHJpbmdU
YWJsZUltcGw7CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1wbCYgc3RyaW5n
VGFibGUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFi
bGUuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCmluZGV4IGUw
YzBhZmJhZWE0MzY4NjFiOGI4ZTQxZWUwNzZhZTJjNzQyMjRiY2YuLjg2ZWQyNWYyOGVjMDg2Njhl
ZjVlNGE1NmEyNDk3NWQyMDFmYThlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbVN0cmluZ1RhYmxlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdU
YWJsZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIEF0b21TdHJpbmdU
YWJsZTo6fkF0b21TdHJpbmdUYWJsZSgpCiB7Ci0gICAgZm9yIChjb25zdCBQYWNrZWRQdHI8U3Ry
aW5nSW1wbD4mIHN0cmluZyA6IG1fdGFibGUpCisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcg
OiBtX3RhYmxlKQogICAgICAgICBzdHJpbmctPnNldElzQXRvbShmYWxzZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFi
YzEyYzRlMzA0NTExM2E1N2UuLjk5ODA0YmIxNjQwYzZiYzk2ZWU4YTdjNTNkNGM3MjNjYjA1ZWRi
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAtMjIsOCArMjIsOCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTMzLDEyICsz
MywxNSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2luZyBTdHJpbmdFbnRyeSA9
IFBhY2tlZFB0cjxTdHJpbmdJbXBsPjsKKyAgICB1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNo
U2V0PFN0cmluZ0VudHJ5LCBEZWZhdWx0SGFzaDxTdHJpbmdFbnRyeT4sIEhhc2hUcmFpdHM8U3Ry
aW5nRW50cnk+LCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxT
dHJpbmdJbXBsPj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxl
SW1wbCYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNl
dDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1f
dGFibGU7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424621</attachid>
            <date>2021-03-30 01:17:36 -0700</date>
            <delta_ts>2021-03-30 01:36:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210330011736.patch</filename>
            <type>text/plain</type>
            <size>111733</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi45YjU4NzEyYWU5NjkyMGFk
ZDM5M2E4MDI5YzI0NjgzMThjMmYxMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLjI0ZGQ0NzhlNWIzOTg4ODUzZjBjYTUyYTQwOGQ0YmNlMWFkNWRmMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAzIEBACisyMDIxLTAzLTMwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFz
aFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5k
b20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpkZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6bG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFp
blByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hh
c2hDb2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAg
KFdURjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Zmlu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJ
bnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxl
U2l6ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFi
bGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6
On5BdG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5o
OgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdIYXNoLmg6CisKIDIwMjEtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3Njo4ODogcnVudGltZSBlcnJvcjog
cmVmZXJlbmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9mIHR5cGUgJ2NvbnN0IFdlYkNvcmU6
OlN0eWxlOjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggN2RjOGE5MjNmNDA4
OThkOTUxZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3NzcyZWExZGRkMTk4ODQ5YjkxMjQwOTNh
ZmQzYzM5NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcgQEAKICNp
bmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPgpA
QCAtMTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5h
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdh
dGNoIHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIFJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJs
ZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsK
KyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEp
CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsK
KyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAo
aSAmIDB4MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMo
U3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAg
ICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOwor
ICAgIH0KKyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0
RWxhcHNlZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvblByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAg
IHN0b3BXYXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmlu
Z1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAg
ICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytp
KSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJs
ZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dM
bihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAg
ICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhT
dHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShT
dHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0
YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7
CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICBy
ZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUz
YjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFi
NTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRo
cmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3Vw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZD
NyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJv
YmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFr
ZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERh
dGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVj
dXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNh
YmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcg
QEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRl
cmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExp
bmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1
ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3
NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNG
RiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3Vy
Y2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIu
aCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5o
ICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0Lmgg
Ki8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5o
ICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJ
CQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2
MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUx
ZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0
ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RI
YXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUu
aAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9y
d2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNk
OWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkz
LDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBs
YXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0
IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVl
UGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWly
OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBj
bGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFz
aFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3Mg
SGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRI
YXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFz
aFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVU
cmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFy
Zz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hN
YXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi44OTAx
YjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYxYjBhZWZhOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSw3
ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNv
bnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
PgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
cml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKIAogICAgIHVz
aW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOwogCi0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0
cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVU
cmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBL
ZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMs
IEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKIAogICAgIGNsYXNzIEhhc2hNYXBLZXlz
UHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkxICsyMzIsODkg
QEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAoSGFzaE1hcCYg
b3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChv
dGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lu
bGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpzaXplKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5z
aWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc0Vt
cHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpl
bmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1w
bC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlu
bGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0
ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKQor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2
YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlw
ZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVk
UGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29u
c3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1hcFRy
YW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMyNCw5ICszMjIsOSBAQCBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5
cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2Fz
dDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRy
YW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMzNCwxNiArMzMyLDE2IEBAIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBw
ZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIGJvb2wgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVl
KSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0
KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0IHJlc3Vs
dCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVl
KSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewpAQCAtMzUzLDkxICszNTEsOTEgQEAg
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZ
U19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+
IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0
cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4o
dmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1l
IEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1
cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVu
Y3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFz
aE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
c3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYg
bWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KGtleSwgc3RkOjpm
b3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1h
cHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2
YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChL
JiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1
ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4g
QWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9y
d2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBz
dGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFk
ZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUg
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQm
JiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShr
ZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNB
cmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShj
b25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVu
Y3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUo
a2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojpl
bnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3Rv
ciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3Rk
Ojpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4g
TWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRvclR5cGU+
KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5
cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBAIEFMV0FZ
U19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdl
dChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsK
ICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1p
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVu
Y3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZUlmKEZ1
bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFw
cGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBl
CiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpA
QCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0
cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBLZXlWYWx1
ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVt
cGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwyMyArNTE0LDIz
IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5
cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4g
aW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZSh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQo
a2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0b3IgaXQg
PSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAsMTQgQEAg
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNrQ29uc2lzdGVuY3ko
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5j
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIGlmIChLZXlUcmFpdHM6
OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2NSwxMyAr
NTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXko
Y29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhh
c2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgorYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgIGNv
bnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBAQCBib29s
IG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYg
YSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICByZXR1cm4gIShh
ID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNl
L1dURi93dGYvSGFzaFNldC5oCmluZGV4IDc0YzA5ZTA1YWJlM2IzMGQwNDUwMTdhODFmZTI0Mzcw
YjZlMWI4YmQuLjAzNWE5MDdkNWY4ZTg1OWI1MjE2MGZkNDkzMzNiYzJkZDA1MmVkNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0cnVjdCBJZGVu
dGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwcml2YXRlOgpAQCAtNDEsOCArMzksNyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICB0
eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwogCiBwcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0
eUV4dHJhY3RvciwKLSAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJh
aXRzPiBIYXNoVGFibGVUeXBlOworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBU
YWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJ
ZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRz
PjsKIAogcHVibGljOgogICAgIC8qCkBAIC0xNzEsMTAyICsxNjgsMTAyIEBAIHN0cnVjdCBIYXNo
U2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpz
d2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnN3
YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUg
dW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
c2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgor
aW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNhcGFjaXR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0
eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4g
aXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjplbmQoKSBjb25zdCAt
PiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7IAogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxU
LCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQodmFsdWUp
OyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6Y29udGFpbnMoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5z
KHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2
YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25z
dCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0
VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6
Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
YWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKFZh
bHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZChX
VEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9p
ZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQodmFsdWUpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZv
aWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
dm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQogewog
ICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0byBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRkKGNvbnN0
IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFk
ZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBl
bmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAg
IGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAg
LTI3NCw5ICsyNzEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJl
bW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5
cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JU
eXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI4NCw4ICsyODEsOCBA
QCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2lu
LCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
ViwgVz46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1w
bC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk0LDI3ICsyOTEsMjcgQEAgaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlm
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwu
cmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVh
cigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VU
eXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRvciBpdCkg
LT4gVGFrZVR5cGUKIHsKICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBWYWx1
ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTMyNCw0OCArMzIx
LDQ4IEBAIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+
IFRha2VUeXBlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRh
a2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
CiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
Pjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBX
Pjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9y
Pjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBUYWJsZVRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNv
bnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxl
VHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hT
ZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4K
LWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92
ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnJl
bW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAg
IHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQogewogICAgIHJldHVybiB0YWtl
KGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
VmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1ZVRyYWl0
czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODEs
OSArMzc4LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3Ro
ZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShj
b25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBv
dGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rp
b24uc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTQsMjIgKzM5MSwyMiBAQCBp
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVj
dGlvbiYgb3RoZXJDb2xsZWN0aW9uKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90
aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYg
b3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29s
bGVjdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQgSGFzaFNl
dDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjaGVj
a0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEwYzBhNjI5
NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVhYzhkZWFhMzdlNDU3OThjMjRlMmJjMDc4ZTRkYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCkBAIC03OSw0NiArNzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNs
YXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVU
eXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1v
dmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUq
KTsKIAogI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlu
bGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlu
bGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0
ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRl
cmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0eXBlZGVm
IGVudW0geyBIYXNoSXRlbUtub3duR29vZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRv
cl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+
IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFz
aFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUs
IEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBl
OwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAg
ICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
cjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBpdGVyYXRv
cjsKIAogICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBAIC0yNDMs
MTggKzI0NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogI2VuZGlmCiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRl
cmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBW
YWx1ZSosIFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBw
cml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hU
YWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8
SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBW
YWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBl
OwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CiAKICAg
ICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBl
IHBvcywgUG9pbnRlclR5cGUgZW5kKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kKSB7IH0K
ICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJU
eXBlIHBvcywgUG9pbnRlclR5cGUgZW5kLCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcpIDogbV9p
dGVyYXRvcih0YWJsZSwgcG9zLCBlbmQsIHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgogICAgIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlw
ZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVU
cmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwogICAgICAg
ICB+SGFzaFRhYmxlKCkgCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsgCisgICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAgICAgICAg
ICAgIGlmIChtX3RhYmxlKQogICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxl
KTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC01NTksMTIg
KzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUo
KSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAgICAgICB2
b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAgICAgICAgIC8vIExvYWQtZmFjdG9y
IGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhM
b2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4
TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21p
bmF0b3I7CkBAIC04NTYsNyArODUzLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4o
a2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKIApAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAg
ICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIGNo
ZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpZiAo
IW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKQEAgLTExMTAsMTQgKzExMDcsMTQgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAg
ICAgcmVtb3ZlKHBvcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAg
ICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmVtb3ZlKHBv
cyk7CiAgICAgfQpAQCAtMTM3Myw3ICsxMzcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpjbGVhcigpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAg
ICAgICAgIHJldHVybjsKIApAQCAtMTQwOSw4ICsxNDA2LDggQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cygmb3RoZXIpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsK
IApAQCAtMTQzNCw3ICsxNDMxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9jaz4oKSkK
ICNlbmRpZgogICAgIHsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAKICAgICAgICAgbV90YWJsZSA9IHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZSwgbnVsbHB0cik7CiAKQEAgLTE1MDAsMzAgKzE0OTcs
MjkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
IAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9t
dXRleCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0OwotICAgICAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKKyAgICAgICAgdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIG5leHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIHAgPSB0YWJsZS0+bV9pdGVyYXRvcnM7IHA7
IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OwotICAgICAgICAgICAg
cC0+bV90YWJsZSA9IDA7Ci0gICAgICAgICAgICBwLT5tX25leHQgPSAwOwotICAgICAgICAgICAg
cC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgICAgICBwLT5tX3RhYmxlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHAtPm1fbmV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX3ByZXZpb3Vz
ID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBtX2l0ZXJhdG9ycyA9IDA7CisgICAgICAg
IHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2
b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogdGFibGUsCi0gICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSwgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90
YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5t
X3ByZXZpb3VzID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3IgYXQgaGVh
ZCBvZiBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIXRhYmxl
KSB7Ci0gICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5tX25leHQg
PSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlLT5tX2l0
ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2LDggKzE1MzIsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAg
ICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVy
YXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFibGUpIHsKQEAgLTE1NTksMTMgKzE1NTUsMTgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGl0LT5tX3RhYmxlID0gMDsKLSAgICAg
ICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAg
aXQtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAg
ICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAgIH0KIAogI2VuZGlmIC8vIENIRUNL
X0hBU0hUQUJMRV9JVEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsK
KwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90
YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZh
bHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAu
aCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzI3YWJh
ZTc2YzNiZmQxYjM0MmFhZDc2ZjJmMWY3ZDM3YTA1OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0g
RGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxL
ZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+
Cit1c2luZyBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8VmFsdWVBcmcs
IEhhc2hBcmcsIFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0
cz47CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
ID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJh
aXRzPE1hcHBlZEFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8VmFs
dWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RSb2Jpbkhv
b2RIYXNoTWFwOwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDg1ZTFiOWI5OTNmOGE5Yzg1MWMzNTQzNGM2MDlm
OGNjMTg4MjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcg
PSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNo
U2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0
Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hTZXQg
PSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RIYXNo
VGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1vcnlD
b21wYWN0Um9iaW5Ib29kSGFzaFNldDsKK3VzaW5nIFdURjo6RmFzdFJvYmluSG9vZEhhc2hTZXQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMTFjMmY3MTA4ZGJl
MDMzZjM0Mjg2M2NkMzk3NmM5MWFkMjQxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApAQCAtMCwwICsxLDc3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+CitjbGFzcyBSb2Jpbkhvb2RIYXNoVGFibGU7CisKK3N0cnVjdCBNZW1vcnlDb21wYWN0
Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7CisgICAgLy8gOTAlIGxvYWQgZmFjdG9yLiBS
b2Jpbkhvb2RIYXNoVGFibGUgY2FuIHdvcmsgd2l0aCBzdWNoIGEgaGlnaCBsb2FkLWZhY3Rvci4K
KyAgICAvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3b3JzZSB0aGFuIEhhc2hU
YWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0YWJsZSkuCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gOTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDEwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCitzdHJ1Y3QgRmFzdFJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3kgeworICAgIC8vIDgwJSBsb2FkIGZhY3RvciwgdGhpcyBtYWlu
dGFpbnMgdGhlIHBlcmZvcm1hbmNlIHNhbWUgdG8gSGFzaFRhYmxlLCBzdGlsbCB0aGUgbG9hZCBm
YWN0b3IgaXMgaGlnaGVyLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51
bWVyYXRvciA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21p
bmF0b3IgPSA1OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9
OworCisvLyBSb2Jpbkhvb2QgSGFzaFRhYmxlIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zIGNvbXBh
cmVkIHRvIHVzdWFsIEhhc2hUYWJsZSwgdGhhdCdzIHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1bHQg
b25lLgorLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBjb21wdXRlcyBoYXNoIG11Y2ggbW9yZSBmcmVx
dWVudGx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIEtleSBzaG91bGQgY2FjaGUgY29tcHV0ZWQgaGFz
aC4KKy8vIEJ1dCBvdXIgZGVmYXVsdCBIYXNoVGFibGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2YWx1
ZSBiZWNhdXNlIG9mIG1lbW9yeSB1c2FnZS4gVGhpcyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkgdHlw
ZQorLy8gc2hvdWxkIGhhdmUgaGFzaCB2YWx1ZSBpbnRydXNpdmVseSAoZS5nLiBXVEY6OlN0cmlu
ZyBob2xkcyBoYXNoIHZhbHVlIGludGVybmFsbHkpLgorLy8KKy8vIElmIHRoZSBhYm92ZSByZXF1
aXJlbWVudHMgbWVldCB5b3VyIHVzZSBjYXNlLCB0aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9vZCBI
YXNoVGFibGUuCisvLyBUaGUgbGFyZ2VzdCBiZW5lZml0IGlzIHRoYXQgd2UgY2FuIHVzZSBzaWdu
aWZpY2FudGx5IGhpZ2ggbG9hZC1mYWN0b3IgKDkwJSkhIFRoaXMgaXMgc3VpdGFibGUgZm9yIEF0
b21pY1N0cmluZ1RhYmxlLgorLy8KKy8vIFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hp
bmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxldGlvbiwgZGVzY3JpYmVkIGluIFsyLDNdLgorLy8KKy8v
IFsxXTogaHR0cHM6Ly9hY2NpZGVudGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0
NTQ1NTk4Ny9ydXN0LWhhc2gtaXRlcmF0aW9uLXJlaW5zZXJ0aW9uCisvLyBbMl06IGh0dHBzOi8v
Y29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTEvcm9iaW4taG9vZC1oYXNoaW5nLworLy8gWzNdOiBo
dHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNr
d2FyZC1zaGlmdC1kZWxldGlvbi8jcmVmCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY2xh
c3MgUm9iaW5Ib29kSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFibGVUeXBl
ID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OworICAgIHR5cGVkZWYgSGFzaFRhYmxl
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYg
VHJhaXRzIFZhbHVlVHJhaXRzOworICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CisgICAgdHlwZWRl
ZiBWYWx1ZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZh
bHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPiBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOworICAgIHR5
cGVkZWYgSGFzaFRhYmxlQWRkUmVzdWx0PGl0ZXJhdG9yPiBBZGRSZXN1bHQ7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KCFLZXlUcmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbik7Cisg
ICAgc3RhdGljX2Fzc2VydChIYXNoRnVuY3Rpb25zOjpoYXNIYXNoSW5WYWx1ZSk7CisKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUoKSA9IGRlZmF1bHQ7CisKKyAgICB+Um9iaW5Ib29kSGFzaFRhYmxl
KCkKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAgIGlm
IChtX3RhYmxlKQorICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6
ZSgpKTsKKyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFz
aFRhYmxlJik7CisgICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIFJvYmlu
SG9vZEhhc2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworCisg
ICAgUm9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhv
b2RIYXNoVGFibGUmIG9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisKKyAgICAvLyBX
aGVuIHRoZSBoYXNoIHRhYmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2FtZSBpdGVyYXRv
ciBmb3IgZW5kIGFzIGZvciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAg
ICAvLyBidWNrZXRzLCBhbmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNh
c2UgdGhhdCdzIHdvcnRoIG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxlICsgdGFibGVT
aXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0Vt
cHR5KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7
CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vh
a1JhbmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAgIGlmICghaXNF
bXB0eUJ1Y2tldChidWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29k
SXRlcmF0b3IoJmJ1Y2tldCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0
b3IgcmFuZG9tKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNv
bnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsgfQorCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV90YWJsZSk7CisgICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAgICAgIHVuc2ln
bmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAg
ICAgIHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNv
bXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJsZSA9IGFsbG9j
YXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNp
emU7CisgICAgICAgIG1fa2V5Q291bnQgPSAwOworICAgIH0KKworICAgIEFkZFJlc3VsdCBhZGQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQorICAgIEFkZFJlc3VsdCBh
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBl
PihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCBXVEZNb3ZlKHZhbHVlKSk7IH0KKworICAgIC8v
IEEgc3BlY2lhbCB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNo
aW5nIGFuZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQg
dGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAg
IC8vIGluIHRoZSB0YWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+IEFkZFJlc3VsdCBhZGQoVCYmIGtleSwgRXh0cmEm
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJh
JiYpOworCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIGZp
bmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGZp
bmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgeyByZXR1cm4gY29udGFpbnM8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJh
dG9yIGZpbmQoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlu
cyhjb25zdCBUJikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7Cisg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhpdGVyYXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFs
dWUpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNFbXB0eUJ1Y2tldCh2YWx1ZSk7IH0KKworICAgIFZh
bHVlVHlwZSogbG9va3VwKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXA8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogaW5saW5l
TG9va3VwKGNvbnN0IFQmKTsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5j
eSgpIHsgfQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhj
ZXB0U2l6ZSgpIHsgfQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCkgeyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2
NF90IGtleUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
a2V5Q291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVy
YXRvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVU
YWJsZSh1bnNpZ25lZCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFs
dWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxW
YWx1ZVR5cGUqLCBib29sPiBMb29rdXBUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29uc3QgVCYpOworCisgICAg
dm9pZCBtYWludGFpblByb2JlRGlzdGFuY2UoVmFsdWVUeXBlJiYsIHVuc2lnbmVkIGluZGV4LCB1
bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spOworCisg
ICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhW
YWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7Cisg
ICAgdm9pZCByZW1vdmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KTsKKyAgICBib29sIHNo
b3VsZEV4cGFuZCgpIGNvbnN0IHsgcmV0dXJuIHNob3VsZEV4cGFuZChrZXlDb3VudCgpLCB0YWJs
ZVNpemUoKSk7IH0KKyAgICBib29sIG11c3RSZWhhc2hJblBsYWNlKCkgY29uc3QgeyByZXR1cm4g
a2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAqIDI7IH0KKyAgICBib29sIHNob3Vs
ZFNocmluaygpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXpl
KCkgJiYgdGFibGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7IH0KKyAgICBW
YWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cik7CisgICAgdm9pZCBz
aHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIsIG51bGxwdHIpOyB9CisgICAgdm9pZCBz
aHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNpZ25lZCBuZXdU
YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOworICAgIFZhbHVlVHlwZSogcmVpbnNlcnQoVmFs
dWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUm
IGJ1Y2tldCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1
bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBo
YXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBw
cm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXpl
LCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXpl
IC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAg
ICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9y
IG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9p
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRv
ciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUq
IHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsg
dGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisgICAgc3RhdGljIHZvaWQgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6bWF4TG9hZE51bWVyYXRv
cjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IFNp
emVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1pbkxvYWQgPSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAgdW5zaWduZWQgdGFibGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25lZCB0YWJsZVNp
emVNYXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAgdW5zaWduZWQg
a2V5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisKKyAgICBWYWx1ZVR5cGUq
IG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKworI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVS
QVRPUlMKK3B1YmxpYzoKKyAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3JzIHNob3VsZCBi
ZSBndWFyZGVkIHdpdGggbV9tdXRleC4KKyAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0
ZXJhdG9ycyB7IG51bGxwdHIgfTsKKyAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hU
YWJsZSBjYW4gc3RpbGwgYmUgbWVtbW92ZSdkIG9yIG1lbWNweSdlZC4KKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4IHsgbWFrZVVuaXF1ZTxMb2NrPigpIH07CisjZW5k
aWYKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bG9va3VwKGNv
bnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVMb29rdXA8SGFz
aFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
YXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1cChjb25zdCBU
JiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKKworICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFibGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgp
OworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVk
IGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0g
ZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7
CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSAr
IGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1haW50YWlu
cyB0aGlzIGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHByb2Jpbmcg
d2hlbiBkaXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0aW5nIGVu
dHJ5LgorICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
OworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpo
YXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVx
dWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgICAg
IGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNr
ZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8VHJhaXRzOjplbXB0eVZhbHVl
SXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1Y2tldCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRk
UmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBh
bmQobnVsbHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisg
ICAgQVNTRVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOwor
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhh
c2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVz
aXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisK
KyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkgeworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0
ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50
aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFu
Y2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGlu
ZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisg
ICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAg
ICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8
VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRh
aW5Qcm9iZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZy
b21EZXNpcmVkLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytk
aXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxk
RXhwYW5kKCkpCisgICAgICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93
bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgorQUxXQVlTX0lOTElORSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
bWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKQorewor
ICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNF
bXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9F
bXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBl
bnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXpl
TWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAg
ICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlz
dGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1h
c2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXh0cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGlj
eT46OmFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1
bHQKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CisKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIGV4cGFuZChu
dWxscHRyKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBB
U1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9
IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVk
SW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAg
IFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVu
dHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkp
KSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRyeUhh
c2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZyb21E
ZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7
CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAgICAg
ICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2JlLWRp
c3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0g
V1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgq
ZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwg
aGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RGTW92ZShleGlzdGlu
Z0VudHJ5KSwgaW5kZXgsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291
bnQgKz0gMTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZW50cnkgPSBleHBh
bmQoZW50cnkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAg
IHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cywgU2l6ZVBvbGljeT46OnJlaW5zZXJ0KFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBWYWx1ZVR5
cGUqCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICB1bnNpZ25l
ZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVN
YXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2go
RXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVk
SW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAg
IHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7
CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVl
VHJhaXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNo
ID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5
KSk7CisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9iZURpc3RhbmNl
KGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNl
ID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgc3dhcCgqZW50cnksIHZhbHVl
KTsKKyAgICAgICAgICAgIG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKHZhbHVlKSwgaW5k
ZXgsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBz
aXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBr
ZXkpIC0+IGl0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5k
KCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkp
OworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBt
YWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJu
IGVuZCgpOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFz
aFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVu
dHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENv
bnN0SXRlcmF0b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVt
cGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sK
KyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBj
b25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0
b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlk
YXRlKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7Cisg
ICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpyZW1vdmUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgcG9zLT5+VmFsdWVUeXBl
KCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNvdW50IC09IDE7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sg
PSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1f
dGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1h
c2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1f
dGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsg
aW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlzRW1wdHlCdWNrZXQoKnByZXZpb3VzRW50cnkpKTsK
KyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAg
ICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChl
bnRyeUtleSk7CisgICAgICAgIGlmICghcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBz
aXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmFsdWVUcmFp
dHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50cnksIFdURk1vdmUoKmVudHJ5KSk7CisgICAg
ICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5
KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0gaW5kZXg7CisgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisg
ICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9
PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25z
dF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
LCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yIGl0
KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3Zl
QW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1
ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sK
KyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZElu
dmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBl
Kj4oaXQubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5s
aW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoY29uc3QgS2V5
VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFsbG9j
YXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4gVmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVz
ZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9u
cyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0Cisg
ICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFz
aFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOwor
CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUq
PihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVv
ZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
CisgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25l
ZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAg
ICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpleHBhbmQoVmFsdWVU
eXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgoreworICAgIHVuc2lnbmVkIG5ld1NpemU7CisgICAg
dW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6ZSkKKyAgICAg
ICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBlbHNlIGlmICht
dXN0UmVoYXNoSW5QbGFjZSgpKQorICAgICAgICBuZXdTaXplID0gb2xkU2l6ZTsKKyAgICBlbHNl
CisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsKKworICAgIHJldHVybiByZWhhc2gobmV3
U2l6ZSwgZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY29uc3RleHBy
IHVuc2lnbmVkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29tcHV0ZUJlc3RUYWJs
ZVNpemUodW5zaWduZWQga2V5Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9
IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhw
YW5kKGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAy
OworCisgICAgYXV0byBhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91Ymxl
IGxvYWRGYWN0b3IsIHVuc2lnbmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAg
eworICAgICAgICAvLyBIZXJlIGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRp
b24sIHVzaW5nIDMvNCBsb2FkLWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMv
NCBhbmQgbWluTG9hZCBhdCAxLzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAg
IC8vIElmIHdlIGFyZSBnZXR0aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2Ug
ZG91YmxlIHRoZSBzaXplCisgICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBs
b2FkTWF4IGFuZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAg
Ly8gZ2l2ZSB1cyBhIGxvYWQgaW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBk
b3VibGUgbWF4TG9hZFJhdGlvID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRS
YXRpbyA9IDEuMCAvIG1pbkxvYWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0g
KG1heExvYWRSYXRpbyArIG1pbkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldh
eUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhM
b2FkUmF0aW8pIC8gMjsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhh
bGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3Rl
eHByIGRvdWJsZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJh
dG9yKSAvIG1heExvYWREZW5vbWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdl
ckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAg
IGJlc3RUYWJsZVNpemUgKj0gMjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5
VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVT
aXplLCBtaW5pbXVtVGFibGVTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4K
K3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKCkK
K3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFi
bGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVz
dFRhYmxlU2l6ZShrZXlDb3VudCgpKSksIG51bGxwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sK
KyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVu
c2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFi
bGUgPSBtX3RhYmxlOworCisgICAgdW5zaWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOwor
ICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNp
emUgPSBuZXdUYWJsZVNpemU7CisgICAgbV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworCisgICAg
VmFsdWUqIG5ld0VudHJ5ID0gbnVsbHB0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IG9sZFRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVb
aV07CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KG9sZEVudHJ5KSkgeworICAgICAgICAgICAg
QVNTRVJUKHN0ZDo6YWRkcmVzc29mKG9sZEVudHJ5KSAhPSBlbnRyeSk7CisgICAgICAgICAgICBv
bGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIFZhbHVlKiByZWluc2VydGVkRW50cnkgPSByZWluc2VydChXVEZNb3ZlKG9sZEVu
dHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICAgICAgaWYgKHN0ZDo6
YWRkcmVzc29mKG9sZEVudHJ5KSA9PSBlbnRyeSkgeworICAgICAgICAgICAgQVNTRVJUKCFuZXdF
bnRyeSk7CisgICAgICAgICAgICBuZXdFbnRyeSA9IHJlaW5zZXJ0ZWRFbnRyeTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChvbGRUYWJsZSkKKyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpm
cmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiBuZXdFbnRyeTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpZiAoIW1f
dGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGRlYWxsb2NhdGVUYWJsZShzdGQ6OmV4Y2hh
bmdlKG1fdGFibGUsIG51bGxwdHIpLCB0YWJsZVNpemUoKSk7CisgICAgbV90YWJsZVNpemUgPSAw
OworICAgIG1fa2V5Q291bnQgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgor
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3Qg
Um9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikKKyAgICA6IG1fdGFibGUoYWxsb2NhdGVUYWJsZShv
dGhlci5tX3RhYmxlU2l6ZSkpCisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisg
ICAgLCBtX3RhYmxlU2l6ZShvdGhlci5tX3RhYmxlU2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAg
ICBWYWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAg
VmFsdWVUeXBlJiBlbnRyeSA9IG1fdGFibGVbaW5kZXhdOworICAgICAgICBuZXcgKCZlbnRyeSkg
VmFsdWVUeXBlKG90aGVyRW50cnkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpzd2FwKFJvYmluSG9v
ZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFE
TC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoJm90aGVyKTsKKworICAgIHN3YXAobV90YWJsZSwgb3RoZXIubV90YWJsZSk7CisgICAgc3dh
cChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUpOworICAgIHN3YXAobV9rZXlDb3VudCwg
b3RoZXIubV9rZXlDb3VudCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9v
ZEhhc2hUYWJsZSYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhv
b2RIYXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYm
IG90aGVyKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFi
bGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVT
aXplID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3Vu
dCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9rZXlDb3VudCwgMCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGlj
eT46Om9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikgLT4gUm9iaW5Ib29kSGFz
aFRhYmxlJgoreworICAgIFJvYmluSG9vZEhhc2hUYWJsZSB0ZW1wID0gV1RGTW92ZShvdGhlcik7
CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3N0cnVjdCBNZW1vcnlD
b21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRh
YmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRh
YmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0
cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywg
RmFzdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEy
ZGYwYmNmZWYxNDZjM2IyZWU4OWZlNzExN2Y1ZmEuLmExOGIzY2JkODgwMDJkMzlkZmNiMmVjMTc0
M2E5NzVkNGVmNGNkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciB7CiAKICNlbmRpZiAv
LyBVU0UoV0VCX1RIUkVBRCkKIAotdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNr
ZWRQdHI8U3RyaW5nSW1wbD4+OwordXNpbmcgU3RyaW5nVGFibGVJbXBsID0gQXRvbVN0cmluZ1Rh
YmxlOjpTdHJpbmdUYWJsZUltcGw7CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxl
SW1wbCYgc3RyaW5nVGFibGUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nVGFibGUuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
Y3BwCmluZGV4IGUwYzBhZmJhZWE0MzY4NjFiOGI4ZTQxZWUwNzZhZTJjNzQyMjRiY2YuLjg2ZWQy
NWYyOGVjMDg2NjhlZjVlNGE1NmEyNDk3NWQyMDFmYThlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21TdHJpbmdUYWJsZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAK
IEF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJpbmdUYWJsZSgpCiB7Ci0gICAgZm9yIChjb25zdCBQ
YWNrZWRQdHI8U3RyaW5nSW1wbD4mIHN0cmluZyA6IG1fdGFibGUpCisgICAgZm9yIChjb25zdCBh
dXRvJiBzdHJpbmcgOiBtX3RhYmxlKQogICAgICAgICBzdHJpbmctPnNldElzQXRvbShmYWxzZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4
MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1N2UuLjI0NWEzYTYyMDFhNTBkZjI2NTlkYzE5MTBl
MDc5ZTA1NTdkNDEyNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAt
MjIsOCArMjIsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zMywxMiArMzQsMTUgQEAgY2xh
c3MgU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21TdHJpbmdUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgdXNpbmcgU3RyaW5nRW50cnkgPSBQYWNrZWRQdHI8
U3RyaW5nSW1wbD47CisgICAgdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gRmFzdFJvYmluSG9vZEhh
c2hTZXQ8U3RyaW5nRW50cnk+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5n
VGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7
IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3RyaW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJu
IG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJsZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggNWE4Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkx
ZWI5MGZiOS4uZjAzMmYxYmRmMjFiNThkYmY2Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424623</attachid>
            <date>2021-03-30 01:36:51 -0700</date>
            <delta_ts>2021-03-30 13:30:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210330013650.patch</filename>
            <type>text/plain</type>
            <size>111763</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi45YjU4NzEyYWU5NjkyMGFk
ZDM5M2E4MDI5YzI0NjgzMThjMmYxMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLjI0ZGQ0NzhlNWIzOTg4ODUzZjBjYTUyYTQwOGQ0YmNlMWFkNWRmMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAzIEBACisyMDIxLTAzLTMwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFz
aFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5k
b20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bXVzdFJlaGFzaEluUGxhY2UgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpkZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6bWFrZUNvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6Om1ha2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6bG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFp
blByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hh
c2hDb2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAg
KFdURjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Zmlu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJ
bnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxl
U2l6ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFi
bGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0p
OgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6
On5BdG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5o
OgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdIYXNoLmg6CisKIDIwMjEtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3Njo4ODogcnVudGltZSBlcnJvcjog
cmVmZXJlbmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9mIHR5cGUgJ2NvbnN0IFdlYkNvcmU6
OlN0eWxlOjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggN2RjOGE5MjNmNDA4
OThkOTUxZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3NzcyZWExZGRkMTk4ODQ5YjkxMjQwOTNh
ZmQzYzM5NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcgQEAKICNp
bmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPgpA
QCAtMTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5h
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdh
dGNoIHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIFJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJs
ZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsK
KyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEp
CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsK
KyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAo
aSAmIDB4MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMo
U3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAg
ICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOwor
ICAgIH0KKyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0
RWxhcHNlZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvblByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAg
IHN0b3BXYXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmlu
Z1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAg
ICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRk
KFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytp
KSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJs
ZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dM
bihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAg
ICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhT
dHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShT
dHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0
YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7
CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICBy
ZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUz
YjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFi
NTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRo
cmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3Vw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZD
NyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJv
YmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFr
ZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERh
dGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVj
dXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNh
YmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcg
QEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRl
cmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExp
bmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1
ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3
NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNG
RiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3Vy
Y2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIu
aCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5o
ICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0Lmgg
Ki8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5o
ICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJ
CQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2
MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUx
ZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0
ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RI
YXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUu
aAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9y
d2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNk
OWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkz
LDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBs
YXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0
IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVl
UGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWly
OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBj
bGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFz
aFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3Mg
SGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRI
YXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFz
aFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVU
cmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFy
Zz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hN
YXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi44OTAx
YjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYxYjBhZWZhOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSw3
ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNv
bnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
PgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
cml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKIAogICAgIHVz
aW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOwogCi0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0
cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVU
cmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBL
ZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMs
IEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKIAogICAgIGNsYXNzIEhhc2hNYXBLZXlz
UHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkxICsyMzIsODkg
QEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAoSGFzaE1hcCYg
b3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChv
dGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lu
bGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpzaXplKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5z
aWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc0Vt
cHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpl
bmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJh
dG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1w
bC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlu
bGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0
ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKQor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2
YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlw
ZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVk
UGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29u
c3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1hcFRy
YW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMyNCw5ICszMjIsOSBAQCBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5
cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2Fz
dDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRy
YW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMzNCwxNiArMzMyLDE2IEBAIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBw
ZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIGJvb2wgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFs
dWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVl
KSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0
KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0IHJlc3Vs
dCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVl
KSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewpAQCAtMzUzLDkxICszNTEsOTEgQEAg
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZ
U19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+
IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0
cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4o
dmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1l
IEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1
cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVu
Y3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFz
aE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
c3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYg
bWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KGtleSwgc3RkOjpm
b3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1h
cHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2
YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChL
JiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1
ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4g
QWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9y
d2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBz
dGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFk
ZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUg
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQm
JiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShr
ZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNB
cmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShj
b25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVu
Y3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUo
a2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojpl
bnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3Rv
ciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3Rk
Ojpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4g
TWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRvclR5cGU+
KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5
cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNo
VGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBAIEFMV0FZ
U19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdl
dChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsK
ICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1p
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVu
Y3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZUlmKEZ1
bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFw
cGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBl
CiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpA
QCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0
cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHkKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBLZXlWYWx1
ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVt
cGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwyMyArNTE0LDIz
IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVr
KGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5
cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4g
aW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZSh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQo
a2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0b3IgaXQg
PSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAsMTQgQEAg
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNrQ29uc2lzdGVuY3ko
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5j
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIGlmIChLZXlUcmFpdHM6
OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2NSwxMyAr
NTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXko
Y29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhh
c2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgorYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVk
ZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgIGNv
bnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBAQCBib29s
IG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYg
YSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICByZXR1cm4gIShh
ID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNl
L1dURi93dGYvSGFzaFNldC5oCmluZGV4IDc0YzA5ZTA1YWJlM2IzMGQwNDUwMTdhODFmZTI0Mzcw
YjZlMWI4YmQuLjAzNWE5MDdkNWY4ZTg1OWI1MjE2MGZkNDkzMzNiYzJkZDA1MmVkNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0cnVjdCBJZGVu
dGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwcml2YXRlOgpAQCAtNDEsOCArMzksNyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICB0
eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwogCiBwcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0
eUV4dHJhY3RvciwKLSAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJh
aXRzPiBIYXNoVGFibGVUeXBlOworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBU
YWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJ
ZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRz
PjsKIAogcHVibGljOgogICAgIC8qCkBAIC0xNzEsMTAyICsxNjgsMTAyIEBAIHN0cnVjdCBIYXNo
U2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpz
d2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnN3
YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsgCiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUg
dW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
c2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgor
aW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNhcGFjaXR5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0
eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4g
aXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjplbmQoKSBjb25zdCAt
PiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7IAogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxU
LCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQodmFsdWUp
OyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6Y29udGFpbnMoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5z
KHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2
YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25z
dCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0
VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6
Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
YWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKFZh
bHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZChX
VEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9p
ZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQodmFsdWUpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZv
aWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
dm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQogewog
ICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0byBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRkKGNvbnN0
IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFk
ZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBl
bmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAg
IGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAg
LTI3NCw5ICsyNzEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJl
bW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5
cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JU
eXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI4NCw4ICsyODEsOCBA
QCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2lu
LCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
ViwgVz46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1w
bC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk0LDI3ICsyOTEsMjcgQEAgaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVy
biB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlm
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwu
cmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVh
cigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VU
eXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRvciBpdCkg
LT4gVGFrZVR5cGUKIHsKICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBWYWx1
ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTMyNCw0OCArMzIx
LDQ4IEBAIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+
IFRha2VUeXBlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRh
a2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
CiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
Pjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBX
Pjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9y
Pjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBUYWJsZVRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhh
c2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNv
bnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxl
VHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hT
ZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4K
LWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92
ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnJl
bW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAg
IHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQogewogICAgIHJldHVybiB0YWtl
KGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
VmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1ZVRyYWl0
czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODEs
OSArMzc4LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3Ro
ZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShj
b25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBv
dGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rp
b24uc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTQsMjIgKzM5MSwyMiBAQCBp
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVj
dGlvbiYgb3RoZXJDb2xsZWN0aW9uKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90
aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYg
b3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29s
bGVjdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQgSGFzaFNl
dDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjaGVj
a0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEwYzBhNjI5
NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVhYzhkZWFhMzdlNDU3OThjMjRlMmJjMDc4ZTRkYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCkBAIC03OSw0NiArNzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNs
YXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVU
eXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1v
dmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUq
KTsKIAogI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlu
bGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlu
bGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0
ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRl
cmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0eXBlZGVm
IGVudW0geyBIYXNoSXRlbUtub3duR29vZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRv
cl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+
IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFz
aFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUs
IEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBl
OwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAg
ICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
cjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBpdGVyYXRv
cjsKIAogICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBAIC0yNDMs
MTggKzI0NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogI2VuZGlmCiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRl
cmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBW
YWx1ZSosIFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBw
cml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hU
YWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8
SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBW
YWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBl
OwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CiAKICAg
ICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBl
IHBvcywgUG9pbnRlclR5cGUgZW5kKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kKSB7IH0K
ICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJU
eXBlIHBvcywgUG9pbnRlclR5cGUgZW5kLCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcpIDogbV9p
dGVyYXRvcih0YWJsZSwgcG9zLCBlbmQsIHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgogICAgIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlw
ZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVU
cmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwogICAgICAg
ICB+SGFzaFRhYmxlKCkgCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsgCisgICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAgICAgICAg
ICAgIGlmIChtX3RhYmxlKQogICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxl
KTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC01NTksMTIg
KzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUo
KSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAgICAgICB2
b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAgICAgICAgIC8vIExvYWQtZmFjdG9y
IGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhM
b2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4
TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21p
bmF0b3I7CkBAIC04NTYsNyArODUzLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4o
a2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKIApAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAg
ICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIGNo
ZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpZiAo
IW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKQEAgLTExMTAsMTQgKzExMDcsMTQgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAg
ICAgcmVtb3ZlKHBvcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAg
ICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmVtb3ZlKHBv
cyk7CiAgICAgfQpAQCAtMTM3Myw3ICsxMzcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpjbGVhcigpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAg
ICAgICAgIHJldHVybjsKIApAQCAtMTQwOSw4ICsxNDA2LDggQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cygmb3RoZXIpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsK
IApAQCAtMTQzNCw3ICsxNDMxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9jaz4oKSkK
ICNlbmRpZgogICAgIHsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAKICAgICAgICAgbV90YWJsZSA9IHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZSwgbnVsbHB0cik7CiAKQEAgLTE1MDAsMzAgKzE0OTcs
MjkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
IAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9t
dXRleCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0OwotICAgICAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKKyAgICAgICAgdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIG5leHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIHAgPSB0YWJsZS0+bV9pdGVyYXRvcnM7IHA7
IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OwotICAgICAgICAgICAg
cC0+bV90YWJsZSA9IDA7Ci0gICAgICAgICAgICBwLT5tX25leHQgPSAwOwotICAgICAgICAgICAg
cC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgICAgICBwLT5tX3RhYmxlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHAtPm1fbmV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX3ByZXZpb3Vz
ID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBtX2l0ZXJhdG9ycyA9IDA7CisgICAgICAg
IHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2
b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogdGFibGUsCi0gICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSwgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90
YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5t
X3ByZXZpb3VzID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3IgYXQgaGVh
ZCBvZiBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIXRhYmxl
KSB7Ci0gICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5tX25leHQg
PSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlLT5tX2l0
ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2LDggKzE1MzIsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVy
YXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAg
ICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVy
YXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFibGUpIHsKQEAgLTE1NTksMTMgKzE1NTUsMTgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGl0LT5tX3RhYmxlID0gMDsKLSAgICAg
ICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAg
aXQtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAg
ICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAgIH0KIAogI2VuZGlmIC8vIENIRUNL
X0hBU0hUQUJMRV9JVEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsK
KwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90
YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZh
bHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAu
aCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzI3YWJh
ZTc2YzNiZmQxYjM0MmFhZDc2ZjJmMWY3ZDM3YTA1OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0g
RGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxL
ZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+
Cit1c2luZyBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8VmFsdWVBcmcs
IEhhc2hBcmcsIFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0
cz47CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
ID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJh
aXRzPE1hcHBlZEFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8VmFs
dWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RSb2Jpbkhv
b2RIYXNoTWFwOwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDg1ZTFiOWI5OTNmOGE5Yzg1MWMzNTQzNGM2MDlm
OGNjMTg4MjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcg
PSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNo
U2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0
Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hTZXQg
PSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RIYXNo
VGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1vcnlD
b21wYWN0Um9iaW5Ib29kSGFzaFNldDsKK3VzaW5nIFdURjo6RmFzdFJvYmluSG9vZEhhc2hTZXQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjM2RjNWNlYzM0YTg0
ZWNkNmViYTA5OTlhMmM3NzFhNDQ2MjY3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApAQCAtMCwwICsxLDc3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+CitjbGFzcyBSb2Jpbkhvb2RIYXNoVGFibGU7CisKK3N0cnVjdCBNZW1vcnlDb21wYWN0
Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7CisgICAgLy8gOTAlIGxvYWQgZmFjdG9yLiBS
b2Jpbkhvb2RIYXNoVGFibGUgY2FuIHdvcmsgd2l0aCBzdWNoIGEgaGlnaCBsb2FkLWZhY3Rvci4K
KyAgICAvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3b3JzZSB0aGFuIEhhc2hU
YWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0YWJsZSkuCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gOTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDEwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCitzdHJ1Y3QgRmFzdFJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3kgeworICAgIC8vIDgwJSBsb2FkIGZhY3RvciwgdGhpcyBtYWlu
dGFpbnMgdGhlIHBlcmZvcm1hbmNlIHNhbWUgdG8gSGFzaFRhYmxlLCBzdGlsbCB0aGUgbG9hZCBm
YWN0b3IgaXMgaGlnaGVyLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51
bWVyYXRvciA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21p
bmF0b3IgPSA1OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9
OworCisvLyBSb2Jpbkhvb2QgSGFzaFRhYmxlIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zIGNvbXBh
cmVkIHRvIHVzdWFsIEhhc2hUYWJsZSwgdGhhdCdzIHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1bHQg
b25lLgorLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBjb21wdXRlcyBoYXNoIG11Y2ggbW9yZSBmcmVx
dWVudGx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIEtleSBzaG91bGQgY2FjaGUgY29tcHV0ZWQgaGFz
aC4KKy8vIEJ1dCBvdXIgZGVmYXVsdCBIYXNoVGFibGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2YWx1
ZSBiZWNhdXNlIG9mIG1lbW9yeSB1c2FnZS4gVGhpcyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkgdHlw
ZQorLy8gc2hvdWxkIGhhdmUgaGFzaCB2YWx1ZSBpbnRydXNpdmVseSAoZS5nLiBXVEY6OlN0cmlu
ZyBob2xkcyBoYXNoIHZhbHVlIGludGVybmFsbHkpLgorLy8KKy8vIElmIHRoZSBhYm92ZSByZXF1
aXJlbWVudHMgbWVldCB5b3VyIHVzZSBjYXNlLCB0aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9vZCBI
YXNoVGFibGUuCisvLyBUaGUgbGFyZ2VzdCBiZW5lZml0IGlzIHRoYXQgd2UgY2FuIHVzZSBzaWdu
aWZpY2FudGx5IGhpZ2ggbG9hZC1mYWN0b3IgKDkwJSkhIFRoaXMgaXMgc3VpdGFibGUgZm9yIEF0
b21pY1N0cmluZ1RhYmxlLgorLy8KKy8vIFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hp
bmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxldGlvbiwgZGVzY3JpYmVkIGluIFsyLDNdLgorLy8KKy8v
IFsxXTogaHR0cHM6Ly9hY2NpZGVudGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0
NTQ1NTk4Ny9ydXN0LWhhc2gtaXRlcmF0aW9uLXJlaW5zZXJ0aW9uCisvLyBbMl06IGh0dHBzOi8v
Y29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTEvcm9iaW4taG9vZC1oYXNoaW5nLworLy8gWzNdOiBo
dHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNr
d2FyZC1zaGlmdC1kZWxldGlvbi8jcmVmCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY2xh
c3MgUm9iaW5Ib29kSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFibGVUeXBl
ID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OworICAgIHR5cGVkZWYgSGFzaFRhYmxl
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYg
VHJhaXRzIFZhbHVlVHJhaXRzOworICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CisgICAgdHlwZWRl
ZiBWYWx1ZSBWYWx1ZVR5cGU7CisgICAgdHlwZWRlZiBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZh
bHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPiBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOworICAgIHR5
cGVkZWYgSGFzaFRhYmxlQWRkUmVzdWx0PGl0ZXJhdG9yPiBBZGRSZXN1bHQ7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KCFLZXlUcmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbik7Cisg
ICAgc3RhdGljX2Fzc2VydChIYXNoRnVuY3Rpb25zOjpoYXNIYXNoSW5WYWx1ZSk7CisKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUoKSA9IGRlZmF1bHQ7CisKKyAgICB+Um9iaW5Ib29kSGFzaFRhYmxl
KCkKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAgIGlm
IChtX3RhYmxlKQorICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6
ZSgpKTsKKyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFz
aFRhYmxlJik7CisgICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIFJvYmlu
SG9vZEhhc2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworCisg
ICAgUm9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhv
b2RIYXNoVGFibGUmIG9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisKKyAgICAvLyBX
aGVuIHRoZSBoYXNoIHRhYmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2FtZSBpdGVyYXRv
ciBmb3IgZW5kIGFzIGZvciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAg
ICAvLyBidWNrZXRzLCBhbmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNh
c2UgdGhhdCdzIHdvcnRoIG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxlICsgdGFibGVT
aXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0Vt
cHR5KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7
CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vh
a1JhbmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAgIGlmICghaXNF
bXB0eUJ1Y2tldChidWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29k
SXRlcmF0b3IoJmJ1Y2tldCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0
b3IgcmFuZG9tKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNv
bnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsgfQorCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV90YWJsZSk7CisgICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAgICAgIHVuc2ln
bmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAg
ICAgIHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNv
bXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJsZSA9IGFsbG9j
YXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNp
emU7CisgICAgICAgIG1fa2V5Q291bnQgPSAwOworICAgIH0KKworICAgIEFkZFJlc3VsdCBhZGQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5
cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQorICAgIEFkZFJlc3VsdCBh
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBl
PihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCBXVEZNb3ZlKHZhbHVlKSk7IH0KKworICAgIC8v
IEEgc3BlY2lhbCB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNo
aW5nIGFuZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQg
dGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAg
IC8vIGluIHRoZSB0YWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+IEFkZFJlc3VsdCBhZGQoVCYmIGtleSwgRXh0cmEm
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJh
JiYpOworCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIGZp
bmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGZp
bmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgeyByZXR1cm4gY29udGFpbnM8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJh
dG9yIGZpbmQoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlu
cyhjb25zdCBUJikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7Cisg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhpdGVyYXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFs
dWUpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNFbXB0eUJ1Y2tldCh2YWx1ZSk7IH0KKworICAgIFZh
bHVlVHlwZSogbG9va3VwKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXA8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogaW5saW5l
TG9va3VwKGNvbnN0IFQmKTsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5j
eSgpIHsgfQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhj
ZXB0U2l6ZSgpIHsgfQorICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCkgeyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2
NF90IGtleUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
a2V5Q291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVy
YXRvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVU
YWJsZSh1bnNpZ25lZCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFs
dWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxW
YWx1ZVR5cGUqLCBib29sPiBMb29rdXBUeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29uc3QgVCYpOworCisgICAg
dm9pZCBtYWludGFpblByb2JlRGlzdGFuY2UoVmFsdWVUeXBlJiYsIHVuc2lnbmVkIGluZGV4LCB1
bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spOworCisg
ICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhW
YWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7Cisg
ICAgdm9pZCByZW1vdmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KTsKKyAgICBib29sIHNo
b3VsZEV4cGFuZCgpIGNvbnN0IHsgcmV0dXJuIHNob3VsZEV4cGFuZChrZXlDb3VudCgpLCB0YWJs
ZVNpemUoKSk7IH0KKyAgICBib29sIG11c3RSZWhhc2hJblBsYWNlKCkgY29uc3QgeyByZXR1cm4g
a2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAqIDI7IH0KKyAgICBib29sIHNob3Vs
ZFNocmluaygpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkgKiBtaW5Mb2FkIDwgdGFibGVTaXpl
KCkgJiYgdGFibGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7IH0KKyAgICBW
YWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cik7CisgICAgdm9pZCBz
aHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIsIG51bGxwdHIpOyB9CisgICAgdm9pZCBz
aHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNpZ25lZCBuZXdU
YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOworICAgIFZhbHVlVHlwZSogcmVpbnNlcnQoVmFs
dWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUm
IGJ1Y2tldCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1
bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBo
YXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBw
cm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXpl
LCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXpl
IC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAg
ICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9y
IG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9p
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRv
ciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0K
KyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUq
IHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsg
dGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisgICAgc3RhdGljIHZvaWQgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6bWF4TG9hZE51bWVyYXRv
cjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IFNp
emVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1pbkxvYWQgPSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAgdW5zaWduZWQgdGFibGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25lZCB0YWJsZVNp
emVNYXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAgdW5zaWduZWQg
a2V5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisKKyAgICBWYWx1ZVR5cGUq
IG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKworI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVS
QVRPUlMKK3B1YmxpYzoKKyAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3JzIHNob3VsZCBi
ZSBndWFyZGVkIHdpdGggbV9tdXRleC4KKyAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0
ZXJhdG9ycyB7IG51bGxwdHIgfTsKKyAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hU
YWJsZSBjYW4gc3RpbGwgYmUgbWVtbW92ZSdkIG9yIG1lbWNweSdlZC4KKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4IHsgbWFrZVVuaXF1ZTxMb2NrPigpIH07CisjZW5k
aWYKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bG9va3VwKGNv
bnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVMb29rdXA8SGFz
aFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUg
YXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1cChjb25zdCBU
JiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKKworICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFibGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgp
OworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVk
IGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0g
ZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7
CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSAr
IGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1haW50YWlu
cyB0aGlzIGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHByb2Jpbmcg
d2hlbiBkaXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0aW5nIGVu
dHJ5LgorICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
OworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpo
YXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVx
dWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgICAg
IGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNr
ZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8VHJhaXRzOjplbXB0eVZhbHVl
SXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1Y2tldCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRk
UmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBleHBh
bmQobnVsbHB0cik7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisg
ICAgQVNTRVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOwor
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhh
c2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVz
aXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisK
KyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkgeworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0
ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50
aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7CisKKyAgICAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9tRGVzaXJlZCA9IHByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFu
Y2UgPiBkaXN0YW5jZUZyb21EZXNpcmVkKSB7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGlu
ZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisg
ICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAg
ICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8
VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRh
aW5Qcm9iZURpc3RhbmNlKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBkaXN0YW5jZUZy
b21EZXNpcmVkLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytk
aXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpZiAoc2hvdWxk
RXhwYW5kKCkpCisgICAgICAgIGVudHJ5ID0gZXhwYW5kKGVudHJ5KTsKKworICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93
bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgorQUxXQVlTX0lOTElORSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
bWFpbnRhaW5Qcm9iZURpc3RhbmNlKFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKQorewor
ICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNF
bXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9F
bXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBl
bnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXpl
TWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAg
ICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlz
dGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1h
c2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXh0cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGlj
eT46OmFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1
bHQKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CisKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIGV4cGFuZChu
dWxscHRyKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBB
U1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9
IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVk
SW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAg
IFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVu
dHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkp
KSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRyeUhh
c2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZyb21E
ZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7
CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAgICAg
ICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2JlLWRp
c3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0g
V1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgq
ZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwg
aGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RGTW92ZShleGlzdGlu
Z0VudHJ5KSwgaW5kZXgsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291
bnQgKz0gMTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZW50cnkgPSBleHBh
bmQoZW50cnkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAg
IHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cywgU2l6ZVBvbGljeT46OnJlaW5zZXJ0KFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBWYWx1ZVR5
cGUqCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNp
emVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBJZGVudGl0eVRy
YW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOworICAgIHVuc2ln
bmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBk
aXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5
ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7
CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZyb21EZXNp
cmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7Cisg
ICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAgICAgICAg
IFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAg
KmVudHJ5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFu
Y2UoV1RGTW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNp
emUsIHNpemVNYXNrKTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5j
ZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7CisgICAgaWYg
KCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5
ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisgICAgICAg
IHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgoreworICAg
IGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7
CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNv
bnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJs
ZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBw
b3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1vdmUocG9zKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9zKQoreworICAg
IGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoVmFsdWVUeXBl
KiBwb3MpCit7CisgICAgcG9zLT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgq
cG9zKTsKKyAgICBtX2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVT
aXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5z
aWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXgg
PSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAg
ICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAg
ICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5
QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlz
RW1wdHlCdWNrZXQoKnByZXZpb3VzRW50cnkpKTsKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0g
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmICghcHJv
YmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3Vz
RW50cnksIFdURk1vdmUoKmVudHJ5KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7Cisg
ICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3Vz
ID0gaW5kZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3Zl
KGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRl
cmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5s
aW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50
cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9z
aXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVu
Y3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0
ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShm
aW5kKGtleSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4g
VmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlv
biB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9l
c24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVt
cHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxWYWx1
ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Mo
c2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRh
YmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNrZXQo
cmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRlYWxsb2NhdGVU
YWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsK
KyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+OjpleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFsdWVUeXBlKgor
eworICAgIHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6
ZSgpOworICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsKKyAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQorICAgICAg
ICBuZXdTaXplID0gb2xkU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXpl
ICogMjsKKworICAgIHJldHVybiByZWhhc2gobmV3U2l6ZSwgZW50cnkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgorY29uc3RleHByIHVuc2lnbmVkIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpCit7
CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhr
ZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNvdW50LCBiZXN0VGFibGVTaXpl
KSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAgYXV0byBhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91YmxlIGxvYWRGYWN0b3IsIHVuc2lnbmVkIGtleUNv
dW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAgeworICAgICAgICAvLyBIZXJlIGlzIHRoZSBy
YXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRpb24sIHVzaW5nIDMvNCBsb2FkLWZhY3Rvci4K
KyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMvNCBhbmQgbWluTG9hZCBhdCAxLzYsIG91ciBh
dmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAgIC8vIElmIHdlIGFyZSBnZXR0aW5nIGhhbGYt
d2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2UgZG91YmxlIHRoZSBzaXplCisgICAgICAgIC8v
IHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBsb2FkTWF4IGFuZCBicmluZyB0aGUgcmF0aW8g
Y2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAgLy8gZ2l2ZSB1cyBhIGxvYWQgaW4gdGhlIGJv
dW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBkb3VibGUgbWF4TG9hZFJhdGlvID0gbG9hZEZh
Y3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRSYXRpbyA9IDEuMCAvIG1pbkxvYWQ7CisgICAg
ICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0gKG1heExvYWRSYXRpbyArIG1pbkxvYWRSYXRp
bykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJh
dGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhMb2FkUmF0aW8pIC8gMjsKKyAgICAgICAgcmV0
dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExv
YWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3RleHByIGRvdWJsZSBsb2FkRmFjdG9yID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1heExvYWREZW5vbWluYXRvcjsK
KyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlD
b3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKyAgICB1
bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwor
ICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKCkKK3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFi
bGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1h
eChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCgpKSksIG51
bGxwdHIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVl
VHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxl
U2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5zaWdu
ZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxl
KG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgbV9r
ZXlDb3VudCA9IG9sZEtleUNvdW50OworCisgICAgVmFsdWUqIG5ld0VudHJ5ID0gbnVsbHB0cjsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KG9sZEVudHJ5KSkgeworICAgICAgICAgICAgQVNTRVJUKHN0ZDo6YWRkcmVzc29mKG9sZEVu
dHJ5KSAhPSBlbnRyeSk7CisgICAgICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlKiByZWluc2VydGVk
RW50cnkgPSByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5W
YWx1ZVR5cGUoKTsKKyAgICAgICAgaWYgKHN0ZDo6YWRkcmVzc29mKG9sZEVudHJ5KSA9PSBlbnRy
eSkgeworICAgICAgICAgICAgQVNTRVJUKCFuZXdFbnRyeSk7CisgICAgICAgICAgICBuZXdFbnRy
eSA9IHJlaW5zZXJ0ZWRFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvbGRUYWJs
ZSkKKyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG9sZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAg
IHJldHVybiBuZXdFbnRyeTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQg
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGRlYWxsb2NhdGVUYWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIpLCB0YWJs
ZVNpemUoKSk7CisgICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fa2V5Q291bnQgPSAwOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikK
KyAgICA6IG1fdGFibGUoYWxsb2NhdGVUYWJsZShvdGhlci5tX3RhYmxlU2l6ZSkpCisgICAgLCBt
X2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgLCBtX3RhYmxlU2l6ZShvdGhlci5tX3Rh
YmxlU2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvdGhlci5t
X3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICBWYWx1ZVR5cGUmIG90aGVyRW50cnkgPSBv
dGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAgVmFsdWVUeXBlJiBlbnRyeSA9IG1fdGFibGVb
aW5kZXhdOworICAgICAgICBuZXcgKCZlbnRyeSkgVmFsdWVUeXBlKG90aGVyRW50cnkpOworICAg
IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAg
dXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KHRoaXMpOworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAobV90
YWJsZSwgb3RoZXIubV90YWJsZSk7CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJs
ZVNpemUpOworICAgIHN3YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpIC0+IFJvYmlu
SG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdG1wKG90aGVyKTsKKyAg
ICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9iaW5Ib29k
SGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKQoreworICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
dGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXplID0gc3RkOjpleGNoYW5nZShvdGhlci5t
X3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9r
ZXlDb3VudCwgMCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om9wZXJhdG9yPShSb2Jpbkhvb2RIYXNo
VGFibGUmJiBvdGhlcikgLT4gUm9iaW5Ib29kSGFzaFRhYmxlJgoreworICAgIFJvYmluSG9vZEhh
c2hUYWJsZSB0ZW1wID0gV1RGTW92ZShvdGhlcik7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK3N0cnVjdCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlVHJh
aXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1
Y3QgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBU
YWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3k+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0
cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEyZGYwYmNmZWYxNDZjM2IyZWU4OWZlNzExN2Y1
ZmEuLmExOGIzY2JkODgwMDJkMzlkZmNiMmVjMTc0M2E5NzVkNGVmNGNkYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIEF0b21T
dHJpbmdUYWJsZUxvY2tlciB7CiAKICNlbmRpZiAvLyBVU0UoV0VCX1RIUkVBRCkKIAotdXNpbmcg
U3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+OwordXNpbmcg
U3RyaW5nVGFibGVJbXBsID0gQXRvbVN0cmluZ1RhYmxlOjpTdHJpbmdUYWJsZUltcGw7CiAKIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1wbCYgc3RyaW5nVGFibGUoKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCmluZGV4IGUwYzBhZmJhZWE0MzY4NjFi
OGI4ZTQxZWUwNzZhZTJjNzQyMjRiY2YuLjg2ZWQyNWYyOGVjMDg2NjhlZjVlNGE1NmEyNDk3NWQy
MDFmYThlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIEF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSgpCiB7Ci0gICAgZm9yIChjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIHN0cmlu
ZyA6IG1fdGFibGUpCisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBtX3RhYmxlKQogICAg
ICAgICBzdHJpbmctPnNldElzQXRvbShmYWxzZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFiYzEyYzRlMzA0NTExM2E1
N2UuLjI0NWEzYTYyMDFhNTBkZjI2NTlkYzE5MTBlMDc5ZTA1NTdkNDEyNTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAtMjIsOCArMjIsOSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgor
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC0zMywxMiArMzQsMTUgQEAgY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21T
dHJpbmdUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAg
dXNpbmcgU3RyaW5nRW50cnkgPSBQYWNrZWRQdHI8U3RyaW5nSW1wbD47CisgICAgdXNpbmcgU3Ry
aW5nVGFibGVJbXBsID0gRmFzdFJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nRW50cnk+OworCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFj
a2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3Ry
aW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAg
ICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJs
ZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggNWE4
Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYxYmRmMjFiNThkYmY2
Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTkw
LDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9
OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424682</attachid>
            <date>2021-03-30 13:31:02 -0700</date>
            <delta_ts>2021-03-30 16:26:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210330133101.patch</filename>
            <type>text/plain</type>
            <size>111245</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi45YjU4NzEyYWU5NjkyMGFk
ZDM5M2E4MDI5YzI0NjgzMThjMmYxMWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJ
IGZvciBjYW5vbmljYWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDA0Y2E5YTZkZDNiOGQ5MTczOTM5NWM4Nzc2OGVl
YjBhYjEwMjBmNjQuLmM4NDlhODhlODU5OGQxNzNlNWFiNzFmNDdiYzM5ZDE2MTZmYzBjODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAyIEBACisyMDIxLTAzLTMwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAg
ICAoV1RGOjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6
CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
c0FyZz46OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0
KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Zmlu
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJh
aXRzQXJnPjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3Zl
SWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46
OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAg
IChXVEY6Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Vz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgor
ICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6Cisg
ICAgICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojph
ZGQpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92
ZUlmKToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2Up
OgorICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAg
KFdURjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpz
d2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6YWRkVm9pZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
Ojp0YWtlQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+Ojppc1ZhbGlkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tD
b25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgor
ICAgICAgICAoV1RGOjphZGRJdGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9y
KToKKyAgICAgICAgKFdURjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6fkhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5
Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToK
KyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmlu
SG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFz
aFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5k
b20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkU2hyaW5rIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaHJpbmspOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlc2lyZWRJbmRleCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6cHJvYmVEaXN0YW5jZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjptYWtlQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6bWFrZUtub3duR29vZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemVNYXNrIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjprZXlDb3VudCBjb25zdCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpjaGVja0tleSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojps
b29rdXApOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6aW5saW5lTG9va3VwKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6YWRkKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46Om1haW50YWluUHJv
YmVEaXN0YW5jZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6ZmluZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFs
aWRhdGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAg
ICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OlNp
emVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
ZXhwYW5kKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXpl
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnNocmlua1RvQmVzdFNpemUpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmNsZWFyKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZSk6
CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6Cisg
ICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0
L0F0b21TdHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0
b21TdHJpbmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6Cisg
ICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0
L1N0cmluZ0hhc2guaDoKKwogMjAyMS0wMy0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIHd0Zi9WZWN0b3IuaDoxMjc2Ojg4OiBydW50aW1lIGVycm9yOiByZWZl
cmVuY2UgYmluZGluZyB0byBudWxsIHBvaW50ZXIgb2YgdHlwZSAnY29uc3QgV2ViQ29yZTo6U3R5
bGU6OlJ1bGVGZWF0dXJlJwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA3ZGM4YTkyM2Y0MDg5OGQ5
NTFlZDI5MGE5YzU3NTU3ZTA5NTdiNTk0Li43Mjc3NzJlYTFkZGQxOTg4NDliOTEyNDA5M2FmZDNj
Mzk0OTM0ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtODgsNiArODgsNyBAQAogI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hTZXQuaD4KIAogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8ZGlyZWN0Lmg+CkBAIC0x
Mjg0LDExICsxMjg1LDc1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsCiAKIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvblByaW50U3RkT3V0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2gg
c3RvcFdhdGNoOworICAgIHN0b3BXYXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgUm9iaW5I
b29kSGFzaFNldDxTdHJpbmc+IHN0cmluZ1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAg
ICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQor
ICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAg
ICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYg
MHgxKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJp
bmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAg
ICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAg
fQorICAgIHN0b3BXYXRjaC5zdG9wKCk7CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFw
c2VkTVMoKSk7CisjZW5kaWYKICAgICByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgc3Rkb3V0KTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uUHJpbnRTdGRFcnIsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkpCiB7CisjaWYgMAorICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgc3Rv
cFdhdGNoLnN0YXJ0KCk7CisgICAgeworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFi
bGU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAg
ICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3Ry
aW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJs
ZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpICYgMHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJl
bW92ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0
cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7
ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIXN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAg
ICAgICAgc3RyaW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmlu
Zzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmlu
Zzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9n
TG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAg
ICBkYXRhTG9nTG4oc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVy
biBwcmludEludGVybmFsKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdGRlcnIpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNmI0NWU1NTNiMDY3
ZTI0MDMyN2NjODg2N2VjN2M4YzgxNDY3ZTVmLi41ZjMwYzlhNTYxMzdiM2MzMWQzMGRiYWI1MzE5
MzllYjNjODk4YTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTcxNyw3ICs3MTcsOSBAQAogCQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFk
R3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkR3JvdXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNDlBM0EyMjhCRENBQjAwQkZBNkM3IC8q
IENvbmN1cnJlbnRCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29uY3VycmVudEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
MUJERTI4MjJFOTEzQ0MwMDI5QjEwNSAvKiBNYWNoVk1TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFjaFZNU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jpbkhvb2RIYXNoVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUm9iaW5Ib29kSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlZ2lzdGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5I
b29kSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkEyMDczMjNDNTkwMkQwMDM0QTA5MiAvKiBOYWtlZFJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYWtlZFJlZi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzM5QzE2MzI0NEI0RTg3MDAzNTlEQTkgLyogRGF0YVJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhUmVmLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Q1Rjg3MUZCRUQ2NjcwMEJGNjI1RSAvKiBSZWN1cnNh
YmxlTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2FibGVM
YW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczOCw2ICs3NDAsNyBAQAog
CQlFM0EzMkJDMzFGQzgzMEUyMDA3RDdFNzYgLyogSlNWYWx1ZU1hbGxvYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhbHVlTWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzQjhFNDFDMjRFN0NFOTIwMDM2NTVEOCAvKiBMaW5lQnJlYWtJdGVyYXRv
clBvb2xJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGluZUJy
ZWFrSXRlcmF0b3JQb29sSUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNC
RTA5QTYyNEE1ODU0NTAwOURGMkI0IC8qIElDVUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSUNVSGVscGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzQzU4M0M4
MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RIYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJv
YmluSG9vZEhhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNDRjc2OTAy
MTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFBvaW50ZXJUdXBsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFM0UxNTgyNTFFQURBNTNDMDA0QTA3OUQgLyogU3lzdGVtRnJlZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1GcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzRTY0RjBCMjI4MTM0MjgwMDFFNTVCNCAvKiBOb25tb3ZhYmxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vbm1vdmFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyMTEsNiArMTIxNCw5IEBACiAJCQkJQThBNDczMDMxNTFBODI1QjAwNDEyM0ZGIC8q
IFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAvKiBSZXNvdXJjZVVz
YWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1QjAwNDEyM0ZGIC8qIFJldGFpblB0ci5oICov
LAorCQkJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RIYXNoTWFwLmggKi8s
CisJCQkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLywK
KwkJCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8s
CiAJCQkJMkNERUQwRjExODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwICovLAogCQkJCTJD
REVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8sCiAJCQkJMTRGM0IwRjYxNUU0
NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKaW5kZXggYjM1Yzc1MmQyYzAwZTFhNTIyZDE1NDJkYTdlYjY1YjZkMmZjOTE3OC4uZTFmYTU0
NWE0MDE3OGVhMzIzNzA4OTM5NjNiYjRkYThlZjU4OGUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
QEAgLTIxNCw2ICsyMTQsOSBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgUmVmUHRyLmgK
ICAgICBSZXNvdXJjZVVzYWdlLmgKICAgICBSZXRhaW5QdHIuaAorICAgIFJvYmluSG9vZEhhc2hN
YXAuaAorICAgIFJvYmluSG9vZEhhc2hTZXQuaAorICAgIFJvYmluSG9vZEhhc2hUYWJsZS5oCiAg
ICAgUnVuTG9vcC5oCiAgICAgU0hBMS5oCiAgICAgU2F0dXJhdGVkQXJpdGhtZXRpYy5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmgKaW5kZXggNDE5OGU4Njg4OTVjN2NkZDE0NTU3MGEyMTkxMmQ2NWFjNjM3ODljNC4uM2Q5ZWI3
OGIzNThlNzM1YWNiYTUwYTQwNjUzMTg3NjhhNzMyZjVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtOTMsOSAr
OTMsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBFbnVtVHJhaXRzOwogdGVtcGxhdGU8
dHlwZW5hbWUgRSwgRS4uLj4gc3RydWN0IEVudW1WYWx1ZXM7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IEhhc2hUcmFpdHM7CiAKK3N0cnVjdCBIYXNoVGFibGVUcmFpdHM7CitzdHJ1Y3QgSWRl
bnRpdHlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWly
S2V5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHM+IHN0cnVjdCBLZXlWYWx1ZVBhaXJUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+IHN0cnVjdCBLZXlWYWx1ZVBhaXI7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPiBjbGFzcyBIYXNoVGFibGU7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
PSBEZWZhdWx0SGFzaDxWYWx1ZT4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZT4+IGNsYXNz
IEhhc2hDb3VudGVkU2V0OwotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJh
aXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PiBjbGFzcyBIYXNo
TWFwOwotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8
VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PiBjbGFzcyBIYXNoU2V0
OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
ID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5
cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0
cz4gY2xhc3MgSGFzaE1hcDsKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9
IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPiwg
dHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7CiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5o
CmluZGV4IGJmNmI4YmFjNGVkYjJkZmExZjZjYzAwZjNiZTFmNjQxYTExODViY2YuLjg5MDFiNWYz
ZjI3OWI4YmUwMzY1MGM3YzJhZGViNjFiMGFlZmE5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKQEAgLTMxLDcgKzMx
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3Rv
ciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3Qg
VCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiBj
bGFzcyBIYXNoTWFwIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZh
dGU6CkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEhhc2hNYXAgZmluYWwgewogCiAgICAgdXNpbmcg
SGFzaEZ1bmN0aW9ucyA9IEhhc2hBcmc7CiAKLSAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFz
aFRhYmxlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3Rv
cjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0
c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5cGUsIEtleVZh
bHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0aW9ucywgS2V5
VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+OwogCiAgICAgY2xhc3MgSGFzaE1hcEtleXNQcm94
eTsKICAgICBjbGFzcyBIYXNoTWFwVmFsdWVzUHJveHk7CkBAIC0yMzIsOTEgKzIzMiw4OSBAQCBz
dHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c3dhcChIYXNoTWFwJiBvdGhl
cikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVy
Lm1faW1wbCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnNpemUoKSBjb25zdAogewogICAg
IHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25l
ZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNh
cGFjaXR5KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzRW1wdHko
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmlzRW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNF
bXB0eSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6YmVnaW4oKSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgLT4gaXRlcmF0b3IKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgp
IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkgY29uc3QgLT4g
Y29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7
CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5k
KGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZp
bmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgog
ewogICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5l
IGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5
KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0
b3IKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpCitpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVl
KSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFw
VHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFt
ZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciAKLUhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBj
b25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFw
VHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVr
VHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3QgVFlQRSYgdmFs
dWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0byogZW50cnkgPSBjb25zdF9j
YXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGxvb2t1cDxIYXNoTWFwVHJhbnNs
YXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsK
ICAgICBpZiAoIWVudHJ5KQpAQCAtMzI0LDkgKzMyMiw5IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQog
ICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5s
aW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQorYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNv
bnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0byogZW50cnkgPSBjb25zdF9jYXN0PEhh
c2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNs
YXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsK
ICAgICBpZiAoIWVudHJ5KQpAQCAtMzM0LDE2ICszMzIsMTYgQEAgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBl
ZWtUeXAKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lubGluZSBib29s
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBj
b25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaE1hcFRyYW5z
bGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+
IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYm
IGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBBZGRSZXN1bHQgcmVzdWx0ID0g
aW5saW5lQWRkKHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsK
ICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CkBAIC0zNTMsOTEgKzM1MSw5MSBAQCBhdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnPjo6aW5saW5lUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFi
bGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotQUxXQVlTX0lO
TElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRk
UmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5s
aW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1f
aW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBI
YXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1
ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgRj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUVuc3VyZShL
JiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9y
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFw
RW5zdXJlVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6
OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPEY+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6
c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBw
ZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVTZXQoa2V5LCBzdGQ6OmZvcndh
cmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KEtleVR5
cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVT
ZXQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVl
KSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEsmJiBr
ZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0
ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3
YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBt
YXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQo
Y29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojph
ZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
LCBUYWJsZVRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJk
PFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5
VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYm
IG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6
Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKEtl
eVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1h
cHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSks
IHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4K
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0
IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9y
JiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUVuc3VyZShrZXks
IHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3Vy
ZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CithdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYg
ZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUVuc3VyZShzdGQ6OmZv
cndhcmQ8S2V5VHlwZT4oa2V5KSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
ICAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFw
cGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBw
ZWRQZWVrVHlwZQogewogICAgIHJldHVybiBnZXQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cywgdHlwZW5h
bWUgWT4KK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0
cywgWT46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtU
eXBlCiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJs
ZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxJZGVudGl0eVRyYW5zbGF0b3JU
eXBlPihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC00NDUsOCArNDQzLDggQEAgQUxXQVlTX0lO
TElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0KGNv
bnN0IEtleVR5cGUmIGsKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAg
IGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00NTUsMjcgKzQ1MywyNyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpy
ZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9y
KQoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlSWYoRnVuY3Rv
ciYmIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJuIG1faW1wbC5yZW1vdmVJZihzdGQ6OmZvcndhcmQ8
RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIHJldHVybiByZW1vdmUoZmluZChrZXkpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNs
ZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+OjpjbGVhcigpCiB7CiAgICAgbV9pbXBsLmNsZWFyKCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0cz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+
Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5cGUKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHMsIFk+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5cGUKIHsK
ICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5kKCkpCkBAIC00
ODUsMzAgKzQ4MywzMCBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6
dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeQogICAgIHJldHVybiB2YWx1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZCh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6
UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZh
bHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8
SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZCh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCitp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKHR5cGVuYW1lIEdldFB0
ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBl
IGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFs
dWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpj
b250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUK
IHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9y
PEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVy
PEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQogewogICAgIEtleVZhbHVlUGFp
clR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0
ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
RnVuY3Rpb25zPj4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNTE2LDIzICs1MTQsMjMgQEAg
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZQogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50
cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQor
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVy
PEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQogewogICAgIHJldHVybiBpbmxp
bmVHZXQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUoZmluZChrZXkp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKIHsKICAgICBpdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5kKCkpCkBAIC01NDIsMTQgKzU0MCwxNCBAQCBpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSBrZXkpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNr
VGFibGVDb25zaXN0ZW5jeSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgaWYgKEtleVRyYWl0czo6aXNE
ZWxldGVkVmFsdWUoa2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY1LDEzICs1NjMs
MTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNWYWxpZEtleShjb25z
dCBLZXlUeXBlJiBrZXkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1ib29s
IG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citib29sIG9wZXJh
dG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKIAogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAgICAgY29uc3Rf
aXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwpAQCAtNTg0LDggKzU4Miw4IEBAIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+JiBiCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0
IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoU2V0LmgKaW5kZXggNzRjMDllMDVhYmUzYjMwZDA0NTAxN2E4MWZlMjQzNzBiNmUx
YjhiZC4uMDM1YTkwN2Q1ZjhlODU5YjUyMTYwZmQ0OTMzM2JjMmRkMDUyZWQ0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQu
aApAQCAtMjcsOSArMjcsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RydWN0IElkZW50aXR5
RXh0cmFjdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+
CiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHBy
aXZhdGU6CkBAIC00MSw4ICszOSw3IEBAIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRyYWl0VHlwZSBWYWx1ZVR5cGU7CiAKIHByaXZhdGU6
Ci0gICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0
cmFjdG9yLAotICAgICAgICBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+
IEhhc2hUYWJsZVR5cGU7CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50
aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+Owog
CiBwdWJsaWM6CiAgICAgLyoKQEAgLTE3MSwxMDIgKzE2OCwxMDIgQEAgc3RydWN0IEhhc2hTZXRU
cmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnN3YXAo
SGFzaFNldCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6c3dhcChI
YXNoU2V0JiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOyAKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXpl
KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Citpbmxp
bmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2FwYWNpdHkoKSBjb25zdAogewogICAg
IHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc0Vt
cHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojppc0VtcHR5KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFY+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxU
LCBVLCBWLCBXPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuYmVnaW4oKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjplbmQoKSBjb25zdCAtPiBpdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmVuZCgpIGNvbnN0IC0+IGl0
ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFY+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZCh2YWx1ZSk7IAog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpjb250YWlucyhjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnModmFs
dWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQoY29uc3QgVCYgdmFsdWUpIGNvbnN0IC0+
IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFu
c2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKK2lubGluZSBib29s
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpjb250
YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVl
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAt
PiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5hZGQo
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAt
PiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoVmFsdWVU
eXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwuYWRkKFdURk1v
dmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgbV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBI
YXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCiB7CiAgICAg
bV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2lubGluZSBhdXRvIEhhc2hTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjphZGQoY29uc3QgVCYg
dmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFz
c2luZ0hhc2hDb2RlPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlLCB2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkK
K2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4s
IEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgZm9y
IChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjc0
LDkgKzI3MSw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKK2lubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBl
bmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgZm9yIChJdGVyYXRvclR5cGUg
aXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMjg0LDggKzI4MSw4IEBAIGlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0
ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBX
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVu
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTQsMjcgKzI5MSwyNyBAQCBpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlSWYoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJl
bW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJuIG1faW1wbC5yZW1v
dmVJZihmdW5jdG9yKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmNsZWFyKCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
dm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjbGVhcigpCiB7CiAgICAgbV9pbXBsLmNsZWFyKCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBU
YWtlVHlwZQogewogICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgcmV0dXJuIFZhbHVlVHJh
aXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0eVZhbHVlKCkpOwpAQCAtMzI0LDQ4ICszMjEsNDgg
QEAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFr
ZVR5cGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKIHsK
ICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlQW55KCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0
YWtlQW55KCkgLT4gVGFrZVR5cGUKIHsKICAgICByZXR1cm4gdGFrZShiZWdpbigpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRh
YmxlVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBp
dGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNl
dFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgot
aW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFp
bnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFp
dHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29s
Pjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRy
YW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5s
aW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6cmVtb3Zl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRy
SGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmlu
ZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNWYWxp
ZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgaWYgKFZhbHVlVHJhaXRzOjpp
c0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4MSw5ICsz
NzgsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNv
bGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVy
Q29sbGVjdGlvbikgY29uc3QKIHsKICAgICBpZiAoc2l6ZSgpICE9IG90aGVyQ29sbGVjdGlvbi5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5NCwyMiArMzkxLDIyIEBAIGlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9u
JiBvdGhlckNvbGxlY3Rpb24pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJD
b2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3IhPShjb25z
dCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhl
ckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXJDb2xsZWN0
aW9uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LXZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgordm9pZCBIYXNoU2V0PFQs
IFUsIFYsIFc+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKIHsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbGlz
dCkKICAgICAgICAgYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNoZWNr
Q29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgKaW5kZXggNmQ0YjJjOGY3MmIyZTAzNmMxNjAwMTBjMGE2Mjk1ODdj
NWVkZjBhOC4uZDM5OTc5YTQxZWFjOGRlYWEzN2U0NTc5OGMyNGUyYmMwNzhlNGRiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgKQEAgLTc5LDQ2ICs3OSw0OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogCiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgY2xhc3Mg
SGFzaFRhYmxlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgotICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0
ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlwZSopOwog
CiAjaWYgIUNIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5l
IHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAg
aW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5l
IHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0
b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRv
cnMoY29uc3QgSGFzaFRhYmxlVHlwZSopIHsgfQogCiAjZW5kaWYKIAogICAgIHR5cGVkZWYgZW51
bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1Lbm93bkdvb2RUYWc7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZSosIGNvbnN0IFZhbHVlJj4gewog
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFi
bGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRl
cmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAg
ICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0
eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Owor
ICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAgICAgICAgZnJpZW5kIGl0ZXJhdG9yOwog
CiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpCiAgICAgICAgIHsKQEAgLTI0MywxOCAr
MjQ1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRv
cjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIFZhbHVl
KiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHByaXZh
dGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFzaFRhYmxl
VHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFZhbHVl
IFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CiAg
ICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKIAotICAgICAgICBmcmllbmQg
Y2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKIAogICAgICAg
ICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJsZSwgUG9pbnRlclR5cGUgcG9z
LCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBlbmQpIHsgfQogICAg
ICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJsZSwgUG9pbnRlclR5cGUg
cG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25vd25Hb29kVGFnIHRhZykgOiBtX2l0ZXJh
dG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAgLTM0Nyw4ICszNDksOSBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVy
YXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBp
dGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0
czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBW
YWx1ZVR5cGU7CkBAIC00MDcsNyArNDEwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgSGFzaFRhYmxlKCk7CiAgICAgICAgIH5I
YXNoVGFibGUoKSAKICAgICAgICAgewotICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OyAKKyAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7IAogICAgICAgICAgICAg
aWYgKG1fdGFibGUpCiAgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUpOwog
I2lmIENIRUNLX0hBU0hUQUJMRV9VU0VfQUZURVJfREVTVFJVQ1RJT04KQEAgLTU1OSwxMiArNTYy
LDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsg
fQogI2VuZGlmCiAKLSNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAgICAgIHZvaWQg
aW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotI2Vsc2UKLSAgICAgICAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpIHsgfQotI2VuZGlmCi0KICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9y
IHNtYWxsIHRhYmxlIGlzIDc1JS4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBz
bWFsbE1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWRO
dW1lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2Fk
RGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWREZW5vbWluYXRv
cjsKQEAgLTg1Niw3ICs4NTMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkp
OwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OwogCkBAIC05MzIsNyArOTI5LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9y
PihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAg
ICBleHBhbmQobnVsbHB0cik7CkBAIC0xMDE3LDcgKzEwMTQsNyBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlmICghbV90
YWJsZSkKICAgICAgICAgICAgIGV4cGFuZCgpOwpAQCAtMTExMCwxNCArMTEwNywxNCBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBy
ZW1vdmUocG9zKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1v
dmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9zKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICByZW1vdmUocG9zKTsK
ICAgICB9CkBAIC0xMzczLDcgKzEzNzAsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNs
ZWFyKCkKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52
YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xNDA5LDggKzE0MDYsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OnN3YXAoSGFzaFRhYmxlJiBvdGhlcikKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnMoKTsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZv
dGhlcik7CiAKICAgICAgICAgc3RkOjpzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOwogCkBA
IC0xNDM0LDcgKzE0MzEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICAsIG1fbXV0ZXgobWFrZVVuaXF1ZTxMb2NrPigpKQogI2Vu
ZGlmCiAgICAgewotICAgICAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBtX3RhYmxlID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKIApAQCAtMTUwMCwzMCArMTQ5NywyOSBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAj
aWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRh
YmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUpCiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX211dGV4
KTsKLSAgICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7Ci0gICAgICAgIGZvciAoY29uc3RfaXRl
cmF0b3IqIHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOworICAgICAgICB0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlOjpjb25zdF9pdGVyYXRvciogbmV4dDsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNo
VGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciogcCA9IHRhYmxlLT5tX2l0ZXJhdG9yczsgcDsgcCA9
IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBwLT5tX25leHQ7Ci0gICAgICAgICAgICBwLT5t
X3RhYmxlID0gMDsKLSAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBwLT5t
X3ByZXZpb3VzID0gMDsKKyAgICAgICAgICAgIHAtPm1fdGFibGUgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSBu
dWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIG1faXRlcmF0b3JzID0gMDsKKyAgICAgICAgdGFi
bGUtPm1faXRlcmF0b3JzID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQg
YWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiogaXQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2
b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlLCBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIGl0LT5tX3RhYmxl
ID0gdGFibGU7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAgaXQtPm1fcHJl
dmlvdXMgPSBudWxscHRyOwogCiAgICAgICAgIC8vIEluc2VydCBpdGVyYXRvciBhdCBoZWFkIG9m
IGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghdGFibGUpIHsK
LSAgICAgICAgICAgIGl0LT5tX25leHQgPSAwOworICAgICAgICAgICAgaXQtPm1fbmV4dCA9IG51
bGxwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKCp0YWJsZS0+bV9tdXRleCk7CiAgICAgICAgICAgICBBU1NFUlQodGFibGUtPm1faXRlcmF0
b3JzICE9IGl0KTsKQEAgLTE1MzYsOCArMTUzMiw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9y
KEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAg
ICAgLy8gRGVsZXRlIGl0ZXJhdG9yIGZyb20gZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9y
cy4KICAgICAgICAgaWYgKCFpdC0+bV90YWJsZSkgewpAQCAtMTU1OSwxMyArMTU1NSwxOCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaXQtPm1fdGFibGUgPSAwOwotICAgICAgICBp
dC0+bV9uZXh0ID0gMDsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOworICAgICAgICBpdC0+
bV90YWJsZSA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgfQogCiAjZW5kaWYgLy8gQ0hFQ0tfSEFT
SFRBQkxFX0lURVJBVE9SUwogCisgICAgc3RydWN0IEhhc2hUYWJsZVRyYWl0cyB7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgICAgIHVzaW5nIFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB9OworCiAg
ICAgLy8gaXRlcmF0b3IgYWRhcHRlcnMKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JB
ZGFwdGVyIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
VmFsdWVUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWVUeXBlKiwgY29uc3QgVmFsdWVU
eXBlJj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oIGIv
U291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3MjdhYmFlNzZj
M2JmZDFiMzQyYWFkNzZmMmYxZjdkMzdhMDU4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZh
dWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFy
Zz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4KK3Vz
aW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxWYWx1ZUFyZywgSGFz
aEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIEZhc3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxWYWx1ZUFy
ZywgSGFzaEFyZywgVHJhaXRzQXJnLCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhh
c2hNYXA7Cit1c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29k
SGFzaFNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwODVlMWI5Yjk5M2Y4YTljODUxYzM1NDM0YzYwOWY4Y2Mx
ODgyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0
LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhh
c2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQg
PSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RSb2Jp
bkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJn
ID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaFNldCA9IEhh
c2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJs
ZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBh
Y3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkwZTkwNjM5NmQ1ZDIxM2Qx
Y2M5NjcwNjk4MDdkYmMzZDRkY2E5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsNzUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworc3RydWN0IE1lbW9yeUNvbXBhY3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA5MCUgbG9hZCBmYWN0b3IuIFJvYmlu
SG9vZEhhc2hUYWJsZSBjYW4gd29yayB3aXRoIHN1Y2ggYSBoaWdoIGxvYWQtZmFjdG9yLgorICAg
IC8vIE9ic2VydmVkIHBlcmZvcm1hbmNlIGlzIHNsaWdodGx5IHdvcnNlIHRoYW4gSGFzaFRhYmxl
ICg3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCUgZm9yIGxhcmdlIHRhYmxlKS4KKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSA5OworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gMTA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFz
aFRhYmxlU2l6ZVBvbGljeSB7CisgICAgLy8gODAlIGxvYWQgZmFjdG9yLCB0aGlzIG1haW50YWlu
cyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFibGUsIHN0aWxsIHRoZSBsb2FkIGZhY3Rv
ciBpcyBoaWdoZXIuCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJh
dG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRv
ciA9IDU7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisK
Ky8vIFJvYmluSG9vZCBIYXNoVGFibGUgaGFzIHNldmVyYWwgbGltaXRhdGlvbnMgY29tcGFyZWQg
dG8gdXN1YWwgSGFzaFRhYmxlLCB0aGF0J3Mgd2h5IHRoaXMgaXMgbm90IGEgZGVmYXVsdCBvbmUu
CisvLyBSb2Jpbkhvb2QgSGFzaFRhYmxlIGNvbXB1dGVzIGhhc2ggbXVjaCBtb3JlIGZyZXF1ZW50
bHkuIFRoaXMgbWVhbnMgdGhhdCB0aGUgS2V5IHNob3VsZCBjYWNoZSBjb21wdXRlZCBoYXNoLgor
Ly8gQnV0IG91ciBkZWZhdWx0IEhhc2hUYWJsZSBkb2VzIG5vdCBjYWNoZSBoYXNoIHZhbHVlIGJl
Y2F1c2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGlzIGRlc2lnbiBtZWFucyB0aGF0IEtleSB0eXBlCisv
LyBzaG91bGQgaGF2ZSBoYXNoIHZhbHVlIGludHJ1c2l2ZWx5IChlLmcuIFdURjo6U3RyaW5nIGhv
bGRzIGhhc2ggdmFsdWUgaW50ZXJuYWxseSkuCisvLworLy8gSWYgdGhlIGFib3ZlIHJlcXVpcmVt
ZW50cyBtZWV0IHlvdXIgdXNlIGNhc2UsIHRoZW4geW91IGNhbiB0cnkgUm9iaW5Ib29kIEhhc2hU
YWJsZS4KKy8vIFRoZSBsYXJnZXN0IGJlbmVmaXQgaXMgdGhhdCB3ZSBjYW4gdXNlIHNpZ25pZmlj
YW50bHkgaGlnaCBsb2FkLWZhY3RvciAoOTAlKSEgVGhpcyBpcyBzdWl0YWJsZSBmb3IgQXRvbWlj
U3RyaW5nVGFibGUuCisvLworLy8gVGhlIGFsZ29yaXRobSBpcyBSb2Jpbkhvb2QtSGFzaGluZyAr
IGJhY2t3YXJkIHNoaWZ0IGRlbGV0aW9uLCBkZXNjcmliZWQgaW4gWzIsM10uCisvLworLy8gWzFd
OiBodHRwczovL2FjY2lkZW50YWxseXF1YWRyYXRpYy50dW1ibHIuY29tL3Bvc3QvMTUzNTQ1NDU1
OTg3L3J1c3QtaGFzaC1pdGVyYXRpb24tcmVpbnNlcnRpb24KKy8vIFsyXTogaHR0cHM6Ly9jb2Rl
Y2Fwc3VsZS5jb20vMjAxMy8xMS8xMS9yb2Jpbi1ob29kLWhhc2hpbmcvCisvLyBbM106IGh0dHBz
Oi8vY29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTcvcm9iaW4taG9vZC1oYXNoaW5nLWJhY2t3YXJk
LXNoaWZ0LWRlbGV0aW9uLyNyZWYKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitjbGFzcyBS
b2Jpbkhvb2RIYXNoVGFibGUgeworcHVibGljOgorICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT47CisgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBUcmFp
dHMgVmFsdWVUcmFpdHM7CisgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsKKyAgICB0eXBlZGVmIFZh
bHVlIFZhbHVlVHlwZTsKKyAgICB0eXBlZGVmIElkZW50aXR5SGFzaFRyYW5zbGF0b3I8VmFsdWVU
cmFpdHMsIEhhc2hGdW5jdGlvbnM+IElkZW50aXR5VHJhbnNsYXRvclR5cGU7CisgICAgdHlwZWRl
ZiBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+IEFkZFJlc3VsdDsKKworICAgIHN0YXRpY19h
c3NlcnQoIUtleVRyYWl0czo6aGFzSXNSZWxlYXNlZFdlYWtWYWx1ZUZ1bmN0aW9uKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEhhc2hGdW5jdGlvbnM6Omhhc0hhc2hJblZhbHVlKTsKKworICAgIFJvYmlu
SG9vZEhhc2hUYWJsZSgpID0gZGVmYXVsdDsKKworICAgIH5Sb2Jpbkhvb2RIYXNoVGFibGUoKQor
ICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaWYgKG1f
dGFibGUpCisgICAgICAgICAgICBkZWFsbG9jYXRlVGFibGUobV90YWJsZSwgdGFibGVTaXplKCkp
OworICAgIH0KKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICB2b2lkIHN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJik7CisgICAgUm9iaW5Ib29k
SGFzaFRhYmxlJiBvcGVyYXRvcj0oY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJik7CisKKyAgICBS
b2Jpbkhvb2RIYXNoVGFibGUoUm9iaW5Ib29kSGFzaFRhYmxlJiYpOworICAgIFJvYmluSG9vZEhh
c2hUYWJsZSYgb3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKworICAgIC8vIFdoZW4g
dGhlIGhhc2ggdGFibGUgaXMgZW1wdHksIGp1c3QgcmV0dXJuIHRoZSBzYW1lIGl0ZXJhdG9yIGZv
ciBlbmQgYXMgZm9yIGJlZ2luLgorICAgIC8vIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYmVjYXVz
ZSB3ZSBkb24ndCBoYXZlIHRvIHNraXAgYWxsIHRoZSBlbXB0eSBhbmQgZGVsZXRlZAorICAgIC8v
IGJ1Y2tldHMsIGFuZCBpdGVyYXRpbmcgYW4gZW1wdHkgdGFibGUgaXMgYSBjb21tb24gY2FzZSB0
aGF0J3Mgd29ydGggb3B0aW1pemluZy4KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGlz
RW1wdHkoKSA/IGVuZCgpIDogbWFrZUl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUo
KSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHko
KSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihtX3Rh
YmxlICsgdGFibGVTaXplKCkpOyB9CisKKyAgICBpdGVyYXRvciByYW5kb20oKQorICAgIHsKKyAg
ICAgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgICAg
ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgYXV0byYgYnVja2V0ID0gbV90YWJsZVt3ZWFrUmFu
ZG9tVWludDMyKCkgJiB0YWJsZVNpemVNYXNrKCldOworICAgICAgICAgICAgaWYgKCFpc0VtcHR5
QnVja2V0KGJ1Y2tldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVy
YXRvcigmYnVja2V0KTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBy
YW5kb20oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9pdGVyYXRvcj4oY29uc3Rf
Y2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+cmFuZG9tKCkpOyB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKTsgfQorICAgIHVuc2lnbmVkIGNh
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gdGFibGVTaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiAha2V5Q291bnQoKTsgfQorCisgICAgdm9pZCByZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3Rh
YmxlKTsKKyAgICAgICAgQVNTRVJUKCF0YWJsZVNpemUoKSk7CisKKyAgICAgICAgdW5zaWduZWQg
bWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICAgICAg
dW5zaWduZWQgbmV3VGFibGVTaXplID0gc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0
ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQpKTsKKworICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVU
YWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsK
KyAgICAgICAgbV9rZXlDb3VudCA9IDA7CisgICAgfQorCisgICAgQWRkUmVzdWx0IGFkZChjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4o
RXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9CisgICAgQWRkUmVzdWx0IGFkZChW
YWx1ZVR5cGUmJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4
dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIFdURk1vdmUodmFsdWUpKTsgfQorCisgICAgLy8gQSBz
cGVjaWFsIHZlcnNpb24gb2YgYWRkKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcg
YW5kIGNvbXBhcmluZworICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUg
Y29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8g
aW4gdGhlIHRhYmxlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZChUJiYga2V5LCBFeHRyYSYmKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXh0cmE+IEFkZFJlc3VsdCBhZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJik7
CisKKyAgICBpdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgeyByZXR1cm4gZmluZDxJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xhdG9y
VHlwZT4oa2V5KTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25z
dCB7IHJldHVybiBjb250YWluczxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gaXRlcmF0b3Ig
ZmluZChjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNv
bnN0IFQmKSBjb25zdDsKKworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKKyAgICB2
b2lkIHJlbW92ZShpdGVyYXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0
ZW5jeUNoZWNrKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3Rl
bmN5Q2hlY2soY29uc3RfaXRlcmF0b3IpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHN0YXRp
YyBib29sIGlzRW1wdHlCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNI
YXNoVHJhaXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkp
OyB9CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eU9yRGVsZXRlZEJ1Y2tldChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSB7IHJldHVybiBpc0VtcHR5QnVja2V0KHZhbHVlKTsgfQorCisgICAgVmFsdWVU
eXBlKiBsb29rdXAoY29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxJZGVudGl0eVRyYW5z
bGF0b3JUeXBlPihrZXkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBpbmxpbmVMb29r
dXAoY29uc3QgVCYpOworCisgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkg
eyB9CisgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRT
aXplKCkgeyB9CisgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KSB7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzaG91bGRFeHBhbmQodWludDY0X3Qg
a2V5Q291bnQsIHVpbnQ2NF90IHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXlD
b3VudCAqIG1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9y
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxl
KHVuc2lnbmVkIHNpemUpOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5
cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZhbHVl
VHlwZSosIGJvb2w+IExvb2t1cFR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4gdm9pZCBjaGVja0tleShjb25zdCBUJik7CisKKyAgICB2b2lk
IG1haW50YWluUHJvYmVEaXN0YW5jZShWYWx1ZVR5cGUmJiwgdW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGRpc3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzayk7CisKKyAgICB2
b2lkIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVl
VHlwZSopOworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqKTsKKyAgICB2
b2lkIHJlbW92ZShWYWx1ZVR5cGUqKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxk
RXhwYW5kKCkgY29uc3QgeyByZXR1cm4gc2hvdWxkRXhwYW5kKGtleUNvdW50KCksIHRhYmxlU2l6
ZSgpKTsgfQorICAgIGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQo
KSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7
IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7
CisKKyAgICB2b2lkIHJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVp
bnNlcnQoVmFsdWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChW
YWx1ZVR5cGUmIGJ1Y2tldCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2ly
ZWRJbmRleCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAg
IHJldHVybiBoYXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBwcm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5k
ZXggKyBzaXplIC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAg
ICB9CisKKyAgICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0
X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAg
ICBpdGVyYXRvciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3du
R29vZCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihW
YWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBt
X3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisgICAgc3RhdGlj
IHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6bWF4TG9h
ZE51bWVyYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWlu
YXRvciA9IFNpemVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG1pbkxvYWQgPSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAgdW5zaWdu
ZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25l
ZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAg
dW5zaWduZWQga2V5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisKKyAgICBW
YWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUg
eyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKworI2lmIENIRUNLX0hBU0hU
QUJMRV9JVEVSQVRPUlMKK3B1YmxpYzoKKyAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3Jz
IHNob3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KKyAgICBtdXRhYmxlIGNvbnN0X2l0ZXJh
dG9yKiBtX2l0ZXJhdG9ycyB7IG51bGxwdHIgfTsKKyAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRy
IHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVtbW92ZSdkIG9yIG1lbWNweSdlZC4KKyAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4IHsgbWFrZVVuaXF1ZTxMb2NrPigp
IH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
bG9va3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVM
b29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZ
U19JTkxJTkUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1
cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKKworICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICgh
dGFibGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAg
IHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVk
IGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0
YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0g
bV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxl
IG1haW50YWlucyB0aGlzIGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8v
IHByb2Jpbmcgd2hlbiBkaXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4
aXN0aW5nIGVudHJ5LgorICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFj
dCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0
b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0
YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5z
bGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5Owor
CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0
YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9p
ZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQoVmFsdWVU
eXBlJiBidWNrZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8VHJhaXRzOjpl
bXB0eVZhbHVlSXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1Y2tldCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRy
YSkgLT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisK
KyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hvdWxkIGV4cGFu
ZCBiZWZvcmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBleHBhbmQgYSB0
YWJsZSBhZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0byByZS1sb29r
IHVwIGVudHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRyeSBwb3NpdGlv
biBpcyBub3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkp
CisgICAgICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNp
Z25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2Ug
PSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVu
dHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9
IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2gg
PSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGVu
dHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbURlc2lyZWQgPSBwcm9i
ZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYg
KGRpc3RhbmNlID4gZGlzdGFuY2VGcm9tRGVzaXJlZCkgeworICAgICAgICAgICAgLy8gU3RhcnQg
c3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJp
YW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRy
eSk7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAg
IG1haW50YWluUHJvYmVEaXN0YW5jZShXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZGlz
dGFuY2VGcm9tRGVzaXJlZCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
ICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIHJldHVybiBBZGRSZXN1bHQobWFr
ZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+CitBTFdBWVNfSU5MSU5FIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjptYWludGFpblByb2JlRGlzdGFuY2UoVmFsdWVUeXBlJiYgdmFsdWUsIHVuc2lnbmVkIGlu
ZGV4LCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2sp
Cit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgKytkaXN0YW5jZTsKKworICAgIHdoaWxlICgxKSB7
CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlm
IChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3Np
Z25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xh
dG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSk7CisgICAgICAgIHVuc2ln
bmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUs
IHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAg
ICAgICAgICAgc3dhcCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50
cnlEaXN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBz
aXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXpl
UG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFk
ZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52
YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3Jl
IHBvdGVudGlhbGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0
ZXIgaW5zZXJ0aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRy
eSBmcm9tIHRoZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90
IHN0YWJsZSBkdXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAg
ICBleHBhbmQoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAg
ICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7Cisg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFz
aCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNp
cmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKwor
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAg
IGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50
cnkpKSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3Rk
Ojpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0g
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRy
eUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdv
b2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZUZy
b21EZXNpcmVkID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFz
ayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlRnJvbURlc2lyZWQpIHsKKyAgICAg
ICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2Jl
LWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5
ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0
ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJh
KSwgaGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2UoV1RGTW92ZShleGlz
dGluZ0VudHJ5KSwgaW5kZXgsIGRpc3RhbmNlRnJvbURlc2lyZWQsIHNpemUsIHNpemVNYXNrKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5
Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAg
ICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1
c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJs
ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1
bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4
dHJhY3QodmFsdWUpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBz
aXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2ln
blRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0
b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAgICAgICAgdW5zaWdu
ZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwg
c2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAg
ICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRy
eURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNp
emVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtl
eSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQo
KTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7
CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1h
a2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4g
ZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNo
VGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50
cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29u
c3RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAorewor
ICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KHRoaXMpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRh
dGUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShwb3MpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBwb3MtPn5WYWx1ZVR5cGUo
KTsKKyAgICBpbml0aWFsaXplQnVja2V0KCpwb3MpOworICAgIG1fa2V5Q291bnQgLT0gMTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0gcG9zIC0gbV90
YWJsZTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsgMSkgJiBzaXplTWFz
azsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91c0VudHJ5ID0gbV90
YWJsZSArIGluZGV4UHJldmlvdXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBBU1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOwor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KTsKKyAgICAgICAgaWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNp
emUsIHNpemVNYXNrKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWYWx1ZVRyYWl0
czo6YXNzaWduVG9FbXB0eSgqcHJldmlvdXNFbnRyeSwgV1RGTW92ZSgqZW50cnkpKTsKKyAgICAg
ICAgZW50cnktPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqZW50cnkp
OworCisgICAgICAgIGluZGV4UHJldmlvdXMgPSBpbmRleDsKKyAgICAgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgIH0KKworICAgIGlmIChzaG91bGRTaHJpbmsoKSkKKyAg
ICAgICAgc2hyaW5rKCk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09
IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlKGNvbnN0
X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IgaXQp
Cit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVB
bmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVl
VHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpy
ZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yIGl0KQorewor
ICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUq
PihpdC5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Citpbmxp
bmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShjb25zdCBLZXlU
eXBlJiBrZXkpCit7CisgICAgcmVtb3ZlKGZpbmQoa2V5KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWxsb2Nh
dGVUYWJsZSh1bnNpZ25lZCBzaXplKSAtPiBWYWx1ZVR5cGUqCit7CisgICAgLy8gd291bGQgdXNl
IGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25z
IGhlcmUsIGJ1dAorICAgIC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKKyAg
ICBpZiBjb25zdGV4cHIgKFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybykKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNo
VGFibGVNYWxsb2M6Onplcm9lZE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSk7CisK
KyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+
KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhzaXplICogc2l6ZW9m
KFZhbHVlVHlwZSkpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykK
KyAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVk
IHNpemUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAg
ICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOworICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmV4cGFuZCgpCit7Cisg
ICAgdW5zaWduZWQgbmV3U2l6ZTsKKyAgICB1bnNpZ25lZCBvbGRTaXplID0gdGFibGVTaXplKCk7
CisgICAgaWYgKCFvbGRTaXplKQorICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVt
VGFibGVTaXplOworICAgIGVsc2UKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemUgKiAyOworCisg
ICAgcmVoYXNoKG5ld1NpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY29u
c3RleHByIHVuc2lnbmVkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxl
U2l6ZSA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hv
dWxkRXhwYW5kKGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6
ZSAqPSAyOworCisgICAgYXV0byBhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10o
ZG91YmxlIGxvYWRGYWN0b3IsIHVuc2lnbmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUp
CisgICAgeworICAgICAgICAvLyBIZXJlIGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2Fs
Y3VsYXRpb24sIHVzaW5nIDMvNCBsb2FkLWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2Fk
IGF0IDMvNCBhbmQgbWluTG9hZCBhdCAxLzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisg
ICAgICAgIC8vIElmIHdlIGFyZSBnZXR0aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMv
NCwgd2UgZG91YmxlIHRoZSBzaXplCisgICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9z
ZSB0byBsb2FkTWF4IGFuZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAg
ICAgICAgLy8gZ2l2ZSB1cyBhIGxvYWQgaW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAg
ICAgICBkb3VibGUgbWF4TG9hZFJhdGlvID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1p
bkxvYWRSYXRpbyA9IDEuMCAvIG1pbkxvYWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJh
dGlvID0gKG1heExvYWRSYXRpbyArIG1pbkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUg
aGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8g
KyBtYXhMb2FkUmF0aW8pIC8gMjsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6
ZSAqIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAg
Y29uc3RleHByIGRvdWJsZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2Fk
TnVtZXJhdG9yKSAvIG1heExvYWREZW5vbWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRG
b3JFYWdlckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisg
ICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXpl
ID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0
VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RT
aXplKCkKK3sKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOworICAgIHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21w
dXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCgpKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlaGFzaCh1bnNp
Z25lZCBuZXdUYWJsZVNpemUpCit7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lF
eGNlcHRTaXplKCk7CisKKyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsK
KyAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKKworICAgIHVuc2lnbmVkIG9sZEtl
eUNvdW50ID0ga2V5Q291bnQoKTsKKyAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJs
ZVNpemUpOworICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgIG1fa2V5Q291bnQg
PSBvbGRLZXlDb3VudDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRUYWJsZVNp
emU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRFbnRyeSA9IG9sZFRhYmxlW2ldOworICAgICAg
ICBpZiAoIWlzRW1wdHlCdWNrZXQob2xkRW50cnkpKQorICAgICAgICAgICAgcmVpbnNlcnQoV1RG
TW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7CisgICAgfQor
CisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2xlYXIoKQoreworICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBk
ZWFsbG9jYXRlVGFibGUoc3RkOjpleGNoYW5nZShtX3RhYmxlLCBudWxscHRyKSwgdGFibGVTaXpl
KCkpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCisgICAg
OiBtX3RhYmxlKGFsbG9jYXRlVGFibGUob3RoZXIubV90YWJsZVNpemUpKQorICAgICwgbV9rZXlD
b3VudChvdGhlci5tX2tleUNvdW50KQorICAgICwgbV90YWJsZVNpemUob3RoZXIubV90YWJsZVNp
emUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb3RoZXIubV90YWJs
ZVNpemU7ICsraW5kZXgpIHsKKyAgICAgICAgVmFsdWVUeXBlJiBvdGhlckVudHJ5ID0gb3RoZXIu
bV90YWJsZVtpbmRleF07CisgICAgICAgIFZhbHVlVHlwZSYgZW50cnkgPSBtX3RhYmxlW2luZGV4
XTsKKyAgICAgICAgbmV3ICgmZW50cnkpIFZhbHVlVHlwZShvdGhlckVudHJ5KTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6c3dhcChSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIHVzaW5n
IHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlz
KTsKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBzd2FwKG1fdGFibGUs
IG90aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVyLm1fdGFibGVTaXpl
KTsKKyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RI
YXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dh
cCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKCZvdGhlcik7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxl
LCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJs
ZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291
bnQsIDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFi
bGUgdGVtcCA9IFdURk1vdmUob3RoZXIpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZh
c3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVU
eXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5
PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJ
bXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcxMTdmNWZhLi5h
MThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBBdG9tU3RyaW5n
VGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVzaW5nIFN0cmlu
Z1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3VzaW5nIFN0cmlu
Z1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwogCiBzdGF0aWMg
QUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRleCBlMGMwYWZiYWVhNDM2ODYxYjhiOGU0
MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4NjY4ZWY1ZTRhNTZhMjQ5NzVkMjAxZmE4
ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCkBAIC0yOSw3ICsy
OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3RyaW5nVGFibGU6On5BdG9tU3RyaW5nVGFi
bGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBzdHJpbmcgOiBt
X3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV90YWJsZSkKICAgICAgICAg
c3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5n
VGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMwNDUxMTNhNTdlLi4y
NDVhM2E2MjAxYTUwZGYyNjU5ZGMxOTEwZTA3OWUwNTU3ZDQxMjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTIyLDggKzIyLDkgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFzcyBBdG9tU3RyaW5n
VGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5n
IFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0cmluZ0ltcGw+OworICAgIHVzaW5nIFN0cmluZ1Rh
YmxlSW1wbCA9IEZhc3RSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZ0VudHJ5PjsKKwogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0
cjxTdHJpbmdJbXBsPj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1Rh
YmxlSW1wbCYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFz
aFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBs
IG1fdGFibGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0hhc2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDVhODM4NWUw
NGE5NTkwNGUwNmJhMTI4ZDZlYWExM2Q5MWViOTBmYjkuLmYwMzJmMWJkZjIxYjU4ZGJmNmNlNjI1
NDU0NDZjNDg3NjVmYWM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SGFzaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC05MCw2ICs5
MCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2ggewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424712</attachid>
            <date>2021-03-30 16:26:47 -0700</date>
            <delta_ts>2021-03-31 03:07:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210330162646.patch</filename>
            <type>text/plain</type>
            <size>147246</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi5kZTgyYjY2NDM5ZDFkOGQw
MWFjNWMzYjdmMWE1ZTJlNDI1NGJlNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKwogMjAyMS0wMy0yNiAgWXVzdWtl
IFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBBcHBsZUlD
VSBTUEkgZm9yIGNhbm9uaWNhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDRjYTlhNmRkM2I4ZDkxNzM5Mzk1Yzg3
NzY4ZWViMGFiMTAyMGY2NC4uNGZkNzc0MDM2OWZmNTcxZTdiNWE1MTA0ODFlNzYwMjM3ZjkyYTk3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMDIgQEAKKzIwMjEtMDMtMzAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRh
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4
OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi9IYXNoTWFwLmg6Cisg
ICAgICAgIChXVEY6Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUgY29uc3QpOgor
ICAgICAgICAoV1RGOjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNF
bXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAgIChXVEY6Olk+
OjplbmQpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAgICAoV1RGOjpZ
Pjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6Olk+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5saW5lR2V0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChXVEY6OlRhYmxl
VHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+
OjpzZXQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6CisgICAgICAgIChX
VEY6OlRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
QXJnPjo6ZW5zdXJlKToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAgICAgIChXVEY6
Olk+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAgICAgIChXVEY6
Olk+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgor
ICAgICAgICAoV1RGOjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46OnN3YXApOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpp
c0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpi
ZWdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+
OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRhaW5zIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpN
YXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBw
ZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRU
cmFpdHNBcmc+OjppbmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRU
cmFpdHNBcmc+OjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+
OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpy
ZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpYPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0NvbnNpc3RlbmN5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkpOiBEZWxldGVk
LgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpzd2FwKToKKyAg
ICAgICAgKFdURjo6Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y2FwYWNpdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6
Olc+OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpXPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250YWlucyBjb25z
dCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChX
VEY6OlRhYmxlVHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YWRk
KToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6
dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtlQW55KToKKyAgICAgICAgKFdURjo6VGFibGVU
cmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAg
ICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6PSBjb25zdCk6Cisg
ICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6
Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJl
Z2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6
ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjbGVhcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpj
aGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSGFzaFRhYmxl
Lmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6cmVtb3ZlSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdU
Rjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRk
VW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGQp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAg
ICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lz
dGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRh
dGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAgICAgIChXVEY6Oktl
eVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgor
ICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4K
KyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYv
Um9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFRh
YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6On5Sb2Jpbkhv
b2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luKToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFuZG9tIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6OlJv
YmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpmaW5kIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6CisgICAgICAg
IChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4
cGFuZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29u
c3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAg
IChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXpl
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrS2V5KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjppbmxpbmVMb29rdXApOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6aW5pdGlhbGl6ZUJ1Y2tldCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjphZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bWFpbnRh
aW5Qcm9iZURpc3RhbmNlRm9yQWRkKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFkZFBh
c3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZWluc2VydCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y29udGFpbnMgY29u
c3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVt
b3ZlQW5kSW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmUpOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lD
aGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OlNp
emVQb2xpY3k+OjpleHBhbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c2hyaW5rVG9CZXN0U2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZWhhc2gpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Um9iaW5Ib29k
SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnN3YXApOgorICAgICAgICAo
V1RGOjo9KToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHA6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmlu
Z1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5n
VGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp0YWJsZSk6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nSGFzaC5oOgorCiAyMDIxLTAzLTI3ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgd3RmL1ZlY3Rvci5oOjEyNzY6ODg6IHJ1bnRpbWUg
ZXJyb3I6IHJlZmVyZW5jZSBiaW5kaW5nIHRvIG51bGwgcG9pbnRlciBvZiB0eXBlICdjb25zdCBX
ZWJDb3JlOjpTdHlsZTo6UnVsZUZlYXR1cmUnCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDJhMDg4N2U3M2U1NzFmMDA4ZTg4NGRiMzQz
MDQ4NmQzNDIwMDcyMjAuLjdmOGFlNGYxNDBlZTc0M2QwZmU1ZjM5NTQzODdiZTNjZmQ2ZDVmMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3Bw
CkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IENoYXJCdWZmZXJTZWFjaGVyIHsKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgUHJpdmF0ZVN5bWJvbEltcGwq
IGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmluZz4mIHNldCwgY29uc3Qg
V1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3N0
YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBsKGNvbnN0IEJ1aWx0
aW5OYW1lczo6UHJpdmF0ZU5hbWVTZXQmIHNldCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNo
YXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0g
c2V0LmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAg
aWYgKGl0ZXJhdG9yID09IHNldC5lbmQoKSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgUHJp
dmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIHNldCwgY29ucwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN5bWJvbEltcGwqPiYgbWFwLCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdl
bGxLbm93blN5bWJvbEltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpXZWxsS25vd25TeW1ib2xNYXAm
IG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQ8Q2hhckJ1ZmZlclNlYWNo
ZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1hcC5lbmQo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRl
eCAzMTk0NWJmM2UxNmNkMzA0ZThkODgyOWIxOTk3MWRhN2NjY2UzOWEyLi4wMzlkNGZjZWUzNGI4
OGVhNjIxMGQwYmZhMGI3NmUyY2U5MTEwYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgi
CiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0xOTksNiArMjAxLDkgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShCdWlsdGluTmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICAKIHB1YmxpYzoKKyAgICB1c2luZyBQcml2YXRlTmFtZVNldCA9IE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+OworICAgIHVzaW5nIFdlbGxLbm93blN5bWJv
bE1hcCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN5
bWJvbEltcGwqPjsKKwogICAgIEJ1aWx0aW5OYW1lcyhWTSYsIENvbW1vbklkZW50aWZpZXJzKik7
CiAKICAgICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWUoY29uc3QgSWRlbnRp
ZmllciYpIGNvbnN0OwpAQCAtMjMyLDggKzIzNyw2IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAg
ICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1OYW1lOwogICAgIGNvbnN0IEpTQzo6
SWRlbnRpZmllciBtX2RvbGxhclZNUHJpdmF0ZU5hbWU7CiAgICAgY29uc3QgSlNDOjpJZGVudGlm
aWVyIG1fcG9seVByb3RvUHJpdmF0ZU5hbWU7Ci0gICAgdXNpbmcgUHJpdmF0ZU5hbWVTZXQgPSBI
YXNoU2V0PFN0cmluZz47Ci0gICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFwID0gSGFzaE1hcDxT
dHJpbmcsIFN5bWJvbEltcGwqPjsKICAgICBQcml2YXRlTmFtZVNldCBtX3ByaXZhdGVOYW1lU2V0
OwogICAgIFdlbGxLbm93blN5bWJvbE1hcCBtX3dlbGxLbm93blN5bWJvbHNNYXA7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJp
bnNpY1JlZ2lzdHJ5LmgKaW5kZXggNWNmNGZhNTVjM2VlZWRlZjRmOGVhOTNjZDYxZDQ2NjFlYjY3
ZjgyYS4uNzg1N2RiYTAxMTU4YTc2ZjdlMDE2YTIzNzkzNTA1ZDZkYTViMzBjMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIxMiw3ICsyMTMsNyBAQCBjbGFzcyBC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5IHsKIAogcHJpdmF0ZToKICAgICBWTSYgbV92bTsKLSAg
ICBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVw
SGFzaD4gbV9ieXRlY29kZUludHJpbnNpY01hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgRW50cnksIElkZW50
aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmluc2ljTWFwOwogCiAjZGVmaW5lIEpTQ19ERUNM
QVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKG5hbWUpIFN0cm9uZzxV
bmtub3duPiBtXyMjbmFtZTsKICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05T
VEFOVFNfU0lNUExFX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09O
U1RBTlRfR0VORVJBVE9SUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggN2RjOGE5MjNmNDA4OThk
OTUxZWQyOTBhOWM1NzU1N2UwOTU3YjU5NC4uNzI3NzcyZWExZGRkMTk4ODQ5YjkxMjQwOTNhZmQz
YzM5NDkzNGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcgQEAKICNpbmNs
dWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPgpAQCAt
MTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJbnRlcm5hbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNo
IHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIFJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5n
OjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAg
ICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisg
ICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAg
ICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAm
IDB4MSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3Ry
aW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5n
OjpudW1iZXIoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAg
ICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAg
IH0KKyAgICBzdG9wV2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxh
cHNlZE1TKCkpOworI2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIHN0ZG91dCk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvblByaW50U3RkRXJyLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQogeworI2lmIDAKKyAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOworICAgIHN0
b3BXYXRjaC5zdGFydCgpOworICAgIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ1Rh
YmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAg
ICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFibGUuYWRkKFN0
cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFi
bGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7
CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5y
ZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihz
dHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAg
ICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdUYWJsZS5jb250YWlucyhTdHJp
bmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJp
bmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxv
Z0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0b3BXYXRjaC5zdG9wKCk7Cisg
ICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7CisjZW5kaWYKICAgICByZXR1
cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCmluZGV4IDQ0ZDFjZmRi
ZDQ5NDkxNmVkYmZmZDRmMzE0ZjdjZDVmYmZiNmYxNTMuLmFlNmRiYjBmOGY1OTIzNTBhNGNmMmU0
MTBkZjBiZDJkYWJjNzhhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmgKQEAgLTI5NCw2ICsyOTQsNyBAQCBKU1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJs
aWNKU1ZhbHVlKFZNJiwgY29uc3QgSWRlbnRpZmllciYpOwogc3RydWN0IElkZW50aWZpZXJSZXBI
YXNoIDogUHRySGFzaDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiB7CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYga2V5KSB7IHJldHVy
biBrZXktPmV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChVbmlxdWVkU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmV4aXN0aW5nU3ltYm9s
QXdhcmVIYXNoKCk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUg
PSB0cnVlOwogfTsKIAogc3RydWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgOiBIYXNo
VHJhaXRzPGludD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5jcHAKaW5kZXggNDY1NTI0OGYyODA0OTEwZTRiNGRjYzIwZTViYmU5MTRlNTg5ZjFlYS4u
N2U1M2YyZDg2N2FjZTJhYjg0N2VjODc1MDhhOGZhODlhOTc1YjcyYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCkBAIC0xOTksNyArMTk5LDcg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2EKICAgICBpZiAoIWNhc2VGaXJzdE9wdGlvbi5pc051
bGwoKSkKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZh
bnRFeHRlbnNpb25LZXk6OktmKV0gPSBjYXNlRmlyc3RPcHRpb247CiAKLSAgICBhdXRvJiBhdmFp
bGFibGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0
IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmLCBS
ZWxldmFudEV4dGVuc2lvbktleTo6S24gfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9
IHJlc29sdmVkLmxvY2FsZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBib29sIEludGxDb2xsYXRvcjo6
dXBkYXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0CiB9CiAKICNpZiBBU1NF
UlRfRU5BQkxFRAotdm9pZCBJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGxvY2FsZXMpCit2b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJ
Q1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBsb2NhbGVzKQogewogICAgIGZvciAoYXV0byYgbG9jYWxlIDogbG9j
YWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmluZ1dpdGhEVUNFVCA9IFtdKGNv
bnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9yKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4IDI0ZDYxNjE2NDlhZDlmZTdk
NGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLmM3NTZkMzI0NzdlMWVjNDEwMjU2ZjdiODM0NDdkMjEz
NGI2ZWIxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5oCkBAIC03Myw5ICs3Myw5IEBAIGNsYXNzIEludGxDb2xsYXRvciBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHN0YXRp
YyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mKTsK
KyAgICBzdGF0aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mKTsKICNlbHNlCi0gICAgc3Rh
dGljIGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBIYXNoU2V0PFN0
cmluZz4mKSB7IH0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlh
bnRzKGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
JikgeyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMw
ZDQzODI5YjUzYjk3NTdiOWExZmMzYjkuLmY4OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3
MzNmODk4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZh
bnRFeHRlbnNpb25LZXk6OkhjKV0gPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRl
VGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2
ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNh
LCBSZWxldmFudEV4dGVuc2lvbktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBs
b2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDFiYmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0
MGY3MGE0YTkuLmMwOTA5Yjg5MWU5NDMwYzBkYTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mLCAoSgogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxv
Y2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAK
aW5kZXggMjJhMTE1ZDEzOWY2YzViMjQ1ZWRlYmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0Mjkz
NDVhZDgxZGFlNDE2MGVhZGRiNTA5N2M2NDIwYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAg
dm9pZCBJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2Nh
bGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFt
ZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUo
Z2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVN
YXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUg
PSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZm
MGEwOTMzNzY5MTFkYjEwYjg4ZmFhOWY0NWYzNWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2Uw
ZWU3YTZkOTgzZmJlY2MzN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3
ICsxMTIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0
cnVjdG9yU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5l
cy9wcm9wb3NhbC1pbnRsLWRpc3BsYXluYW1lcy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBv
cnRlZExvY2FsZXNPZgogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3Bs
YXlOYW1lcyUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsK
KyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMaXN0Rm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
aXN0Rm9ybWF0LmNwcAppbmRleCA4MTdiOWNhZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEz
MDkyLi44ODBlZDI2ZTczYWZlMWNhOTQ0Nzc0NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMs
NyArMTAzLDcgQEAgdm9pZCBJbnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxM
aXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZl
TG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
bG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1f
bG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1
ZWUyM2RiZjFlMGIwMzljM2NhZjA3ODBmMWI2NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBk
ZjBlNjc5OGJkYTcyMjIxNWEzYzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcg
KzExMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVj
dG9yU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNHbG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1h
dCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFp
bGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29u
c3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcAppbmRleCAwMDdjOWQzMDI3MTVhNTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5m
MDM1MGM4NDM4ZDc3ZWJlN2E1ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcg
KzI5Miw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVy
aW5nU3lzdGVtOwogICAgIH0KIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVt
YmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVz
b2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4
dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVk
LmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2
MmViYmMyNjQ0Mzc5YWY1OTMyMTEwZjAuLmYyMWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFk
NTkxZjEzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5j
U3VwcG9ydGVkTG9jYWxlc09mLCAoSlNHCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQog
CiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFp
bGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsK
IAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBm
ODllOGZlNzRlOGRiY2YwZTU4MzUwYWJlYzFmN2E4NWQ4YmRlNC4uZmY0MmIyMDcyMGJkN2I5ODRh
YmI0NjgwMDViMDAzYjk2Mjg2Njg3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5jcHAKQEAgLTM1Miw3ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdG
b3JMb2NhbGVJRChjb25zdCBjaGFyKiBsb2NhbGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAv
LyBFbnN1cmUgd2UgaGF2ZSB4eC1aWiB3aGVuZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0
aWMgdm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFp
bGFibGVMb2NhbGVzLCBTdHJpbmdWaWV3IGxvY2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxl
c3NMb2NhbGVJZk5lZWRlZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nVmlldyBsb2NhbGUpCiB7CiAgICAgaWYg
KGxvY2FsZS5sZW5ndGgoKSA8IDEwKQogICAgICAgICByZXR1cm47CkBAIC0zNzcsOSArMzc3LDkg
QEAgc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW4KICAgICBhdmFpbGFibGVMb2NhbGVzLmFkZChTdHJp
bmdJbXBsOjpjcmVhdGVTdGF0aWNTdHJpbmdJbXBsKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXpl
KCkpKTsKIH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygp
Citjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYg
aW50bEF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFibGVMb2NhbGVzOworICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+
IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVP
bmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBh
dmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVp
bnQ4X3QgZHVjZXRXZWlnaHRzWzEyOF0gPSB7CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwg
MzcsIDAsCiB9OwogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJs
ZUxvY2FsZXMoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFibGVMb2NhbGVzOworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNl
LCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOwpAQCAtNDc2LDIy
ICs0NzYsMjEgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVM
b2NhbGVzKCkKICAgICByZXR1cm4gYXZhaWxhYmxlTG9jYWxlczsKIH0KIAotY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCitjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRlckF2
YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0
cmluZz4+IGNhY2hlZEF2YWlsYWJsZUxvY2FsZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFp
bGFibGVMb2NhbGVzID0gY2FjaGVkQXZhaWxhYmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0g
ewotICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpOworICAgICAgICBh
dmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOworICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9j
YWxlcy0+aXNFbXB0eSgpKTsKICAgICAgICAgY29uc3RleHByIGJvb2wgaXNJbW1vcnRhbCA9IHRy
dWU7CiAgICAgICAgIGludDMyX3QgY291bnQgPSB1YnJrX2NvdW50QXZhaWxhYmxlKCk7CiAgICAg
ICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFN0
cmluZyBsb2NhbGUgPSBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKHVicmtfZ2V0QXZhaWxhYmxlKGkp
LCBpc0ltbW9ydGFsKTsKICAgICAgICAgICAgIGlmIChsb2NhbGUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQobG9j
YWxlKTsKLSAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChhdmFpbGFibGVM
b2NhbGVzLCBsb2NhbGUpOworICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy0+YWRkKGxvY2Fs
ZSk7CisgICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxlTG9j
YWxlcy5nZXQoKSwgbG9jYWxlKTsKICAgICAgICAgfQogICAgIH0pOwogICAgIHJldHVybiBhdmFp
bGFibGVMb2NhbGVzOwpAQCAtNjk4LDcgKzY5Nyw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2Nh
CiAgICAgcmV0dXJuIHNlZW47CiB9CiAKLVN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiBsb2NhbGUp
CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5n
JiBsb2NhbGUpCiB7CiAgICAgcmV0dXJuIGJlc3RBdmFpbGFibGVMb2NhbGUobG9jYWxlLCBbJl0o
Y29uc3QgU3RyaW5nJiBjYW5kaWRhdGUpIHsKICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUxvY2Fs
ZXMuY29udGFpbnMoY2FuZGlkYXRlKTsKQEAgLTc2Myw3ICs3NjIsNyBAQCBTdHJpbmcgcmVtb3Zl
VW5pY29kZUxvY2FsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRj
aGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMp
CitzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVk
TG9jYWxlcykKIHsKICAgICAvLyBMb29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2Vj
LWxvb2t1cG1hdGNoZXIKQEAgLTgwNCw3ICs4MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBs
b29rdXBNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8
UwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRN
YXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2Fs
ZXMpCitzdGF0aWMgTWF0Y2hlclJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAy
LyNzZWMtYmVzdGZpdG1hdGNoZXIKQEAgLTgyNSw3ICs4MjQsNyBAQCBjb25zdGV4cHIgQVNDSUlM
aXRlcmFsIHJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5nKFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtl
eSkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7CiB9CiAKLVJlc29sdmVkTG9jYWxl
IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVz
dGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9j
YWxlT3B0aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5z
aW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0
YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQorUmVzb2x2ZWRMb2NhbGUg
cmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIg
bG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25L
ZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50
RXh0ZW5zaW9uS2V5KSkKIHsKICAgICAvLyBSZXNvbHZlTG9jYWxlIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zLCByZWxldmFudEV4dGVuc2lvbktleXMsIGxvY2Fs
ZURhdGEpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtcmVzb2x2
ZWxvY2FsZQpAQCAtODkwLDcgKzg4OSw3IEBAIFJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+CiAgICAg
cmV0dXJuIHJlc29sdmVkOwogfQogCi1zdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
KQorc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hNDAyLyNzZWMtbG9va3Vwc3VwcG9ydGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBA
IHN0YXRpYyBKU0FycmF5KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGlj
IEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1
cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJl
c3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVz
KQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWJlc3RmaXRzdXBw
b3J0ZWRsb2NhbGVzCkBAIC05MjgsNyArOTI3LDcgQEAgc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2gK
ICAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogfQogCi1KU1ZhbHVlIHN1cHBvcnRlZExvY2Fs
ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
SlNWYWx1ZSBvcHRpb25zVmFsdWUpCitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKICAgICAvLyBTdXBw
b3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25z
KQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXN1cHBvcnRlZGxv
Y2FsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCBm
YTJlODI4MDc4YjdlODUxYTc3MWRjMGEwODBmYjZhNjg1YTEyYWVkLi4xNjgzMzI2M2RhMDNiMjgz
ZWFjYjY2NTNhNTdkNjIyMDAxYmI4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hTZXQuaD4KIAogc3RydWN0IFVGaWVsZFBvc2l0aW9uSXRlcmF0b3I7CiAKQEAgLTgxLDE1
ICs4MiwxNSBAQCBjbGFzcyBJbnRsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogfTsKIAogU3RyaW5nIGRlZmF1bHRMb2NhbGUoSlNHbG9iYWxPYmplY3QqKTsKLWNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsKLWNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwotY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOwotaW5saW5lIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bE51bWJl
ckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygp
OyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUGx1cmFsUnVsZXNBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2Fs
ZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBp
bnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Citjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0
b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKK2lu
bGluZSBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5n
PiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFp
bGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGludGxOdW1iZXJGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQor
aW5saW5lIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJp
bmc+JiBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgaW50bExpc3RG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsg
fQogCiBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFs
PEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0
aW9uKEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0
eU5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBj
aGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpAQCAtMTA3LDEwICsxMDgsMTAg
QEAgc3RydWN0IFJlc29sdmVkTG9jYWxlIHsKICAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5z
aW9uczsKIH07CiAKLVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9j
YWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4g
cmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2Fs
ZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlv
bnMpOworUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxl
TWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0
cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkp
OworSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlv
bnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBs
b2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CitTdHJp
bmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1
ZXN0ZWRMb2NhbGUpOwogdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPiBTdHJpbmcgYmVzdEF2
YWlsYWJsZUxvY2FsZShjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSwgUHJlZGljYXRlKTsK
IFZlY3RvcjxTdHJpbmc+IG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUoY29uc3QgU3RyaW5nJiBs
b2NhbGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcAppbmRleCBlNjVmYjBkNzMyNzE1MjliNWNhYTlkOWZhYmVjOWJlYmNiNGM1NmEy
Li5jY2NmNDk3MTU4MThkZmQzMDI2OGEzMTdhZGFkYjhlOGRjYmFmNTM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTkzLDcg
KzkzLDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHUKICAgICBMb2NhbGVNYXRjaGVyIGxvY2Fs
ZU1hdGNoZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9u
cywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2Fs
ZU1hdGNoZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZp
dCB9IH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0
IGZpdFwiIl9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0
IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwog
ICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcAppbmRl
eCBmODg1MGIxMGE4YmZlNjU3MDQzZDJhMWVhZDA3MTEwNDFiOTIwNTkxLi4yN2IyMzEwYjM0OGEx
ZTRhNDVkZjBlZjkxMTUzYTllNDVlOGZmNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCkBA
IC0xMTUsNyArMTE1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxQbHVyYWxSdWxl
c0NvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2wKIAogICAgIC8vIDEzLjMu
MiBJbnRsLlBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiAobG9jYWxlcyBbLCBvcHRpb25z
IF0pCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW50bC5wbHVy
YWxydWxlcy5zdXBwb3J0ZWRsb2NhbGVzb2YKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxv
Y2FsZXMoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQuY3BwCmluZGV4IGY3ZDM4YjgxZWFjODI4NjNmNWFkOGJjYzgzMjQ2NTI2OTI4MTc3NmUuLjJi
NWQyOGVmZDhjZThmMjdkNjU3NTg1MDJhMzEwOTgwNWI3MDczZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3Bw
CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFs
aXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgbG9j
YWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51
KV0gPSBudW1iZXJpbmdTeXN0ZW07CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2Fs
ZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxv
Y2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxv
Y2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0s
IGxvY2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmICht
X2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDE3NGI2ZmRjZTJjODZiZmMxMWI1ZWIxZWY1MzcyMDk4ZWE4OTg0OTQuLjlhOGM4ZDRj
YTZjNmM0ZWQzNWZmNzBlOTdlN2QzZWNjNGY1OWFlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxl
c09mCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOwogCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCAwNGNmMTdkNTA5MzU2MjFjNDI0
OGU4NDhiNzc1MGVkYTM3ZWE4MWU4Li4yYWQ3NGY5NGJiZThjYTE3Yzc3NTg5MmFmYmM2ZmVmNzEy
YTYyYjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyLmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxpemVT
ZWdtZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVM
b2NhbGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29s
dmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0
YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3Bw
CmluZGV4IGZmZDczZjczNmE5NzQzMzc4ZGZkYjFhMzFkNGJmOTlmOThkZWFlNTIuLjA5Mzk0ZGMx
OGVkZGYyYTkzMTk1MWU3YzZmYWE5NzIyOGZiZjYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcApA
QCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsU2VnbWVudGVy
Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE9iCiAgICAgLy8gaHR0cHM6
Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtc2VnbWVudGVyLyNzZWMtaW50bC5zZWdtZW50ZXIuc3Vw
cG9ydGVkbG9jYWxlc29mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlU2Vn
bWVudGVyJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9j
YWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVz
ID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZi
NDVlNTUzYjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFk
MzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERF
IC8qIFRocmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVh
ZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIw
MEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3Rl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1
IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIg
LyogTmFrZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5
IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUg
LyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiAr
NzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJy
ZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3Rl
bUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyog
Tm9ubW92YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIw
MDQxMjNGRiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyog
UmVzb3VyY2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRh
aW5QdHIuaCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFz
aE1hcC5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNo
U2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hU
YWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAq
LywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0
RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkx
NzguLmUxZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAg
IFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jp
bkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0
aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93
dGYvRm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5
YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgK
QEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsK
IHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOwor
c3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtl
eVZhbHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFs
dWVQYWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFs
dWU+PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1l
ID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4g
Y2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERl
ZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xh
c3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxL
ZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNo
VGFibGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywg
dHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxW
YWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNm
Li44OTAxYjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYxYjBhZWZhOWU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBA
IC0zMSw3ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJL
ZXlFeHRyYWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRy
YWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUg
S2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUg
S2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJh
aXRzQXJnPgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwcml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKIAog
ICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOwogCi0gICAgdXNpbmcgSGFzaFRhYmxl
VHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJL
ZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFp
clRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJU
eXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5j
dGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKIAogICAgIGNsYXNzIEhhc2hN
YXBLZXlzUHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkxICsy
MzIsODkgQEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAoSGFz
aE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKIHsKICAgICBtX2ltcGwu
c3dhcChvdGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpzaXplKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHko
KTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9pbXBsLmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1l
IFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0
ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjplbmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigp
IGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9p
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3Rf
aXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3Rf
aXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZh
bHVlKQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBU
WVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZp
bmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5z
bGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxp
bmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZp
bmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5z
bGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4g
TWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0
IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5
ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMyNCw5ICszMjIsOSBAQCBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVk
UGVla1R5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5
cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29u
c3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMzNCwxNiArMzMyLDE2IEBAIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAt
PiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFs
dWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIGJvb2wgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0Citp
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5h
bWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYm
IHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5s
aW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0
IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+
KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewpAQCAtMzUzLDkxICszNTEs
OTEgQEAgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4K
LUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFs
dWUpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAg
IHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndh
cmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojppbmxp
bmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElO
RSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5LCBG
JiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBh
ZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rp
b25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
Zz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
ZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3Vs
dAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5
LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KGtleSwg
c3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwg
VCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXks
IFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtleSks
IHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYg
a2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRz
QXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBl
ZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0
ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRk
KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5M
SU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBl
JiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQo
a2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNB
cmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6
ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19J
TkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBr
ZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RG
TW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFt
ZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFt
ZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVU
cmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVu
c3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQK
K2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtl
eSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVF
bnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3Vs
dAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwg
RnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1
cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29u
c3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRv
clR5cGU+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHMsIHR5cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBN
YXBwZWRUcmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBN
YXBwZWRQZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2Fz
dDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBA
IEFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Omlu
bGluZUdldChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhl
bnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZShpdGVyYXRvciBp
dCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9y
JiYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92
ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBi
b29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZp
bmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFw
cGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CithdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgTWFwcGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRh
a2VUeXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVu
ZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBl
ZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHkKICAgICBy
ZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0
aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9y
Pjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7
CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZh
bHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxL
Pjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFw
VHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1l
IEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBL
ZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1w
bCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRy
YWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwyMyAr
NTE0LDIzIEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlw
ZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBy
ZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5
cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZSh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3Zl
KGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0
b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAs
MTQgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNrQ29uc2lz
dGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1f
aW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBi
b29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIGlmIChLZXlU
cmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2
NSwxMyArNTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFs
aWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNv
bnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIu
c2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwog
ICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBA
QCBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3Qg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5h
bWUgWT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICByZXR1
cm4gIShhID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIv
U291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IDc0YzA5ZTA1YWJlM2IzMGQwNDUwMTdhODFm
ZTI0MzcwYjZlMWI4YmQuLjAzNWE5MDdkNWY4ZTg1OWI1MjE2MGZkNDkzMzNiYzJkZDA1MmVkNGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0cnVj
dCBJZGVudGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwcml2YXRlOgpAQCAtNDEsOCArMzksNyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsK
ICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwog
CiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJ
ZGVudGl0eUV4dHJhY3RvciwKLSAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZh
bHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZhbHVlVHlwZSwgVmFsdWVU
eXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVl
VHJhaXRzPjsKIAogcHVibGljOgogICAgIC8qCkBAIC0xNzEsMTAyICsxNjgsMTAyIEBAIHN0cnVj
dCBIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUs
IFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBs
KTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVu
c2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
X2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNhcGFjaXR5KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6
aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7IAogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8g
SGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29u
c3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjplbmQoKSBj
b25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7IAogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZpbmQoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQo
dmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6Y29udGFp
bnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNv
bnRhaW5zKHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRy
YWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5s
aW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZChjb25z
dCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUs
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxI
YXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0Citp
bmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJh
aXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0
b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBl
JiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBt
X2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUm
JiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBs
LmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQodmFsdWUp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Citp
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVl
KQogewogICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNs
YXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0
byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRk
KGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5z
bGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9y
VHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JU
eXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRl
cikKQEAgLTI3NCw5ICsyNzEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQo
SXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2Vk
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVy
YXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRl
cmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI4NCw4ICsy
ODEsOCBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBl
IGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgViwgVz46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09
IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk0LDI3ICsyOTEsMjcg
QEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAg
IHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJl
bW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHJldHVybiBt
X2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1w
bC5jbGVhcigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+
IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRv
ciBpdCkgLT4gVGFrZVR5cGUKIHsKICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVy
biBWYWx1ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTMyNCw0
OCArMzIxLDQ4IEBAIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3Ig
aXQpIC0+IFRha2VUeXBlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0
byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRh
a2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxU
LCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWLCBXPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4o
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0
ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+
Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlw
ZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29u
c3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+
Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IFRhYmxlVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2
YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
PEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0
cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQog
ewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVu
YW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQogewogICAgIHJldHVy
biB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1
ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1
ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zODEsOSArMzc4LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZh
bHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0
b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0
aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNv
bGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTQsMjIgKzM5MSwy
MiBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVy
Q29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVu
YW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJh
dG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0Citpbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVj
dGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyQ29sbGVjdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQg
SGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2
YWx1ZSA6IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+
OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYs
IFc+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEw
YzBhNjI5NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVhYzhkZWFhMzdlNDU3OThjMjRlMmJjMDc4ZTRk
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hUYWJsZS5oCkBAIC03OSw0NiArNzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgot
ICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAg
ICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9p
ZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqKTsKIAogI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgot
ICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgot
ICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJl
bW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlk
YXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0
eXBlZGVmIGVudW0geyBIYXNoSXRlbUtub3duR29vZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9p
dGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBW
YWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBl
ID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFs
dWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsK
ICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAg
IGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJ
dGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBp
dGVyYXRvcjsKIAogICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBA
IC0yNDMsMTggKzI0NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogI2VuZGlmCiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0
ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlm
Zl90LCBWYWx1ZSosIFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwot
ICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlw
ZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVu
Y2VUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7
CiAKICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50
ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5k
KSB7IH0KICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBv
aW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kLCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcp
IDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBlbmQsIHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5
cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMg
VmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVk
ZWYgVmFsdWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwog
ICAgICAgICB+SGFzaFRhYmxlKCkgCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoKTsgCisgICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAg
ICAgICAgICAgIGlmIChtX3RhYmxlKQogICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC01
NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2Vw
dFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAg
ICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyB2
b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAgICAgICAgIC8vIExvYWQt
ZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21h
bGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNt
YWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2Fk
RGVub21pbmF0b3I7CkBAIC04NTYsNyArODUzLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKIApAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQog
ICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAg
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAg
ICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKQEAgLTExMTAsMTQgKzExMDcs
MTQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsK
ICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlz
KTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmVt
b3ZlKHBvcyk7CiAgICAgfQpAQCAtMTM3Myw3ICsxMzcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpjbGVhcigpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Cisg
ICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIGlmICghbV90YWJsZSkK
ICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTQwOSw4ICsxNDA2LDggQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgewotICAgICAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsK
KyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3Rh
YmxlKTsKIApAQCAtMTQzNCw3ICsxNDMxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9j
az4oKSkKICNlbmRpZgogICAgIHsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAKICAgICAgICAgbV90YWJs
ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZSwgbnVsbHB0cik7CiAKQEAgLTE1MDAsMzAg
KzE0OTcsMjkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKIAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAg
dm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhh
c2hUYWJsZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
aygqbV9tdXRleCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0OwotICAgICAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CisgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKKyAgICAgICAgdHlwZW5h
bWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIG5leHQ7CisgICAgICAgIGZvciAodHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIHAgPSB0YWJsZS0+bV9pdGVyYXRv
cnM7IHA7IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OwotICAgICAg
ICAgICAgcC0+bV90YWJsZSA9IDA7Ci0gICAgICAgICAgICBwLT5tX25leHQgPSAwOwotICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgICAgICBwLT5tX3RhYmxlID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIHAtPm1fbmV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX3By
ZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBtX2l0ZXJhdG9ycyA9IDA7Cisg
ICAgICAgIHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogdGFibGUsCi0gICAgICAgIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSwgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBp
dC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAg
IGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3Ig
YXQgaGVhZCBvZiBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAo
IXRhYmxlKSB7Ci0gICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5t
X25leHQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxl
LT5tX2l0ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2LDggKzE1MzIsOCBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1v
dmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAg
ICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBv
ZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFibGUpIHsKQEAgLTE1NTksMTMgKzE1
NTUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGl0LT5tX3RhYmxlID0gMDsK
LSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAg
ICAgICAgaXQtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0
cjsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAgIH0KIAogI2VuZGlmIC8v
IENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMg
eworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Cisg
ICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVy
YXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNv
bnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhh
c2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
OTU0OWUzNmJlYWRmMDE2N2VhY2VkY2YzNWZiMDc3NzViYTRmMGQ2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRy
YWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBl
ZEFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXAgPSBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9
IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0
czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0g
RGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxL
ZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+
Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBGYXN0Um9iaW5Ib29kSGFz
aFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwOwordXNpbmcgV1RGOjpNZW1vcnlDb21w
YWN0Um9iaW5Ib29kSGFzaE1hcDsKK3VzaW5nIFdURjo6RmFzdFJvYmluSG9vZEhhc2hNYXA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmggYi9Tb3VyY2UvV1RG
L3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmIyMGE5NTk5NmM3ODVmNGYzNWYy
MjQ5YzE2ZGNmZDY4MDg1ZTAxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Jv
YmluSG9vZEhhc2hTZXQuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUg
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFp
dHNBcmcsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0
SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+
PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJn
LCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFp
dHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERl
ZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhh
c2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDsKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQ7Cit1
c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNoU2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFi
bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYjIyMWU5NThiOTZlODc4OTIyYTc0OTc1NGFmN2NmZTExMWNmMjM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgK
QEAgLTAsMCArMSw3OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvSGFzaFRhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFz
aFRhYmxlOworCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFi
bGVTaXplUG9saWN5IHsKKyAgICAvLyA5NSUgbG9hZCBmYWN0b3IuIFRoaXMgYSBiaXQgcmVncmVz
cyAiaW5zZXJ0aW9uIiBwZXJmb3JtYW5jZSwgd2hpbGUgaXQga2VlcHMgbG9va3VwIHBlcmZvcm1h
bmNlIHNhbmUuCisgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggOTUlIGxv
YWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5jZS4KKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAxOTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDIwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCitzdHJ1Y3QgTWVtb3J5Q29tcGFj
dFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kgeworICAgIC8vIDkwJSBsb2FkIGZhY3Rvci4g
Um9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBhIGhpZ2ggbG9hZC1mYWN0b3Iu
CisgICAgLy8gT2JzZXJ2ZWQgcGVyZm9ybWFuY2UgaXMgc2xpZ2h0bHkgd29yc2UgdGhhbiBIYXNo
VGFibGUgKDc1JSBmb3Igc21hbGwgdGFibGUsIDUwJSBmb3IgbGFyZ2UgdGFibGUpLgorICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhv
b2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA4MCUgbG9hZCBmYWN0b3IsIHRoaXMgbWFp
bnRhaW5zIHRoZSBwZXJmb3JtYW5jZSBzYW1lIHRvIEhhc2hUYWJsZSwgc3RpbGwgdGhlIGxvYWQg
ZmFjdG9yIGlzIGhpZ2hlci4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRO
dW1lcmF0b3IgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9t
aW5hdG9yID0gNTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2Owor
fTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21w
YXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0
IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJl
cXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhh
c2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hlIGhhc2ggdmFs
dWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5
cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJp
bmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUgYWJvdmUgcmVx
dWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBSb2Jpbkhvb2Qg
SGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2ln
bmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRhYmxlIGZvciBB
dG9taWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1IYXNo
aW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwzXS4KKy8vCisv
LyBbMV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1
NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJdOiBodHRwczov
L2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFszXTog
aHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFj
a3dhcmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2Ns
YXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFzaFRhYmxlVHlw
ZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBpdGVyYXRvciA9
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNvbnN0X2l0ZXJh
dG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiA7CisgICAgdXNpbmcg
VmFsdWVUcmFpdHMgPSBUcmFpdHM7CisgICAgdXNpbmcgS2V5VHlwZSA9IEtleTsKKyAgICB1c2lu
ZyBWYWx1ZVR5cGUgPSBWYWx1ZTsKKyAgICB1c2luZyBJZGVudGl0eVRyYW5zbGF0b3JUeXBlID0g
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz47CisgICAg
dXNpbmcgQWRkUmVzdWx0ID0gSGFzaFRhYmxlQWRkUmVzdWx0PGl0ZXJhdG9yPjsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCA9IDEyODsKKwor
ICAgIHN0YXRpY19hc3NlcnQoIUtleVRyYWl0czo6aGFzSXNSZWxlYXNlZFdlYWtWYWx1ZUZ1bmN0
aW9uKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEhhc2hGdW5jdGlvbnM6Omhhc0hhc2hJblZhbHVlKTsK
KworICAgIFJvYmluSG9vZEhhc2hUYWJsZSgpID0gZGVmYXVsdDsKKworICAgIH5Sb2Jpbkhvb2RI
YXNoVGFibGUoKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAg
ICAgICAgaWYgKG1fdGFibGUpCisgICAgICAgICAgICBkZWFsbG9jYXRlVGFibGUobV90YWJsZSwg
dGFibGVTaXplKCkpOworICAgIH0KKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jp
bkhvb2RIYXNoVGFibGUmKTsKKyAgICB2b2lkIHN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJik7Cisg
ICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxl
Jik7CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoUm9iaW5Ib29kSGFzaFRhYmxlJiYpOworICAg
IFJvYmluSG9vZEhhc2hUYWJsZSYgb3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKwor
ICAgIC8vIFdoZW4gdGhlIGhhc2ggdGFibGUgaXMgZW1wdHksIGp1c3QgcmV0dXJuIHRoZSBzYW1l
IGl0ZXJhdG9yIGZvciBlbmQgYXMgZm9yIGJlZ2luLgorICAgIC8vIFRoaXMgaXMgbW9yZSBlZmZp
Y2llbnQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHNraXAgYWxsIHRoZSBlbXB0eSBhbmQgZGVs
ZXRlZAorICAgIC8vIGJ1Y2tldHMsIGFuZCBpdGVyYXRpbmcgYW4gZW1wdHkgdGFibGUgaXMgYSBj
b21tb24gY2FzZSB0aGF0J3Mgd29ydGggb3B0aW1pemluZy4KKyAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUl0ZXJhdG9yKG1fdGFibGUpOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKG1fdGFibGUg
KyB0YWJsZVNpemUoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJ
dGVyYXRvcihtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisKKyAgICBpdGVyYXRvciByYW5kb20o
KQorICAgIHsKKyAgICAgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBlbmQo
KTsKKworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgYXV0byYgYnVja2V0ID0gbV90
YWJsZVt3ZWFrUmFuZG9tVWludDMyKCkgJiB0YWJsZVNpemVNYXNrKCldOworICAgICAgICAgICAg
aWYgKCFpc0VtcHR5QnVja2V0KGJ1Y2tldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VL
bm93bkdvb2RJdGVyYXRvcigmYnVja2V0KTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBjb25z
dF9pdGVyYXRvciByYW5kb20oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdF9pdGVy
YXRvcj4oY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+cmFuZG9tKCkpOyB9
CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKTsgfQorICAg
IHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gdGFibGVTaXplKCk7IH0KKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAha2V5Q291bnQoKTsgfQorCisgICAgdm9pZCBy
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX3RhYmxlKTsKKyAgICAgICAgQVNTRVJUKCF0YWJsZVNpemUoKSk7CisKKyAgICAg
ICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6
ZTsKKyAgICAgICAgdW5zaWduZWQgbmV3VGFibGVTaXplID0gc3RkOjptYXgobWluaW11bVRhYmxl
U2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQpKTsKKworICAgICAgICBtX3RhYmxl
ID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOworICAgICAgICBtX3RhYmxlU2l6ZSA9IG5l
d1RhYmxlU2l6ZTsKKyAgICAgICAgbV9rZXlDb3VudCA9IDA7CisgICAgICAgIG1fd2lsbEV4cGFu
ZCA9IGZhbHNlOworICAgIH0KKworICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0
cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQorICAgIEFkZFJlc3VsdCBhZGQoVmFsdWVUeXBlJiYgdmFs
dWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJh
Y3QodmFsdWUpLCBXVEZNb3ZlKHZhbHVlKSk7IH0KKworICAgIC8vIEEgc3BlY2lhbCB2ZXJzaW9u
IG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcK
KyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBj
b252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGluIHRoZSB0YWJsZS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXh0cmE+IEFkZFJlc3VsdCBhZGQoVCYmIGtleSwgRXh0cmEmJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRS
ZXN1bHQgYWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYpOworCisgICAgaXRlcmF0
b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oa2V5KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYg
a2V5KSBjb25zdCB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0K
KyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gY29u
dGFpbnM8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVCYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBjb25z
dF9pdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7
CisKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CisgICAgdm9pZCByZW1vdmUoaXRl
cmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVy
YXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0
X2l0ZXJhdG9yKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
QnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5
VmFsdWU8S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsgfQorICAgIHN0YXRp
YyBib29sIGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyBy
ZXR1cm4gaXNFbXB0eUJ1Y2tldCh2YWx1ZSk7IH0KKworICAgIFZhbHVlVHlwZSogbG9va3VwKGNv
bnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5
KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBW
YWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogaW5saW5lTG9va3VwKGNvbnN0IFQmKTsK
KworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorICAgIHN0YXRp
YyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorICAg
IHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtleUNvdW50LCB1aW50
NjRfdCB0YWJsZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4ga2V5Q291bnQgKiBtYXhMb2Fk
RGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVyYXRvcjsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXpl
KTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5z
aWduZWQgc2l6ZSk7CisKKyAgICB1c2luZyBMb29rdXBUeXBlID0gc3RkOjpwYWlyPFZhbHVlVHlw
ZSosIGJvb2w+OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29uc3QgVCYpOworCisgICAgdm9pZCBtYWludGFpblByb2Jl
RGlzdGFuY2VGb3JBZGQoVmFsdWVUeXBlJiYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBkaXN0
YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spOworCisgICAgdm9pZCByZW1v
dmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsK
KyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1v
dmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVC
ZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KTsKKyAgICBib29sIHNob3VsZEV4cGFuZCgp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBrZXlDb3VudCA9IHRoaXMtPmtleUNvdW50
KCk7CisgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAg
ICAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNvdW50LCB0YWJsZVNpemUpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIC8vIElmIHByb2JlLWxlbmd0aCBleGNlZWRzIHByb2JlRGlz
dGFuY2VUaHJlc2hvbGQsIGFuZCA1MCV+IGlzIGZpbGxlZCwgZXhwYW5kIHRoZSB0YWJsZS4KKyAg
ICAgICAgcmV0dXJuIG1fd2lsbEV4cGFuZCAmJiBrZXlDb3VudCAqIDIgPj0gdGFibGVTaXplOwor
ICAgIH0KKyAgICBib29sIHNob3VsZFNocmluaygpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCkg
KiBtaW5Mb2FkIDwgdGFibGVTaXplKCkgJiYgdGFibGVTaXplKCkgPiBLZXlUcmFpdHM6Om1pbmlt
dW1UYWJsZVNpemU7IH0KKyAgICB2b2lkIGV4cGFuZCgpOworICAgIHZvaWQgc2hyaW5rKCkgeyBy
ZWhhc2godGFibGVTaXplKCkgLyAyKTsgfQorICAgIHZvaWQgc2hyaW5rVG9CZXN0U2l6ZSgpOwor
CisgICAgdm9pZCByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplKTsKKyAgICB2b2lkIHJlaW5z
ZXJ0KFZhbHVlVHlwZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFs
dWVUeXBlJiBidWNrZXQpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZXNpcmVk
SW5kZXgodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICBy
ZXR1cm4gaGFzaCAmIHNpemVNYXNrOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgcHJvYmVEaXN0YW5jZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgdW5zaWdu
ZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2spCisgICAgeworICAgICAgICByZXR1cm4gKGluZGV4
ICsgc2l6ZSAtIGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzaykpICYgc2l6ZU1hc2s7CisgICAg
fQorCisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4g
Y29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAg
aXRlcmF0b3IgbWFrZUtub3duR29vZEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdv
b2QpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoVmFs
dWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90
YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKworICAgIHN0YXRpYyB2
b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNpemVQb2xpY3k6Om1heExvYWRO
dW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0
b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9hZDsKKworICAgIHVuc2lnbmVk
IHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5zaWduZWQg
dGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVu
c2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorCisgICAgVmFs
dWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdGFibGVTaXplIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fa2V5Q291bnQgeyAwIH07CisgICAgYm9vbCBtX3dpbGxFeHBh
bmQgeyBmYWxzZSB9OworCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUworcHVibGljOgor
ICAgIC8vIEFsbCBhY2Nlc3MgdG8gbV9pdGVyYXRvcnMgc2hvdWxkIGJlIGd1YXJkZWQgd2l0aCBt
X211dGV4LgorICAgIG11dGFibGUgY29uc3RfaXRlcmF0b3IqIG1faXRlcmF0b3JzIHsgbnVsbHB0
ciB9OworICAgIC8vIFVzZSBzdGQ6OnVuaXF1ZV9wdHIgc28gSGFzaFRhYmxlIGNhbiBzdGlsbCBi
ZSBtZW1tb3ZlJ2Qgb3IgbWVtY3B5J2VkLgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPExv
Y2s+IG1fbXV0ZXggeyBtYWtlVW5pcXVlPExvY2s+KCkgfTsKKyNlbmRpZgorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpj
aGVja0tleShjb25zdCBUJikKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgoraW5saW5lIGF1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpsb29rdXAoY29uc3QgVCYga2V5KSAtPiBW
YWx1ZVR5cGUqCit7CisgICAgcmV0dXJuIGlubGluZUxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6aW5saW5lTG9va3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVU
eXBlKgoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgVmFsdWVU
eXBlKiB0YWJsZSA9IG1fdGFibGU7CisgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFu
c2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAg
IGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICAvLyBSb2Jpbkhvb2RIYXNoVGFibGUgbWFpbnRhaW5zIHRoaXMgaW52YXJpYW50
IHNvIHRoYXQgd2UgY2FuIHN0b3AKKyAgICAgICAgLy8gcHJvYmluZyB3aGVuIGRpc3RhbmNlIGV4
Y2VlZHMgcHJvYmluZyBkaXN0YW5jZSBvZiB0aGUgZXhpc3RpbmcgZW50cnkuCisgICAgICAgIGF1
dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIHVuc2ln
bmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlLZXkpOwor
ICAgICAgICBpZiAoZGlzdGFuY2UgPiBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNp
emUsIHNpemVNYXNrKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlm
IChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXpl
UG9saWN5Pjo6aW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCkKK3sKKyAgICBIYXNo
VGFibGVCdWNrZXRJbml0aWFsaXplcjxUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8+Ojp0ZW1wbGF0
ZSBpbml0aWFsaXplPFRyYWl0cz4oYnVja2V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeHRyYT4KK0FMV0FZU19JTkxJTkUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmFkZChUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBj
aGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CisKKyAgICAvLyBXZSBzaG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNl
cnRpbmcgYW4gZW50cnkuIElmIHdlIGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBl
bnRyeSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUg
c2luY2UgdGhlIGluc2VydGVkIGVudHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJl
aGFzaW5nLgorICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUp
OworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRv
cjo6aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNp
emVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUg
KyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRy
eSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6
Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJl
c3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5z
aWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6
ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7Cisg
ICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAg
ICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3RhcnQgc3dh
cHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50
LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7
CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3
YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIG1h
aW50YWluUHJvYmVEaXN0YW5jZUZvckFkZChXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwg
ZW50cnlEaXN0YW5jZSwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtu
b3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+CitBTFdBWVNfSU5MSU5FIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjptYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoVmFsdWVUeXBlJiYgdmFsdWUsIHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1h
c2spCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbmRleCA9
IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgKytkaXN0YW5jZTsKKworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAg
IGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjph
c3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFu
c2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSk7CisgICAgICAgIHVu
c2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNp
emUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgewor
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAg
ICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHN3YXAodmFsdWUs
ICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAgICAg
IH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsr
ZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+
CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFkZFBhc3NpbmdI
YXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBjaGVj
a0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CisKKyAgICAvLyBXZSBzaG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNlcnRp
bmcgYW4gZW50cnkuIElmIHdlIGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBlbnRy
eSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUgc2lu
Y2UgdGhlIGluc2VydGVkIGVudHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJlaGFz
aW5nLgorICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUpOwor
CisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVN
YXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5
ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUgKyBp
bmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goZW50cnlLZXkpOworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAg
ICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBm
YWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2Uo
ZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2Ug
PiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0
YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAg
ICAgICAgICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJv
YmUtZGlzdGFuY2UgaW52YXJpYW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50
cnkgPSBXVEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNs
YXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0
cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIG1haW50YWluUHJvYmVEaXN0YW5jZUZvckFkZChXVEZN
b3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZW50cnlEaXN0YW5jZSwgc2l6ZSwgc2l6ZU1hc2sp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRl
eCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9r
ZXlDb3VudCArPSAxOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKwor
ICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlaW5zZXJ0KFZhbHVlVHlwZSYmIHZhbHVlKQoreworICAg
IHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgdW5zaWduZWQgc2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAg
IHVuc2lnbmVkIGhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6
ZXh0cmFjdCh2YWx1ZSkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gs
IHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkg
eworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBp
ZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNz
aWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNs
YXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNp
Z25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXpl
LCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAg
ICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVu
dHJ5RGlzdGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYg
c2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYg
a2V5KSAtPiBpdGVyYXRvcgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVu
ZCgpOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICByZXR1cm4g
bWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1
dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtleSkgY29u
c3QgLT4gY29uc3RfaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVy
biBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PFJvYmluSG9vZEhh
c2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYgKCFl
bnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RD
b25zdEl0ZXJhdG9yKGVudHJ5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2Jvb2wgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpjb250YWlucyhjb25zdCBUJiBrZXkpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xh
dG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVyYXRv
cnModGhpcyk7CisgICAgcmVtb3ZlKHBvcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxp
ZGF0ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwor
ICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgcmVtb3ZlKHBvcyk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6cmVtb3ZlKFZhbHVlVHlwZSogcG9zKQoreworICAgIHBvcy0+flZhbHVlVHlw
ZSgpOworICAgIGluaXRpYWxpemVCdWNrZXQoKnBvcyk7CisgICAgbV9rZXlDb3VudCAtPSAxOwor
CisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIGluZGV4UHJldmlvdXMgPSBwb3MgLSBt
X3RhYmxlOworICAgIHVuc2lnbmVkIGluZGV4ID0gKGluZGV4UHJldmlvdXMgKyAxKSAmIHNpemVN
YXNrOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWUqIHByZXZpb3VzRW50cnkgPSBt
X3RhYmxlICsgaW5kZXhQcmV2aW91czsKKyAgICAgICAgVmFsdWUqIGVudHJ5ID0gbV90YWJsZSAr
IGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0VudHJ5KSk7
CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2go
ZW50cnlLZXkpOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwg
c2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZhbHVlVHJh
aXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkpOworICAg
ICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVja2V0KCplbnRy
eSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNocmluaygpKQor
ICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQg
PT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGUoY29u
c3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvciBp
dCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92
ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFs
dWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IgaXQpCit7
CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJ
bnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVlVHlw
ZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lu
bGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGNvbnN0IEtl
eVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphbGxv
Y2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAvLyB3b3VsZCB1
c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlv
bnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAor
ICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhh
c2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsK
KworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBl
Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNpemUgKiBzaXpl
b2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWdu
ZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAg
ICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhwYW5kKCkKK3sK
KyAgICB1bnNpZ25lZCBuZXdTaXplOworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0YWJsZVNpemUo
KTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFpdHM6Om1pbmlt
dW1UYWJsZVNpemU7CisgICAgZWxzZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisK
KyAgICByZWhhc2gobmV3U2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Citj
b25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpjb21wdXRl
QmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25lZCBiZXN0VGFi
bGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKworICAgIGlmIChz
aG91bGRFeHBhbmQoa2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVT
aXplICo9IDI7CisKKyAgICBhdXRvIGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24gPSBb
XShkb3VibGUgbG9hZEZhY3RvciwgdW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVkIHRhYmxlU2l6
ZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBj
YWxjdWxhdGlvbiwgdXNpbmcgMy80IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBXaXRoIG1heExv
YWQgYXQgMy80IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAxMS8yNC4K
KyAgICAgICAgLy8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAxMS8yNCBhbmQg
My80LCB3ZSBkb3VibGUgdGhlIHNpemUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVpbmcgdG9vIGNs
b3NlIHRvIGxvYWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8yNC4gVGhpcwor
ICAgICAgICAvLyBnaXZlIHVzIGEgbG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAxNS8yNCkuCisg
ICAgICAgIGRvdWJsZSBtYXhMb2FkUmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAgICBkb3VibGUg
bWluTG9hZFJhdGlvID0gMS4wIC8gbWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2ZXJhZ2VMb2Fk
UmF0aW8gPSAobWF4TG9hZFJhdGlvICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAgICAgIGRvdWJs
ZSBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFnZUxvYWRSYXRp
byArIG1heExvYWRSYXRpbykgLyAyOworICAgICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVT
aXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAgIH07CisKKyAg
ICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExv
YWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgIGlmIChhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkK
KyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNp
emUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGJl
c3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnNocmlua1RvQmVz
dFNpemUoKQoreworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1p
bmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNv
bXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KCkpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVoYXNoKHVu
c2lnbmVkIG5ld1RhYmxlU2l6ZSkKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgp
OworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5zaWduZWQgb2xk
S2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1Rh
YmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgbV9rZXlDb3Vu
dCA9IG9sZEtleUNvdW50OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFRhYmxl
U2l6ZTsgKytpKSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAg
ICAgIGlmICghaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpCisgICAgICAgICAgICByZWluc2VydChX
VEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICB9
CisKKyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKKworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OmNsZWFyKCkKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGlmICghbV90
YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFu
Z2UobV90YWJsZSwgbnVsbHB0ciksIHRhYmxlU2l6ZSgpKTsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7
CisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OlJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQorICAg
IDogbV90YWJsZShhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKSkKKyAgICAsIG1fa2V5
Q291bnQob3RoZXIubV9rZXlDb3VudCkKKyAgICAsIG1fdGFibGVTaXplKG90aGVyLm1fdGFibGVT
aXplKQorICAgICwgbV93aWxsRXhwYW5kKG90aGVyLm1fd2lsbEV4cGFuZCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkg
eworICAgICAgICBWYWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsK
KyAgICAgICAgVmFsdWVUeXBlJiBlbnRyeSA9IG1fdGFibGVbaW5kZXhdOworICAgICAgICBuZXcg
KCZlbnRyeSkgVmFsdWVUeXBlKG90aGVyRW50cnkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpzd2Fw
KFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBG
b3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAobV90YWJsZSwgb3RoZXIubV90YWJsZSk7
CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUpOworICAgIHN3YXAobV9r
ZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7CisgICAgc3dhcChtX3dpbGxFeHBhbmQsIG90aGVy
Lm1fd2lsbEV4cGFuZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhh
c2hUYWJsZSYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RI
YXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90
aGVyKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXpl
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV93aWxsRXhwYW5kID0g
c3RkOjpleGNoYW5nZShvdGhlci5tX3dpbGxFeHBhbmQsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlw
ZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jpbkhvb2RI
YXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAgPSBXVEZNb3ZlKG90aGVy
KTsKKyAgICBzd2FwKHRlbXApOworICAgIHJldHVybiAqdGhpczsKK30KKworc3RydWN0IE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IE1lbW9y
eUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcg
VGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNo
VGFibGVTaXplUG9saWN5PjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJh
aXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3Bw
IGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKaW5kZXggMmY3NjcwYjQ4
MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVmYS4uYTE4YjNjYmQ4ODAwMmQzOWRmY2IyZWMx
NzQzYTk3NWQ0ZWY0Y2RiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAK
QEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIHsKIAogI2VuZGlm
IC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNoU2V0PFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPj47Cit1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBBdG9tU3RyaW5n
VGFibGU6OlN0cmluZ1RhYmxlSW1wbDsKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nVGFi
bGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21TdHJpbmdUYWJsZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJs
ZS5jcHAKaW5kZXggZTBjMGFmYmFlYTQzNjg2MWI4YjhlNDFlZTA3NmFlMmM3NDIyNGJjZi4uODZl
ZDI1ZjI4ZWMwODY2OGVmNWU0YTU2YTI0OTc1ZDIwMWZhOGU0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ1RhYmxlLmNwcApAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV1RGIHsK
IAogQXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKCkKIHsKLSAgICBmb3IgKGNvbnN0
IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgc3RyaW5nIDogbV90YWJsZSkKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHN0cmluZyA6IG1fdGFibGUpCiAgICAgICAgIHN0cmluZy0+c2V0SXNBdG9tKGZhbHNl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
aCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKaW5kZXggMmYwODljZTk2
MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZS4uMjQ1YTNhNjIwMWE1MGRmMjY1OWRjMTkx
MGUwNzllMDU1N2Q0MTI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCkBA
IC0yMiw4ICsyMiw5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvUGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTMzLDEyICszNCwxNSBAQCBj
bGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2luZyBTdHJpbmdFbnRyeSA9IFBhY2tlZFB0
cjxTdHJpbmdJbXBsPjsKKyAgICB1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBGYXN0Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmdFbnRyeT47CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJp
bmdUYWJsZSgpOwogCi0gICAgSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgp
IHsgcmV0dXJuIG1fdGFibGU7IH0KKyAgICBTdHJpbmdUYWJsZUltcGwmIHRhYmxlKCkgeyByZXR1
cm4gbV90YWJsZTsgfQogCiBwcml2YXRlOgotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0lt
cGw+PiBtX3RhYmxlOworICAgIFN0cmluZ1RhYmxlSW1wbCBtX3RhYmxlOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0hhc2guaAppbmRleCA1YTgzODVlMDRhOTU5MDRlMDZiYTEyOGQ2ZWFhMTNk
OTFlYjkwZmI5Li5mMDMyZjFiZGYyMWI1OGRiZjZjZTYyNTQ1NDQ2YzQ4NzY1ZmFjNDEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0hhc2guaApAQCAtOTAsNiArOTAsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aGFzSGFzaEluVmFsdWUgPSB0cnVlOwogICAgIH07CiAKICAgICBzdHJ1Y3QgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424750</attachid>
            <date>2021-03-31 03:07:17 -0700</date>
            <delta_ts>2021-03-31 03:43:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210331030717.patch</filename>
            <type>text/plain</type>
            <size>221368</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGU2Njc0MDA3ZTAyOWIxNzU2MTU5Y2VlMjk1NDZjYWYzYzIwNDJmLi4zNjhlMzYzNjc0ODY5ZjI3
ZDgxYTJjYzUxNGFmNjgyMWM2MjEwNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0y
NiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVz
ZSBBcHBsZUlDVSBTUEkgZm9yIGNhbm9uaWNhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDRjYTlhNmRkM2I4ZDkx
NzM5Mzk1Yzg3NzY4ZWViMGFiMTAyMGY2NC4uMjdhMzhmNDVkYWVhZGZmNWJiMDIxZGJhYzhhODU3
OGI1NjFhODViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDMgQEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5I
b29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi9IYXNo
TWFwLmg6CisgICAgICAgIChXVEY6Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAg
IChXVEY6Olk+OjplbmQpOgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAg
ICAoV1RGOjpZPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAg
ICAoV1RGOjpZPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5s
aW5lR2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChX
VEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVU
cmFpdHNBcmc+OjpzZXQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6Cisg
ICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRh
YmxlVHJhaXRzQXJnPjo6ZW5zdXJlKToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAg
ICAgIChXVEY6Olk+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6Olk+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kg
Y29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46
OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+Ojppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpiZWdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRh
aW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6Olg+OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHNBcmc+OjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRU
cmFpdHNBcmc+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+
OjpmYXN0QWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5z
dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpYPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0Nv
bnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpz
d2FwKToKKyAgICAgICAgKFdURjo6Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6
Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6Olc+OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3Qp
OgorICAgICAgICAoV1RGOjpXPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250
YWlucyBjb25zdCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RG
OjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+OjpyZW1vdmUpOgorICAgICAgICAo
V1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtlQW55KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnRh
a2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6PSBj
b25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6c2l6ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmNv
bnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJh
aXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+
OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+
OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
SGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENvZGUp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92ZUFu
ZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpIYXNo
VGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAgICAg
ICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5I
b29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFu
ZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAg
IChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpm
aW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlucyBj
b25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tldCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxk
RXhwYW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRT
aHJpbmsgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lF
eGNlcHRTaXplKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrS2V5KToKKyAgICAgICAgKFdURjo6
U2l6ZVBvbGljeT46Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjppbmxpbmVM
b29rdXApOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6aW5pdGlhbGl6ZUJ1Y2tldCk6Cisg
ICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZWlu
c2VydCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kKToKKyAgICAgICAgKFdURjo6
U2l6ZVBvbGljeT46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y29u
dGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxp
ZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpTaXplUG9s
aWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphbGxvY2F0ZVRhYmxl
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZSk6CisgICAgICAg
IChXVEY6OlNpemVQb2xpY3k+OjpleHBhbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c2hyaW5r
VG9CZXN0U2l6ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZWhhc2gpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnN3YXApOgor
ICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oOgor
ICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6On5B
dG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oOgor
ICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdIYXNoLmg6CisKIDIwMjEtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICB3dGYvVmVjdG9yLmg6MTI3Njo4ODogcnVudGltZSBlcnJvcjogcmVm
ZXJlbmNlIGJpbmRpbmcgdG8gbnVsbCBwb2ludGVyIG9mIHR5cGUgJ2NvbnN0IFdlYkNvcmU6OlN0
eWxlOjpSdWxlRmVhdHVyZScKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2OTE4NDcwOTJmZWYzMWZlZjFmZmM0NjVm
ZWM2YzMxNDIyZWE4ZjUxLi5hNmViZGQ2YzkyYmZmMjVkNzM2NmI3ZTFiNGEzZTMxZjVlNTBmZTE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29k
SGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YnVja2V0TUlNRVR5cGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6cG9wdXBWYWx1ZSBjb25zdCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgICog
ZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAg
ICAgKHByaW50TmFtZXNIZWFkZXJGaWxlKToKKyAgICAgICAgKHByaW50RmFjdG9yeUNwcEZpbGUp
OgorICAgICAgICAocHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUpOgorICAgICAgICAqIGVkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZv
ckZvcm1hdEJsb2NrKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCk6Cisg
ICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZCk6CisgICAgICAgICogaHRtbC9BdXRv
ZmlsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWVsZE5hbWVNYXApOgorICAgICAgICAqIGh0
bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aXND
YXNlU2Vuc2l0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZlbnRzUGFyZW50T2JqZWN0RnJvbUV4cG9zdXJl
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQ2FzZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTVkdUYWdO
YW1lQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RBdHRyaWJ1dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzV2l0
aFByZWZpeCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QpOgorICAgICAg
ICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
c3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5jdGlvbk1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VCYWNrc2xhc2hBc1ll
blNpZ25Gb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Omhhc1ZhbGlk
QXZlcmFnZUNoYXJXaWR0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZh
bGlkSW5pdERhdGFUeXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Y29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlv
Q29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2xpcHBlckZpbHRlck1hc2tlclRhZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6bWFya2VyVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQW5kU3Ryb2tlVGFncyk6
CisgICAgICAgIChXZWJDb3JlOjpjaGFpbmFibGVSZXNvdXJjZVRhZ3MpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Omhhc0VmZmVj
dGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50
Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphbmltYXRhYmxlQXR0cmlidXRlRm9yTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0
cmlidXRlTmFtZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZH
VGVzdHMuaDoKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVBbGxvd2VkRWxlbWVudFNldCk6CisgICAgICAgIChXZWJDb3JlOjppc0Rpc2Fs
bG93ZWRFbGVtZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpjcmVhdGVGdW5jdGlvbk1hcCk6CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVBeGlzTmFtZXNNYXApOgorCiAyMDIx
LTAzLTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEFsbG93IERpc3BsYXlSZWZyZXNoTW9uaXRvciB0byBiZSBtb3JlIGxvbmctbGl2ZWQgb2JqZWN0
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBmYjgyOTQ3ODM1OTc3NzIzNGM4ZTk5M2Y3M2IzOWZkNmViNzI2NzRmLi44
MGQ4MTI2ZWZkYmQ4MjhhYzBhYTVmZjQ0Mjg0MjZiN2I5MjhkNjQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDIxLTAzLTMxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6T2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OmV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJL
aXQ6OmV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVU
YWJsZVF1ZXJpZXMpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgor
ICAgICAgICAqIFNoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbToKKyAgICAg
ICAgKFdlYktpdDo6Z2V0QXBwQm91bmREb21haW5zVGVzdGluZyk6CisgICAgICAgICogU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNl
c1N0b3JlOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJl
YWRBY2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJl
YWRBY2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKwogMjAy
MS0wMy0yNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBIYXZlIERpc3BsYXlMaW5rIGNvbXB1dGUgaXRzIGRpc3BsYXlOb21pbmFsRnJhbWVzUGVyU2Vj
b25kIGp1c3Qgb25jZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcAppbmRleCAyYTA4ODdlNzNlNTcxZjAwOGU4ODRkYjM0MzA0ODZkMzQyMDA3MjIw
Li43ZjhhZTRmMTQwZWU3NDNkMGZlNWYzOTU0Mzg3YmUzY2ZkNmQ1ZjBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtMTEzLDcgKzEx
Myw3IEBAIHN0cnVjdCBDaGFyQnVmZmVyU2VhY2hlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRl
TmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5z
bGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitzdGF0aWMgUHJpdmF0ZVN5
bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBCdWlsdGluTmFtZXM6OlByaXZh
dGVOYW1lU2V0JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJh
Y3RlclR5cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJC
dWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9
PSBzZXQuZW5kKCkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFByaXZhdGVTeW1ib2xJbXBs
KiBsb29rVXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnMK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBTeW1ib2xJbXBs
KiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJ
bXBsKj4mIG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVy
VHlwZT4mIGJ1ZmZlcikKK3N0YXRpYyBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2xJ
bXBsKGNvbnN0IEJ1aWx0aW5OYW1lczo6V2VsbEtub3duU3ltYm9sTWFwJiBtYXAsIGNvbnN0IFdU
Rjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7CiAg
ICAgYXV0byBpdGVyYXRvciA9IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5
cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggMzE5NDViZjNlMTZj
ZDMwNGU4ZDg4MjliMTk5NzFkYTdjY2NlMzlhMi4uMDM5ZDRmY2VlMzRiODhlYTYyMTBkMGJmYTBi
NzZlMmNlOTExMGMzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkpT
Q0J1aWx0aW5zLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk5LDYg
KzIwMSw5IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QnVpbHRpbk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Cisg
ICAgdXNpbmcgUHJpdmF0ZU5hbWVTZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPjsKKyAgICB1c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47CisK
ICAgICBCdWlsdGluTmFtZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgUHJpdmF0
ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsK
QEAgLTIzMiw4ICsyMzcsNiBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNvbnN0IEpTQzo6
SWRlbnRpZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9k
b2xsYXJWTVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX3BvbHlQcm90
b1ByaXZhdGVOYW1lOwotICAgIHVzaW5nIFByaXZhdGVOYW1lU2V0ID0gSGFzaFNldDxTdHJpbmc+
OwotICAgIHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJ
bXBsKj47CiAgICAgUHJpdmF0ZU5hbWVTZXQgbV9wcml2YXRlTmFtZVNldDsKICAgICBXZWxsS25v
d25TeW1ib2xNYXAgbV93ZWxsS25vd25TeW1ib2xzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5o
CmluZGV4IDVjZjRmYTU1YzNlZWVkZWY0ZjhlYTkzY2Q2MWQ0NjYxZWI2N2Y4MmEuLjc4NTdkYmEw
MTE1OGE3NmY3ZTAxNmEyMzc5MzUwNWQ2ZGE1YjMwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0yMTIsNyArMjEzLDcgQEAgY2xhc3MgQnl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeSB7CiAKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07Ci0gICAgSGFzaE1hcDxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNv
ZGVJbnRyaW5zaWNNYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4g
bV9ieXRlY29kZUludHJpbnNpY01hcDsKIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9J
TlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBTdHJvbmc8VW5rbm93bj4gbV8jI25h
bWU7CiAgICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9F
QUNIX05BTUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRP
UlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDdkYzhhOTIzZjQwODk4ZDk1MWVkMjkwYTljNTc1
NTdlMDk1N2I1OTQuLjM3MjcwNmFlZGM1N2I2YWI0Nzk5OWZhZWQwY2RhYjMzMTE1MDEwNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCkBAIC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSA8d3RmL1dhbGxU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0
Zi90aHJlYWRzL1NpZ25hbHMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
CiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDxkaXJlY3QuaD4KQEAgLTEyODQsMTEgKzEyODUs
NzUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWwKIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uUHJpbnRTdGRPdXQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCiB7CisjaWYgMAorICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7Cisg
ICAgc3RvcFdhdGNoLnN0YXJ0KCk7CisgICAgeworICAgICAgICBGYXN0Um9iaW5Ib29kSGFzaFNl
dDxTdHJpbmc+IHN0cmluZ1RhYmxlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihp
KSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAg
c3RyaW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBk
YXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkKKyAgICAgICAgICAg
ICAgICBzdHJpbmdUYWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICB9Cisg
ICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICYgMHgxKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFzdHJpbmdUYWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJl
cihpKSkpOworICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihp
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJpbmdU
YWJsZS5jb250YWlucyhTdHJpbmc6Om51bWJlcihpKSkpOworICAgICAgICAgICAgICAgIHN0cmlu
Z1RhYmxlLnJlbW92ZShTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgfQorICAgIHN0
b3BXYXRjaC5zdG9wKCk7CisgICAgZGF0YUxvZ0xuKHN0b3BXYXRjaC5nZXRFbGFwc2VkTVMoKSk7
CisjZW5kaWYKICAgICByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgc3Rkb3V0KTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJpbnRT
dGRFcnIsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkpCiB7CisjaWYgMAorICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CisgICAgc3RvcFdhdGNoLnN0
YXJ0KCk7CisgICAgeworICAgICAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3Ry
aW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRh
TG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1i
ZXIoaSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChpICYgMHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJp
bmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxl
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmlu
Z1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3Ry
aW5nVGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVy
KGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVy
KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5n
VGFibGUuc2l6ZSgpKTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9n
TG4oc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludElu
dGVybmFsKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdGRlcnIpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggNDRkMWNmZGJkNDk0OTE2ZWRi
ZmZkNGYzMTRmN2NkNWZiZmI2ZjE1My4uYWU2ZGJiMGY4ZjU5MjM1MGE0Y2YyZTQxMGRmMGJkMmRh
YmM3OGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaApA
QCAtMjk0LDYgKzI5NCw3IEBAIEpTVmFsdWUgaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUo
Vk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiBzdHJ1Y3QgSWRlbnRpZmllclJlcEhhc2ggOiBQdHJI
YXNoPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhp
c3RpbmdTeW1ib2xBd2FyZUhhc2goKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFVuaXF1
ZWRTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2go
KTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiB9
OwogCiBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8aW50
PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcApp
bmRleCA0NjU1MjQ4ZjI4MDQ5MTBlNGI0ZGNjMjBlNWJiZTkxNGU1ODlmMWVhLi5jODJmYTYwZWIw
YzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIElu
dGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgbG9jYQogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVsbCgpKQogICAg
ICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lv
bktleTo6S2YpXSA9IGNhc2VGaXJzdE9wdGlvbjsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRv
IHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZh
bnRFeHRlbnNpb25LZXk6OkNvLCBSZWxldmFudEV4dGVuc2lvbktleTo6S2YsIFJlbGV2YW50RXh0
ZW5zaW9uS2V5OjpLbiB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJvb2wgSW50bENvbGxhdG9yOjp1cGRhdGVDYW5E
b0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3QKIH0KIAogI2lmIEFTU0VSVF9FTkFCTEVE
Ci12b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgbG9jYWxlcykKK3ZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2FsZUlu
dmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JiBsb2NhbGVzKQogewogICAgIGZvciAoYXV0byYgbG9j
YWxlIDogbG9jYWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmluZ1dpdGhEVUNF
VCA9IFtdKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9yKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4IDI0ZDYxNjE2
NDlhZDlmZTdkNGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLjVlNTJhMWM5MjVjMmVkNDAzYzEzNzUz
YzVjMTcyYzlmY2QzZWYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVkZSA8dW5pY29k
ZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L0lDVUhlbHBlcnMuaD4KIApAQCAt
NzMsOSArNzMsOSBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiAgICAgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzdGF0aWMgdm9pZCBj
aGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7CisgICAgc3Rh
dGljIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNldCYpOwogI2Vs
c2UKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYpIHsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja0lDVUxv
Y2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JikgeyB9CiAjZW5kaWYKIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMwZDQzODI5YjUzYjk3NTdiOWExZmMzYjkuLmY4
OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3MzNmODk4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtNTY2
LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVG
b3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgbG9jYWxlT3B0aW9u
c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6OkhjKV0gPSBTdHJp
bmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0
byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMo
KTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWls
YWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlv
bnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4dGVuc2lvbktleTo6SGMs
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxl
ID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDFi
YmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0MGY3MGE0YTkuLmMwOTA5Yjg5MWU5NDMwYzBk
YTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSgogICAgIC8vIDEyLjIu
MiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlv
bnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUg
JURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVM
b2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2Nh
bGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmlu
Zz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggMjJhMTE1ZDEzOWY2YzViMjQ1ZWRl
YmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRiNTA5N2M2NDIw
YzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3Bs
YXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3Bs
YXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBJbnRsRGlzcGxheU5hbWVzOjppbml0
aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9
IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAg
YXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0s
IGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZmMGEwOTMzNzY5MTFkYjEwYjg4ZmFhOWY0NWYz
NWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2UwZWU3YTZkOTgzZmJlY2MzN2I4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5
TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxlc09mLCAo
SlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWRpc3BsYXluYW1l
cy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBvcnRlZExvY2FsZXNPZgogCiAgICAgLy8gMS4g
TGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3BsYXlOYW1lcyUuW1thdmFpbGFibGVMb2NhbGVz
XV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERp
c3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVM
b2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIu
IExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcyku
CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2Fs
ZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAppbmRleCA4MTdiOWNh
ZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEzMDkyLi44ODBlZDI2ZTczYWZlMWNhOTQ0Nzc0
NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBJbnRsTGlzdEZv
cm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
OwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9u
cywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1ZWUyM2RiZjFlMGIwMzljM2NhZjA3ODBmMWI2
NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBkZjBlNjc5OGJkYTcyMjIxNWEzYzY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNH
bG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlzdC1mb3JtYXQv
I3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAvLyAxLiBMZXQg
YXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9
IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVl
c3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0
b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAwMDdjOWQzMDI3MTVh
NTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5mMDM1MGM4NDM4ZDc3ZWJlN2E1ZjkyNzQ5MDdl
M2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW50bE51bWJlckZv
cm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0KIAotICAgIGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
OworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2Jh
bE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hl
ciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0
YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2MmViYmMyNjQ0Mzc5YWY1OTMyMTEwZjAuLmYy
MWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFkNTkxZjEzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0
cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNHCiAg
ICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51
bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRM
b2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0
cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBmODllOGZlNzRlOGRiY2YwZTU4MzUwYWJlYzFm
N2E4NWQ4YmRlNC4uOWQ1MzZkNzRjMDE5ZDE4ZGE3NTgzN2Q1OWFiNzM4Nzk2ZWVkNjAyOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTM1Miw3
ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBjaGFyKiBsb2Nh
bGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAvLyBFbnN1cmUgd2UgaGF2ZSB4eC1aWiB3aGVu
ZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0aWMgdm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxl
SWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJpbmdWaWV3IGxv
Y2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChMb2NhbGVTZXQm
IGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQogewogICAgIGlmIChsb2NhbGUu
bGVuZ3RoKCkgPCAxMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3Nyw5IEBAIHN0YXRp
YyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMsIFN0cmluCiAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQoU3RyaW5nSW1wbDo6
Y3JlYXRlU3RhdGljU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7CiB9
CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3Qg
TG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7CisgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGlu
aXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgp
OwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVpbnQ4X3QgZHVjZXRXZWlnaHRzWzEyOF0gPSB7
CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwgMzcsIDAsCiB9OwogCi1jb25zdCBIYXNoU2V0
PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3QgTG9jYWxlU2V0
JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsKICAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5p
dGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29uc3RydWN0KCk7
CkBAIC00NzYsMjIgKzQ3NiwyMSBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRv
ckF2YWlsYWJsZUxvY2FsZXMoKQogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzOwogfQogCi1j
b25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCkKK2Nv
bnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlZEF2YWlsYWJsZUxvY2Fs
ZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gY2FjaGVkQXZhaWxh
YmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxl
U2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFs
aXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZdIHsKLSAgICAg
ICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgYXZhaWxhYmxl
TG9jYWxlcy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMtPmlz
RW1wdHkoKSk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzSW1tb3J0YWwgPSB0cnVlOwogICAg
ICAgICBpbnQzMl90IGNvdW50ID0gdWJya19jb3VudEF2YWlsYWJsZSgpOwogICAgICAgICBmb3Ig
KGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9j
YWxlID0gbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRCh1YnJrX2dldEF2YWlsYWJsZShpKSwgaXNJbW1v
cnRhbCk7CiAgICAgICAgICAgICBpZiAobG9jYWxlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxvY2FsZSk7Ci0g
ICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxlTG9jYWxlcywg
bG9jYWxlKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMtPmFkZChsb2NhbGUpOworICAg
ICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxvY2FsZXMuZ2V0
KCksIGxvY2FsZSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgICByZXR1cm4gYXZhaWxhYmxlTG9j
YWxlczsKQEAgLTY5OCw3ICs2OTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2Nh
bGVMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIHJl
dHVybiBzZWVuOwogfQogCi1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxlKQorU3RyaW5n
IGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKICAgICByZXR1cm4gYmVzdEF2YWlsYWJsZUxvY2FsZShs
b2NhbGUsIFsmXShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSkgewogICAgICAgICByZXR1cm4gYXZh
aWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpOwpAQCAtNzYzLDcgKzc2Miw3IEBAIFN0
cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbG9jYWxlKQog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0
IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVz
dGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBMb29rdXBN
YXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAgLTgwNCw3ICs4
MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8UwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hlclJlc3VsdCBi
ZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVT
ZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzKQogewogICAgIC8vIEJlc3RGaXRNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWJl
c3RmaXRtYXRjaGVyCkBAIC04MjUsNyArODI0LDcgQEAgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBy
ZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktleSBrZXkpCiAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1SZXNvbHZlZExvY2FsZSByZXNvbHZl
TG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2Fs
ZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlv
bnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4g
cmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKK1Jlc29sdmVkTG9jYWxlIHJlc29sdmVM
b2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFp
bGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9j
YWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYgb3B0
aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFu
dEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5n
JiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAgIC8vIFJlc29sdmVMb2NhbGUgKGF2YWls
YWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50RXh0ZW5zaW9u
S2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIv
I3NlYy1yZXNvbHZlbG9jYWxlCkBAIC04OTAsNyArODg5LDcgQEAgUmVzb2x2ZWRMb2NhbGUgcmVz
b2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0
cmluZz4KICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5KiBsb29rdXBT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIExv
b2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMp
CiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9va3Vwc3VwcG9y
dGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBAIHN0YXRpYyBKU0FycmF5KiBsb29rdXBTdXBw
b3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTCiAg
ICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRM
b2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2Fs
ZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBCZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0Zml0c3VwcG9ydGVkbG9j
YWxlcwpAQCAtOTI4LDcgKzkyNyw3IEBAIHN0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVk
TG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoCiAgICAgcmV0
dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxl
TG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUg
b3B0aW9uc1ZhbHVlKQorSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogewog
ICAgIC8vIFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2Fs
ZXMsIG9wdGlvbnMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMt
c3VwcG9ydGVkbG9jYWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5oCmluZGV4IGZhMmU4MjgwNzhiN2U4NTFhNzcxZGMwYTA4MGZiNmE2ODVhMTJhZWQuLjYxNDBj
MjBkNmZkM2U4ZThiNTI4OTc1ZDYzODQ4ZmYxODNmY2FiNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb25JdGVyYXRvcjsK
IApAQCAtODEsMTUgKzgyLDE2IEBAIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiB9OwogCiBTdHJpbmcgZGVmYXVsdExvY2FsZShKU0dsb2JhbE9iamVj
dCopOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOwotY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Ci1jb25z
dCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7Ci1pbmxp
bmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVy
biBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFi
bGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxQbHVyYWxS
dWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9
Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGlu
ZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
IHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK3VzaW5nIExvY2FsZVNldCA9IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+OworY29uc3QgTG9j
YWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0JiBpbnRsQ29s
bGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxTZWdtZW50ZXJB
dmFpbGFibGVMb2NhbGVzKCk7CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsRGF0ZVRpbWVG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsg
fQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2Fs
ZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9j
YWxlU2V0JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxB
dmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxQbHVyYWxS
dWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9
CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25z
dCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5PcHRpb24oSlNH
bG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSk7
CiBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2Jq
ZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3Qg
Y2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNr
KTsKQEAgLTEwNywxMCArMTA5LDEwIEBAIHN0cnVjdCBSZXNvbHZlZExvY2FsZSB7CiAgICAgUmVs
ZXZhbnRFeHRlbnNpb25zIGV4dGVuc2lvbnM7CiB9OwogCi1SZXNvbHZlZExvY2FsZSByZXNvbHZl
TG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0
Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmlu
Zz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpOwot
SlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVk
TG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKK1Jlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBS
ZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVu
c2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURh
dGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CitKU1ZhbHVlIHN1cHBv
cnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxv
Y2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9w
dGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBsb2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CitT
dHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFBy
ZWRpY2F0ZT4gU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0
ZWRMb2NhbGUsIFByZWRpY2F0ZSk7CiBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdTeXN0ZW1zRm9y
TG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKaW5kZXggZTY1ZmIwZDczMjcxNTI5YjVj
YWE5ZDlmYWJlYzliZWJjYjRjNTZhMi4uY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3YWRhZGI4ZThk
Y2JhZjUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBs
dXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjppbml0
aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1CiAg
ICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVy
PihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIs
IHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3Ms
IExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhl
ciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjg4NTBiMTBhOGJmZTY1NzA0M2QyYTFlYWQwNzExMDQx
YjkyMDU5MS4uMjdiMjMxMGIzNDhhMWU0YTQ1ZGYwZWY5MTE1M2E5ZTQ1ZThmZjU3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlc0NvbnN0cnVjdG9yLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2Ys
IChKU0dsCiAKICAgICAvLyAxMy4zLjIgSW50bC5QbHVyYWxSdWxlcy5zdXBwb3J0ZWRMb2NhbGVz
T2YgKGxvY2FsZXMgWywgb3B0aW9ucyBdKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTQwMi8jc2VjLWludGwucGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29mCi0gICAgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJhbFJ1bGVzQXZh
aWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
UGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiByZXF1
ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCBmN2QzOGI4MWVhYzgyODYzZjVhZDhi
Y2M4MzI0NjUyNjkyODE3NzZlLi4yYjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMxMDk4MDViNzA3
M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRp
dmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgSW50bFJlbGF0
aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0KIAotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRp
bWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9j
YWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0
byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2FsZSA9IHJlc29s
dmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxNzRiNmZkY2UyYzg2YmZjMTFiNWViMWVmNTM3
MjA5OGVhODk4NDk0Li45YThjOGQ0Y2E2YzZjNGVkMzVmZjcwZTk3ZTdkM2VjYzRmNTlhZTZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVj
dG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2Fs
ZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9
IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKaW5k
ZXggMDRjZjE3ZDUwOTM1NjIxYzQyNDhlODQ4Yjc3NTBlZGEzN2VhODFlOC4uMmFkNzRmOTRiYmU4
Y2ExN2M3NzU4OTJhZmJjNmZlZjcxMmE2MmI1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBJbnRs
U2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgbG8KICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYg
YXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2Nh
bGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVP
cHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2Nh
bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmZmQ3M2Y3MzZhOTc0MzM3OGRmZGIxYTMxZDRi
Zjk5Zjk4ZGVhZTUyLi4wOTM5NGRjMThlZGRmMmE5MzE5NTFlN2M2ZmFhOTcyMjhmYmY2MzY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50ZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNH
bG9iYWxPYgogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXNlZ21lbnRlci8j
c2VjLWludGwuc2VnbWVudGVyLnN1cHBvcnRlZGxvY2FsZXNvZgogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJVNlZ21lbnRlciUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAg
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNlZ21lbnRlckF2
YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRM
b2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0
cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5oCmluZGV4IDgyNzM3ZDhmOWM2OGRlMThlODdmNWU1N2NlYTBhNjAy
MTBlODg4ODYuLjNhNzExZmI5MDliNjkwZTBmMTlmZWE1MTc0YzY4MDU4Y2JlNGM0NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaApAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDxh
cnJheT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFJl
Z0V4cENhY2hlIGZpbmFsIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFwOworICAgIHR5
cGVkZWYgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4
cD4+IFJlZ0V4cENhY2hlTWFwOwogCiBwdWJsaWM6CiAgICAgUmVnRXhwQ2FjaGUoVk0qIHZtKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKaW5kZXggZTBmODgzMTAy
MGQ2ZDkzNWM3MDE5MDFmYjQ5YjI4Y2I2ZGM5MzhmYy4uZDE2NjI3OWY2ZGIyZWNlZWIyZTNlNzBi
MDdkOTYzYmVlNGFiZTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
S2V5LmgKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFJlZ0V4cEtleSB7CiAgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ0V4cEtleSYga2V5KSB7IHJldHVybiBrZXkucGF0dGVy
bi0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZ0V4cEtleSYg
YSwgY29uc3QgUmVnRXhwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cisg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAg
fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI2
YjQ1ZTU1M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1NjEzN2IzYzMx
ZDMwZGJhYjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2OEIwMDNDMDhE
RSAvKiBUaHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEzQTIyOEJEQ0FC
MDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkND
NSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDky
IC8qIE5ha2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVm
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRFODcwMDM1OURB
OSAvKiBEYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFSZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2NzAwQkY2MjVF
IC8qIFJlY3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVjdXJzYWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM4LDYg
Kzc0MCw3IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVlTWFsbG9jLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4IC8qIExpbmVC
cmVha0l0ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5RCAvKiBTeXN0
ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbUZyZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAwMUU1NUI0IC8q
IE5vbm1vdmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMwMzE1MUE4MjVC
MDA0MTIzRkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAwOURENDQ1IC8q
IFJlc291cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIzRkYgLyogUmV0
YWluUHRyLmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhh
c2hNYXAuaCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFz
aFNldC5oICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jpbkhvb2RIYXNo
VGFibGUuaCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAg
Ki8sCiAJCQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAqLywKIAkJCQkx
NEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2ViNjViNmQyZmM5
MTc4Li5lMWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAg
ICBSZWZQdHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5oCisgICAgUm9i
aW5Ib29kSGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9iaW5Ib29kSGFz
aFRhYmxlLmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0ZWRBcml0aG1l
dGljLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEyZDY1YWM2Mzc4
OWM0Li4zZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CkBAIC05Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVudW1UcmFpdHM7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsKIHRlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJsZVRyYWl0czsK
K3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBL
ZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3RydWN0IEtleVZh
bHVlUGFpcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZh
bHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFt
ZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+
IGNsYXNzIEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBE
ZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+IGNs
YXNzIEhhc2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8
S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVuYW1lID0gSGFz
aFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8
VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFzaFNldDsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoTWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2NDFhMTE4NWJj
Zi4uODkwMWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApA
QCAtMzEsNyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWly
S2V5RXh0cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0
cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAK
ICAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5nIEhhc2hUYWJs
ZVR5cGUgPSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWly
S2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBh
aXJUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5VmFsdWVQYWly
VHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVu
Y3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBjbGFzcyBIYXNo
TWFwS2V5c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAgLTIzMiw5MSAr
MjMyLDg5IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpzd2FwKEhh
c2hNYXAmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAgICAgbV9pbXBs
LnN3YXAob3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1l
IFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c2l6ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5
KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wg
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSAtPiBp
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0ZXJhdG9yCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4o
KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3QgLT4gY29uc3Rf
aXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25zdCAtPiBjb25z
dF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAg
cmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewogICAgIHJldHVy
biBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wg
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBj
b25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNs
YXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2
YWx1ZSkKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3Qg
VFlQRSYgdmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFu
c2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5s
aW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIAotSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lubGlu
ZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFu
c2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25z
dCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRy
eSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBl
ZFBlZWtUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtU
eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBlbnRyeSA9IGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBAQCBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gTWFwcGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAor
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxI
YXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRv
cj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVu
YW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYm
JiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46Omlu
bGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxW
Pih2YWx1ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1Myw5MSArMzUx
LDkxIEBAIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0
eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+
Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZh
bHVlKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFp
dHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBh
aXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3
YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJn
LCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5s
aW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJ
TkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwg
RiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
YWRkPEhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0
aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVuY3RvcikpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1
bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtl
eSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZVNldChrZXks
IHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0
dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChLJiYga2V5
LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8
S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkp
LCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUm
IGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAog
ewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
Zz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
ZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBw
ZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBz
dGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFk
ZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lO
TElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlw
ZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRk
KGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46
OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNf
SU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYg
a2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdU
Rk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojpl
bnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0
CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBr
ZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5l
RW5zdXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1
bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXks
IEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lRW5z
dXJlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvcikpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBj
b25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0eVRyYW5zbGF0
b3JUeXBlPihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoY29uc3Qg
S2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzLCB0eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
TWFwcGVkVHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4g
TWFwcGVkUGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4ICs0NDMsOCBA
QCBBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojpp
bmxpbmVHZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUoaXRlcmF0b3Ig
aXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlSWYoRnVuY3Rv
ciYmIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmVJZihGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShm
aW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwuY2xlYXIoKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHlwZQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIE1hcHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRU
YWtlVHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBl
bmQoKSkKQEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBw
ZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5CiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
IHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFy
dFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5j
dGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
IHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRv
cj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQog
ewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlW
YWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBi
b29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaE1h
cFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5cGVu
YW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAg
S2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2lt
cGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJU
cmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC01MTYsMjMg
KzUxNCwyMyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0
czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5
cGU+Ojp0eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCiB7CiAgICAg
cmV0dXJuIGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92
ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
IHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5
cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2UodHlwZW5hbWUg
R2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewogICAgIGl0ZXJh
dG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0MiwxNCArNTQw
LDE0IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUg
R2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjaGVja0NvbnNp
c3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBt
X2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtl
eSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICBpZiAoS2V5
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01
NjUsMTMgKzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1Zh
bGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2Jvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBhLCBjb25z
dCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNpemUoKSAhPSBi
LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQoKTsK
ICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQsOCArNTgyLDgg
QEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0
IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBY
PiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA3NGMwOWUwNWFiZTNiMzBkMDQ1MDE3YTgx
ZmUyNDM3MGI2ZTFiOGJkLi4wMzVhOTA3ZDVmOGU4NTliNTIxNjBmZDQ5MzMzYmMyZGQwNTJlZDRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93
dGYvSGFzaFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdHJ1
Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHJpdmF0ZToKQEAgLTQxLDggKzM5LDcgQEAgY2xhc3MgSGFzaFNldCBmaW5hbCB7
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsK
IAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwg
SWRlbnRpdHlFeHRyYWN0b3IsCi0gICAgICAgIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBW
YWx1ZVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVl
VHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1
ZVRyYWl0cz47CiAKIHB1YmxpYzoKICAgICAvKgpAQCAtMTcxLDEwMiArMTY4LDEwMiBAQCBzdHJ1
Y3QgSGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYs
IFc+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1w
bCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1
bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9pbXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmlzRW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0
byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAg
cmV0dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNv
bnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkg
Y29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRl
cmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5k
KHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRh
aW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5j
b250YWlucyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29u
c3QgVCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1
ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8
SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUs
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAor
aW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRy
YWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xh
dG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
bV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBl
JiYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKHZhbHVl
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgor
aW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1
ZSkKIHsKICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAoraW5saW5lIGF1
dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmFk
ZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFu
c2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRv
clR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKEl0ZXJhdG9y
VHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCkBAIC0yNzQsOSArMjcxLDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRk
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdl
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRl
cmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0
ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkBAIC0yODQsOCAr
MjgxLDggQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9
PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NCwyNyArMjkxLDI3
IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpy
ZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWLCBXPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICByZXR1cm4g
bV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIo
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkKIHsKICAgICBtX2lt
cGwuY2xlYXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAt
PiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoaXRlcmF0
b3IgaXQpIC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICByZXR1
cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUoKSk7CkBAIC0zMjQs
NDggKzMyMSw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9y
IGl0KSAtPiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1
dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBU
YWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwg
VSwgViwgVz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGJlZ2lu
KCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBp
dGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRy
VHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
ZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29s
Pjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBUYWJsZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlw
ZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6
dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWlu
czxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVu
YW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFp
dHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUK
IHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUg
R2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6dGFrZSh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKIHsKICAgICByZXR1
cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFs
dWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYs
IFc+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBpZiAoVmFs
dWVUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzgxLDkgKzM3OCw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRW
YWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVu
YW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJh
dG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0Citpbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVj
dGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXplKCkgIT0gb3RoZXJD
b2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0LDIyICszOTEs
MjIgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhl
ckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVy
YXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxl
Y3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlckNvbGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjppbml0aWFsaXplcl9s
aXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Cit2b2lk
IEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAgIGZvciAoYXV0byYg
dmFsdWUgOiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
LCBXPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBsLmNoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4ZjcyYjJlMDM2YzE2MDAx
MGMwYTYyOTU4N2M1ZWRmMGE4Li5kMzk5NzlhNDFlYWM4ZGVhYTM3ZTQ1Nzk4YzI0ZTJiYzA3OGU0
ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ4IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICBjbGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qLAotICAg
ICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZv
aWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFi
bGVUeXBlKik7CiAKICNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qLAotICAgICAgICBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRh
YmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KKyAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiwg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kikg
eyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBy
ZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKikgeyB9CiAKICNlbmRpZgogCiAgICAg
dHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtub3duR29vZFRhZzsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRf
aXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlKiwgY29uc3Qg
VmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHByaXZhdGU6
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFzaFRhYmxlVHlw
ZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNoVGFi
bGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9y
PEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFZhbHVlIFZh
bHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7
CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKIAotICAgICAg
ICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxl
SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAgICAgICBmcmllbmQg
aXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkKICAgICAgICAgewpA
QCAtMjQzLDE4ICsyNDUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvciA6IHB1YmxpYyBz
dGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRp
ZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSYgUmVmZXJl
bmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAg
ICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBl
OwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRhYmxlLCBQb2lu
dGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVu
ZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRhYmxlLCBQ
b2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93bkdvb2RUYWcgdGFn
KSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAtMzQ3LDggKzM0OSw5
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFibGVU
eXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hU
YWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVHJhaXRz
IFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTQwNyw3ICs0MTAsNyBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBIYXNoVGFibGUoKTsK
ICAgICAgICAgfkhhc2hUYWJsZSgpIAogICAgICAgICB7Ci0gICAgICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCk7IAorICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsgCiAg
ICAgICAgICAgICBpZiAobV90YWJsZSkKICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlVGFibGUo
bV90YWJsZSk7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNUUlVDVElPTgpAQCAt
NTU5LDEyICs1NjIsNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNl
cHRTaXplKCkgeyB9CiAjZW5kaWYKIAotI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKLSAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAgICAgICBzdGF0aWMg
dm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQogICAgICAgICAvLyBMb2Fk
LWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNt
YWxsTWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBz
bWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4TG9h
ZERlbm9taW5hdG9yOwpAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5z
bGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CiAKQEAgLTkzMiw3ICs5MjksNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFz
aFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlmICghbV90YWJsZSkK
ICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsKQEAgLTEwMTcsNyArMTAxNCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAg
ICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAg
ICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0xMTEwLDE0ICsxMTA3
LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAgewotICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAgICAgewotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJl
bW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwor
ICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBpZiAoIW1fdGFibGUp
CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2
b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsKLSAgICAgICAgaW52
YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJsZSwgb3RoZXIubV90
YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleChtYWtlVW5pcXVlPExv
Y2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMo
KTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAgIG1fdGFi
bGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwogCkBAIC0xNTAwLDMw
ICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAg
IHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBI
YXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsKLSAgICAgICAgZm9y
IChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7CisgICAgICAgIHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAgICAgICBmb3IgKHR5
cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFibGUtPm1faXRlcmF0
b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1fbmV4dDsKLSAgICAg
ICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0ID0gMDsKLSAgICAg
ICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90YWJsZSA9IG51bGxw
dHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAgICAgICAgcC0+bV9w
cmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVyYXRvcnMgPSAwOwor
ICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxlLAotICAgICAgICBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSogdGFibGUsIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAgICAg
aXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOworICAgICAg
ICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5zZXJ0IGl0ZXJhdG9y
IGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4KICAgICAgICAgaWYg
KCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAgICAgICAgICBpdC0+
bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAgIEFTU0VSVCh0YWJs
ZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJh
dG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVt
b3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAg
ICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHktbGlua2VkIGxpc3Qg
b2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBAIC0xNTU5LDEzICsx
NTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+bV90YWJsZSA9IDA7
Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7Cisg
ICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1fbmV4dCA9IG51bGxw
dHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9CiAKICNlbmRpZiAv
LyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRz
IHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0gSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Owor
ICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRl
cmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZVR5cGUqLCBj
b25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTk1NDllMzZiZWFkZjAxNjdlYWNlZGNmMzVmYjA3Nzc1YmE0ZjBkNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBw
ZWRBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRz
PjsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcg
PSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFp
dHM8TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9
IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+
PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhh
c2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3VzaW5nIFdURjo6TWVtb3J5Q29t
cGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNoTWFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMjBhOTU5OTZjNzg1ZjRmMzVm
MjI0OWMxNmRjZmQ2ODA4NWUwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
b2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1l
IFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJh
aXRzQXJnLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVs
dEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVlQXJn
Pj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFy
ZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlVHJh
aXRzPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBE
ZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFs
dWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBI
YXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0Owor
dXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRh
YmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzYxMTI4NTliNTQyM2Y3MDRjYTRlNmMxNmJiNWE3NjUxMmU0NjQ1
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
CkBAIC0wLDAgKzEsNzkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NsYXNzIFJvYmluSG9vZEhh
c2hUYWJsZTsKKworc3RydWN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRh
YmxlU2l6ZVBvbGljeSB7CisgICAgLy8gOTUlIGxvYWQgZmFjdG9yLiBUaGlzIGEgYml0IHJlZ3Jl
c3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBzIGxvb2t1cCBwZXJmb3Jt
YW5jZSBzYW5lLgorICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBjYW4gd29yayB3aXRoIDk1JSBs
b2FkIGZhY3RvciBiZWNhdXNlIG9mIG1haW50YWluZWQgcHJvYmUgZGlzdGFuY2UuCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gMTk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAyMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworc3RydWN0IE1lbW9yeUNvbXBh
Y3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA5MCUgbG9hZCBmYWN0b3Iu
IFJvYmluSG9vZEhhc2hUYWJsZSBjYW4gd29yayB3aXRoIHN1Y2ggYSBoaWdoIGxvYWQtZmFjdG9y
LgorICAgIC8vIE9ic2VydmVkIHBlcmZvcm1hbmNlIGlzIHNsaWdodGx5IHdvcnNlIHRoYW4gSGFz
aFRhYmxlICg3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCUgZm9yIGxhcmdlIHRhYmxlKS4KKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSA5OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gMTA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5I
b29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7CisgICAgLy8gNzUlIGxvYWQgZmFjdG9yLCB0aGlzIG1h
aW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFibGUsIHN0aWxsIHRoZSBsb2Fk
IGZhY3RvcgorICAgIC8vIGlzIGhpZ2hlciAoSGFzaFRhYmxlIHVzZXMgNzUlIGZvciBzbWFsbCB0
YWJsZSwgNTAgZm9yIGxhcmdlIHRhYmxlKS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUpISBUaGlzIGlzIHN1aXRh
YmxlIGZvciBBdG9taWNTdHJpbmdUYWJsZS4KKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmlu
SG9vZC1IYXNoaW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMiwz
XS4KKy8vCisvLyBbMV06IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20v
cG9zdC8xNTM1NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgorLy8gWzJd
OiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8K
Ky8vIFszXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhh
c2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vI3JlZgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5Owor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRv
clR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25z
PjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlVGhyZXNob2xkID0g
MTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1Zh
bHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0aW9uczo6aGFzSGFzaElu
VmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJv
YmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUm
Jik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4g
dGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBt
b3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5
IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJs
ZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJs
ZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxl
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9y
IHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNr
ZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAg
ICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKwor
ICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5k
b20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
OyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAg
ICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsK
KworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVt
VGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5p
bXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVT
aXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAgbV93
aWxsRXhwYW5kID0gZmFsc2U7CisgICAgfQorCisgICAgQWRkUmVzdWx0IGFkZChjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFj
dG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9CisgICAgQWRkUmVzdWx0IGFkZChWYWx1ZVR5
cGUmJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rv
cjo6ZXh0cmFjdCh2YWx1ZSksIFdURk1vdmUodmFsdWUpKTsgfQorCisgICAgLy8gQSBzcGVjaWFs
IHZlcnNpb24gb2YgYWRkKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNv
bXBhcmluZworICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBv
ZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8gaW4gdGhl
IHRhYmxlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZChUJiYga2V5LCBFeHRyYSYmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+IEFkZFJlc3VsdCBhZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJik7CisKKyAg
ICBpdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgeyByZXR1cm4gZmluZDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4o
a2V5KTsgfQorICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJl
dHVybiBjb250YWluczxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gaXRlcmF0b3IgZmluZChj
b25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNvbnN0IFQm
KSBjb25zdDsKKworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKKyAgICB2b2lkIHJl
bW92ZShpdGVyYXRvcik7CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNo
ZWNrKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hl
Y2soY29uc3RfaXRlcmF0b3IpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHN0YXRpYyBib29s
IGlzRW1wdHlCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNIYXNoVHJh
aXRzRW1wdHlWYWx1ZTxLZXlUcmFpdHM+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSkpOyB9Cisg
ICAgc3RhdGljIGJvb2wgaXNFbXB0eU9yRGVsZXRlZEJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKSB7IHJldHVybiBpc0VtcHR5QnVja2V0KHZhbHVlKTsgfQorCisgICAgVmFsdWVUeXBlKiBs
b29rdXAoY29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxJZGVudGl0eVRyYW5zbGF0b3JU
eXBlPihrZXkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+IFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBpbmxpbmVMb29rdXAoY29u
c3QgVCYpOworCisgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9Cisg
ICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkg
eyB9CisgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzaG91bGRFeHBhbmQodWludDY0X3Qga2V5Q291
bnQsIHVpbnQ2NF90IHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXlDb3VudCAq
IG1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9yOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKHVuc2ln
bmVkIHNpemUpOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRh
YmxlLCB1bnNpZ25lZCBzaXplKTsKKworICAgIHVzaW5nIExvb2t1cFR5cGUgPSBzdGQ6OnBhaXI8
VmFsdWVUeXBlKiwgYm9vbD47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4gdm9pZCBjaGVja0tleShjb25zdCBUJik7CisKKyAgICB2b2lkIG1haW50
YWluUHJvYmVEaXN0YW5jZUZvckFkZChWYWx1ZVR5cGUmJiwgdW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIGRpc3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzayk7CisKKyAgICB2
b2lkIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVl
VHlwZSopOworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqKTsKKyAgICB2
b2lkIHJlbW92ZShWYWx1ZVR5cGUqKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxk
RXhwYW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+
a2V5Q291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXpl
KCk7CisgICAgICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMg
cHJvYmVEaXN0YW5jZVRocmVzaG9sZCwgYW5kIDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRh
YmxlLgorICAgICAgICByZXR1cm4gbV93aWxsRXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJs
ZVNpemU7CisgICAgfQorICAgIGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5
Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0
czo6bWluaW11bVRhYmxlU2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJp
bmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RT
aXplKCk7CisKKyAgICB2b2lkIHJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZv
aWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1
Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4
LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVy
biAoaW5kZXggKyBzaXplIC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFz
azsKKyAgICB9CisKKyAgICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAg
IGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7
IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7
IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsg
cmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRl
bUtub3duR29vZCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVy
YXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywg
cG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisgICAg
c3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQorCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6
bWF4TG9hZE51bWVyYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRE
ZW5vbWluYXRvciA9IFNpemVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAg
dW5zaWduZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1
bnNpZ25lZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9
CisgICAgdW5zaWduZWQga2V5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisK
KyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJs
ZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAgICBib29sIG1f
d2lsbEV4cGFuZCB7IGZhbHNlIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitw
dWJsaWM6CisgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRl
ZCB3aXRoIG1fbXV0ZXguCisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMg
eyBudWxscHRyIH07CisgICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2Fu
IHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8TG9jaz4gbV9tdXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citpbmxp
bmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBr
ZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xh
dG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAt
PiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAg
ICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1
bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0g
SGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJ
bmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsK
KyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBp
bnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlz
dGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAg
ICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRy
eUtleSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRy
eUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQorewor
ICAgIEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46
OnRlbXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAor
eworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlh
bGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0
aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRo
ZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBk
dXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQo
KTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQo
bV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hU
cmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgo
aGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVl
VHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0g
bV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7Cisg
ICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xh
dG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFzaCAm
JiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtleSkpCisgICAgICAgICAgICByZXR1
cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAg
ICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGlu
ZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xk
KQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAgICAvLyBT
dGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBp
bnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUo
KmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBz
dGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAg
ICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSks
IGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsK
KyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3Vs
dChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZUZvckFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwg
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGRpc3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25l
ZCBzaXplTWFzaykKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAg
IGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICArK2Rpc3RhbmNlOworCisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsK
KyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVU
cmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVu
dGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAg
ICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3Rh
bmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9s
ZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAgICAgc3dh
cCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsK
KyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAg
ICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRk
UGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5
IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5n
IGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0
YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJp
bmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90
YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFu
c2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAg
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4
dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFu
c2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFz
aCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtl
eSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihl
bnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVE
aXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChk
aXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBw
cm9iZURpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRy
dWU7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWlu
dGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhp
c3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9y
Ojp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4
dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9y
QWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBz
aXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisK
KyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkp
LCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUp
Cit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICB1bnNpZ25lZCBz
aXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNr
KCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0
cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5k
ZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIHdo
aWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7Cisg
ICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJh
aXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRp
dHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSk7CisgICAg
ICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5k
ZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5j
ZSkgeworICAgICAgICAgICAgc3dhcCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3Rh
bmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4
ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChj
b25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICBy
ZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xh
dG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAg
IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYg
a2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAg
ICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9i
aW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAg
ICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtu
b3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9v
bCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFz
aFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lk
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVB
bmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9zKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUo
cG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgcG9zLT5+
VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNvdW50
IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9
IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEp
ICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNF
bnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBt
X3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGlzRW1wdHlCdWNrZXQoKnByZXZpb3Vz
RW50cnkpKTsKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVu
dHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmICghcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gs
IGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
VmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50cnksIFdURk1vdmUoKmVudHJ5
KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgIGluaXRpYWxpemVCdWNr
ZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0gaW5kZXg7CisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2hy
aW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAg
IGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxp
ZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0
ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3Rf
Y2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXpl
UG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRv
ciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJl
bW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8
VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUo
Y29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
LCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGlj
eT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4gVmFsdWVUeXBlKgoreworICAgIC8v
IHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNp
YWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9y
dCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxj
aGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5
cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0X3B0cjxW
YWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6
ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxl
LCB1bnNpZ25lZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6
OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpleHBh
bmQoKQoreworICAgIHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0
czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXpl
ICogMjsKKworICAgIHJlaGFzaChuZXdTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NvbnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQoreworICAgIHVuc2lnbmVk
IGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5Q291bnQpOworCisg
ICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJl
c3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFu
c2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlDb3VudCwgdW5zaWduZWQg
dGFibGVTaXplKQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUgcmF0aW9uYWxlIGJlaGlu
ZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3IuCisgICAgICAgIC8vIFdp
dGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlz
IDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxmLXdheSBiZXR3ZWVuIDEx
LzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAvLyB0byBhdm9pZCBiZWlu
ZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlvIGNsb3NlIHRvIDExLzI0
LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMgWzkvMjQsIDE1
LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRGYWN0b3I7CisgICAgICAg
IGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAgICAgICBkb3VibGUgYXZl
cmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0aW8pIC8gMjsKKyAgICAg
ICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbyA9IChhdmVyYWdl
TG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJldHVybiBrZXlDb3VudCA+
PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CisgICAg
fTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgaWYgKGFib3Zl
VGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJs
ZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAgdW5zaWduZWQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZXR1cm4gc3Rk
OjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6c2hy
aW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRy
YWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxl
U2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQoKSkpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlw
ZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpy
ZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplKQoreworICAgIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisgICAgdW5zaWduZWQgb2xkVGFibGVTaXplID0gdGFi
bGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFibGU7CisKKyAgICB1bnNp
Z25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFi
bGUobmV3VGFibGVTaXplKTsKKyAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKyAgICBt
X2tleUNvdW50ID0gb2xkS2V5Q291bnQ7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkVGFibGVTaXplOyArK2kpIHsKKyAgICAgICAg
YXV0byYgb2xkRW50cnkgPSBvbGRUYWJsZVtpXTsKKyAgICAgICAgaWYgKCFpc0VtcHR5QnVja2V0
KG9sZEVudHJ5KSkKKyAgICAgICAgICAgIHJlaW5zZXJ0KFdURk1vdmUob2xkRW50cnkpKTsKKyAg
ICAgICAgb2xkRW50cnkuflZhbHVlVHlwZSgpOworICAgIH0KKworICAgIGlmIChvbGRUYWJsZSkK
KyAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9s
ZFRhYmxlKSk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNsZWFyKCkKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGlm
ICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6
ZXhjaGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIHRhYmxlU2l6ZSgpKTsKKyAgICBtX3RhYmxlU2l6
ZSA9IDA7CisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OlJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVy
KQorICAgIDogbV90YWJsZShhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKSkKKyAgICAs
IG1fdGFibGVTaXplKG90aGVyLm1fdGFibGVTaXplKQorICAgICwgbV9rZXlDb3VudChvdGhlci5t
X2tleUNvdW50KQorICAgICwgbV93aWxsRXhwYW5kKG90aGVyLm1fd2lsbEV4cGFuZCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytp
bmRleCkgeworICAgICAgICBWYWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2lu
ZGV4XTsKKyAgICAgICAgVmFsdWVUeXBlJiBlbnRyeSA9IG1fdGFibGVbaW5kZXhdOworICAgICAg
ICBuZXcgKCZlbnRyeSkgVmFsdWVUeXBlKG90aGVyRW50cnkpOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNpbmcgc3RkOjpzd2Fw
OyAvLyBGb3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAobV90YWJsZSwgb3RoZXIubV90
YWJsZSk7CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUpOworICAgIHN3
YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7CisgICAgc3dhcChtX3dpbGxFeHBhbmQs
IG90aGVyLm1fd2lsbEV4cGFuZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cith
dXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmlu
SG9vZEhhc2hUYWJsZSYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jp
bkhvb2RIYXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJs
ZSYmIG90aGVyKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1f
dGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFi
bGVTaXplID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlD
b3VudCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV93aWxsRXhw
YW5kID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dpbGxFeHBhbmQsIGZhbHNlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jp
bkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAgPSBXVEZNb3Zl
KG90aGVyKTsKKyAgICBzd2FwKHRlbXApOworICAgIHJldHVybiAqdGhpczsKK30KKworc3RydWN0
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0
IE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAg
dXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RSb2Jpbkhv
b2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRh
YmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaAppbmRleCA5MmQyMDhk
MzVlMmFhZDViODgyNzNlMzQxODZjMjdiNWQwN2NlMWZkLi5iYWQyY2FiMGQ1YWY2OTg2M2JkMDhh
Mjg5MGI1NDNkYTg4MzdlNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCkBA
IC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAg
ICAgfTsKIAogICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V1RGOjpBdG9tU3RyaW5n
PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYv
dGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJl
ZTg5ZmU3MTE3ZjVmYS4uYTE4YjNjYmQ4ODAwMmQzOWRmY2IyZWMxNzQzYTk3NWQ0ZWY0Y2RiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAg
Y2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFE
KQogCi11c2luZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj47Cit1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBBdG9tU3RyaW5nVGFibGU6OlN0cmluZ1RhYmxl
SW1wbDsKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJs
ZSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXggZTBjMGFm
YmFlYTQzNjg2MWI4YjhlNDFlZTA3NmFlMmM3NDIyNGJjZi4uODZlZDI1ZjI4ZWMwODY2OGVmNWU0
YTU2YTI0OTc1ZDIwMWZhOGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmNwcApAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmluZ1RhYmxl
Ojp+QXRvbVN0cmluZ1RhYmxlKCkKIHsKLSAgICBmb3IgKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJ
bXBsPiYgc3RyaW5nIDogbV90YWJsZSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1f
dGFibGUpCiAgICAgICAgIHN0cmluZy0+c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKaW5kZXggMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJj
NGUzMDQ1MTEzYTU3ZS4uMjQ1YTNhNjIwMWE1MGRmMjY1OWRjMTkxMGUwNzllMDU1N2Q0MTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCkBAIC0yMiw4ICsyMiw5IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
UGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgog
CiBuYW1lc3BhY2UgV1RGIHsKQEAgLTMzLDEyICszNCwxNSBAQCBjbGFzcyBTdHJpbmdJbXBsOwog
Y2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKKyAgICB1c2luZyBTdHJpbmdFbnRyeSA9IFBhY2tlZFB0cjxTdHJpbmdJbXBsPjsKKyAg
ICB1c2luZyBTdHJpbmdUYWJsZUltcGwgPSBGYXN0Um9iaW5Ib29kSGFzaFNldDxTdHJpbmdFbnRy
eT47CisKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAg
SGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7
IH0KKyAgICBTdHJpbmdUYWJsZUltcGwmIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQogCiBw
cml2YXRlOgotICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOworICAg
IFN0cmluZ1RhYmxlSW1wbCBtX3RhYmxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdIYXNoLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2gu
aAppbmRleCA1YTgzODVlMDRhOTU5MDRlMDZiYTEyOGQ2ZWFhMTNkOTFlYjkwZmI5Li5mMDMyZjFi
ZGYyMWI1OGRiZjZjZTYyNTQ1NDQ2YzQ4NzY1ZmFjNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hh
c2guaApAQCAtOTAsNiArOTAsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0
cnVlOwogICAgIH07CiAKICAgICBzdHJ1Y3QgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFD
YXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGll
cy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKaW5kZXggNzQ5MDczMzg4MDdlYTk3NWUwNzIyOGQwNGEy
NTY0MzZlNzcxNWNjNi4uMDk0M2Q3Yjg1YTNiMzNjOWMxNjY5OTA4ZWY4MzMyM2ZjZTIyZDA1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRp
YUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFi
aWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKQEAgLTM5LDMxICszOSwzMSBAQAogI2luY2x1
ZGUgIk1lZGlhRW5jb2RpbmdDb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiTWVkaWFFbmdpbmVD
b25maWd1cmF0aW9uRmFjdG9yeS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBidWNrZXRNSU1FVHlwZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBidWNrZXRNSU1FVHlwZXMo
KQogewogICAgIC8vIEEgImJ1Y2tldCIgTUlNRSB0eXBlcyBpcyBvbmUgd2hvc2UgY29udGFpbmVy
IHR5cGUgZG9lcyBub3QgdW5pcXVlbHkgc3BlY2lmeSBhIGNvZGVjLgogICAgIC8vIFNlZTogaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzODEKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaFNldDxTdHJpbmc+PiBidWNrZXRNSU1FVHlwZXMgPSBIYXNoU2V0PFN0cmluZz4oewot
ICAgICAgICAiYXVkaW8vM2dwcCIsCi0gICAgICAgICJ2aWRlby8zZ3BwIiwKLSAgICAgICAgImF1
ZGlvLzNncHAyIiwKLSAgICAgICAgInZpZGVvLzNncHAyIiwKLSAgICAgICAgImF1ZGlvL21wNCIs
Ci0gICAgICAgICJ2aWRlby9tcDQiLAotICAgICAgICAiYXBwbGljYXRpb24vbXA0IiwKLSAgICAg
ICAgInZpZGVvL3F1aWNrdGltZSIsCi0gICAgICAgICJhcHBsaWNhdGlvbi9tcDIxIiwKLSAgICAg
ICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIiwKLSAgICAgICAgInZpZGVvL3ZuZC5hcHBsZS5t
cGVndXJsIiwKLSAgICAgICAgImF1ZGlvL29nZyIsCi0gICAgICAgICJ2aWRlby9vZ2ciLAotICAg
ICAgICAidmlkZW8vd2VibSIsCi0gICAgICAgICJhdWRpby93ZWJtIiwKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4+IGJ1Y2tldE1JTUVUeXBlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAg
ICAgICJhdWRpby8zZ3BwIl9zLAorICAgICAgICAidmlkZW8vM2dwcCJfcywKKyAgICAgICAgImF1
ZGlvLzNncHAyIl9zLAorICAgICAgICAidmlkZW8vM2dwcDIiX3MsCisgICAgICAgICJhdWRpby9t
cDQiX3MsCisgICAgICAgICJ2aWRlby9tcDQiX3MsCisgICAgICAgICJhcHBsaWNhdGlvbi9tcDQi
X3MsCisgICAgICAgICJ2aWRlby9xdWlja3RpbWUiX3MsCisgICAgICAgICJhcHBsaWNhdGlvbi9t
cDIxIl9zLAorICAgICAgICAiYXVkaW8vdm5kLmFwcGxlLm1wZWd1cmwiX3MsCisgICAgICAgICJ2
aWRlby92bmQuYXBwbGUubXBlZ3VybCJfcywKKyAgICAgICAgImF1ZGlvL29nZyJfcywKKyAgICAg
ICAgInZpZGVvL29nZyJfcywKKyAgICAgICAgInZpZGVvL3dlYm0iX3MsCisgICAgICAgICJhdWRp
by93ZWJtIl9zLAogICAgIH0pOwogICAgIHJldHVybiBidWNrZXRNSU1FVHlwZXM7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAppbmRleCA5MDQzNTRkNjI4YWI1NGY3N2JhYzhlMWYwNjY1ZWZjZTdhZDU1ODQ4Li44NDMxMDFl
ZGVmNDUyYWQwOTRmMDM1YmY4NDI0MjViYmY2NjY5MDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTg0LDYgKzg0
LDcgQEAKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgIlZpc2li
bGVVbml0cy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CkBAIC0yNjA3LDggKzI2MDgsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN1cHBvcnRzSGFzUG9wdXAoKSBjb25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6
cG9wdXBWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nPj4gYWxsb3dlZFBvcHVwVmFsdWVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxT
dHJpbmc+IHsKLSAgICAgICAgIm1lbnUiLCAibGlzdGJveCIsICJ0cmVlIiwgImdyaWQiLCAiZGlh
bG9nIgorICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gYWxsb3dlZFBvcHVwVmFsdWVzKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAgICAgICAgIm1lbnUiX3MsICJsaXN0Ym94Il9zLCAi
dHJlZSJfcywgImdyaWQiX3MsICJkaWFsb2ciX3MsCiAgICAgfSk7CiAKICAgICBhdXRvIGhhc1Bv
cHVwID0gZ2V0QXR0cmlidXRlKGFyaWFfaGFzcG9wdXBBdHRyKS5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDdlNWEwYTFmNDJjZjMyZmNjM2FiZjBi
NjEwNGM3ZGE3MjM3NDczZDUuLjBkMzg0ZDljMDhiOGVjZTNhYWZlODc3NTQxMzAyZjI2OGRmNWYw
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIzODksNyArMjM4OSw3IEBAIHZvaWQgRWxl
bWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCiAKIHN0YXRpYyBib29sIGNhbkF0dGFjaEF1dGhvclNo
YWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdGFnTmFtZXMgPSBbXSB7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9t
U3RyaW5nPj4gdGFnTmFtZXMgPSBbXSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIVE1MUXVhbGlm
aWVkTmFtZSogY29uc3QgdGFnTGlzdFtdID0gewogICAgICAgICAgICAgJmFydGljbGVUYWcuZ2V0
KCksCiAgICAgICAgICAgICAmYXNpZGVUYWcuZ2V0KCksCkBAIC0yNDEwLDcgKzI0MTAsOCBAQCBz
dGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290KGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiAgICAgICAgICAgICAmc2VjdGlvblRhZy5nZXQoKSwKICAgICAgICAgICAgICZzcGFuVGFn
LmdldCgpCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4g
c2V0OworICAgICAgICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkp
OwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFk
ZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWUuaAppbmRleCAyNjRjNDc5MTUwY2NiZjdhMDY1ZGVhNTVhY2ViYTQ0ZWRkMzky
ZjRmLi40MjlmYzU1OTY0MzUxZjEyNDliYzFjOGYyODllMzc3YTRkZDNlMzM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmgKQEAgLTEzNyw3ICsxMzcsOCBAQCBzdHJ1Y3QgUXVhbGlmaWVk
TmFtZUhhc2ggewogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFF1YWxpZmllZE5hbWUmIGEs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsKiBhLCBjb25z
dCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYikgeyByZXR1cm4gYSA9PSBiOyB9
CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1
ZSA9IHRydWU7CiB9OwogCiBpbmxpbmUgU3RyaW5nIFF1YWxpZmllZE5hbWU6OnRvU3RyaW5nKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291
cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKaW5kZXggNjQxNGUxZTZhYjU1NjBjOGIwMzE5
Y2UyNTJjNmM2NmFjYjc5M2Y1Yi4uNDI4NTQyODhlYTgxZTI4NjMwNDkzMGViZTMwYmVhMmM4YTdk
OGU4NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKQEAgLTEwMCw2ICsxMDAsNyBAQAogICAg
IHByaW50TGljZW5zZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiQ1NTIiwg
JGZhbWlseU5hbWVzRmlsZUJhc2UsIDw8RU5ELCAiIik7CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogRU5ECkBAIC03
MDksNiArNzEwLDcgQEAgc3ViIHByaW50TmFtZXNIZWFkZXJGaWxlCiAgICAgcHJpbnRMaWNlbnNl
SGVhZGVyKCRGKTsKICAgICBwcmludEhlYWRlckhlYWQoJEYsICJET00iLCAkcGFyYW1ldGVyc3tu
YW1lc3BhY2V9LCA8PEVORCwgImNsYXNzICRwYXJhbWV0ZXJze25hbWVzcGFjZX1RdWFsaWZpZWRO
YW1lIDogcHVibGljIFF1YWxpZmllZE5hbWUgeyB9O1xuXG4iKTsKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiBF
TkQKQEAgLTk1Niw3ICs5NTgsNyBAQCBFTkQKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTk2LDcgKzk5OCw3IEBAIEVORAogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHF1YWxpZmll
ZE5hbWU7IC8vIFVzZSBwb2ludGVyIGluc3RlYWQgb2YgcmVmZXJlbmNlIHNvIHRoYXQgZW1wdHlW
YWx1ZSgpIGluIEhhc2hNYXAgaXMgY2hlYXAgdG8gY3JlYXRlLgogfTsKIAotc3RhdGljIE5FVkVS
X0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNv
bnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZh
Y3RvcnlNYXAoKQorc3RhdGljIE5FVkVSX0lOTElORSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVj
dG9yRnVuY3Rpb25NYXBFbnRyeT4gY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlN
YXAoKQogewogICAgIHN0cnVjdCBUYWJsZUVudHJ5IHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZTsKQEAgLTEwMTIsMTYgKzEwMTQsMTYgQEAgRU5ECiAgICAgcHJpbnQgRiA8PEVO
RAogICAgIH07CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCAkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBtYXA7CiAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IHRhYmxlKQotICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCkuaW1w
bCgpLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5KGVu
dHJ5LmZ1bmN0aW9uLCBlbnRyeS5uYW1lKSk7CisgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZS5s
b2NhbE5hbWUoKSwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBF
bnRyeShlbnRyeS5mdW5jdGlvbiwgZW50cnkubmFtZSkpOwogICAgIHJldHVybiBtYXA7CiB9CiAK
IHN0YXRpYyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5
IGZpbmQkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudENvbnN0cnVjdG9yRnVuY3Rpb24oY29u
c3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9
IG1ha2VOZXZlckRlc3Ryb3llZChjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1h
cCgpKTsKLSAgICByZXR1cm4gbWFwLmdldCgpLmdldChsb2NhbE5hbWUuaW1wbCgpKTsKKyAgICBy
ZXR1cm4gbWFwLmdldCgpLmdldChsb2NhbE5hbWUpOwogfQogCiBSZWZQdHI8JHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUVsZW1lbnQ+ICRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50RmFjdG9yeTo6
Y3JlYXRlS25vd25FbGVtZW50KGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSwgRG9jdW1lbnQm
IGRvY3VtZW50JGZvcm1FbGVtZW50QXJndW1lbnRGb3JEZWZpbml0aW9uLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKQEAgLTEyMjYsNiArMTIyOCw3IEBAIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5Q3Bw
RmlsZQogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogRU5ECiA7
CkBAIC0xMjQ3LDcgKzEyNTAsNyBAQCBFTkQKIAogcHJpbnQgRiA8PEVORAogCi1zdGF0aWMgTkVW
RVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNl
fVdyYXBwZXJNYXAoKQorc3RhdGljIE5FVkVSX0lOTElORSBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFw
cGVyTWFwKCkKIHsKICAgICBzdHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWU7CkBAIC0xMjg1LDE2ICsxMjg4LDE2IEBAIEVORAogICAgIHByaW50IEYg
PDxFTkQKICAgICB9OwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENyZWF0ZSRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBtYXA7CisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBtYXA7CiAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IHRhYmxlKQotICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1l
KCkuaW1wbCgpLCBlbnRyeS5mdW5jdGlvbik7CisgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZS5s
b2NhbE5hbWUoKSwgZW50cnkuZnVuY3Rpb24pOwogICAgIHJldHVybiBtYXA7CiB9CiAKIEpTRE9N
T2JqZWN0KiBjcmVhdGVKUyRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyKEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudD4m
JiBlbGVtZW50KQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIGZ1bmN0aW9ucyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpKTsKLSAg
ICBpZiAoYXV0byBmdW5jdGlvbiA9IGZ1bmN0aW9ucy5nZXQoKS5nZXQoZWxlbWVudC0+bG9jYWxO
YW1lKCkuaW1wbCgpKSkKKyAgICBpZiAoYXV0byBmdW5jdGlvbiA9IGZ1bmN0aW9ucy5nZXQoKS5n
ZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkpKQogICAgICAgICByZXR1cm4gZnVuY3Rpb24oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGVsZW1lbnQpKTsKIEVORAogOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4IGM3OGQxZWJmODZlYjBiNDkwZGEzOWM2
MzBiYjJmYTFiNGRlYmIzZDAuLmI4MmUyZTZjOTVlNTYzNmI1YTMyOGU4ODFiZjFlN2E1N2Y0MzA5
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJWaXNp
YmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExOCw3
ICsxMTksNyBAQCBFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRC
bG9ja0NvbW1hbmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUgogCiBib29sIGlzRWxlbWVudEZvckZv
cm1hdEJsb2NrKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCiB7Ci0gICAgc3RhdGljIGNv
bnN0IGF1dG8gYmxvY2tUYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKEhhc2hTZXQ8UXVhbGlmaWVk
TmFtZT4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIGJsb2NrVGFncyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4gewogICAgICAgICBhZGRyZXNzVGFnLAogICAgICAgICBhcnRpY2xlVGFnLAogICAgICAgICBh
c2lkZVRhZywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQu
Y3BwCmluZGV4IDRlYzBiNGU1NWMzZWFmNjQwOGYyNTA1OTk2Y2ExZGNkYWE1ZjIzNTMuLjY2MTQw
N2UxNDUyNGNmMmExM2ZlYTM2NTUxM2Q3OWFiZTUzZTY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsNyArNDcsNyBAQCBSZW1vdmVGb3Jt
YXRDb21tYW5kOjpSZW1vdmVGb3JtYXRDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCkKIAogc3Rh
dGljIGJvb2wgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZChjb25zdCBFbGVtZW50KiBl
bGVtZW50KQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGVsZW1lbnRzID0gbWFrZU5ldmVyRGVz
dHJveWVkKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIGVs
ZW1lbnRzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIGFjcm9ueW1UYWcsCiAgICAgICAg
IGJUYWcsCiAgICAgICAgIGJkb1RhZywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggZDkyYjhhNzIxNjgyNWY5OTJkNDhkODgz
ZDYwY2E2NTg2NGVkZWRhNy4uODRhZWRiNzRjNDlmNzViMDQ0YWM1OWUzODg1NjFjZDRmZDRjN2Q5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNp
bmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzM5LDcgKzc0MCw3IEBAIHN0YXRpYyBib29s
IGlzUHJvaGliaXRlZFBhcmFncmFwaENoaWxkKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiAgICAg
ICAgICAgICAmdWxUYWcuZ2V0KCksCiAgICAgICAgICAgICAmeG1wVGFnLmdldCgpLAogICAgICAg
ICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKICAgICAgICAg
Zm9yIChhdXRvJiB0YWcgOiB0YWdzKQogICAgICAgICAgICAgc2V0LmFkZCh0YWctPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQXV0b2ZpbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAKaW5kZXgg
NjczNWUyNjlmMjVhZWY3YmMwOTEyNzU1MzkyMTQ4MWNkZTNlOGViNS4uOGY3MTJmNzFkMjIxZGMy
N2U5NDIyODJmMTRmOTAzMmU5YTg5MTEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9BdXRvZmlsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgc3Ry
dWN0IEF1dG9maWxsSW5mbyB7CiAgICAgQXV0b2ZpbGxDYXRlZ29yeSBjYXRlZ29yeTsKIH07CiAK
LXN0YXRpYyBjb25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4mIGZpZWxkTmFt
ZU1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4mIGZpZWxkTmFtZU1hcCgpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKICAgICAgICAgc3Ry
dWN0IE1hcEVudHJ5IHsKQEAgLTExMyw3ICsxMTQsNyBAQCBzdGF0aWMgY29uc3QgSGFzaE1hcDxB
dG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogICAgICAgICAgICAgeyAi
ZW1haWwiLCB7IEF1dG9maWxsRmllbGROYW1lOjpFbWFpbCwgQXV0b2ZpbGxDYXRlZ29yeTo6Q29u
dGFjdCB9IH0sCiAgICAgICAgICAgICB7ICJpbXBwIiwgeyBBdXRvZmlsbEZpZWxkTmFtZTo6SW1w
cCwgQXV0b2ZpbGxDYXRlZ29yeTo6Q29udGFjdCB9IH0sCiAgICAgICAgIH07Ci0gICAgICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+IG1h
cDsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGVudHJpZXMpCiAgICAgICAgICAgICBtYXAu
YWRkKGVudHJ5Lm5hbWUsIGVudHJ5LnZhbHVlKTsKICAgICAgICAgcmV0dXJuIG1hcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAppbmRleCA4ZGY2MmM2YmI0OTFmODQ4ZWVjZTI5MDk0
NGE0YjdjZmFlZGQ4ZDc1Li4wMGJmNjdhZWQ1NjVhYzkwZjQ2ZDhmYTczOGRmN2E1MjkzNzYwZGU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC03OCw2ICs3OCw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0yMjUsNyArMjI2LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNl
bnNpdGl2ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogICAg
ICAgICAgICAgJnZhbHVldHlwZUF0dHIuZ2V0KCksCiAgICAgICAgICAgICAmdmxpbmtBdHRyLmdl
dCgpLAogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNl
dDsKICAgICAgICAgZm9yIChhdXRvKiBuYW1lIDogbmFtZXMpCiAgICAgICAgICAgICBzZXQuYWRk
KG5hbWUtPmxvY2FsTmFtZSgpKTsKICAgICAgICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKaW5kZXggZGMxZjEwY2IyY2YwODQyMTg4MzI0Yjhh
MDNlNmIxNzE2MjBkNmNiZS4uYTZmM2MwZjEyZDI3MTU2OTU5MThiNzYzZDkyNDYyNjVmZTJmMmM2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTUxLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aFNldC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJSdW50aW1lQXBw
bGljYXRpb25DaGVja3MuaCIKQEAgLTM2MSw3ICszNjIsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjpyZW5kZXJGYWxsYmFja0NvbnRlbnQoKQogc3RhdGljIGlubGluZSBib29sIHByZXZlbnRz
UGFyZW50T2JqZWN0RnJvbUV4cG9zdXJlKGNvbnN0IEVsZW1lbnQmIGNoaWxkKQogewogICAgIHN0
YXRpYyBjb25zdCBhdXRvIG1vc3RLbm93blRhZ3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewot
ICAgICAgICBIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAgICAg
YXV0byogdGFncyA9IEhUTUxOYW1lczo6Z2V0SFRNTFRhZ3MoKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBIVE1MTmFtZXM6OkhUTUxUYWdzQ291bnQ7IGkrKykgewogICAgICAgICAg
ICAgYXV0byYgdGFnID0gKnRhZ3NbaV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBiMTkzMGU0NjNkYTQ0ZDk3ZGI3NDU0NWNlNjk0ZTk5
Y2JlMzkxNjhmLi45MmYyNzZmMzhiNzQ0ZDUxZWM1MWM4ZmNmOWFiNDZmZTcyZDJlZDRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTQ2
LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAK
ICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPU19G
QU1JTFkpCkBAIC00NzgsOSArNDc5LDkgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29u
c3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0MKICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogfQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMgSGFzaE1hcDxBdG9tU3RyaW5nLCBR
dWFsaWZpZWROYW1lPiBjcmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVhbGlmaWVkTmFtZSogY29u
c3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVh
bGlmaWVkTmFtZT4gc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVh
bGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEhhc2hN
YXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFtZXNbaV07CiAgICAgICAgIGNvbnN0IEF0b21TdHJp
bmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CkBAIC00OTMsMTQgKzQ5NCwxNCBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMgSGFzaE1hcDxBdG9t
U3RyaW5nLCBRdWFsaWZpZWROYW1lPgogCiBzdGF0aWMgdm9pZCBhZGp1c3RTVkdUYWdOYW1lQ2Fz
ZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNW
R05hbWVzOjpnZXRTVkdUYWdzKCksIFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoU1ZHTmFtZXM6
OmdldFNWR1RhZ3MoKSwgU1ZHTmFtZXM6OlNWR1RhZ3NDb3VudCk7CiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgY2FzZWROYW1lID0gbWFwLmdldCgpLmdldCh0b2tlbi5uYW1lKCkpOwogICAgIGlm
IChjYXNlZE5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICB0
b2tlbi5zZXROYW1lKGNhc2VkTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4m
IG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RB
dHRyaWJ1dGVzKGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ewogICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogdG9rZW4uYXR0cmlidXRlcygpKSB7CiAgICAg
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IG1hcC5nZXQoYXR0cmlidXRlLmxv
Y2FsTmFtZSgpKTsKQEAgLTUxMSw3ICs1MTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0
QXR0cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIEF0bwog
CiB0ZW1wbGF0ZTxjb25zdCBRdWFsaWZpZWROYW1lKiBjb25zdCogYXR0cmlidXRlc1RhYmxlKCks
IHVuc2lnbmVkIGF0dHJpYnV0ZXNUYWJsZUxlbmd0aD4gc3RhdGljIHZvaWQgYWRqdXN0QXR0cmli
dXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFw
KGF0dHJpYnV0ZXNUYWJsZSgpLCBhdHRyaWJ1dGVzVGFibGVMZW5ndGgpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoYXR0cmlidXRlc1Rh
YmxlKCksIGF0dHJpYnV0ZXNUYWJsZUxlbmd0aCk7CiAgICAgYWRqdXN0QXR0cmlidXRlcyhtYXAs
IHRva2VuKTsKIH0KIApAQCAtNTI1LDE4ICs1MjYsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFk
anVzdE1hdGhNTEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBhZGp1c3RB
dHRyaWJ1dGVzPE1hdGhNTE5hbWVzOjpnZXRNYXRoTUxBdHRycywgTWF0aE1MTmFtZXM6Ok1hdGhN
TEF0dHJzQ291bnQ+KHRva2VuKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkTmFtZXNXaXRoUHJlZml4
KEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgY29uc3QgQXRvbVN0cmlu
ZyYgcHJlZml4LCBjb25zdCBRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25lZCBs
ZW5ndGgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0
b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKIHsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1lc1tpXTsKLSAgICAgICAgY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxOYW1lID0gbmFtZS5sb2NhbE5hbWUoKTsKLSAgICAgICAgbWFwLmFkZChwcmVm
aXggKyAnOicgKyBsb2NhbE5hbWUsIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG5h
bWUubmFtZXNwYWNlVVJJKCkpKTsKLSAgICB9Ci19CisgICAgYXV0byBhZGROYW1lc1dpdGhQcmVm
aXggPSBbXShNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgY29uc3QgQXRvbVN0cmluZyYgcHJlZml4LCBjb25zdCBR
dWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25lZCBsZW5ndGgpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5hbWVzW2ldOworICAgICAgICAgICAgY29uc3QgQXRv
bVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIG1hcC5h
ZGQocHJlZml4ICsgJzonICsgbG9jYWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxO
YW1lLCBuYW1lLm5hbWVzcGFjZVVSSSgpKSk7CisgICAgICAgIH0KKyAgICB9OwogCi1zdGF0aWMg
SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRl
c01hcCgpCi17Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1
YWxpZmllZE5hbWU+IG1hcDsKIAogICAgIEF0b21TdHJpbmcgeGxpbmtOYW1lKCJ4bGluayIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBhZGROYW1lc1dpdGhQcmVmaXgo
bWFwLCB4bGlua05hbWUsIFhMaW5rTmFtZXM6OmdldFhMaW5rQXR0cnMoKSwgWExpbmtOYW1lczo6
WExpbmtBdHRyc0NvdW50KTsKQEAgLTU1MCw3ICs1NTAsNyBAQCBzdGF0aWMgSGFzaE1hcDxBdG9t
U3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiAKIHN0
YXRpYyB2b2lkIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNN
YXAoKTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCmluZGV4IGZhM2UyZmFhNDhiOTZhZGJjOWQ4
ZTI2MzUyZDVmNjIwZDdiNTVhYTEuLmI1OTY1ZjU2YTQ5YTk1ZTAyYzhmMDc5NWRlY2NlOGZhZjEx
YmE2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQ5LDEwICsxNTAsMTAg
QEAgYm9vbCBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OnVwZGF0ZVJlZ2lvbigpCiAg
ICAgcmV0dXJuIHJlZ2lvbkNoYW5nZWQ7CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU1JHQkE8dWludDhfdD4+JiB0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKK3N0YXRpYyBjb25z
dCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1
aW50OF90Pj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBh
dXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIHJldHVy
biBIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhfdD4+IHsgeworICAgICAgICByZXR1cm4gTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhf
dD4+IHsgewogICAgICAgICAgICAgeyAidG91Y2hzdGFydCJfcywgeyAxOTEsIDE5MSwgNjMsIDUw
IH0gfSwKICAgICAgICAgICAgIHsgInRvdWNobW92ZSJfcywgeyA4MCwgMjA0LCAyNDUsIDUwIH0g
fSwKICAgICAgICAgICAgIHsgInRvdWNoZW5kIl9zLCB7IDE5MSwgNjMsIDEyNywgNTAgfSB9LApA
QCAtMTk0LDQ5ICsxOTUsNDkgQEAgdm9pZCBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6
OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3MKICAgICBmb250LnVw
ZGF0ZShudWxscHRyKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hzdGFydCIpKTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0
b3VjaHN0YXJ0Il9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBk
cmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hzdGFydCIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJl
Y3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoc3RhcnQiX3Ms
IGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0
Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25D
b2xvcnMoKS5nZXQoInRvdWNobW92ZSIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaG1vdmUiX3MpKTsKICAgICBjb250ZXh0LmZp
bGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaG1vdmUi
LCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFs
aWduZWRUZXh0KCJ0b3VjaG1vdmUiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRp
b24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZW5kIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZW5k
Il9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRB
bGlnbmVkVGV4dCgidG91Y2hlbmQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9u
KCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGVuZCJfcywgY29udGV4dCwgZm9u
dCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7
Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
dG91Y2hmb3JjZWNoYW5nZSIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50
UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zKSk7CiAgICAgY29udGV4dC5m
aWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hmb3Jj
ZWNoYW5nZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJh
d1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9yY2VjaGFuZ2UiX3MsIGNvbnRleHQsIGZvbnQsIGxl
Z2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwogICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKG1fY29sb3IpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVn
ZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInBhc3NpdmUgbGlzdGVuZXJzIiwg
Y29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgicGFzc2l2ZSBsaXN0ZW5lcnMiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3Qu
bG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNlZG93biIpKTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJt
b3VzZWRvd24iX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZWRvd24iLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0
LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZWRvd24iX3MsIGNv
bnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1v
dmUoMCwgMzApOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xv
cnMoKS5nZXQoIm1vdXNlbW92ZSIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZW1vdmUiX3MpKTsKICAgICBjb250ZXh0LmZpbGxS
ZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZW1vdmUiLCBj
b250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWdu
ZWRUZXh0KCJtb3VzZW1vdmUiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24o
KSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiKSk7CisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2V1cCJfcykp
OwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25l
ZFRleHQoIm1vdXNldXAiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZXVwIl9zLCBjb250ZXh0LCBmb250LCBsZWdl
bmRSZWN0LmxvY2F0aW9uKCkpOwogI2Vsc2UKICAgICAvLyBPbiBkZXNrdG9wIHBsYXRmb3Jtcywg
dGhlICJ3aGVlbCIgcmVnaW9uIGluY2x1ZGVzIHRoZSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lv
bi4KLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0
KCJ3aGVlbCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29s
b3JzKCkuZ2V0KCJ3aGVlbCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7
Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm5vbi1mYXN0IHJlZ2lvbiIsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm5v
bi1mYXN0IHJlZ2lvbiJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
ICNlbmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRvJiBzeW5jaHJvbm91c0V2ZW50UmVnaW9uIDog
bV9ldmVudFRyYWNraW5nUmVnaW9ucy5ldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJl
Z2lvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2Vy
VGltaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNw
cAppbmRleCBlZDhkZDkyMzhkMzM3M2MwMTgyYjJmMzA4ZWRhMDAyN2U0YWZiOTAyLi40MDE1Mjc3
ZTA3YzQzZDlmOTg5YTE3ZWFiYWUxNTIwYjllYzhhMThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCkBAIC0zNSwxNSArMzUsMTYgQEAKICNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NKU1ZhbHVlSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uID0gdW5zaWduZWQgbG9uZyBsb25nIChQZXJm
b3JtYW5jZVRpbWluZzo6KikoKSBjb25zdDsKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywg
TmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVzdHJpY3RlZE1hcmtOYW1lc1RvTmF2aWdhdGlv
blRpbWluZ0Z1bmN0aW9uTWFwKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+JiByZXN0
cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXAoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+KHsKKyAg
ICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPj4o
ewogICAgICAgICB7ICJjb25uZWN0RW5kIl9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmNvbm5lY3RF
bmQgfSwKICAgICAgICAgeyAiY29ubmVjdFN0YXJ0Il9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmNv
bm5lY3RTdGFydCB9LAogICAgICAgICB7ICJkb21Db21wbGV0ZSJfcywgJlBlcmZvcm1hbmNlVGlt
aW5nOjpkb21Db21wbGV0ZSB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCmluZGV4IDljNDVhMjI5NGZiZmFjZjE5Nzcw
ZDQ4MWU2YmVlNGZlZGFlYTY0ZmMuLmE1NWQ1YTA1ZTRkZGNiZjVjODFjNzE5MWI0ZGNiOWQyYzM0
MWViNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBl
UmVnaXN0cnlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1F
VHlwZVJlZ2lzdHJ5Q29jb2EubW0KQEAgLTI5LDE3ICsyOSwxOSBAQAogCiAjaW1wb3J0IDxwYWwv
c3BpL2NvY29hL0NvcmVTZXJ2aWNlc1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU1VS
TEZpbGVUeXBlTWFwcGluZ3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+
CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBIYXNoU2V0PFN0cmluZz4+JiBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQorc3RhdGlj
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1J
TUVUeXBlTWFwKCkKIHsKICAgICBzdGF0aWMgYXV0byBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBIYXNoTWFwPFN0cmluZywgSGFzaFNl
dDxTdHJpbmc+PiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+PiBtYXA7CiAKICAgICAgICAgYXV0byBhZGRFeHRlbnNpb24gPSBbJl0oY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgewotICAgICAgICAgICAgbWFwLmFk
ZCh0eXBlLCBIYXNoU2V0PFN0cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24p
OworICAgICAgICAgICAgbWFwLmFkZCh0eXBlLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGV4dGVuc2lvbik7CiAg
ICAgICAgIH07CiAKICAgICAgICAgYXV0byBhZGRFeHRlbnNpb25zID0gWyZdKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgTlNBcnJheTxOU1N0cmluZyAqPiAqZXh0ZW5zaW9ucykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDVjZWE3NDUy
ZDVmZjJlNmNiNWYzZTExNjY1OTdiNzlmZDhmNzNkN2QuLmY1YTY3NTgzMzUxMzE5ZjQwZjEyODdl
MmE3MjljYzQ3MWJiZDFlNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIApAQCAtNTAsNyArNTEsNyBAQCBzdGF0aWMgYm9vbCB1c2VCYWNrc2xhc2hB
c1llblNpZ25Gb3JGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQogICAgIGlmIChmYW1p
bHkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGF1
dG8gc2V0ID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxBdG9tU3Ry
aW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGF1dG8gYWRkID0gWyZzZXRdIChjb25zdCBjaGFy
KiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VUNoYXI+IHVuaWNvZGVOYW1lKSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBuYW1lTGVuZ3RoID0gc3RybGVuKG5hbWUpOwogICAgICAgICAgICAg
c2V0LmFkZChBdG9tU3RyaW5nIHsgbmFtZSwgbmFtZUxlbmd0aCwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwgfSk7CkBAIC0zODIsNyArMzgzLDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
aGFzVmFsaWRBdmVyYWdlQ2hhcldpZHRoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
SGFzaFNldDxBdG9tU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5l
dmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9t
U3RyaW5nPiB7CiAgICAgICAgICJBbWVyaWNhbiBUeXBld3JpdGVyIiwKICAgICAgICAgIkFyaWFs
IEhlYnJldyIsCiAgICAgICAgICJDaGFsa2JvYXJkIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFp
clBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDRmNDJjNDkzY2MzNTcwZGRjNmFmMDhkZTM5MDVkMGNj
ODQ5ZDlhNzAuLjE0MjRkMWJlZWU2ZTNjMzJjNjZiNDlhMmY2ZjI0YjQ4YjJhYzJlMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBl
ci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKICNpZiBIQVZF
KEFWQ09OVEVOVEtFWVNFU1NJT04pCkBAIC0yMDUsOSArMjA2LDkgQEAgT3B0aW9uYWw8VmVjdG9y
PFJlZjxTaGFyZWRCdWZmZXI+Pj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0
S2V5SURzU2sKICAgICByZXR1cm4ga2V5SURzOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaFNldDxB
dG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFU
eXBlcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHZhbGlkVHlwZXMgPSBIYXNoU2V0PEF0b21TdHJpbmc+KHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+
PiB2YWxpZFR5cGVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxBdG9tU3RyaW5nPiB7CiAgICAgICAg
IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwKICAgICAgICAgQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpza2ROYW1lKCksCiAjaWYgSEFWRShGQUlSUExBWVNUUkVB
TUlOR19DRU5DX0lOSVREQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCmluZGV4IDNjMWI2ZjY1NzJlYjM4YTkzODEwNWY3NDc1
OGIxNzgyZmNkOTc5MTcuLmE0NzAyNDQwZWRmYjAzMjJmZWFmN2NkOTFiNmVhZDQwN2IzYzkyMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lz
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5jcHAKQEAgLTMxLDEzICszMSwxNCBAQAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdl
SU8uaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCitjb25zdCBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBvcnRlZEltYWdl
VHlwZXMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5
cGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKICAgICAgICAgSGFzaFNldDxTdHJpbmc+IGRl
ZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzID0gewpAQCAtNjgsMTEgKzY5LDEyIEBAIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SGFzaFNldDxTdHJpbmc+Kj4oY29udGV4dCktPmFkZChpbWFnZVR5cGUpOwog
ICAgICAgICB9LCAmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcyk7CiAKLSAgICAgICAgZGVmYXVs
dFN1cHBvcnRlZEltYWdlVHlwZXMucmVtb3ZlSWYoWyZzeXN0ZW1TdXBwb3J0ZWRJbWFnZVR5cGVz
XShjb25zdCBTdHJpbmcmIGltYWdlVHlwZSkgewotICAgICAgICAgICAgcmV0dXJuICFzeXN0ZW1T
dXBwb3J0ZWRJbWFnZVR5cGVzLmNvbnRhaW5zKGltYWdlVHlwZSk7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIHJldHVybiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlczsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gZmlsdGVyZWQ7CisgICAg
ICAgIGZvciAoYXV0byYgaW1hZ2VUeXBlIDogZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMpIHsK
KyAgICAgICAgICAgIGlmIChzeXN0ZW1TdXBwb3J0ZWRJbWFnZVR5cGVzLmNvbnRhaW5zKGltYWdl
VHlwZSkpCisgICAgICAgICAgICAgICAgZmlsdGVyZWQuYWRkKGltYWdlVHlwZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkOwogICAgIH0oKSk7CiAKICAgICByZXR1cm4gZGVm
YXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAppbmRleCA1YjhmZTIxN2U4NzNkMGIwYzg1NjY4Njc0
MDBkNzZlZTNjNjY1NzVlLi40YjAxNWFmYzk1Y2FmMjMwODZhMWNiYjYxZTNlNTY0Zjc3ZDBiOWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lz
dHJ5LmgKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBI
YXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCk7Citjb25zdCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBv
cnRlZEltYWdlVHlwZXMoKTsKIEhhc2hTZXQ8U3RyaW5nPiYgYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMoKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0
aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SEVWQ1V0aWxpdGllc0NvY29hLm1tCmluZGV4IGYxMTFmMjg3N2I5OGY5YzgzN2QzNTRjYzgxZGJh
MDI4YjNlZTkyMzMuLjYyNmM1MmRlMDIzMmIzMjZjZTJiNGJmODMyZmYwOWY5MGE3OGI4NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGls
aXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KQEAgLTMyLDggKzMyLDkgQEAKICNpbXBvcnQgIkhFVkNV
dGlsaXRpZXMuaCIKICNpbXBvcnQgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgogCi0jaW1wb3J0
IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9u
Lmg+CisjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KIAogI2ltcG9y
dCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKIApAQCAtMTI2LDExICsxMjcsMTEgQEAgYm9vbCB2
YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJhbWV0ZXJTZXQmIHBhcmFtZXRlcnMsIE1lZGlh
Q2FwYWJpbGl0aWVzSW5mbyYKIAogc3RhdGljIE9wdGlvbmFsPENNVmlkZW9Db2RlY1R5cGU+IGNv
ZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKQogewot
ICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywg
Q01WaWRlb0NvZGVjVHlwZT4+KHsKLSAgICAgICAgeyAiYXZjMSIsIGtDTVZpZGVvQ29kZWNUeXBl
X0gyNjQgfSwKLSAgICAgICAgeyAiYXZjMyIsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKLSAg
ICAgICAgeyAiaHZjMSIsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKLSAgICAgICAgeyAiaGV2
MSIsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKKyAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0
cmluZywgQ01WaWRlb0NvZGVjVHlwZT4+KHsKKyAgICAgICAgeyAiYXZjMSJfcywga0NNVmlkZW9D
b2RlY1R5cGVfSDI2NCB9LAorICAgICAgICB7ICJhdmMzIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9I
MjY0IH0sCisgICAgICAgIHsgImh2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKKyAg
ICAgICAgeyAiaGV2MSJfcywga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAogICAgIH0pOwogCiAg
ICAgYXV0byBmaW5kUmVzdWx0ID0gbWFwLmdldCgpLmZpbmQoY29kZWNTdHJpbmcpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBkMWZjZmQwZGNiYTMyNmFkM2M1NGIwY2Fj
ZDY3ZGZiYjk1YzEyZDk5Li5lNTFiNWQ2OWM0NmY0MTc3ZGE0Yzk5ZjQ3MzdjODJmMDMwZjQyOWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtMTM3MSwxNSArMTM3MSwx
NSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldENhbGxPbkNsaWVudFRocmVhZENh
bGxiYWNrKENhbGxPbkNsaWVudFRocmVhZENhbAogICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKIH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0NvZGVjcygpCitjb25zdCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQogewotICAgIHN0YXRpYyBhdXRvIGNv
ZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+KHsgIlZfVlA4IiwgIlZf
VlA5IiB9KTsKKyAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+KHsgIlZfVlA4Il9z
LCAiVl9WUDkiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0KIAotY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRBdWRpb0NvZGVjcygpCitj
b25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQogewotICAgIHN0YXRp
YyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+KHsgIkFf
Vk9SQklTIiwgIkFfT1BVUyIgfSk7CisgICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
Pih7ICJBX1ZPUkJJUyJfcywgIkFfT1BVUyJfcyB9KTsKICAgICByZXR1cm4gY29kZWNzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZjBkNmE1ZmQ2ZjBmNmMyYjM4NGY5
MmY3NDhmNGM5YmE1ZDkxYjhkNC4uNjQxZTQ3MTg2ZWFmMzI3NjBlMTgyNzVhZDNkOGQ1MDQ2ZDVj
NzJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRl
IDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0yMzUsOCArMjM2LDggQEAgY2xhc3MgV0VCQ09SRV9FWFBP
UlQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJzZXIsIHBy
aXZhdGUKIAogICAgIFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3Qp
OwogCi0gICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkVmlkZW9Db2Rl
Y3MoKTsKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRBdWRpb0Nv
ZGVjcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkVmlkZW9Db2RlY3MoKTsKKyAgICBzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIHN1cHBv
cnRlZEF1ZGlvQ29kZWNzKCk7CiAKICAgICAvLyB3ZWJtOjpDYWxsYmFjawogICAgIHdlYm06OlN0
YXR1cyBPbkVsZW1lbnRCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpB
Y3Rpb24qKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3Vy
Y2VzLmNwcAppbmRleCA4ODBjYmJhMDRjOGVkMGI3YmYzYjhkMjk1MzUxNDJjNTI3N2NiYWFmLi5m
ZTBlZDMxNDQxMTQ4ZWUxNTNiMzQ2ZTQ1MzU0NTU1OTI2YzNhNzQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiU1ZHUGF0dGVybkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoU2V0Lmg+CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAjaW5jbHVkZSA8c3RkaW8u
aD4KQEAgLTQzLDkgKzQ0LDkgQEAgU1ZHUmVzb3VyY2VzOjpTVkdSZXNvdXJjZXMoKQogewogfQog
Ci1zdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQor
c3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9t
U3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vICJjb250YWluZXIgZWxlbWVudHMiOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcx
MS9pbnRyby5odG1sI1Rlcm1Db250YWluZXJFbGVtZW50CiAgICAgICAgIC8vICJncmFwaGljcyBl
bGVtZW50cyIgOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbnRyby5odG1sI1Rlcm1HcmFw
aGljc0VsZW1lbnQKQEAgLTkyLDkgKzkzLDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4m
IGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1z
dGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2VyVGFncygpCitzdGF0aWMgY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBtYXJrZXJU
YWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4g
c190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKICAgICBpZiAoc190
YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNW
R05hbWVzOjpsaW5lVGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5h
ZGQoU1ZHTmFtZXM6OnBhdGhUYWctPmxvY2FsTmFtZSgpKTsKQEAgLTEwNSw5ICsxMDYsOSBAQCBz
dGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFn
TGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGZpbGxBbmRTdHJva2VUYWdz
KCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
QXRvbVN0cmluZz4mIGZpbGxBbmRTdHJva2VUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmlu
Zz4+IHNfdGFnTGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjphbHRHbHlwaFRhZy0+bG9jYWxOYW1l
KCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjpjaXJjbGVUYWctPmxv
Y2FsTmFtZSgpKTsKQEAgLTEyNiw5ICsxMjcsOSBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5n
PiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQogICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PEF0b21TdHJpbmc+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQorc3RhdGljIGNv
bnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYg
Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFn
TGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICBzX3Rh
Z0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjpsaW5lYXJHcmFkaWVudFRhZy0+bG9jYWxOYW1lKCkp
OwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjpmaWx0ZXJUYWctPmxvY2Fs
TmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggOTc1OGEy
NzgzOWEyYjgxODY0NGFjZWMyZmM4OGFjMTdlMTgzMGZkZi4uZTZhYTFiNWNkMWJjODk4MzM0MDEy
NzZlNTM2ZmFmNDAwYzJkNmY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVBZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5j
cHAKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb25UeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7
CkBAIC00OTcsNyArNDk4LDcgQEAgdm9pZCBBZGp1c3Rlcjo6YWRqdXN0KFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHVzZXJBZ2VudEFwcGVhcmFuY2UKIHN0YXRpYyBib29s
IGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kaXNwbGF5
LTMvI3VuYm94LWh0bWwKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3Ry
aW5nPj4gdGFnTmFtZXMgPSBbXSB7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gdGFnTmFtZXMgPSBb
XSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIVE1MUXVhbGlmaWVkTmFtZSogY29uc3QgdGFnTGlz
dFtdID0gewogICAgICAgICAgICAgJmJyVGFnLmdldCgpLAogICAgICAgICAgICAgJndiclRhZy5n
ZXQoKSwKQEAgLTUxNyw3ICs1MTgsOCBAQCBzdGF0aWMgYm9vbCBoYXNFZmZlY3RpdmVEaXNwbGF5
Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgICAgICAg
ICAgJnRleHRhcmVhVGFnLmdldCgpLAogICAgICAgICAgICAgJnNlbGVjdFRhZy5nZXQoKSwKICAg
ICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAg
ICAgIHNldC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVvZih0YWdMaXN0KSk7CiAgICAgICAg
IGZvciAoYXV0byYgbmFtZSA6IHRhZ0xpc3QpCiAgICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxv
Y2FsTmFtZSgpKTsKICAgICAgICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAppbmRleCBlNGFhYWMwNDY4NmE4YzI1ODM4MjU2OTRmMjQyOGY5
OWUyOGExNzg3Li43MTI2ODBhNTBjOTgyZDFjMjI5MDNlZDQ1OGFkZDQzZDE3NTVlY2VkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nUGFyc2luZ0J1
ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAtMTI3LDcgKzEy
OCw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5l
cyhTdHJpbmdWaWV3IHN0cmluZykKIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0
ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgc3RhdGlj
IGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7
Ci0gICAgICAgIEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gc2V0OworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gc2V0OwogICAgICAg
ICBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhzZXQpOwogICAgICAgICBzZXQuYWRk
KHsKICAgICAgICAgICAgIFNWR05hbWVzOjp2YWx1ZXNBdHRyLmdldCgpLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCmluZGV4IDRmMjcwNGU0MTA1NmVjZjQxM2ZkMzVmYTFmOTNhMWNlODgxN2Vi
NTQuLjljMTQwY2MxZDRlMDM4YTQzNjM4Y2I2ZGIyYzZiMGNhYTM0MmNmY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKQEAgLTU1LDEzICs1NSwxNCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoU1ZHRWxlbWVudCk7CiAKLXN0YXRpYyBORVZFUl9JTkxJ
TkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJpYnV0
ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQorc3RhdGljIE5FVkVSX0lOTElORSBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ1NTUHJvcGVydHlJRD4g
Y3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpCiB7CiAgICAgdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CkBAIC0xNDEs
MTYgKzE0MiwxNiBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwq
LCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVAogICAgICAgICAmeUF0dHIuZ2V0
KCksCiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlE
PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21T
dHJpbmcsIENTU1Byb3BlcnR5SUQ+IG1hcDsKIAogICAgIGZvciAoYXV0byYgbmFtZSA6IGF0dHJp
YnV0ZU5hbWVzKSB7CiAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUt
PmxvY2FsTmFtZSgpOwotICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZS5pbXBsKCksIGNzc1Byb3Bl
cnR5SUQobG9jYWxOYW1lKSk7CisgICAgICAgIG1hcC5hZGQobG9jYWxOYW1lLCBjc3NQcm9wZXJ0
eUlEKGxvY2FsTmFtZSkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaGVuIENTUyBzdXBwb3J0
cyAidHJhbnNmb3JtLW9yaWdpbiIgdGhpcyBzcGVjaWFsIGNhc2UgY2FuIGJlIHJlbW92ZWQsCiAg
ICAgLy8gYW5kIHdlIGNhbiBhZGQgdHJhbnNmb3JtX29yaWdpbkF0dHIgdG8gdGhlIHRhYmxlIGFi
b3ZlIGluc3RlYWQuCi0gICAgbWFwLmFkZCh0cmFuc2Zvcm1fb3JpZ2luQXR0ci0+bG9jYWxOYW1l
KCkuaW1wbCgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbik7CisgICAgbWFwLmFkZCh0cmFu
c2Zvcm1fb3JpZ2luQXR0ci0+bG9jYWxOYW1lKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2lu
KTsKIAogICAgIHJldHVybiBtYXA7CiB9CkBAIC03MjQsNyArNzI1LDcgQEAgUXVhbGlmaWVkTmFt
ZSBTVkdFbGVtZW50OjphbmltYXRhYmxlQXR0cmlidXRlRm9yTmFtZShjb25zdCBBdG9tU3RyaW5n
JiBsb2NhbE5hbWUKICAgICAgICAgICAgICZTVkdOYW1lczo6ekF0dHIuZ2V0KCksCiAgICAgICAg
ICAgICAmU1ZHTmFtZXM6OmhyZWZBdHRyLmdldCgpLAogICAgICAgICB9OwotICAgICAgICBIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1h
cDsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpIHsKICAgICAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbWFwLmFkZChuYW1lLT5sb2NhbE5hbWUoKSwgKm5hbWUpOwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTc4
MCw3ICs3ODEsNyBAQCBDU1NQcm9wZXJ0eUlEIFNWR0VsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JT
VkdBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgICAgIHJldHVybiBDU1NQ
cm9wZXJ0eUludmFsaWQ7CiAKICAgICBzdGF0aWMgY29uc3QgYXV0byBwcm9wZXJ0aWVzID0gbWFr
ZU5ldmVyRGVzdHJveWVkKGNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKSk7
Ci0gICAgcmV0dXJuIHByb3BlcnRpZXMuZ2V0KCkuZ2V0KGF0dHJOYW1lLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgcmV0dXJuIHByb3BlcnRpZXMuZ2V0KCkuZ2V0KGF0dHJOYW1lLmxvY2FsTmFt
ZSgpKTsKIH0KIAogYm9vbCBTVkdFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1Rlc3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKaW5kZXgg
MWQyY2Q5NzhlZDEzMjM2ZDZhZTZhNzhhZDZiNzRjNjAyODcxMTcyZi4uYzU4MjMxMGFmYWRjZTVm
MmI2NTcwOTk2YTVmYTQ0NTU2MWU4ZWY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1Rlc3RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCkBAIC0x
NjMsNyArMTYzLDcgQEAgdm9pZCBTVkdUZXN0czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBtX2NvbnRleHRFbGVtZW50LmludmFsaWRhdGVT
dHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIH0KIAotdm9pZCBTVkdUZXN0czo6YWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1
dGVzKQordm9pZCBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyhNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJp
YnV0ZXMpCiB7CiAgICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQocmVxdWlyZWRGZWF0dXJlc0F0
dHIpOwogICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRXh0ZW5zaW9uc0F0dHIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVGVzdHMuaAppbmRleCBhOWMyYWNlMGEzMGM0NTBlOWQ5ZDI4MTkxMTUyOTc2
YzUyMmE4YzViLi4wYzI1MjE2NmFhZGEyNmFiMWY5NmI4YTQxMWUyYWIwYjM5ZDk5NTYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGVzdHMuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiUXVhbGlmaWVk
TmFtZS5oIgogI2luY2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAg
Y2xhc3MgU1ZHVGVzdHMgewogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkQXR0
cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CisgICAgc3RhdGljIHZvaWQgYWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGhhc0Zl
YXR1cmVGb3JMZWdhY3lCaW5kaW5ncyhjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCBlMDVm
YjUzYzAxOTk3MTZiMzQ1NmY3NzJkZWI5ODVmZWIwZjBjNzExLi5mYTc1MzkyODc4MmEzYzQzZDNh
MjQyMjJiOGY0ZmIzNzcxMTExMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
CkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlhM
aW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTc3
LDE0ICsxNzgsMTQgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJp
bmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQo
KQogewogICAgIC8vIFNwZWM6ICJBbnkgJ3N2ZycsICdzeW1ib2wnLCAnZycsIGdyYXBoaWNzIGVs
ZW1lbnQgb3Igb3RoZXIgJ3VzZScgaXMgcG90ZW50aWFsbHkgYSB0ZW1wbGF0ZSBvYmplY3QgdGhh
dCBjYW4gYmUgcmUtdXNlZAogICAgIC8vIChpLmUuLCAiaW5zdGFuY2VkIikgaW4gdGhlIFNWRyBk
b2N1bWVudCB2aWEgYSAndXNlJyBlbGVtZW50LiIKICAgICAvLyAiR3JhcGhpY3MgRWxlbWVudCIg
aXMgZGVmaW5lZCBhcyAnY2lyY2xlJywgJ2VsbGlwc2UnLCAnaW1hZ2UnLCAnbGluZScsICdwYXRo
JywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAncmVjdCcsICd0ZXh0JwogICAgIC8vIEV4Y2x1ZGVk
IGFyZSBhbnl0aGluZyB0aGF0IGlzIHVzZWQgYnkgcmVmZXJlbmNlIG9yIHRoYXQgb25seSBtYWtl
IHNlbnNlIHRvIGFwcGVhciBvbmNlIGluIGEgZG9jdW1lbnQuCiAgICAgdXNpbmcgbmFtZXNwYWNl
IFNWR05hbWVzOwotICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgZm9yIChh
dXRvJiB0YWcgOiB7IGFUYWcuZ2V0KCksIGNpcmNsZVRhZy5nZXQoKSwgZGVzY1RhZy5nZXQoKSwg
ZWxsaXBzZVRhZy5nZXQoKSwgZ1RhZy5nZXQoKSwgaW1hZ2VUYWcuZ2V0KCksIGxpbmVUYWcuZ2V0
KCksIG1ldGFkYXRhVGFnLmdldCgpLCBwYXRoVGFnLmdldCgpLCBwb2x5Z29uVGFnLmdldCgpLCBw
b2x5bGluZVRhZy5nZXQoKSwgcmVjdFRhZy5nZXQoKSwgc3ZnVGFnLmdldCgpLCBzd2l0Y2hUYWcu
Z2V0KCksIHN5bWJvbFRhZy5nZXQoKSwgdGV4dFRhZy5nZXQoKSwgdGV4dFBhdGhUYWcuZ2V0KCks
IHRpdGxlVGFnLmdldCgpLCB0cmVmVGFnLmdldCgpLCB0c3BhblRhZy5nZXQoKSwgdXNlVGFnLmdl
dCgpIH0pCiAgICAgICAgIHNldC5hZGQodGFnLmxvY2FsTmFtZSgpKTsKICAgICByZXR1cm4gc2V0
OwpAQCAtMTkyLDcgKzE5Myw3IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFs
bG93ZWRFbGVtZW50U2V0KCkKIAogc3RhdGljIGlubGluZSBib29sIGlzRGlzYWxsb3dlZEVsZW1l
bnQoY29uc3QgU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzZXQgPSBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpOwog
ICAgIHJldHVybiAhc2V0LmdldCgpLmNvbnRhaW5zKGVsZW1lbnQubG9jYWxOYW1lKCkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCmlu
ZGV4IDY4MTkxYjk0YTQwMDEwNWZiMjZhMTY5MmU2ZjAyZGI1NzhjYmFlY2QuLmUzNGExYWU3NmRh
NGFmZDYwNDlkYmNhNjBiOTBmY2NmOTI3ZWVmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVk
ZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTQ2Miw3ICs0NjMsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpwYXJzZUJlZ2luT3JF
bmQoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZywgQmVnaW5PckVuZCBiZWdpbgogCiBib29sIFNW
R1NNSUxFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1dGVzID0g
bWFrZU5ldmVyRGVzdHJveWVkKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4geworICAgIHN0YXRpYyBj
b25zdCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKICAgICAg
ICAgU1ZHTmFtZXM6OmJlZ2luQXR0ciwKICAgICAgICAgU1ZHTmFtZXM6OmVuZEF0dHIsCiAgICAg
ICAgIFNWR05hbWVzOjpkdXJBdHRyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAK
aW5kZXggOWZkZmJhOGIxMDIzYWU2NWNiMmZmOGMyZmFmNDIzMDQwYTAzOGEwNi4uMTBmMGMyMmQ0
YjY3Y2U1ZmZhM2I4MzA2OWNiZjQwNjA1MTIxZWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhG
dW5jdGlvbnMuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjY4LDQ0ICs2Njks
NDQgQEAgc3RydWN0IEZ1bmN0aW9uTWFwVmFsdWUgewogICAgIEludGVydmFsIGFyZ3VtZW50Q291
bnRJbnRlcnZhbDsKIH07CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25NYXBWYWx1
ZT4gY3JlYXRlRnVuY3Rpb25NYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IGNyZWF0ZUZ1bmN0aW9uTWFw
KCkKIHsKICAgICBzdHJ1Y3QgRnVuY3Rpb25NYXBwaW5nIHsKLSAgICAgICAgY29uc3QgY2hhciog
bmFtZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIEZ1bmN0aW9uTWFwVmFs
dWUgZnVuY3Rpb247CiAgICAgfTsKIAogICAgIHN0YXRpYyBjb25zdCBGdW5jdGlvbk1hcHBpbmcg
ZnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgImJvb2xlYW4iLCB7IGNyZWF0ZUZ1bmN0aW9uQm9v
bGVhbiwgMSB9IH0sCi0gICAgICAgIHsgImNlaWxpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uQ2VpbGlu
ZywgMSB9IH0sCi0gICAgICAgIHsgImNvbmNhdCIsIHsgY3JlYXRlRnVuY3Rpb25Db25jYXQsIElu
dGVydmFsKDIsIEludGVydmFsOjpJbmYpIH0gfSwKLSAgICAgICAgeyAiY29udGFpbnMiLCB7IGNy
ZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAotICAgICAgICB7ICJjb3VudCIsIHsgY3JlYXRl
RnVuY3Rpb25Db3VudCwgMSB9IH0sCi0gICAgICAgIHsgImZhbHNlIiwgeyBjcmVhdGVGdW5jdGlv
bkZhbHNlLCAwIH0gfSwKLSAgICAgICAgeyAiZmxvb3IiLCB7IGNyZWF0ZUZ1bmN0aW9uRmxvb3Is
IDEgfSB9LAotICAgICAgICB7ICJpZCIsIHsgY3JlYXRlRnVuY3Rpb25JZCwgMSB9IH0sCi0gICAg
ICAgIHsgImxhbmciLCB7IGNyZWF0ZUZ1bmN0aW9uTGFuZywgMSB9IH0sCi0gICAgICAgIHsgImxh
c3QiLCB7IGNyZWF0ZUZ1bmN0aW9uTGFzdCwgMCB9IH0sCi0gICAgICAgIHsgImxvY2FsLW5hbWUi
LCB7IGNyZWF0ZUZ1bmN0aW9uTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAg
IHsgIm5hbWUiLCB7IGNyZWF0ZUZ1bmN0aW9uTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAg
ICAgICB7ICJuYW1lc3BhY2UtdXJpIiwgeyBjcmVhdGVGdW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50
ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJub3JtYWxpemUtc3BhY2UiLCB7IGNyZWF0ZUZ1
bmN0aW9uTm9ybWFsaXplU3BhY2UsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibm90
IiwgeyBjcmVhdGVGdW5jdGlvbk5vdCwgMSB9IH0sCi0gICAgICAgIHsgIm51bWJlciIsIHsgY3Jl
YXRlRnVuY3Rpb25OdW1iZXIsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAicG9zaXRp
b24iLCB7IGNyZWF0ZUZ1bmN0aW9uUG9zaXRpb24sIDAgfSB9LAotICAgICAgICB7ICJyb3VuZCIs
IHsgY3JlYXRlRnVuY3Rpb25Sb3VuZCwgMSB9IH0sCi0gICAgICAgIHsgInN0YXJ0cy13aXRoIiwg
eyBjcmVhdGVGdW5jdGlvblN0YXJ0c1dpdGgsIDIgfSB9LAotICAgICAgICB7ICJzdHJpbmciLCB7
IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInN0
cmluZy1sZW5ndGgiLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nTGVuZ3RoLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZyIsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcs
IEludGVydmFsKDIsIDMpIH0gfSwKLSAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIiwgeyBjcmVh
dGVGdW5jdGlvblN1YnN0cmluZ0FmdGVyLCAyIH0gfSwKLSAgICAgICAgeyAic3Vic3RyaW5nLWJl
Zm9yZSIsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmdCZWZvcmUsIDIgfSB9LAotICAgICAgICB7
ICJzdW0iLCB7IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKLSAgICAgICAgeyAidHJhbnNsYXRl
IiwgeyBjcmVhdGVGdW5jdGlvblRyYW5zbGF0ZSwgMyB9IH0sCi0gICAgICAgIHsgInRydWUiLCB7
IGNyZWF0ZUZ1bmN0aW9uVHJ1ZSwgMCB9IH0sCisgICAgICAgIHsgImJvb2xlYW4iX3MsIHsgY3Jl
YXRlRnVuY3Rpb25Cb29sZWFuLCAxIH0gfSwKKyAgICAgICAgeyAiY2VpbGluZyJfcywgeyBjcmVh
dGVGdW5jdGlvbkNlaWxpbmcsIDEgfSB9LAorICAgICAgICB7ICJjb25jYXQiX3MsIHsgY3JlYXRl
RnVuY3Rpb25Db25jYXQsIEludGVydmFsKDIsIEludGVydmFsOjpJbmYpIH0gfSwKKyAgICAgICAg
eyAiY29udGFpbnMiX3MsIHsgY3JlYXRlRnVuY3Rpb25Db250YWlucywgMiB9IH0sCisgICAgICAg
IHsgImNvdW50Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ291bnQsIDEgfSB9LAorICAgICAgICB7ICJm
YWxzZSJfcywgeyBjcmVhdGVGdW5jdGlvbkZhbHNlLCAwIH0gfSwKKyAgICAgICAgeyAiZmxvb3Ii
X3MsIHsgY3JlYXRlRnVuY3Rpb25GbG9vciwgMSB9IH0sCisgICAgICAgIHsgImlkIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAorICAgICAgICB7ICJsYW5nIl9zLCB7IGNyZWF0ZUZ1bmN0
aW9uTGFuZywgMSB9IH0sCisgICAgICAgIHsgImxhc3QiX3MsIHsgY3JlYXRlRnVuY3Rpb25MYXN0
LCAwIH0gfSwKKyAgICAgICAgeyAibG9jYWwtbmFtZSJfcywgeyBjcmVhdGVGdW5jdGlvbkxvY2Fs
TmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJuYW1lIl9zLCB7IGNyZWF0ZUZ1
bmN0aW9uTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJuYW1lc3BhY2UtdXJp
Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgIm5vcm1hbGl6ZS1zcGFjZSJfcywgeyBjcmVhdGVGdW5jdGlvbk5vcm1hbGl6ZVNw
YWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisgICAgICAgIHsgIm5vdCJfcywgeyBjcmVhdGVGdW5j
dGlvbk5vdCwgMSB9IH0sCisgICAgICAgIHsgIm51bWJlciJfcywgeyBjcmVhdGVGdW5jdGlvbk51
bWJlciwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJwb3NpdGlvbiJfcywgeyBjcmVh
dGVGdW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKKyAgICAgICAgeyAicm91bmQiX3MsIHsgY3JlYXRl
RnVuY3Rpb25Sb3VuZCwgMSB9IH0sCisgICAgICAgIHsgInN0YXJ0cy13aXRoIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uU3RhcnRzV2l0aCwgMiB9IH0sCisgICAgICAgIHsgInN0cmluZyJfcywgeyBjcmVh
dGVGdW5jdGlvblN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJzdHJpbmct
bGVuZ3RoIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nTGVuZ3RoLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgICAgIHsgInN1YnN0cmluZyJfcywgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZywg
SW50ZXJ2YWwoMiwgMykgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmctYWZ0ZXIiX3MsIHsgY3Jl
YXRlRnVuY3Rpb25TdWJzdHJpbmdBZnRlciwgMiB9IH0sCisgICAgICAgIHsgInN1YnN0cmluZy1i
ZWZvcmUiX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmdCZWZvcmUsIDIgfSB9LAorICAgICAg
ICB7ICJzdW0iX3MsIHsgY3JlYXRlRnVuY3Rpb25TdW0sIDEgfSB9LAorICAgICAgICB7ICJ0cmFu
c2xhdGUiX3MsIHsgY3JlYXRlRnVuY3Rpb25UcmFuc2xhdGUsIDMgfSB9LAorICAgICAgICB7ICJ0
cnVlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uVHJ1ZSwgMCB9IH0sCiAgICAgfTsKIAotICAgIEhhc2hN
YXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgRnVuY3Rpb25NYXBWYWx1ZT4gbWFwOwogICAg
IGZvciAoYXV0byYgZnVuY3Rpb24gOiBmdW5jdGlvbnMpCiAgICAgICAgIG1hcC5hZGQoZnVuY3Rp
b24ubmFtZSwgZnVuY3Rpb24uZnVuY3Rpb24pOwogICAgIHJldHVybiBtYXA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoUGFyc2VyLmNwcAppbmRleCBkZmI0OWY4YjJmZTI1M2UzYWRlYmQ2YjYxNjU0ZDBjNzkw
ZDU4OTUwLi44OWY3ZWQ5ZDcyMmYyYTlmYzE1OWM5ZGQ1YmVmZmQwM2MxMzdmYWZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFBhcnNlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJYUGF0
aFBhdGguaCIKICNpbmNsdWRlICJYUGF0aFN0ZXAuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAg
LTc2LDI4ICs3NywyOCBAQCBzdGF0aWMgWE1MQ2F0IGNoYXJDYXQoVUNoYXIgY2hhcmFjdGVyKQog
ICAgIHJldHVybiBOb3RQYXJ0T2ZOYW1lOwogfQogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0
ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1lc01hcCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gY3JlYXRlQXhpc05hbWVz
TWFwKCkKIHsKICAgICBzdHJ1Y3QgQXhpc05hbWUgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1l
OworICAgICAgICBBU0NJSUxpdGVyYWwgbmFtZTsKICAgICAgICAgU3RlcDo6QXhpcyBheGlzOwog
ICAgIH07CiAgICAgY29uc3QgQXhpc05hbWUgYXhpc05hbWVMaXN0W10gPSB7Ci0gICAgICAgIHsg
ImFuY2VzdG9yIiwgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCi0gICAgICAgIHsgImFuY2VzdG9yLW9y
LXNlbGYiLCBTdGVwOjpBbmNlc3Rvck9yU2VsZkF4aXMgfSwKLSAgICAgICAgeyAiYXR0cmlidXRl
IiwgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAotICAgICAgICB7ICJjaGlsZCIsIFN0ZXA6OkNoaWxk
QXhpcyB9LAotICAgICAgICB7ICJkZXNjZW5kYW50IiwgU3RlcDo6RGVzY2VuZGFudEF4aXMgfSwK
LSAgICAgICAgeyAiZGVzY2VuZGFudC1vci1zZWxmIiwgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4
aXMgfSwKLSAgICAgICAgeyAiZm9sbG93aW5nIiwgU3RlcDo6Rm9sbG93aW5nQXhpcyB9LAotICAg
ICAgICB7ICJmb2xsb3dpbmctc2libGluZyIsIFN0ZXA6OkZvbGxvd2luZ1NpYmxpbmdBeGlzIH0s
Ci0gICAgICAgIHsgIm5hbWVzcGFjZSIsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMgfSwKLSAgICAgICAg
eyAicGFyZW50IiwgU3RlcDo6UGFyZW50QXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmciLCBT
dGVwOjpQcmVjZWRpbmdBeGlzIH0sCi0gICAgICAgIHsgInByZWNlZGluZy1zaWJsaW5nIiwgU3Rl
cDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKLSAgICAgICAgeyAic2VsZiIsIFN0ZXA6OlNlbGZB
eGlzIH0KKyAgICAgICAgeyAiYW5jZXN0b3IiX3MsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAorICAg
ICAgICB7ICJhbmNlc3Rvci1vci1zZWxmIl9zLCBTdGVwOjpBbmNlc3Rvck9yU2VsZkF4aXMgfSwK
KyAgICAgICAgeyAiYXR0cmlidXRlIl9zLCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCisgICAgICAg
IHsgImNoaWxkIl9zLCBTdGVwOjpDaGlsZEF4aXMgfSwKKyAgICAgICAgeyAiZGVzY2VuZGFudCJf
cywgU3RlcDo6RGVzY2VuZGFudEF4aXMgfSwKKyAgICAgICAgeyAiZGVzY2VuZGFudC1vci1zZWxm
Il9zLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAorICAgICAgICB7ICJmb2xsb3dpbmci
X3MsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nLXNpYmxpbmci
X3MsIFN0ZXA6OkZvbGxvd2luZ1NpYmxpbmdBeGlzIH0sCisgICAgICAgIHsgIm5hbWVzcGFjZSJf
cywgU3RlcDo6TmFtZXNwYWNlQXhpcyB9LAorICAgICAgICB7ICJwYXJlbnQiX3MsIFN0ZXA6OlBh
cmVudEF4aXMgfSwKKyAgICAgICAgeyAicHJlY2VkaW5nIl9zLCBTdGVwOjpQcmVjZWRpbmdBeGlz
IH0sCisgICAgICAgIHsgInByZWNlZGluZy1zaWJsaW5nIl9zLCBTdGVwOjpQcmVjZWRpbmdTaWJs
aW5nQXhpcyB9LAorICAgICAgICB7ICJzZWxmIl9zLCBTdGVwOjpTZWxmQXhpcyB9CiAgICAgfTsK
LSAgICBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKICAgICBm
b3IgKGF1dG8mIGF4aXNOYW1lIDogYXhpc05hbWVMaXN0KQogICAgICAgICBtYXAuYWRkKGF4aXNO
YW1lLm5hbWUsIGF4aXNOYW1lLmF4aXMpOwogICAgIHJldHVybiBtYXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAppbmRleCA4N2Jk
MjhlYjQ4YWUyNDAwNjU1OGU4ZmY4ZWFhZjdlNjdmMTg0NDExLi42ZGM2MzFiNzg5MzQ4MzI2NGUw
YzVhMDljN2ViYmUzZGNkY2U3ZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTQ5LDggKzQ5LDggQEAKICNpbmNsdWRl
IDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29w
aWVyLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIApAQCAtMjc0LDE4ICsyNzQsMTggQEAgc3RhdGljIGNvbnN0IFN0cmlu
ZyBPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxKCkKIAogc3RhdGljIGNvbnN0IFN0cmluZyBP
YnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKCkKIHsKLSAgICByZXR1cm4gIkNS
RUFURSBUQUJMRSBcIk9ic2VydmVkRG9tYWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkg
S0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBG
QUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBO
T1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3Jh
bmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxM
LCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElO
VEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0
aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsIElOVEVHRVIgTk9UIE5VTEwpIjsKKyAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBc
Ik9ic2VydmVkRG9tYWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3Ry
YWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2Vl
biBSRUFMIE5PVCBOVUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJ
TlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2
YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5V
TEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIg
Tk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkg
SU5URUdFUiBOT1QgTlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElO
VEVHRVIgTk9UIE5VTEwpIl9zOwogfQogCiBzdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBl
eHBlY3RlZFVuYXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNv
bHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURv
bWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJjZUlEIiwgInRpbWVPZkFk
Q2xpY2siLCAidG9rZW4iLCAic2lnbmF0dXJlIiwgImtleUlEIiB9KTsKKyAgICBzdGF0aWMgY29u
c3QgYXV0byBjb2x1bW5zID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNv
dXJjZVNpdGVEb21haW5JRCJfcywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNl
SUQiX3MsICJ0aW1lT2ZBZENsaWNrIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJrZXlJ
RCJfcyB9KTsKICAgICByZXR1cm4gY29sdW1ucy5nZXQoKTsKIH0KIAogc3RhdGljIGNvbnN0IEV4
cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucygpCiB7Ci0gICAgc3RhdGlj
IGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7
ICJzb3VyY2VTaXRlRG9tYWluSUQiLCAiZGVzdGluYXRpb25TaXRlRG9tYWluSUQiLCAic291cmNl
SUQiLCAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSIsICJwcmlvcml0eSIsICJ0aW1lT2ZBZENsaWNr
IiwgImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIiwgInRva2VuIiwgInNpZ25hdHVyZSIsICJr
ZXlJRCIsICJlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIiB9KTsKKyAgICBzdGF0aWMg
Y29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsg
InNvdXJjZVNpdGVEb21haW5JRCJfcywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291
cmNlSUQiX3MsICJhdHRyaWJ1dGlvblRyaWdnZXJEYXRhIl9zLCAicHJpb3JpdHkiX3MsICJ0aW1l
T2ZBZENsaWNrIl9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UiX3MsICJ0b2tlbiJfcywg
InNpZ25hdHVyZSJfcywgImtleUlEIl9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlv
biJfcyB9KTsKICAgICByZXR1cm4gY29sdW1ucy5nZXQoKTsKIH0KIApAQCAtMjk0LDkgKzI5NCw5
IEBAIHN0YXRpYyBib29sIG5lZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiBz
Y2hlbWEpCiAgICAgcmV0dXJuIHNjaGVtYS5jb250YWlucygiUkVGRVJFTkNFUyBUb3BMZXZlbERv
bWFpbnMiKTsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjcmVh
dGVUYWJsZVF1ZXJpZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNyZWF0ZVRhYmxlUXVlcmllcygpCiB7Ci0g
ICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVyaWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKKyAgICBzdGF0aWMgYXV0byBjcmVhdGVUYWJsZVF1ZXJp
ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiB7CiAgICAgICAgIHsgIk9ic2VydmVkRG9tYWlucyJfcywg
Y3JlYXRlT2JzZXJ2ZWREb21haW59LAogICAgICAgICB7ICJUb3BMZXZlbERvbWFpbnMiX3MsIGNy
ZWF0ZVRvcExldmVsRG9tYWluc30sCiAgICAgICAgIHsgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWlucyJfcywgY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zfSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IGU0OGU4
MzI2YTJhNzM1ZWY5MjRmODczNzJkYzc4NjM5ZDgyMzkzMzAuLmJiMmIzYzQ2MDFjMGUzODcyYWNj
MWFlMzNjOTU4N2M0ODIzYmZkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJn
dW1lbnRDb2RlcnMuaApAQCAtNDk3LDggKzQ5Nyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWlu
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4+
IDogVmVjdG9yQXJndW1lbnRDb2RlcjxzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4geyB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+IHN0cnVj
dCBBcmd1bWVudENvZGVyPEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPj4gewotICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+IEhhc2hN
YXBUeXBlOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFzaFRh
YmxlVHJhaXRzPiBIYXNoTWFwVHlwZTsKIAogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBIYXNoTWFwVHlwZSYgaGFzaE1hcCkKICAgICB7CkBAIC01MTQsNiAr
NTE0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICAgICAgSGFzaE1hcFR5cGUgaGFzaE1hcDsKKyAgICAgICAgaGFzaE1h
cC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGhhc2hNYXBTaXplKTsKICAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKICAgICAgICAgICAgIE9wdGlvbmFs
PEtleUFyZz4ga2V5OwogICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7CkBAIC01NTEsOCArNTUy
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWkKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4+
IHsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhh
c2hTZXRUeXBlOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2hUYWJsZVRyYWl0cz4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8SGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgSGFzaFRh
YmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPiBIYXNoU2V0VHlwZTsKIAogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKICAg
ICB7CkBAIC01NzksNiArNTgwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBBcmd1bWUKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgSGFzaFNldFR5cGUgaGFzaFNldDsK
KyAgICAgICAgaGFzaFNldC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGhhc2hTZXRTaXplKTsKICAg
ICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kpIHsKICAgICAg
ICAgICAgIE9wdGlvbmFsPEtleUFyZz4ga2V5OwogICAgICAgICAgICAgZGVjb2RlciA+PiBrZXk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3Nl
ckNoZWNrcy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2Vy
Q2hlY2tzLm1tCmluZGV4IDQ5MmI5YzY0NDJiZTE1NGQ1MWRkZjc2OWY1OTNlODA4NGViMWJkNmQu
LjlhNGQ3ODA5ZTYzZTQ4NTI0MjVmMjA1N2M4NjAxMzJhNThhNWE1OWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tCkBA
IC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1ZlcnNpb25DaGVja3MuaD4KICNpbXBv
cnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBv
cnQgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2lt
cG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CkBAIC01
OCw3ICs1OSw3IEBAIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+
IGdldEFwcEJvdW5kRG9tYWluc1Rlc3RpbmcoY29uc3QgU3RyCiAgICAgaWYgKGJ1bmRsZUlELmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgc3RhdGljIGF1dG8g
YXBwQm91bmREb21haW5MaXN0ID0gbWFrZU5ldmVyRGVzdHJveWVkKEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiB7CisgICAgc3RhdGljIGF1dG8gYXBw
Qm91bmREb21haW5MaXN0ID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4+IHsKICAgICAgICAgeyJpbkFwcEJyb3dzZXJQcml2YWN5VGVzdElkZW50aWZpZXIiX3Ms
IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKCIxMjcu
MC4wLjEiKSB9fSwKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmNwcAppbmRleCBiYmNlZTQxNjk5YzBkNWY4NGRjNmM3OTJhYjY0NGM2ZmRkODFk
MGQ3Li5jZTU2ZjljZDQ2Mjg2MDk0YzZlNDE0MTBlZWJiNGY5NDlkN2VmZTc5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApAQCAtNTIsMTMgKzUyLDEz
IEBAIHZvaWQgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIAogYm9vbCBXZWJQcmVmZXJlbmNlc1N0b3JlOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBXZWJQcmVmZXJlbmNlc1N0b3JlJiByZXN1bHQpCiB7Ci0gICAgT3B0aW9uYWw8
SGFzaE1hcDxTdHJpbmcsIFZhbHVlPj4gdmFsdWVzOworICAgIE9wdGlvbmFsPFZhbHVlTWFwPiB2
YWx1ZXM7CiAgICAgZGVjb2RlciA+PiB2YWx1ZXM7CiAgICAgaWYgKCF2YWx1ZXMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXN1bHQubV92YWx1ZXMgPSBXVEZNb3ZlKCp2YWx1ZXMpOwog
Ci0gICAgT3B0aW9uYWw8SGFzaE1hcDxTdHJpbmcsIFZhbHVlPj4gb3ZlcnJpZGRlbkRlZmF1bHRz
OworICAgIE9wdGlvbmFsPFZhbHVlTWFwPiBvdmVycmlkZGVuRGVmYXVsdHM7CiAgICAgZGVjb2Rl
ciA+PiBvdmVycmlkZGVuRGVmYXVsdHM7CiAgICAgaWYgKCFvdmVycmlkZGVuRGVmYXVsdHMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuaAppbmRleCBjNWZlM2ZiM2ZiYjYyMTZkZWJlMDAwOWRmNTUwYzVjYTZkNmYzNjA4Li40
YTNkOGYyYTRlNGNmMGM3ODFlOTcyMmY3Nzk3ZGYzNjEwNmM4MWM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNs
dWRlICJEZWNvZGVyLmgiCiAjaW5jbHVkZSAiRW5jb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTY2LDcgKzY2LDcgQEAgc3RydWN0IFdlYlByZWZlcmVuY2VzU3RvcmUgewogCiAgICAgdXNpbmcg
VmFsdWUgPSBWYXJpYW50PFN0cmluZywgYm9vbCwgdWludDMyX3QsIGRvdWJsZT47CiAKLSAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4gVmFsdWVNYXA7CisgICAgdXNpbmcgVmFsdWVN
YXAgPSBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFZhbHVlPjsKICAgICBW
YWx1ZU1hcCBtX3ZhbHVlczsKICAgICBWYWx1ZU1hcCBtX292ZXJyaWRkZW5EZWZhdWx0czsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlD
b2NvYS5tbQppbmRleCAyZjBhYWI1YTliNzgyNDNlOTc0OTRiNzU0MTQ0MWNhNGUxM2YzYjg3Li4w
NDE3NDhiOTA0NGFkMjUzNjg4ZWFhY2ViYWY5YThmZTZlN2YwMGQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAt
NjUsOSArNjUsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IFNlY29uZHMg
dW5leHBlY3RlZEFjdGl2aXR5RHVyYXRpb24gPSAxMF9zOwogCi1jb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcygp
Citjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYg
V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhz
V2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Moc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4gewogICAgICAgICBbTlNCdW5kbGUgYnVuZGxlV2l0aElk
ZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViQ29yZSJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5k
YXJkaXppbmdQYXRoLAogICAgICAgICBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJj
b20uYXBwbGUuV2ViS2l0Il0ucmVzb3VyY2VQYXRoLnN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGgK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IDVhNjYyMDIyOTEzMDRiYmQ3MzdlMTE2Yjg4N2FjNGY5OTYzYWYxNGMuLjU5ZDgwMGFmYjQz
Yjc0NTAzOWIwYjQ4MzM1MWU0ODQyM2M1M2EzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTYyNCw5ICsxNjI0LDkgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OnVwZGF0ZUJhY2tncm91bmRSZXNwb25zaXZlbmVzc1RpbWVyKCkKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5
OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKK2NvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBs
YXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nl
c3M7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNz
OwogICAgIHJldHVybiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzOwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDY4ZDY2
YzYxNWViYTZlOTdiMGEzYzgwZDQzNGIxYjExNDhiMmQwN2MuLmFiMTM1NTU5NmQ1NzMzNjcxZmQz
MjJlMDZjMzI1MDI2YTk3NDkzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5oCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+
CiAKICNpZiBIQVZFKFZJU0lCSUxJVFlfUFJPUEFHQVRJT05fVklFVykKQEAgLTQ3Niw3ICs0Nzcs
NyBAQCBjbGFzcyBXZWJQcm9jZXNzUHJveHkgOiBwdWJsaWMgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
LCBwdWJsaWMgUmVzcG9uc2l2ZW5lc3NUaW1lcgogICAgIGJvb2wgcGxhdGZvcm1Jc0JlaW5nRGVi
dWdnZWQoKSBjb25zdDsKICAgICBib29sIHNob3VsZEFsbG93Tm9uVmFsaWRJbmplY3RlZENvZGUo
KSBjb25zdDsKIAotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHBsYXRmb3JtUGF0
aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIHBsYXRmb3JtUGF0aHNXaXRoQXNz
dW1lZFJlYWRBY2Nlc3MoKTsKIAogICAgIFJlc3BvbnNpdmVuZXNzVGltZXImIHJlc3BvbnNpdmVu
ZXNzVGltZXIoKSB7IHJldHVybiBtX3Jlc3BvbnNpdmVuZXNzVGltZXI7IH0KICAgICB2b2lkIHVw
ZGF0ZUJhY2tncm91bmRSZXNwb25zaXZlbmVzc1RpbWVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424752</attachid>
            <date>2021-03-31 03:43:23 -0700</date>
            <delta_ts>2021-03-31 13:12:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210331034322.patch</filename>
            <type>text/plain</type>
            <size>222081</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi41NGY4MmQ1OGYxNWEwMmUw
OTIyYThkYjBkODJmM2IzNDIyZDMzYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi4yMDI5MzEzMTk2NGJmNzI0NDZiN2ExMDA3Mzgx
ZDhiZTEzY2FlOWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNSBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hh
c2hNYXAuaDoKKyAgICAgICAgKFdURjo6WT46OnN3YXApOgorICAgICAgICAoV1RGOjpZPjo6c2l6
ZSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpjYXBhY2l0eSBjb25zdCk6CisgICAgICAgIChX
VEY6Olk+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luKToKKyAgICAg
ICAgKFdURjo6WT46OmVuZCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbiBjb25zdCk6CisgICAg
ICAgIChXVEY6Olk+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZmluZCk6CisgICAg
ICAgIChXVEY6Olk+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmNvbnRhaW5zIGNv
bnN0KToKKyAgICAgICAgKFdURjo6WT46OmdldCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpp
bmxpbmVHZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmlubGluZVNl
dCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lQWRkKToKKyAgICAgICAg
KFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUpOgorICAgICAgICAoV1RGOjpUYWJs
ZVRyYWl0c0FyZz46OnNldCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6YWRkKToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKToKKyAgICAgICAgKFdURjo6
VGFibGVUcmFpdHNBcmc+OjplbnN1cmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3ZlKToKKyAg
ICAgICAgKFdURjo6WT46OnJlbW92ZUlmKToKKyAgICAgICAgKFdURjo6WT46OmNsZWFyKToKKyAg
ICAgICAgKFdURjo6WT46OnRha2UpOgorICAgICAgICAoV1RGOjpZPjo6Y2hlY2tDb25zaXN0ZW5j
eSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojppc1ZhbGlkS2V5KToKKyAgICAgICAgKFdURjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpY
Pjo6c3dhcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpzaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OmNhcGFjaXR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmlzRW1wdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVn
aW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmVuZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y29u
dGFpbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Z2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZVNldCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZUVuc3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0c0FyZz46OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBl
ZFRyYWl0c0FyZz46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0Fy
Zz46OmZhc3RBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpl
bnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHM+OjpnZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OnJlbW92ZUlmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNsZWFyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNoZWNr
Q29uc2lzdGVuY3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNWYWxpZEtl
eSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6Vz46
OnN3YXApOgorICAgICAgICAoV1RGOjpXPjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+
OjpjYXBhY2l0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojppc0VtcHR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olc+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpmaW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
VEY6OlRhYmxlVHJhaXRzPjo6ZW5zdXJlKToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6CisgICAg
ICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjphZGQp
OgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92ZUlm
KToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2UpOgor
ICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAgKFdU
Rjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAgICAo
V1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpzd2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpW
Pjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpj
b250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YWRkVm9pZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlQW55KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc1ZhbGlkVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjphZGRJ
dGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6fkhhc2hUYWJs
ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9u
KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
OjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9v
ZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hTZXQuaDogQWRk
ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdp
biBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFk
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tU
YWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJv
YmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkU2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmRlc2lyZWRJbmRleCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cHJv
YmVEaXN0YW5jZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlQ29uc3RJdGVyYXRv
ciBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29v
ZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25H
b29kQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJs
ZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6dGFibGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjp0YWJsZVNpemVNYXNrIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjprZXlDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpj
aGVja0tleSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpsb29rdXApOgorICAgICAgICAo
V1RGOjpTaXplUG9saWN5Pjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmluaXRpYWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkKToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZUZvckFkZCk6
CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6ZmluZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6U2l6
ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNr
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUpOgorICAg
ICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6YWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpk
ZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZXhwYW5kKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKToKKyAgICAgICAg
KFdURjo6U2l6ZVBvbGljeT46OnNocmlua1RvQmVzdFNpemUpOgorICAgICAgICAoV1RGOjpTaXpl
UG9saWN5Pjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNsZWFyKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3Rm
L3RleHQvQXRvbVN0cmluZ0hhc2guaDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcDoKKyAgICAgICAg
KFdURjo6QXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKToKKyAgICAgICAgKiB3dGYv
dGV4dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp0
YWJsZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaC5oOgorCiAyMDIxLTAzLTMwICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU2VydmljZSBXb3JrZXIg
c2NyaXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA2MWQ3ZGVkZWU2NmI0OTYwMGJmYmRkNzBhNTQyZGMwZWM5NDBkYWYwLi4xNTRmMTJh
N2JlNzM1MDhjZDdlZjdjNWJhZmNlY2E3N2FmNTdhZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
ODcgQEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFjYXBhYmls
aXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVja2V0TUlN
RVR5cGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cG9wdXBWYWx1ZSBjb25z
dCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQXR0
YWNoQXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAg
ICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50TmFtZXNIZWFkZXJGaWxl
KToKKyAgICAgICAgKHByaW50RmFjdG9yeUNwcEZpbGUpOgorICAgICAgICAocHJpbnRXcmFwcGVy
RmFjdG9yeUNwcEZpbGUpOgorICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAg
KiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNF
bGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1Byb2hpYml0ZWRQYXJh
Z3JhcGhDaGlsZCk6CisgICAgICAgICogaHRtbC9BdXRvZmlsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaWVsZE5hbWVNYXApOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKToK
KyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnByZXZlbnRzUGFyZW50T2JqZWN0RnJvbUV4cG9zdXJlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2FzZU1hcCk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTVkdUYWdOYW1lQ2FzZSk6CisgICAgICAgIChXZWJD
b3JlOjphZGp1c3RBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcmVpZ25B
dHRyaWJ1dGVzTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZvcmVpZ25BdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzV2l0aFByZWZpeCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2Vy
VGltaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmln
YXRpb25UaW1pbmdGdW5jdGlvbk1hcCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvTUlNRVR5
cGVSZWdpc3RyeUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5zaW9uc0Zvck1JTUVU
eXBlTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkSW5pdERhdGFUeXBlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1VUSVJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29kZWNUeXBlRm9y
RG9WaUNvZGVjU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcHBl
ckZpbHRlck1hc2tlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVGFncyk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxsQW5kU3Ryb2tlVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFp
bmFibGVSZXNvdXJjZVRhZ3MpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Omhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxh
eUNvbnRlbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50OjphbmltYXRhYmxlQXR0cmlidXRlRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZSk6CisgICAgICAgICog
c3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjphZGRTdXBwb3J0
ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHVGVzdHMuaDoKKyAgICAgICAgKiBzdmcv
U1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBbGxvd2VkRWxlbWVu
dFNldCk6CisgICAgICAgIChXZWJDb3JlOjppc0Rpc2FsbG93ZWRFbGVtZW50KToKKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NNSUxFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hQYXRo
RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbk1h
cCk6CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpjcmVhdGVBeGlzTmFtZXNNYXApOgorCiAyMDIxLTAzLTMwICBBbnRvaW5lIFF1aW50ICA8
Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIENvbXB1dGVkIHN0eWxlIGZvciBhIGJvcmRl
ci1yYWRpdXMgY29ybmVyIHNob3VsZCBuZXZlciBiZSAwcHggd2hlbiB0aGUgcHJvdmlkZWQgd2lk
dGggaXNuJ3QgMHB4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkY2Q1MGEyYzUwNDhjNGM5NDU2Zjg4YzMzMWY5NDc0
MWMwMzk3MjQuLjI0YzQ1OTQxZDgzOTZhYWYxMDNjYTdkOGY5Y2RmNjMyM2I3NmM5NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJu
YXRlKToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAg
ICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJL
aXQ6OmNyZWF0ZVRhYmxlUXVlcmllcyk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tz
Lm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRBcHBCb3VuZERvbWFpbnNUZXN0aW5nKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByZWZlcmVuY2VzU3RvcmU6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dp
dGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dp
dGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5oOgorCiAyMDIxLTAzLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdIEZhbGwgYmFjayB0byBjb250ZXh0IG1lbnUgcHJlc2VudGF0aW9u
IGFmdGVyIGxvbmcgcHJlc3NpbmcgaW1hZ2Ugb3ZlcmxheSB0ZXh0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDJhMDg4N2U3M2U1NzFm
MDA4ZTg4NGRiMzQzMDQ4NmQzNDIwMDcyMjAuLjdmOGFlNGYxNDBlZTc0M2QwZmU1ZjM5NTQzODdi
ZTNjZmQ2ZDVmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IENoYXJCdWZmZXJTZWFjaGVy
IHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgUHJpdmF0
ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmluZz4m
IHNldCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKK3N0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBs
KGNvbnN0IEJ1aWx0aW5OYW1lczo6UHJpdmF0ZU5hbWVTZXQmIHNldCwgY29uc3QgV1RGOjpIYXNo
VHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRv
IGl0ZXJhdG9yID0gc2V0LmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1
ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yID09IHNldC5lbmQoKSkKQEAgLTEyNiw3ICsxMjYsNyBA
QCBzdGF0aWMgUHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBI
YXNoU2V0PFN0cmluZz4mIHNldCwgY29ucwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPiYgbWFwLCBjb25zdCBXVEY6Okhhc2hUcmFu
c2xhdG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFN5bWJvbElt
cGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpXZWxsS25v
d25TeW1ib2xNYXAmIG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hh
cmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQ8Q2hh
ckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9y
ID09IG1hcC5lbmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaAppbmRleCAzMTk0NWJmM2UxNmNkMzA0ZThkODgyOWIxOTk3MWRhN2NjY2UzOWEyLi4w
MGQ5NmQzYzc0NDVlYWE2YjQ4M2Q0MDlhZDRmODc4NWRiMzdjNGQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xOTksNiArMjAxLDkgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdWlsdGluTmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICAKIHB1YmxpYzoKKyAgICB1c2luZyBQcml2YXRlTmFtZVNldCA9IE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+OworICAgIHVzaW5nIFdl
bGxLbm93blN5bWJvbE1hcCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKKwogICAgIEJ1aWx0aW5OYW1lcyhWTSYsIENvbW1vbklk
ZW50aWZpZXJzKik7CiAKICAgICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWUo
Y29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwpAQCAtMjMyLDggKzIzNyw2IEBAIGNsYXNzIEJ1aWx0
aW5OYW1lcyB7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1OYW1lOwogICAg
IGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX2RvbGxhclZNUHJpdmF0ZU5hbWU7CiAgICAgY29uc3Qg
SlNDOjpJZGVudGlmaWVyIG1fcG9seVByb3RvUHJpdmF0ZU5hbWU7Ci0gICAgdXNpbmcgUHJpdmF0
ZU5hbWVTZXQgPSBIYXNoU2V0PFN0cmluZz47Ci0gICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFw
ID0gSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKICAgICBQcml2YXRlTmFtZVNldCBtX3By
aXZhdGVOYW1lU2V0OwogICAgIFdlbGxLbm93blN5bWJvbE1hcCBtX3dlbGxLbm93blN5bWJvbHNN
YXA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKaW5kZXggNWNmNGZhNTVjM2VlZWRlZjRmOGVhOTNj
ZDYxZDQ2NjFlYjY3ZjgyYS4uNzg1N2RiYTAxMTU4YTc2ZjdlMDE2YTIzNzkzNTA1ZDZkYTViMzBj
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50
cmluc2ljUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIxMiw3ICsyMTMs
NyBAQCBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5IHsKIAogcHJpdmF0ZToKICAgICBW
TSYgbV92bTsKLSAgICBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJ
ZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRlY29kZUludHJpbnNpY01hcDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwg
RW50cnksIElkZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmluc2ljTWFwOwogCiAjZGVm
aW5lIEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKG5h
bWUpIFN0cm9uZzxVbmtub3duPiBtXyMjbmFtZTsKICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lO
VFJJTlNJQ19DT05TVEFOVFNfU0lNUExFX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRFQ09ERV9J
TlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTA5
NWE4NDRmNjZlNjQ0ZmE0NGFmNzE2ZWNiNDU0MzQ1ZTM5NjJlMS4uMTBmNDU1M2M1YzI5ZWI5N2Ji
MDI0YmVjMWU1MTg3MjQwNmU1OGI5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4
LDcgQEAKICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRp
cmVjdC5oPgpAQCAtMTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJp
bnRJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAog
CiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisg
ICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7Cisg
ICAgICAgIEZhc3RSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5n
VGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9n
TG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDFlNjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIo
aSkpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChpICYgMHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6
Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1Rh
YmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5n
VGFibGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkp
KSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFi
bGUuc2l6ZSgpKTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4o
c3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVy
bmFsKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdGRvdXQpOwogfQogCiBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZEVyciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0
b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFl
NjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkp
OworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0
cmluZ1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0
YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisgICAgICAgICAgICAg
ICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIo
aSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RyaW5nVGFi
bGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdU
YWJsZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0KKyAgICBzdG9w
V2F0Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOwor
I2VuZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IHN0ZGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIu
aAppbmRleCA0NGQxY2ZkYmQ0OTQ5MTZlZGJmZmQ0ZjMxNGY3Y2Q1ZmJmYjZmMTUzLi5hZTZkYmIw
ZjhmNTkyMzUwYTRjZjJlNDEwZGYwYmQyZGFiYzc4YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCkBAIC0yOTQsNiArMjk0LDcgQEAgSlNWYWx1ZSBpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKIHN0cnVj
dCBJZGVudGlmaWVyUmVwSGFzaCA6IFB0ckhhc2g8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4g
ewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1w
bD4mIGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4ga2V5
LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5kZXhI
YXNoVHJhaXRzIDogSGFzaFRyYWl0czxpbnQ+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCmluZGV4IDQ2NTUyNDhmMjgwNDkxMGU0YjRkY2MyMGU1
YmJlOTE0ZTU4OWYxZWEuLmM4MmZhNjBlYjBjMjY3ZGFlNzAxODNjY2NhZWM4ZTk5YmY5NTRhNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcApA
QCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgaWYgKCFjYXNl
Rmlyc3RPcHRpb24uaXNOdWxsKCkpCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLZildID0gY2FzZUZpcnN0T3B0aW9uOwog
Ci0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2Fs
ZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZh
aWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2Jh
bE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hl
ciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q28sIFJlbGV2YW50RXh0
ZW5zaW9uS2V5OjpLZiwgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktuIH0sIGxvY2FsZURhdGEpOwog
CiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CkBAIC00NDQsNyArNDQ0LDcgQEAgYm9v
bCBJbnRsQ29sbGF0b3I6OnVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25z
dAogfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLXZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lDVUxv
Y2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBsb2NhbGVzKQordm9pZCBJbnRs
Q29sbGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmIGxvY2Fs
ZXMpCiB7CiAgICAgZm9yIChhdXRvJiBsb2NhbGUgOiBsb2NhbGVzKSB7CiAgICAgICAgIGF1dG8g
Y2hlY2tBU0NJSU9yZGVyaW5nV2l0aERVQ0VUID0gW10oY29uc3QgU3RyaW5nJiBsb2NhbGUsIFVD
b2xsYXRvciYgY29sbGF0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmgKaW5kZXggMjRkNjE2MTY0OWFkOWZlN2Q0ZjcwYWU2YzI5YzgyYTdlMmY5NmYy
My4uNWU1MmExYzkyNWMyZWQ0MDNjMTM3NTNjNWMxNzJjOWZjZDNlZjA5NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkludGxP
YmplY3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9pY3UvSUNVSGVscGVycy5oPgogCkBAIC03Myw5ICs3Myw5IEBAIGNsYXNzIEludGxDb2xsYXRv
ciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB9CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIHN0YXRpYyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBI
YXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFu
dHMoY29uc3QgTG9jYWxlU2V0Jik7CiAjZWxzZQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVj
a0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JikgeyB9CisgICAgc3Rh
dGljIGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQm
KSB7IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKaW5kZXggZjUyZWJiMjIyYjM0YmQ2YzBk
NDM4MjliNTNiOTc1N2I5YTFmYzNiOS4uZjg5ODA2YzU2YjI2MDUyMmZjN2M3Yjk4YWY4NTJjZjcz
M2Y4OTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6SGMpXSA9IFN0cmluZygpOwogICAgIH0KIAotICAgIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZl
TG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
bG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q2Es
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYywgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxv
Y2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWJiYTFiMDVjMmUzMmFjMGQxOGRkMTQzNmMzNDg4NjQw
ZjcwYTRhOS4uYzA5MDliODkxZTk0MzBjMGRhNDM4YTEwNDgzYjBmMzJhMGYxMjk0NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YsIChKCiAgICAgLy8gMTIuMi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAx
LiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9j
YWxlc11dLgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFp
bGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAg
ICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcApp
bmRleCAyMmExMTVkMTM5ZjZjNWIyNDVlZGViYTgwOWUyOGU5ODY3NjgwYjgzLi4wZGU1NzQyOTM0
NWFkODFkYWU0MTYwZWFkZGI1MDk3YzY0MjBjMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcApAQCAtODMsNyArODMsNyBAQCB2
b2lkIEludGxEaXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAg
ICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2Fs
ZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1l
c0F2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShn
bG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1h
dGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9
IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwCmluZGV4IGQxZjA2NmYw
YTA5MzM3NjkxMWRiMTBiODhmYWE5ZjQ1ZjM1YjU2OGMuLjE3ZTA3OWZlNzdkYTBhMDdjNDM3ZTBl
ZTdhNmQ5ODNmYmVjYzM3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcg
KzExMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsRGlzcGxheU5hbWVzQ29uc3Ry
dWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLWludGwtZGlzcGxheW5hbWVzLyNzZWMtSW50bC5EaXNwbGF5TmFtZXMuc3VwcG9y
dGVkTG9jYWxlc09mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGlzcGxh
eU5hbWVzJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOwor
ICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxh
YmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXQuY3BwCmluZGV4IDgxN2I5Y2FlNTkzNGFmNzY1NTQ2MzJkZTk5NTc2ODVlMDkwYTMw
OTIuLjg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1YmVlZmFmOWI1ZDM2ZjQxODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAgLTEwMyw3
ICsxMDMsNyBAQCB2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExp
c3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVM
b2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBs
b2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9s
b2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDQ3ZTVl
ZTIzZGJmMWUwYjAzOWMzY2FmMDc4MGYxYjY0M2Q1YzEyYzkuLjAwOGU5M2Q4Y2JhY2IyNjdlMGRm
MGU2Nzk4YmRhNzIyMjE1YTNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMTIsNyAr
MTEyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0
b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE8KICAgICAvLyBodHRwczovL3RjMzkuZXMv
cHJvcG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVMaXN0Rm9ybWF0
JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25z
dCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2Nh
bGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBj
YW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXQuY3BwCmluZGV4IDAwN2M5ZDMwMjcxNWE1ODMyODU3NjBkY2M3MGIyZDRlZjlmMDU4Y2IuLmYw
MzUwYzg0MzhkNzdlYmU3YTVmOTI3NDkwN2UzY2I0MmEzN2U1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCkBAIC0yOTIsNyAr
MjkyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgbG9jYWxlT3B0aW9uc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1iZXJp
bmdTeXN0ZW07CiAgICAgfQogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1i
ZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9j
YWxlcyA9IGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNv
bHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0
ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWM1YjI5M2FmY2RhZTJlYjYy
ZWJiYzI2NDQzNzlhZjU5MzIxMTBmMC4uZjIxYTY5MjZmMzFlZDdhYWYyNWU4ZmQ0OWQ5OTdjMWQ1
OTFmMTM4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNT
dXBwb3J0ZWRMb2NhbGVzT2YsIChKU0cKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAK
ICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWls
YWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwog
CiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlz
dChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25p
Y2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCA0MGY4
OWU4ZmU3NGU4ZGJjZjBlNTgzNTBhYmVjMWY3YTg1ZDhiZGU0Li45ZDUzNmQ3NGMwMTlkMThkYTc1
ODM3ZDU5YWI3Mzg3OTZlZWQ2MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIFN0cmluZyBsYW5ndWFnZVRhZ0Zv
ckxvY2FsZUlEKGNvbnN0IGNoYXIqIGxvY2FsZUlELCBib29sIGlzSW1tb3J0YWwpCiB9CiAKIC8v
IEVuc3VyZSB3ZSBoYXZlIHh4LVpaIHdoZW5ldmVyIHdlIGhhdmUgeHgtWXl5eS1aWi4KLXN0YXRp
YyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQorc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVz
c0xvY2FsZUlmTmVlZGVkKExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nVmlldyBs
b2NhbGUpCiB7CiAgICAgaWYgKGxvY2FsZS5sZW5ndGgoKSA8IDEwKQogICAgICAgICByZXR1cm47
CkBAIC0zNzcsOSArMzc3LDkgQEAgc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVl
ZGVkKEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW4KICAgICBhdmFpbGFi
bGVMb2NhbGVzLmFkZChTdHJpbmdJbXBsOjpjcmVhdGVTdGF0aWNTdHJpbmdJbXBsKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKIH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRs
QXZhaWxhYmxlTG9jYWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVz
KCkKIHsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZh
aWxhYmxlTG9jYWxlczsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4g
YXZhaWxhYmxlTG9jYWxlczsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9u
Y2U7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2
YWlsYWJsZUxvY2FsZXMuY29uc3RydWN0KCk7CkBAIC00NTUsOSArNDU1LDkgQEAgY29uc3QgdWlu
dDhfdCBkdWNldFdlaWdodHNbMTI4XSA9IHsKICAgICA5NSwgOTcsIDk5LCAyMSwgMzYsIDIyLCAz
NywgMCwKIH07CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxl
TG9jYWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMo
KQogewotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFp
bGFibGVMb2NhbGVzOworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2V0PiBh
dmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25j
ZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZdIHsKICAgICAgICAgYXZh
aWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKQEAgLTQ3NiwyMiArNDc2LDIxIEBAIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCiAgICAgcmV0dXJu
IGF2YWlsYWJsZUxvY2FsZXM7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21l
bnRlckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZh
aWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3Ry
aW5nPj4gY2FjaGVkQXZhaWxhYmxlTG9jYWxlczsKLSAgICBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBjYWNoZWRBdmFpbGFibGVMb2NhbGVzLmdldCgpOwotCisgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGlu
aXRpYWxpemVPbmNlLCBbJl0gewotICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy5pc0Vt
cHR5KCkpOworICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOworICAgICAgICBB
U1NFUlQoYXZhaWxhYmxlTG9jYWxlcy0+aXNFbXB0eSgpKTsKICAgICAgICAgY29uc3RleHByIGJv
b2wgaXNJbW1vcnRhbCA9IHRydWU7CiAgICAgICAgIGludDMyX3QgY291bnQgPSB1YnJrX2NvdW50
QXZhaWxhYmxlKCk7CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgICAgIFN0cmluZyBsb2NhbGUgPSBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKHVi
cmtfZ2V0QXZhaWxhYmxlKGkpLCBpc0ltbW9ydGFsKTsKICAgICAgICAgICAgIGlmIChsb2NhbGUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXZhaWxh
YmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKLSAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJ
Zk5lZWRlZChhdmFpbGFibGVMb2NhbGVzLCBsb2NhbGUpOworICAgICAgICAgICAgYXZhaWxhYmxl
TG9jYWxlcy0+YWRkKGxvY2FsZSk7CisgICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZO
ZWVkZWQoYXZhaWxhYmxlTG9jYWxlcy5nZXQoKSwgbG9jYWxlKTsKICAgICAgICAgfQogICAgIH0p
OwogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzOwpAQCAtNjk4LDcgKzY5Nyw3IEBAIFZlY3Rv
cjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgcmV0dXJuIHNlZW47CiB9CiAKLVN0cmluZyBiZXN0QXZh
aWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgU3RyaW5nJiBsb2NhbGUpCitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2Nh
bGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxlKQogewogICAgIHJl
dHVybiBiZXN0QXZhaWxhYmxlTG9jYWxlKGxvY2FsZSwgWyZdKGNvbnN0IFN0cmluZyYgY2FuZGlk
YXRlKSB7CiAgICAgICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzLmNvbnRhaW5zKGNhbmRpZGF0
ZSk7CkBAIC03NjMsNyArNzYyLDcgQEAgU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
IH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNoZXJSZXN1
bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2Nh
bGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRM
b2NhbGVzKQogewogICAgIC8vIExvb2t1cE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMt
bG9va3VwbWF0Y2hlcgpAQCAtODA0LDcgKzgwMyw3IEBAIHN0YXRpYyBNYXRjaGVyUmVzdWx0IGxv
b2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxT
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVzdEZpdE1h
dGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxl
cykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1hdGNoZXIg
KGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdG1hdGNoZXIKQEAgLTgyNSw3ICs4MjQsNyBA
QCBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5nKFJlbGV2
YW50RXh0ZW5zaW9uS2V5IGtleSkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7CiB9
CiAKLVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVy
LCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxT
dHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkp
KQorUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0
IFJlc29sdmVMb2NhbGVPcHRpb25zJiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVs
ZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4g
KCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpCiB7CiAg
ICAgLy8gUmVzb2x2ZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
b3B0aW9ucywgcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBsb2NhbGVEYXRhKQogICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXJlc29sdmVsb2NhbGUKQEAgLTg5MCw3ICs4
ODksNyBAQCBSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPgogICAgIHJldHVybiByZXNvbHZlZDsKIH0K
IAotc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBs
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCiB7CiAgICAgLy8gTG9va3VwU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWE0MDIvI3NlYy1sb29rdXBzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MTksNyArOTE4LDcgQEAg
c3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSGFzaFMKICAgICByZXR1cm4gc3Vic2V0OwogfQogCi1zdGF0aWMg
SlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVT
ZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzKQogewogICAgIC8vIEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLWJlc3RmaXRzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MjgsNyArOTI3LDcgQEAgc3RhdGlj
IEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IEhhc2gKICAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhnbG9i
YWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogfQogCi1KU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitKU1ZhbHVlIHN1cHBvcnRl
ZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
SlNWYWx1ZSBvcHRpb25zVmFsdWUpCiB7CiAgICAgLy8gU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKICAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1zdXBwb3J0ZWRsb2NhbGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKaW5kZXggZmEyZTgyODA3OGI3ZTg1MWE3NzFk
YzBhMDgwZmI2YTY4NWExMmFlZC4uNjE0MGMyMGQ2ZmQzZThlOGI1Mjg5NzVkNjM4NDhmZjE4M2Zj
YWI3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIHN0cnVj
dCBVRmllbGRQb3NpdGlvbkl0ZXJhdG9yOwogCkBAIC04MSwxNSArODIsMTYgQEAgY2xhc3MgSW50
bE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIH07CiAKIFN0cmluZyBk
ZWZhdWx0TG9jYWxlKEpTR2xvYmFsT2JqZWN0Kik7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRv
ckF2YWlsYWJsZUxvY2FsZXMoKTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRl
ckF2YWlsYWJsZUxvY2FsZXMoKTsKLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxE
YXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGlzcGxheU5hbWVz
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlu
bGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJu
IGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2
YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bExp
c3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMo
KTsgfQordXNpbmcgTG9jYWxlU2V0ID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PFN0cmluZz47Citjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
Citjb25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0
IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKK2lubGluZSBjb25z
dCBMb2NhbGVTZXQmIGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVy
biBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
RGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2Nh
bGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxOdW1iZXJGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNv
bnN0IExvY2FsZVNldCYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJu
IGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJs
ZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bExpc3RGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogCiBUcmlT
dGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2JqZWN0
Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xv
YmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBub3RG
b3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpAQCAtMTA3LDEwICsxMDksMTAgQEAgc3RydWN0
IFJlc29sdmVkTG9jYWxlIHsKICAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5zaW9uczsKIH07
CiAKLVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBy
ZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9u
cyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRF
eHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYs
IFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOworUmVz
b2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IExvY2FsZVNl
dCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2Fs
ZXMsIExvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3RkOjppbml0
aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMs
IFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRl
bnNpb25LZXkpKTsKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCosIGNv
bnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJl
cXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CiBTdHJpbmcgcmVtb3ZlVW5pY29kZUxv
Y2FsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxvY2FsZSk7Ci1TdHJpbmcgYmVzdEF2YWlsYWJs
ZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0
cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKK1N0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0
IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRMb2Nh
bGUpOwogdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPiBTdHJpbmcgYmVzdEF2YWlsYWJsZUxv
Y2FsZShjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSwgUHJlZGljYXRlKTsKIFZlY3RvcjxT
dHJpbmc+IG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNw
cAppbmRleCBlNjVmYjBkNzMyNzE1MjliNWNhYTlkOWZhYmVjOWJlYmNiNGM1NmEyLi5jY2NmNDk3
MTU4MThkZmQzMDI2OGEzMTdhZGFkYjhlOGRjYmFmNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHUKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIg
PSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJv
cGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6
Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJs
b2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9z
LCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAg
YXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0s
IGxvY2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmICht
X2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcAppbmRleCBmODg1MGIx
MGE4YmZlNjU3MDQzZDJhMWVhZDA3MTEwNDFiOTIwNTkxLi4yN2IyMzEwYjM0OGExZTRhNDVkZjBl
ZjkxMTUzYTllNDVlOGZmNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCkBAIC0xMTUsNyAr
MTE1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxQbHVyYWxSdWxlc0NvbnN0cnVj
dG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2wKIAogICAgIC8vIDEzLjMuMiBJbnRsLlBs
dXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiAobG9jYWxlcyBbLCBvcHRpb25zIF0pCiAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW50bC5wbHVyYWxydWxlcy5z
dXBwb3J0ZWRsb2NhbGVzb2YKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0
byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2Nh
bGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCmlu
ZGV4IGY3ZDM4YjgxZWFjODI4NjNmNWFkOGJjYzgzMjQ2NTI2OTI4MTc3NmUuLjJiNWQyOGVmZDhj
ZThmMjdkNjU3NTg1MDJhMzEwOTgwNWI3MDczZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCkBAIC0xMDYs
NyArMTA2LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVsYXRp
dmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgbG9jYWxlT3B0aW9u
c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1i
ZXJpbmdTeXN0ZW07CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAg
ICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2
YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9i
YWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNo
ZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2FsZURh
dGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5p
c0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDE3
NGI2ZmRjZTJjODZiZmMxMWI1ZWIxZWY1MzcyMDk4ZWE4OTg0OTQuLjlhOGM4ZDRjYTZjNmM0ZWQz
NWZmNzBlOTdlN2QzZWNjNGY1OWFlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRs
UmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRp
dmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAg
ICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCAwNGNmMTdkNTA5MzU2MjFjNDI0OGU4NDhiNzc1
MGVkYTM3ZWE4MWU4Li4yYWQ3NGY5NGJiZThjYTE3Yzc3NTg5MmFmYmM2ZmVmNzEyYTYyYjU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcApA
QCAtNzksNyArNzksNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNlZ21lbnRl
ckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVz
b2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2Fs
ZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwCmluZGV4IGZm
ZDczZjczNmE5NzQzMzc4ZGZkYjFhMzFkNGJmOTlmOThkZWFlNTIuLjA5Mzk0ZGMxOGVkZGYyYTkz
MTk1MWU3YzZmYWE5NzIyOGZiZjYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcApAQCAtMTExLDcg
KzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsU2VnbWVudGVyQ29uc3RydWN0
b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE9iCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLWludGwtc2VnbWVudGVyLyNzZWMtaW50bC5zZWdtZW50ZXIuc3VwcG9ydGVkbG9j
YWxlc29mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlU2VnbWVudGVyJS5b
W2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOwog
CiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlz
dChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25p
Y2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXggODI3Mzdk
OGY5YzY4ZGUxOGU4N2Y1ZTU3Y2VhMGE2MDIxMGU4ODg4Ni4uM2E3MTFmYjkwOWI2OTBlMGYxOWZl
YTUxNzRjNjgwNThjYmU0YzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5j
bHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgUmVnRXhwQ2FjaGUgZmluYWwgOiBwcml2YXRlIFdlYWtI
YW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBmcmllbmQg
Y2xhc3MgUmVnRXhwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhw
Pj4gUmVnRXhwQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFz
aE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPj4gUmVnRXhwQ2FjaGVNYXA7CiAKIHB1YmxpYzoK
ICAgICBSZWdFeHBDYWNoZShWTSogdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBLZXkuaAppbmRleCBlMGY4ODMxMDIwZDZkOTM1YzcwMTkwMWZiNDliMjhjYjZkYzkzOGZj
Li5kMTY2Mjc5ZjZkYjJlY2VlYjJlM2U3MGIwN2Q5NjNiZWU0YWJlMjZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaApAQCAtNzEsNiArNzEsNyBAQCBzdHJ1Y3Qg
UmVnRXhwS2V5IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnRXhwS2V5
JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgUmVnRXhwS2V5JiBhLCBjb25zdCBSZWdFeHBLZXkmIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4
MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTcsNyArNzE3LDkgQEAK
IAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFCREUyODIyRTkxM0NDMDAyOUIx
MDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hW
TVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1ODU4MDAz
NkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhh
c2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZE
MDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAw
N0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0I4RTQx
QzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUwMDlERjJC
NCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElDVUhlbHBlcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyog
Um9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBD
b21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4
MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjExLDYgKzEyMTQs
OSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLywKIAkJCQlG
RTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2FnZS5oICovLAogCQkJCUE4QTQ3
MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywKKwkJCQlFM0M1ODNDODI2MTI3
QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1
QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1
ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVD
ODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJB
NzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1
cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMw
MGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUxZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYz
YmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDkgQEAg
c2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5o
CiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RI
YXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNI
QTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1
YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1
MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0
cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwog
CitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUg
VmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxl
OwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERl
ZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFt
ZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUg
PSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFy
Zz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxl
VHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIy
ZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi44OTAxYjVmM2YyNzliOGJlMDM2NTBjN2MyYWRl
YjYxYjBhZWZhOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIv
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSw3ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewogICAgIHN0YXRpYyBjb25z
dCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5
OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNTcsNyArNTcsNyBA
QCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKIAogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNo
QXJnOwogCi0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlW
YWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4s
IEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxl
VHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8
S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5
VHJhaXRzPjsKIAogICAgIGNsYXNzIEhhc2hNYXBLZXlzUHJveHk7CiAgICAgY2xhc3MgSGFzaE1h
cFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkxICsyMzIsODkgQEAgc3RydWN0IEhhc2hNYXBUcmFuc2xh
dG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c3dhcChIYXNo
TWFwJiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUo
KTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1
bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAog
ICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc0Vt
cHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkgLT4gaXRl
cmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5i
ZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSAtPiBpdGVyYXRvcgogewogICAg
IHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwu
YmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBL
ZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkp
IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1l
IFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBs
LmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250
YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250
YWlucyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5
cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0
IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4o
bV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVl
UGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAg
LTMyNCw5ICszMjIsOSBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBU
WVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKICAgICByZXR1cm4gTWFwcGVkVHJh
aXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZ
UEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2
YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlw
ZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBs
KS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVl
UGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAg
LTMzNCwxNiArMzMyLDE2IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0
KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUWVBFPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMo
Y29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1
ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4g
QWRkUmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6OmZvcndh
cmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkgewpAQCAtMzUzLDkxICszNTEsOTEgQEAgYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVMK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46
OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElO
RSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYg
dmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhh
c2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6
Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5
cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5
cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBU
YWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNf
SU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3Ip
IC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0Fy
Zz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5
VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0
ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBr
ZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gaW5saW5lU2V0KGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5KSwgc3Rk
Ojpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2Rl
PEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xh
dG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQK
K2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwg
VCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0
ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQm
JiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+Ojph
ZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0
eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5M
SU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBl
ZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRz
QXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3Vs
dAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxX
QVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFw
cGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFp
dHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAog
ewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0
b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJn
Pjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJl
c3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rv
cj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVu
Y3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3Vs
dAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSks
IHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46
OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBy
ZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBl
ZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBl
ZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+OjppbmxpbmVHZXQoY29u
c3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIEtleVZhbHVl
UGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1w
bGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKICAgICBpZiAo
IWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBAIEFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrCiAgICAg
cmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1f
aW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAg
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQogewogICAg
IHJldHVybiBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJl
bW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtl
eSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIo
KQogewogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1h
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBl
JiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1l
IFk+CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6dGFrZShjb25z
dCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBm
aW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYg
a2V5KSAtPiBNYXBwZWRUYWtlVHkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6
dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1
ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBm
aW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxh
dGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRh
aW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnModHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBw
ZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hN
YXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAg
ICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwyMyArNTE0LDIzIEBAIGlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5
cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4K
LWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxL
Pjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBw
ZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4K
LWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWCwgWT46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46
OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6
dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFr
ZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0
ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAsMTQgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KQog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Omlz
VmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lu
bGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzVmFsaWRLZXkoY29uc3QgS2V5
VHlwZSYga2V5KQogewogICAgIGlmIChLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2NSwxMyArNTYzLDEzIEBAIGlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogICAg
IHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhh
c2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIp
CiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBjb25z
dF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0g
Yi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYgogICAg
IHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4
IDY4YTE1ZGMwMzc1YTE3MTljN2FiMzI0NjJjN2FkZjc5ZWQ2MGI0ZWYuLmE0MDJjZTI3Mzc1YWNl
YjBjZWIwNGY5ZWI1YTFlNDFhZDJjNjlmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAK
IAogbmFtZXNwYWNlIFdURiB7CiAKLXN0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0Fy
Zz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFt
ZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5h
bCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNDEsNyArMzks
NyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFt
ZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBwcml2YXRlOgotICAgIHVzaW5nIEhhc2hUYWJs
ZVR5cGUgPSBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+OworICAgIHVzaW5nIEhh
c2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBl
PFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKIAogcHVibGljOgogICAgIC8vIEhhc2hTZXQgaXRl
cmF0b3JzIGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CkBAIC0xODYsMTA5ICsxODQsMTA5
IEBAIHN0cnVjdCBIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3IgewogICAgIH0KIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhh
c2hTZXQ8VCwgVSwgViwgVz46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3
YXAob3RoZXIubV9pbXBsKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+
OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46
OmNhcGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0Vt
cHR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRv
cgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRl
cmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFYsIFc+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5k
KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZp
bmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1
cm4gbV9pbXBsLmZpbmQodmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWLCBXPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLmNvbnRhaW5zKHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5k
KGNvbnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wg
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYg
dmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0
ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBBZGRSZXN1bHQKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgVGFibGVUcmFpdHM+OjplbnN1cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hTZXRFbnN1
cmVUcmFuc2xhdG9yQWRhcHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0
PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
IC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBB
ZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKQogewogICAgIG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6
YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYs
IFc+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQoV1RGTW92
ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2
YWx1ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNo
U2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFk
ZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5k
KQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0
ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI5Niw5ICsyOTQsOSBAQCBpbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRv
clR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlw
ZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVn
aW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpy
ZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wg
Y2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKQEAgLTMwNiw4ICszMDQsOCBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQog
ICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShpdGVyYXRv
ciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzE2LDI3ICszMTQsMjcgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmVJZihjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUg
dm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWLCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOyAKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKIHsKICAgICBp
ZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBWYWx1ZVRyYWl0czo6dGFrZShWYWx1ZVRy
YWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTM0Niw0OCArMzQ0LDQ4IEBAIGlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtl
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2Uo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VU
eXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZUFueSgpIC0+IFRha2VU
eXBlCiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0
byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8g
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQo
dHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7
CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0
cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0
ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnModHlw
ZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2
YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFs
dWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtl
VHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlw
ZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IFRha2VUeXBlPjo6dHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFs
dWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDMsOSArNDAxLDkgQEAgaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24m
IG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46
Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0
CiB7CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC00MTYsMjIgKzQxNCwyMiBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9u
JiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25z
dAogewogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci12b2lkIEhhc2hTZXQ8VCwg
VSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxj
b25zdCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlw
ZT4+IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGxpc3QpCiAgICAgICAgIGFkZCh2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29u
c3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
CmluZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEwYzBhNjI5NTg3YzVlZGYwYTguLmQzOTk3OWE0
MWVhYzhkZWFhMzdlNDU3OThjMjRlMmJjMDc4ZTRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC03OSw0
NiArNzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJ
dGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBj
bGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0
ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0
b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxl
VHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2
b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwg
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZh
bGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKTsKIAogI2lmICFDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9y
KGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0
ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hU
YWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJh
dG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0eXBlZGVmIGVudW0geyBIYXNoSXRlbUtub3du
R29vZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1Ymxp
YyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0
cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4g
SGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRv
cjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9y
OworICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNv
bnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1
ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0g
ICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhh
c2hUYWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBpdGVyYXRvcjsKIAogICAgICAgICB2b2lkIHNr
aXBFbXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBAIC0yNDMsMTggKzI0NSwxOCBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAgICAg
fTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNz
IEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0
ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBWYWx1ZSosIFZhbHVlJj4gewogICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4g
Y29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7
CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBl
LCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAg
ICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIFZh
bHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsK
KyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CiAKICAgICAgICAgSGFzaFRhYmxlSXRlcmF0
b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5k
KSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kKSB7IH0KICAgICAgICAgSGFzaFRhYmxlSXRl
cmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUg
ZW5kLCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBl
bmQsIHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJs
ZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJh
dG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0
b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVy
YXRvcjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVk
ZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwpAQCAtNDA3
LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwogICAgICAgICB+SGFzaFRhYmxlKCkgCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsgCisgICAgICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAgICAgICAgICAgIGlmIChtX3RhYmxlKQogICAg
ICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFC
TEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC01NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYg
Q0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7
IH0KLSNlbmRpZgotCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3
NSUuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJh
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFz
aFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7CkBAIC04NTYsNyArODUz
LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
IAogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAK
ICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIApAQCAtOTMyLDcgKzky
OSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIp
OwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9y
PihrZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAg
ICBleHBhbmQoKTsKQEAgLTExMTAsMTQgKzExMDcsMTQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1
ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShW
YWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQpAQCAtMTM3Myw3
ICsxMzcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpjbGVhcigpCiAgICAgewotICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAt
MTQwOSw4ICsxNDA2LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJs
ZSYgb3RoZXIpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAg
IG90aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAg
IHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKIApAQCAtMTQzNCw3ICsxNDMxLDcg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKLSAgICAg
ICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKCZvdGhlcik7CiAKICAgICAgICAgbV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90
YWJsZSwgbnVsbHB0cik7CiAKQEAgLTE1MDAsMzAgKzE0OTcsMjkgQEAgREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2lmIENIRUNLX0hBU0hUQUJM
RV9JVEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJ
dGVyYXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9p
ZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlKQogICAgIHsK
LSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9tdXRleCk7Ci0gICAgICAgIGNvbnN0
X2l0ZXJhdG9yKiBuZXh0OwotICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVy
YXRvcnM7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRh
YmxlLT5tX211dGV4KTsKKyAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRl
cmF0b3IqIG5leHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3Rf
aXRlcmF0b3IqIHAgPSB0YWJsZS0+bV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CiAgICAgICAg
ICAgICBuZXh0ID0gcC0+bV9uZXh0OwotICAgICAgICAgICAgcC0+bV90YWJsZSA9IDA7Ci0gICAg
ICAgICAgICBwLT5tX25leHQgPSAwOwotICAgICAgICAgICAgcC0+bV9wcmV2aW91cyA9IDA7Cisg
ICAgICAgICAgICBwLT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fbmV4dCA9
IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAg
fQotICAgICAgICBtX2l0ZXJhdG9ycyA9IDA7CisgICAgICAgIHRhYmxlLT5tX2l0ZXJhdG9ycyA9
IG51bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiogdGFibGUsCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihj
b25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFi
bGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAg
ICBpdC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsK
IAogICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3IgYXQgaGVhZCBvZiBkb3VibHktbGlua2VkIGxp
c3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgICAgICBpdC0+
bV9uZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0
ZXgpOwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CkBAIC0x
NTM2LDggKzE1MzIsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92
ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVy
YXRvciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICgh
aXQtPm1fdGFibGUpIHsKQEAgLTE1NTksMTMgKzE1NTUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIGl0LT5tX3RhYmxlID0gMDsKLSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0g
ICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAgaXQtPm1fdGFibGUgPSBudWxscHRy
OworICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSBudWxscHRyOwogICAgIH0KIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMK
IAorICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1
c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFk
YXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBW
YWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBz
dGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpw
dHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1Jv
YmluSG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTU0OWUzNmJlYWRmMDE2N2VhY2VkY2YzNWZi
MDc3NzViYTRmMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29k
SGFzaE1hcC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtl
eUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5
Q29tcGFjdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdFJvYmluSG9v
ZEhhc2hUYWJsZVRyYWl0cz47CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1h
cCA9IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnLCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwOwordXNpbmcgV1RGOjpNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDsKK3VzaW5n
IFdURjo6RmFzdFJvYmluSG9vZEhhc2hNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9S
b2Jpbkhvb2RIYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmIyMGE5NTk5NmM3ODVmNGYzNWYyMjQ5YzE2ZGNmZDY4MDg1ZTAxMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERl
ZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQgPSBI
YXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmlu
SG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9y
eUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5h
bWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29k
SGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmlu
SG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDsKK3VzaW5nIFdURjo6TWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNo
U2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmggYi9T
b3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjExMjg1OWI1
NDIzZjcwNGNhNGU2YzE2YmI1YTc2NTEyZTQ2NDVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKQEAgLTAsMCArMSw3OTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlOworCitzdHJ1Y3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA5NSUg
bG9hZCBmYWN0b3IuIFRoaXMgYSBiaXQgcmVncmVzcyAiaW5zZXJ0aW9uIiBwZXJmb3JtYW5jZSwg
d2hpbGUgaXQga2VlcHMgbG9va3VwIHBlcmZvcm1hbmNlIHNhbmUuCisgICAgLy8gUm9iaW5Ib29k
SGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRh
aW5lZCBwcm9iZSBkaXN0YW5jZS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExv
YWROdW1lcmF0b3IgPSAxOTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRE
ZW5vbWluYXRvciA9IDIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9
IDY7Cit9OworCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xp
Y3kgeworICAgIC8vIDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggc3VjaCBhIGhpZ2ggbG9hZC1mYWN0b3IuCisgICAgLy8gT2JzZXJ2ZWQgcGVyZm9ybWFu
Y2UgaXMgc2xpZ2h0bHkgd29yc2UgdGhhbiBIYXNoVGFibGUgKDc1JSBmb3Igc21hbGwgdGFibGUs
IDUwJSBmb3IgbGFyZ2UgdGFibGUpLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZE51bWVyYXRvciA9IDk7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2Fk
RGVub21pbmF0b3IgPSAxMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQg
PSA2OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAg
ICAvLyA3NSUgbG9hZCBmYWN0b3IsIHRoaXMgbWFpbnRhaW5zIHRoZSBwZXJmb3JtYW5jZSBzYW1l
IHRvIEhhc2hUYWJsZSwgc3RpbGwgdGhlIGxvYWQgZmFjdG9yCisgICAgLy8gaXMgaGlnaGVyIChI
YXNoVGFibGUgdXNlcyA3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCisvLyBSb2Jpbkhvb2Qg
SGFzaFRhYmxlIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIHVzdWFsIEhhc2hU
YWJsZSwgdGhhdCdzIHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1bHQgb25lLgorLy8gUm9iaW5Ib29k
IEhhc2hUYWJsZSBjb21wdXRlcyBoYXNoIG11Y2ggbW9yZSBmcmVxdWVudGx5LiBUaGlzIG1lYW5z
IHRoYXQgdGhlIEtleSBzaG91bGQgY2FjaGUgY29tcHV0ZWQgaGFzaC4KKy8vIEJ1dCBvdXIgZGVm
YXVsdCBIYXNoVGFibGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2YWx1ZSBiZWNhdXNlIG9mIG1lbW9y
eSB1c2FnZS4gVGhpcyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkgdHlwZQorLy8gc2hvdWxkIGhhdmUg
aGFzaCB2YWx1ZSBpbnRydXNpdmVseSAoZS5nLiBXVEY6OlN0cmluZyBob2xkcyBoYXNoIHZhbHVl
IGludGVybmFsbHkpLgorLy8KKy8vIElmIHRoZSBhYm92ZSByZXF1aXJlbWVudHMgbWVldCB5b3Vy
IHVzZSBjYXNlLCB0aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9vZCBIYXNoVGFibGUuCisvLyBUaGUg
bGFyZ2VzdCBiZW5lZml0IGlzIHRoYXQgd2UgY2FuIHVzZSBzaWduaWZpY2FudGx5IGhpZ2ggbG9h
ZC1mYWN0b3IgKDkwJSkhIFRoaXMgaXMgc3VpdGFibGUgZm9yIEF0b21pY1N0cmluZ1RhYmxlLgor
Ly8KKy8vIFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlm
dCBkZWxldGlvbiwgZGVzY3JpYmVkIGluIFsyLDNdLgorLy8KKy8vIFsxXTogaHR0cHM6Ly9hY2Np
ZGVudGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0NTQ1NTk4Ny9ydXN0LWhhc2gt
aXRlcmF0aW9uLXJlaW5zZXJ0aW9uCisvLyBbMl06IGh0dHBzOi8vY29kZWNhcHN1bGUuY29tLzIw
MTMvMTEvMTEvcm9iaW4taG9vZC1oYXNoaW5nLworLy8gWzNdOiBodHRwczovL2NvZGVjYXBzdWxl
LmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlv
bi8jcmVmCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRh
YmxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+OworICAgIHVzaW5nIGl0ZXJhdG9yID0gSGFzaFRhYmxlSXRlcmF0b3I8
SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gVHJhaXRz
OworICAgIHVzaW5nIEtleVR5cGUgPSBLZXk7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gVmFsdWU7
CisgICAgdXNpbmcgSWRlbnRpdHlUcmFuc2xhdG9yVHlwZSA9IElkZW50aXR5SGFzaFRyYW5zbGF0
b3I8VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+OworICAgIHVzaW5nIEFkZFJlc3VsdCA9IEhh
c2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHByb2JlRGlzdGFuY2VUaHJlc2hvbGQgPSAxMjg7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFL
ZXlUcmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbik7CisgICAgc3RhdGljX2Fz
c2VydChIYXNoRnVuY3Rpb25zOjpoYXNIYXNoSW5WYWx1ZSk7CisKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUoKSA9IGRlZmF1bHQ7CisKKyAgICB+Um9iaW5Ib29kSGFzaFRhYmxlKCkKKyAgICB7Cisg
ICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAgIGlmIChtX3RhYmxlKQor
ICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6ZSgpKTsKKyAgICB9
CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJik7Cisg
ICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSYgb3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworCisgICAgUm9iaW5Ib29k
SGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUm
IG9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisKKyAgICAvLyBXaGVuIHRoZSBoYXNo
IHRhYmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2FtZSBpdGVyYXRvciBmb3IgZW5kIGFz
IGZvciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAgICAvLyBidWNrZXRz
LCBhbmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNhc2UgdGhhdCdzIHdv
cnRoIG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpc0VtcHR5KCkg
PyBlbmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9Cisg
ICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQo
KSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIHRh
YmxlU2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7CisgICAgICAgIGlm
IChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICAgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vha1JhbmRvbVVpbnQz
MigpICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldChi
dWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoJmJ1
Y2tldCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgcmFuZG9tKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNvbnN0X2Nhc3Q8Um9i
aW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsgfQorCisgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV90YWJsZSk7Cisg
ICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1U
YWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVk
IG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFi
bGVTaXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3
VGFibGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgICAg
IG1fa2V5Q291bnQgPSAwOworICAgICAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7
IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRl
bnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2
YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRz
IHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90
aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2Jq
ZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQg
YWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNo
Q29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlw
ZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4g
ZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhj
b25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25z
dCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmUo
Y29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJl
bW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVt
b3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9p
ZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0
cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxl
dGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQo
dmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1
cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29u
c3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
PiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyAgICBzdGF0aWMgdm9pZCBj
aGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxl
U2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBW
YWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQg
ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAg
dXNpbmcgTG9va3VwVHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5
KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFZhbHVl
VHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUs
IHVuc2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmVBbmRJ
bnZhbGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSopOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25l
ZCBrZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQga2V5Q291bnQgPSB0aGlzLT5rZXlDb3VudCgpOworICAgICAgICB1bnNpZ25l
ZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAgICAgaWYgKHNob3VsZEV4cGFu
ZChrZXlDb3VudCwgdGFibGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAvLyBJZiBwcm9iZS1sZW5ndGggZXhjZWVkcyBwcm9iZURpc3RhbmNlVGhyZXNob2xkLCBhbmQg
NTAlfiBpcyBmaWxsZWQsIGV4cGFuZCB0aGUgdGFibGUuCisgICAgICAgIHJldHVybiBtX3dpbGxF
eHBhbmQgJiYga2V5Q291bnQgKiAyID49IHRhYmxlU2l6ZTsKKyAgICB9CisgICAgYm9vbCBzaG91
bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8IHRhYmxlU2l6
ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOyB9CisgICAg
dm9pZCBleHBhbmQoKTsKKyAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKHRhYmxlU2l6ZSgpIC8g
Mik7IH0KKyAgICB2b2lkIHNocmlua1RvQmVzdFNpemUoKTsKKworICAgIHZvaWQgcmVoYXNoKHVu
c2lnbmVkIG5ld1RhYmxlU2l6ZSk7CisgICAgdm9pZCByZWluc2VydChWYWx1ZVR5cGUmJik7CisK
KyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZGVzaXJlZEluZGV4KHVuc2lnbmVkIGhhc2gs
IHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggJiBzaXplTWFz
azsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByb2JlRGlzdGFuY2Uo
dW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNp
emVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbmRleCArIHNpemUgLSBkZXNpcmVkSW5k
ZXgoaGFzaCwgc2l6ZU1hc2spKSAmIHNpemVNYXNrOworICAgIH0KKworICAgIGl0ZXJhdG9yIG1h
a2VJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBt
X3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRl
cmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMs
IHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGl0ZXJhdG9yIG1ha2VLbm93bkdv
b2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBt
X3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorICAgIGNvbnN0X2l0
ZXJhdG9yIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7
IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwg
SGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lz
dGVuY3lFeGNlcHRTaXplKCkgeyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eExvYWROdW1lcmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkTnVtZXJhdG9yOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gU2l6ZVBvbGljeTo6bWF4
TG9hZERlbm9taW5hdG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9
IFNpemVQb2xpY3k6Om1pbkxvYWQ7CisKKyAgICB1bnNpZ25lZCB0YWJsZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX3RhYmxlU2l6ZTsgfQorICAgIHVuc2lnbmVkIHRhYmxlU2l6ZU1hc2soKSBjb25z
dCB7IHJldHVybiBtX3RhYmxlU2l6ZSAtIDE7IH0KKyAgICB1bnNpZ25lZCBrZXlDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5Q291bnQ7IH0KKworICAgIFZhbHVlVHlwZSogbV90YWJsZSB7IG51
bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2tleUNvdW50IHsgMCB9OworICAgIGJvb2wgbV93aWxsRXhwYW5kIHsgZmFsc2UgfTsKKworI2lm
IENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKK3B1YmxpYzoKKyAgICAvLyBBbGwgYWNjZXNzIHRv
IG1faXRlcmF0b3JzIHNob3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KKyAgICBtdXRhYmxl
IGNvbnN0X2l0ZXJhdG9yKiBtX2l0ZXJhdG9ycyB7IG51bGxwdHIgfTsKKyAgICAvLyBVc2Ugc3Rk
Ojp1bmlxdWVfcHRyIHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVtbW92ZSdkIG9yIG1lbWNw
eSdlZC4KKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4IHsgbWFrZVVu
aXF1ZTxMb2NrPigpIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2
b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6bG9va3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgoreworICAgIHJl
dHVybiBpbmxpbmVMb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OmlubGluZUxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tl
eTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxl
OworICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXpl
TWFzaygpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1
bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5I
b29kSGFzaFRhYmxlIG1haW50YWlucyB0aGlzIGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9w
CisgICAgICAgIC8vIHByb2Jpbmcgd2hlbiBkaXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFu
Y2Ugb2YgdGhlIGV4aXN0aW5nIGVudHJ5LgorICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJh
Y3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVu
dGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAgaWYgKGRpc3RhbmNl
ID4gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2gg
JiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0
dXJuIGVudHJ5OworCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAg
ICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+
CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVC
dWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6
ZXI8VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+
KGJ1Y2tldCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNf
SU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwg
RXh0cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CisKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ug
c2hvdWxkIGV4cGFuZCBiZWZvcmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3
ZSBleHBhbmQgYSB0YWJsZSBhZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVl
ZCB0byByZS1sb29rIHVwIGVudHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBl
bnRyeSBwb3NpdGlvbiBpcyBub3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hv
dWxkRXhwYW5kKCkpCisgICAgICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNp
emUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlm
IChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0
cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJh
PihleHRyYSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRv
JiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25l
ZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAg
ICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRy
eUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0
ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2Ug
PSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgaWYgKGRpc3Rh
bmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV93aWxsRXhw
YW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5
IHRvIG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVl
VHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRy
YW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2VG
b3JBZGQoV1RGTW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUs
IHNpemVNYXNrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5k
ZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0K
KworICAgIG1fa2V5Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRy
eSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorQUxXQVlTX0lOTElO
RSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bWFpbnRhaW5Qcm9iZURpc3Rh
bmNlRm9yQWRkKFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlz
dGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKQoreworICAgIHVzaW5nIHN0
ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVN
YXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnks
IFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNl
ID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAg
ICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0
YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4
cGFuZCA9IHRydWU7CisgICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAg
ICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXgg
PSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30K
KworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0
cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+
KGtleSk7CisKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hv
dWxkIGV4cGFuZCBiZWZvcmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBl
eHBhbmQgYSB0YWJsZSBhZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0
byByZS1sb29rIHVwIGVudHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRy
eSBwb3NpdGlvbiBpcyBub3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxk
RXhwYW5kKCkpCisgICAgICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
KyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQg
ZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFu
c2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihl
eHRyYSksIGhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBh
dXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNp
Z25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsK
KyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBBZGRS
ZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisgICAgICAgIHVu
c2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNp
emUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgewor
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAg
ICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3
YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFu
dC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkp
OworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAg
ICAgICBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoV1RGTW92ZShleGlzdGluZ0VudHJ5KSwg
aW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOwor
ICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQgKz0gMTsKKworICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0
KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8v
IEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNp
Z25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5z
aWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBX
VEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJh
Y3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9
IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBzd2FwKHZhbHVl
LCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNlOworICAgICAg
ICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICAr
K2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBs
YXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sK
KyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRv
cihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
Cit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1
ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+bG9v
a3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVy
biBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihlbnRyeSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29k
SGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1
ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgIHJlbW92
ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3Mp
Cit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpbnRlcm5hbENoZWNrVGFi
bGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShW
YWx1ZVR5cGUqIHBvcykKK3sKKyAgICBwb3MtPn5WYWx1ZVR5cGUoKTsKKyAgICBpbml0aWFsaXpl
QnVja2V0KCpwb3MpOworICAgIG1fa2V5Q291bnQgLT0gMTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
KyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0gcG9zIC0gbV90YWJsZTsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsgMSkgJiBzaXplTWFzazsKKworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91c0VudHJ5ID0gbV90YWJsZSArIGluZGV4UHJldmlv
dXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBB
U1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOworICAgICAgICBhdXRvJiBlbnRy
eUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAg
aWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgq
cHJldmlvdXNFbnRyeSwgV1RGTW92ZSgqZW50cnkpKTsKKyAgICAgICAgZW50cnktPn5WYWx1ZVR5
cGUoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqZW50cnkpOworCisgICAgICAgIGluZGV4
UHJldmlvdXMgPSBpbmRleDsKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNr
OworICAgIH0KKworICAgIGlmIChzaG91bGRTaHJpbmsoKSkKKyAgICAgICAgc2hyaW5rKCk7CisK
KyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4o
aXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZVdp
dGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09
IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0
b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5l
IHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRy
eUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX3Bvc2l0aW9uKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit7CisgICAg
cmVtb3ZlKGZpbmQoa2V5KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBz
aXplKSAtPiBWYWx1ZVR5cGUqCit7CisgICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVy
IGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAorICAgIC8v
IGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKKyAgICBpZiBjb25zdGV4cHIgKFRy
YWl0czo6ZW1wdHlWYWx1ZUlzWmVybykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9l
ZE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSk7CisKKyAgICBWYWx1ZVR5cGUqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIq
PihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgaW5pdGlhbGl6
ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZGVh
bGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgdGFibGVbaV0uflZhbHVl
VHlwZSgpOworICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIq
Pih0YWJsZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmV4cGFuZCgpCit7CisgICAgdW5zaWduZWQgbmV3U2l6
ZTsKKyAgICB1bnNpZ25lZCBvbGRTaXplID0gdGFibGVTaXplKCk7CisgICAgaWYgKCFvbGRTaXpl
KQorICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIGVs
c2UKKyAgICAgICAgbmV3U2l6ZSA9IG9sZFNpemUgKiAyOworCisgICAgcmVoYXNoKG5ld1NpemUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY29uc3RleHByIHVuc2lnbmVkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWdu
ZWQga2V5Q291bnQpCit7CisgICAgdW5zaWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91bmRV
cFRvUG93ZXJPZlR3byhrZXlDb3VudCk7CisKKyAgICBpZiAoc2hvdWxkRXhwYW5kKGtleUNvdW50
LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworCisgICAgYXV0
byBhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uID0gW10oZG91YmxlIGxvYWRGYWN0b3Is
IHVuc2lnbmVkIGtleUNvdW50LCB1bnNpZ25lZCB0YWJsZVNpemUpCisgICAgeworICAgICAgICAv
LyBIZXJlIGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2FsY3VsYXRpb24sIHVzaW5nIDMv
NCBsb2FkLWZhY3Rvci4KKyAgICAgICAgLy8gV2l0aCBtYXhMb2FkIGF0IDMvNCBhbmQgbWluTG9h
ZCBhdCAxLzYsIG91ciBhdmVyYWdlIGxvYWQgaXMgMTEvMjQuCisgICAgICAgIC8vIElmIHdlIGFy
ZSBnZXR0aW5nIGhhbGYtd2F5IGJldHdlZW4gMTEvMjQgYW5kIDMvNCwgd2UgZG91YmxlIHRoZSBz
aXplCisgICAgICAgIC8vIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0byBsb2FkTWF4IGFuZCBi
cmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMTEvMjQuIFRoaXMKKyAgICAgICAgLy8gZ2l2ZSB1cyBh
IGxvYWQgaW4gdGhlIGJvdW5kcyBbOS8yNCwgMTUvMjQpLgorICAgICAgICBkb3VibGUgbWF4TG9h
ZFJhdGlvID0gbG9hZEZhY3RvcjsKKyAgICAgICAgZG91YmxlIG1pbkxvYWRSYXRpbyA9IDEuMCAv
IG1pbkxvYWQ7CisgICAgICAgIGRvdWJsZSBhdmVyYWdlTG9hZFJhdGlvID0gKG1heExvYWRSYXRp
byArIG1pbkxvYWRSYXRpbykgLyAyOworICAgICAgICBkb3VibGUgaGFsZldheUJldHdlZW5BdmVy
YWdlQW5kTWF4TG9hZFJhdGlvID0gKGF2ZXJhZ2VMb2FkUmF0aW8gKyBtYXhMb2FkUmF0aW8pIC8g
MjsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVu
QXZlcmFnZUFuZE1heExvYWRSYXRpbzsKKyAgICB9OworCisgICAgY29uc3RleHByIGRvdWJsZSBs
b2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1heExv
YWREZW5vbWluYXRvcjsKKyAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihs
b2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNp
emUgKj0gMjsKKyAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOworICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5pbXVt
VGFibGVTaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKCkKK3sKKyAgICB1bnNp
Z25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAg
IHJlaGFzaChzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShr
ZXlDb3VudCgpKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUp
Cit7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CisKKyAg
ICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBWYWx1ZVR5cGUqIG9s
ZFRhYmxlID0gbV90YWJsZTsKKworICAgIHVuc2lnbmVkIG9sZEtleUNvdW50ID0ga2V5Q291bnQo
KTsKKyAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOworICAgIG1fdGFi
bGVTaXplID0gbmV3VGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvbGRLZXlDb3VudDsKKyAg
ICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
bGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRFbnRyeSA9IG9sZFRhYmxlW2ld
OworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob2xkRW50cnkpKQorICAgICAgICAgICAgcmVp
bnNlcnQoV1RGTW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRFbnRyeS5+VmFsdWVUeXBlKCk7
CisgICAgfQorCisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsKKworICAgIGludGVybmFsQ2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2
b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2xlYXIoKQoreworICAgIGludmFs
aWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBkZWFsbG9jYXRlVGFibGUoc3RkOjpleGNoYW5nZShtX3RhYmxlLCBudWxscHRyKSwg
dGFibGVTaXplKCkpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsK
KyAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCisgICAgOiBtX3RhYmxlKGFsbG9jYXRlVGFi
bGUob3RoZXIubV90YWJsZVNpemUpKQorICAgICwgbV90YWJsZVNpemUob3RoZXIubV90YWJsZVNp
emUpCisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgLCBtX3dpbGxFeHBh
bmQob3RoZXIubV93aWxsRXhwYW5kKQoreworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG90aGVyLm1fdGFibGVTaXplOyArK2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYg
b3RoZXJFbnRyeSA9IG90aGVyLm1fdGFibGVbaW5kZXhdOworICAgICAgICBWYWx1ZVR5cGUmIGVu
dHJ5ID0gbV90YWJsZVtpbmRleF07CisgICAgICAgIG5ldyAoJmVudHJ5KSBWYWx1ZVR5cGUob3Ro
ZXJFbnRyeSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJiBv
dGhlcikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGludmFs
aWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwor
CisgICAgc3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1fdGFibGVTaXpl
LCBvdGhlci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNv
dW50KTsKKyAgICBzd2FwKG1fd2lsbEV4cGFuZCwgb3RoZXIubV93aWxsRXhwYW5kKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQ
b2xpY3k+OjpvcGVyYXRvcj0oY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikgLT4gUm9i
aW5Ib29kSGFzaFRhYmxlJgoreworICAgIFJvYmluSG9vZEhhc2hUYWJsZSB0bXAob3RoZXIpOwor
ICAgIHN3YXAodG1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+CitpbmxpbmUgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpSb2Jpbkhv
b2RIYXNoVGFibGUoUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpCit7CisgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycygmb3RoZXIpOworCisgICAgbV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV90YWJsZSwgbnVsbHB0cik7CisgICAgbV90YWJsZVNpemUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fdGFibGVTaXplLCAwKTsKKyAgICBtX2tleUNvdW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5t
X2tleUNvdW50LCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1f
d2lsbEV4cGFuZCwgZmFsc2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5s
aW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5I
b29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jp
bkhvb2RIYXNoVGFibGUgdGVtcCA9IFdURk1vdmUob3RoZXIpOworICAgIHN3YXAodGVtcCk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRh
YmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hU
YWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsK
Kworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAg
dXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIEZhc3RSb2Jpbkhvb2RIYXNoVGFi
bGVTaXplUG9saWN5PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oCmluZGV4IDkyZDIwOGQzNWUyYWFkNWI4ODI3M2UzNDE4NmMyN2I1ZDA3
Y2UxZmQuLmJhZDJjYWIwZDVhZjY5ODYzYmQwOGEyODkwYjU0M2RhODgzN2U1NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdU
Rjo6QXRvbVN0cmluZz4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRl
eCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAy
ZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJp
bmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIg
ewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9
IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9
IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwogCiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bVN0cmluZ1RhYmxlLmNwcAppbmRleCBlMGMwYWZiYWVhNDM2ODYxYjhiOGU0MWVlMDc2YWUyYzc0
MjI0YmNmLi44NmVkMjVmMjhlYzA4NjY4ZWY1ZTRhNTZhMjQ5NzVkMjAxZmE4ZTQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVz
cGFjZSBXVEYgewogCiBBdG9tU3RyaW5nVGFibGU6On5BdG9tU3RyaW5nVGFibGUoKQogewotICAg
IGZvciAoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBzdHJpbmcgOiBtX3RhYmxlKQorICAg
IGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV90YWJsZSkKICAgICAgICAgc3RyaW5nLT5zZXRJ
c0F0b20oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAppbmRl
eCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMwNDUxMTNhNTdlLi4yNDVhM2E2MjAxYTUw
ZGYyNjU5ZGMxOTEwZTA3OWUwNTU3ZDQxMjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z1RhYmxlLmgKQEAgLTIyLDggKzIyLDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzMsMTIg
KzM0LDE1IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFzcyBBdG9tU3RyaW5nVGFibGUgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5nIFN0cmluZ0VudHJ5
ID0gUGFja2VkUHRyPFN0cmluZ0ltcGw+OworICAgIHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEZh
c3RSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZ0VudHJ5PjsKKwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxlSW1wbCYgdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1fdGFibGU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDVhODM4NWUwNGE5NTkwNGUwNmJh
MTI4ZDZlYWExM2Q5MWViOTBmYjkuLmYwMzJmMWJkZjIxYjU4ZGJmNmNlNjI1NDU0NDZjNDg3NjVm
YWM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC05MCw2ICs5MCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAgIHN0cnVjdCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRl
eCA3NDkwNzMzODgwN2VhOTc1ZTA3MjI4ZDA0YTI1NjQzNmU3NzE1Y2M2Li4wOTQzZDdiODVhM2Iz
M2M5YzE2Njk5MDhlZjgzMzIzZmNlMjJkMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNw
cApAQCAtMzksMzEgKzM5LDMxIEBACiAjaW5jbHVkZSAiTWVkaWFFbmNvZGluZ0NvbmZpZ3VyYXRp
b24uaCIKICNpbmNsdWRlICJNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVU
eXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVUeXBlcygpCiB7CiAgICAgLy8gQSAiYnVja2V0IiBNSU1F
IHR5cGVzIGlzIG9uZSB3aG9zZSBjb250YWluZXIgdHlwZSBkb2VzIG5vdCB1bmlxdWVseSBzcGVj
aWZ5IGEgY29kZWMuCiAgICAgLy8gU2VlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZj
NjM4MQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGJ1Y2tldE1J
TUVUeXBlcyA9IEhhc2hTZXQ8U3RyaW5nPih7Ci0gICAgICAgICJhdWRpby8zZ3BwIiwKLSAgICAg
ICAgInZpZGVvLzNncHAiLAotICAgICAgICAiYXVkaW8vM2dwcDIiLAotICAgICAgICAidmlkZW8v
M2dwcDIiLAotICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgInZpZGVvL21wNCIsCi0gICAg
ICAgICJhcHBsaWNhdGlvbi9tcDQiLAotICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiwKLSAgICAg
ICAgImFwcGxpY2F0aW9uL21wMjEiLAotICAgICAgICAiYXVkaW8vdm5kLmFwcGxlLm1wZWd1cmwi
LAotICAgICAgICAidmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiLAotICAgICAgICAiYXVkaW8vb2dn
IiwKLSAgICAgICAgInZpZGVvL29nZyIsCi0gICAgICAgICJ2aWRlby93ZWJtIiwKLSAgICAgICAg
ImF1ZGlvL3dlYm0iLAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAgICAgICAgImF1ZGlvLzNncHAiX3MsCisgICAgICAg
ICJ2aWRlby8zZ3BwIl9zLAorICAgICAgICAiYXVkaW8vM2dwcDIiX3MsCisgICAgICAgICJ2aWRl
by8zZ3BwMiJfcywKKyAgICAgICAgImF1ZGlvL21wNCJfcywKKyAgICAgICAgInZpZGVvL21wNCJf
cywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wNCJfcywKKyAgICAgICAgInZpZGVvL3F1aWNrdGlt
ZSJfcywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wMjEiX3MsCisgICAgICAgICJhdWRpby92bmQu
YXBwbGUubXBlZ3VybCJfcywKKyAgICAgICAgInZpZGVvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAor
ICAgICAgICAiYXVkaW8vb2dnIl9zLAorICAgICAgICAidmlkZW8vb2dnIl9zLAorICAgICAgICAi
dmlkZW8vd2VibSJfcywKKyAgICAgICAgImF1ZGlvL3dlYm0iX3MsCiAgICAgfSk7CiAgICAgcmV0
dXJuIGJ1Y2tldE1JTUVUeXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDkwNDM1NGQ2MjhhYjU0Zjc3YmFj
OGUxZjA2NjVlZmNlN2FkNTU4NDguLjg0MzEwMWVkZWY0NTJhZDA5NGYwMzViZjg0MjQyNWJiZjY2
NjkwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcApAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIlVzZXJHZXN0dXJl
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KQEAgLTI2MDcsOCArMjYwOCw4
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0CiAK
IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3B1cFZhbHVlKCkgY29uc3QKIHsKLSAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhbGxvd2VkUG9wdXBW
YWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4gewotICAgICAgICAibWVudSIsICJs
aXN0Ym94IiwgInRyZWUiLCAiZ3JpZCIsICJkaWFsb2ciCisgICAgc3RhdGljIGNvbnN0IE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
PiBhbGxvd2VkUG9wdXBWYWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAg
ICAgICAibWVudSJfcywgImxpc3Rib3giX3MsICJ0cmVlIl9zLCAiZ3JpZCJfcywgImRpYWxvZyJf
cywKICAgICB9KTsKIAogICAgIGF1dG8gaGFzUG9wdXAgPSBnZXRBdHRyaWJ1dGUoYXJpYV9oYXNw
b3B1cEF0dHIpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNmU3NjcyNzRhNTllMGZiYjAxNjc3ZTA5ZDlhNzkyZTM5OWM5ZDIwNy4uNDZiYmY5ZWU5
NjJhZTRlOWNjMTM3YmNhYjdkMjdkYjA0MDY0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjM4OSw3ICsyMzg5LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFkb3dSb290KCkKIAog
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0
YWdOYW1lcyA9IFtdIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7
CiAgICAgICAgICAgICAmYXJ0aWNsZVRhZy5nZXQoKSwKICAgICAgICAgICAgICZhc2lkZVRhZy5n
ZXQoKSwKQEAgLTI0MTAsNyArMjQxMCw4IEBAIHN0YXRpYyBib29sIGNhbkF0dGFjaEF1dGhvclNo
YWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZzZWN0aW9uVGFn
LmdldCgpLAogICAgICAgICAgICAgJnNwYW5UYWcuZ2V0KCkKICAgICAgICAgfTsKLSAgICAgICAg
SGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIHNldC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemVvZih0YWdMaXN0KSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6
IHRhZ0xpc3QpCiAgICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWRO
YW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4IDI2NGM0Nzkx
NTBjY2JmN2EwNjVkZWE1NWFjZWJhNDRlZGQzOTJmNGYuLjQyOWZjNTU5NjQzNTFmMTI0OWJjMWM4
ZjI4OWUzNzdhNGRkM2UzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZp
ZWROYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaApAQCAtMTM3
LDcgKzEzNyw4IEBAIHN0cnVjdCBRdWFsaWZpZWROYW1lSGFzaCB7CiAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwqIGEsIGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiBiKSB7IHJldHVybiBhID09IGI7IH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIGlubGluZSBTdHJp
bmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTljZTI1MmM2YzY2YWNiNzkzZjViLi40Mjg1NDI4
OGVhODFlMjg2MzA0OTMwZWJlMzBiZWEyYzhhN2Q4ZTg1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbApAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRGKTsKICAg
ICBwcmludEhlYWRlckhlYWQoJEYsICJDU1MiLCAkZmFtaWx5TmFtZXNGaWxlQmFzZSwgPDxFTkQs
ICIiKTsKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nLmg+CiBFTkQKQEAgLTcwOSw2ICs3MTAsNyBAQCBzdWIgcHJpbnROYW1l
c0hlYWRlckZpbGUKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVy
SGVhZCgkRiwgIkRPTSIsICRwYXJhbWV0ZXJze25hbWVzcGFjZX0sIDw8RU5ELCAiY2xhc3MgJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfVF1YWxpZmllZE5hbWUgOiBwdWJsaWMgUXVhbGlmaWVkTmFtZSB7
IH07XG5cbiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgog
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKIEVORApAQCAtOTU2LDcgKzk1OCw3IEBAIEVORAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OTYsNyArOTk4LDcgQEAgRU5ECiAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSogcXVhbGlmaWVkTmFtZTsgLy8gVXNlIHBvaW50ZXIgaW5zdGVh
ZCBvZiByZWZlcmVuY2Ugc28gdGhhdCBlbXB0eVZhbHVlKCkgaW4gSGFzaE1hcCBpcyBjaGVhcCB0
byBjcmVhdGUuCiB9OwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBj
cmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCitzdGF0aWMgTkVWRVJfSU5M
SU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCAk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBjcmVhdGUk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50
cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lOwpAQCAtMTAxMiwxNiArMTAx
NCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRv
bVN0cmluZ0ltcGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1h
cEVudHJ5PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnk+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAgIG1hcC5h
ZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1D
b25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCAkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5KGVudHJ5LmZ1bmN0aW9uLCBlbnRyeS5u
YW1lKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogc3RhdGljICRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkgZmluZCRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50Q29uc3RydWN0b3JGdW5jdGlvbihjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRw
YXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkpOwotICAgIHJldHVybiBtYXAuZ2V0KCku
Z2V0KGxvY2FsTmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtYXAuZ2V0KCkuZ2V0KGxvY2FsTmFt
ZSk7CiB9CiAKIFJlZlB0cjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudD4gJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUVsZW1lbnRGYWN0b3J5OjpjcmVhdGVLbm93bkVsZW1lbnQoY29uc3QgQXRv
bVN0cmluZyYgbG9jYWxOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQkZm9ybUVsZW1lbnRBcmd1bWVu
dEZvckRlZmluaXRpb24sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtMTIyNiw2ICsxMjI4LDcg
QEAgc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlCiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiBFTkQKIDsKQEAgLTEyNDcsNyArMTI1MCw3IEBAIEVORAog
CiBwcmludCBGIDw8RU5ECiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCitzdGF0aWMgTkVWRVJf
SU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5n
LCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gY3Jl
YXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKQogewogICAgIHN0cnVjdCBUYWJs
ZUVudHJ5IHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZTsKQEAgLTEyODUsMTYg
KzEyODgsMTYgQEAgRU5ECiAgICAgcHJpbnQgRiA8PEVORAogICAgIH07CiAKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8QXRvbVN0cmluZywgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAg
IG1hcC5hZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksIGVudHJ5LmZ1bmN0aW9uKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCBlbnRyeS5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogSlNET01PYmplY3QqIGNyZWF0ZUpTJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPCRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGF1dG8gZnVuY3Rpb25zID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1XcmFwcGVyTWFwKCkpOwotICAgIGlmIChhdXRvIGZ1bmN0aW9uID0gZnVuY3Rp
b25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpKQorICAgIGlmIChhdXRv
IGZ1bmN0aW9uID0gZnVuY3Rpb25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKSkpCiAg
ICAgICAgIHJldHVybiBmdW5jdGlvbihnbG9iYWxPYmplY3QsIFdURk1vdmUoZWxlbWVudCkpOwog
RU5ECiA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
aW5kZXggYzc4ZDFlYmY4NmViMGI0OTBkYTM5YzYzMGJiMmZhMWI0ZGViYjNkMC4uYjgyZTJlNmM5
NWU1NjM2YjVhMzI4ZTg4MWJmMWU3YTU3ZjQzMDk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTE4LDcgKzExOSw3IEBAIEVsZW1lbnQqIEZvcm1hdEJs
b2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxT
aW1wbGVSCiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1
dG8gYmxvY2tUYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIGFkZHJlc3NUYWcsCiAg
ICAgICAgIGFydGljbGVUYWcsCiAgICAgICAgIGFzaWRlVGFnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKaW5kZXggNGVjMGI0ZTU1YzNlYWY2NDA4
ZjI1MDU5OTZjYTFkY2RhYTVmMjM1My4uNjYxNDA3ZTE0NTI0Y2YyYTEzZmVhMzY1NTEzZDc5YWJl
NTNlNjlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1h
bmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00Niw3ICs0Nyw3IEBAIFJlbW92ZUZvcm1hdENvbW1hbmQ6OlJlbW92ZUZvcm1hdENvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBzdGF0aWMgYm9vbCBpc0VsZW1lbnRGb3JSZW1vdmVG
b3JtYXRDb21tYW5kKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIGNvbnN0
IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1l
PiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsK
ICAgICAgICAgYWNyb255bVRhZywKICAgICAgICAgYlRhZywKICAgICAgICAgYmRvVGFnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApp
bmRleCAwMTkxOWViMzVjNzljNTQ5OGViNmMyZTAwOGZmODNmYWRhM2E3ZGFmLi5jYzMzZGY3MmEy
YzdhOGJmZjExZjg2NjE3NDI0NjU0MWVlN2NlMzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNjcsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03MzksNyArNzQwLDcgQEAgc3RhdGljIGJvb2wgaXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQo
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSkKICAgICAgICAgICAgICZ1bFRhZy5nZXQoKSwKICAgICAg
ICAgICAgICZ4bXBUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0
cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8mIHRhZyA6IHRhZ3MpCiAgICAg
ICAgICAgICBzZXQuYWRkKHRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0F1dG9maWxsLmNwcAppbmRleCA2NzM1ZTI2OWYyNWFlZjdiYzA5MTI3NTUzOTIx
NDgxY2RlM2U4ZWI1Li44ZjcxMmY3MWQyMjFkYzI3ZTk0MjI4MmYxNGY5MDMyZTlhODkxMTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaD4KIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgQXV0b2ZpbGxJbmZvIHsKICAgICBBdXRv
ZmlsbENhdGVnb3J5IGNhdGVnb3J5OwogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0
cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZv
PiYgZmllbGROYW1lTWFwKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkgewpAQCAtMTEzLDcgKzEx
NCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4mIGZp
ZWxkTmFtZU1hcCgpCiAgICAgICAgICAgICB7ICJlbWFpbCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6
OkVtYWlsLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0IH0gfSwKICAgICAgICAgICAgIHsgImlt
cHAiLCB7IEF1dG9maWxsRmllbGROYW1lOjpJbXBwLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0
IH0gfSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbElu
Zm8+IG1hcDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZW50cmllcykKICAgICAgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZSwgZW50cnkudmFsdWUp
OwogICAgICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmlu
ZGV4IDhkZjYyYzZiYjQ5MWY4NDhlZWNlMjkwOTQ0YTRiN2NmYWVkZDhkNzUuLjAwYmY2N2FlZDU2
NWFjOTBmNDZkOGZhNzM4ZGY3YTUyOTM3NjBkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyNSw3ICsyMjYsNyBA
QCBib29sIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICAmdmFsdWV0eXBlQXR0ci5nZXQo
KSwKICAgICAgICAgICAgICZ2bGlua0F0dHIuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhh
c2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8qIG5hbWUg
OiBuYW1lcykKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAg
ICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApp
bmRleCBkYzFmMTBjYjJjZjA4NDIxODgzMjRiOGEwM2U2YjE3MTYyMGQ2Y2JlLi5hNmYzYzBmMTJk
MjcxNTY5NTkxOGI3NjNkOTI0NjI2NWZlMmYyYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgpAQCAtMzYxLDcg
KzM2Miw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCgp
CiBzdGF0aWMgaW5saW5lIGJvb2wgcHJldmVudHNQYXJlbnRPYmplY3RGcm9tRXhwb3N1cmUoY29u
c3QgRWxlbWVudCYgY2hpbGQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbW9zdEtub3duVGFn
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4gc2V0OwogICAgICAgICBhdXRvKiB0YWdzID0gSFRNTE5hbWVzOjpnZXRI
VE1MVGFncygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxOYW1lczo6SFRN
TFRhZ3NDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBhdXRvJiB0YWcgPSAqdGFnc1tpXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGIx
OTMwZTQ2M2RhNDRkOTdkYjc0NTQ1Y2U2OTRlOTljYmUzOTE2OGYuLjkyZjI3NmYzOGI3NDRkNTFl
YzUxYzhmY2Y5YWI0NmZlNzJkMmVkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlhNTE5T
TmFtZXMuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ3OCw5ICs0NzksOSBAQCB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQwogICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+
IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0ZUNhc2VNYXAo
Y29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25lZCBsZW5ndGgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
IGNyZWF0ZUNhc2VNYXAoY29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1l
PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1l
c1tpXTsKICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS5sb2NhbE5h
bWUoKTsKQEAgLTQ5MywxNCArNDk0LDE0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxp
ZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+CiAKIHN0
YXRpYyB2b2lkIGFkanVzdFNWR1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoU1ZHTmFtZXM6OmdldFNWR1RhZ3MoKSwgU1ZHTmFt
ZXM6OlNWR1RhZ3NDb3VudCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4g
bWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZH
VGFnc0NvdW50KTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0
KCkuZ2V0KHRva2VuLm5hbWUoKSk7CiAgICAgaWYgKGNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHRva2VuLnNldE5hbWUoY2FzZWROYW1lLmxvY2Fs
TmFtZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQorc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBt
YXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUg
OiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2Fz
ZWROYW1lID0gbWFwLmdldChhdHRyaWJ1dGUubG9jYWxOYW1lKCkpOwpAQCAtNTExLDcgKzUxMiw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvCiAKIHRlbXBsYXRlPGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmlidXRlc1RhYmxlTGVu
Z3RoPiBzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoYXR0cmlidXRlc1RhYmxlKCksIGF0dHJpYnV0
ZXNUYWJsZUxlbmd0aCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFw
ID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3Ro
KTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwogfQogCkBAIC01MjUsMTggKzUy
NiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGFkanVzdEF0dHJpYnV0ZXM8TWF0aE1MTmFtZXM6OmdldE1h
dGhNTEF0dHJzLCBNYXRoTUxOYW1lczo6TWF0aE1MQXR0cnNDb3VudD4odG9rZW4pOwogfQogCi1z
dGF0aWMgdm9pZCBhZGROYW1lc1dpdGhQcmVmaXgoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZp
ZWROYW1lPiYgbWFwLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3Jl
YXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5h
bWVzW2ldOwotICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2Fs
TmFtZSgpOwotICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlm
aWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOwotICAgIH0K
LX0KKyAgICBhdXRvIGFkZE5hbWVzV2l0aFByZWZpeCA9IFtdKE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBjb25z
dCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10s
IHVuc2lnbmVkIGxlbmd0aCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFt
ZXNbaV07CisgICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxv
Y2FsTmFtZSgpOworICAgICAgICAgICAgbWFwLmFkZChwcmVmaXggKyAnOicgKyBsb2NhbE5hbWUs
IFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG5hbWUubmFtZXNwYWNlVVJJKCkpKTsK
KyAgICAgICAgfQorICAgIH07CiAKLXN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKLXsKLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogCiAgICAgQXRv
bVN0cmluZyB4bGlua05hbWUoInhsaW5rIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGFkZE5hbWVzV2l0aFByZWZpeChtYXAsIHhsaW5rTmFtZSwgWExpbmtOYW1lczo6
Z2V0WExpbmtBdHRycygpLCBYTGlua05hbWVzOjpYTGlua0F0dHJzQ291bnQpOwpAQCAtNTUwLDcg
KzU1MCw3IEBAIHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0
ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKIAogc3RhdGljIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlRm9yZWln
bkF0dHJpYnV0ZXNNYXAoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBt
YXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMo
bWFwLCB0b2tlbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQ
YWdlT3ZlcmxheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5j
cHAKaW5kZXggZmEzZTJmYWE0OGI5NmFkYmM5ZDhlMjYzNTJkNWY2MjBkN2I1NWFhMS4uYjU5NjVm
NTZhNDlhOTVlMDJjOGYwNzk1ZGVjY2U4ZmFmMTFiYTZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0xNDksMTAgKzE1MCwxMCBAQCBib29sIE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uT3ZlcmxheTo6dXBkYXRlUmVnaW9uKCkKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0K
IAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4mIHRvdWNoRXZl
bnRSZWdpb25Db2xvcnMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcmVnaW9uQ29sb3JzID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKLSAgICAgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50
OF90Pj4geyB7CisgICAgICAgIHJldHVybiBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4geyB7CiAgICAgICAgICAgICB7ICJ0b3Vj
aHN0YXJ0Il9zLCB7IDE5MSwgMTkxLCA2MywgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2ht
b3ZlIl9zLCB7IDgwLCAyMDQsIDI0NSwgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2hlbmQi
X3MsIHsgMTkxLCA2MywgMTI3LCA1MCB9IH0sCkBAIC0xOTQsNDkgKzE5NSw0OSBAQCB2b2lkIE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5LCBHcmFwaGljcwogICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOwogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJ0b3VjaHN0YXJ0IikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiX3MpKTsKICAgICBjb250ZXh0
LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0
YXJ0IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgidG91Y2hzdGFydCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5s
b2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIikpOwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRv
dWNobW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJh
d1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3Qu
bG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSJfcywgY29u
dGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92
ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgidG91Y2hlbmQiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hlbmQiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGVuZCIsIGNvbnRl
eHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRl
eHQoInRvdWNoZW5kIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwog
CiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGZvcmNlY2hhbmdlIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9y
Y2VjaGFuZ2UiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIiwgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hmb3Jj
ZWNoYW5nZSJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAg
IGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9jb2xv
cik7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgicGFzc2l2ZSBsaXN0ZW5lcnMiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyJf
cywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJl
Y3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgibW91c2Vkb3duIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNlZG93biJfcykpOwogICAgIGNvbnRleHQu
ZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlZG93
biIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoIm1vdXNlZG93biJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIikpOworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNl
bW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1Jp
Z2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9j
YXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSJfcywgY29udGV4
dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgw
LCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgibW91c2V1cCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdl
bmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCIsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1v
dXNldXAiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZWxzZQog
ICAgIC8vIE9uIGRlc2t0b3AgcGxhdGZvcm1zLCB0aGUgIndoZWVsIiByZWdpb24gaW5jbHVkZXMg
dGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uLgotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIikpOworICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIl9zKSk7CiAgICAg
Y29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgi
bm9uLWZhc3QgcmVnaW9uIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibm9uLWZhc3QgcmVnaW9uIl9zLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2ZW50
U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCmluZGV4IGVkOGRkOTIzOGQzMzczYzAxODJi
MmYzMDhlZGEwMDI3ZTRhZmI5MDIuLjQwMTUyNzdlMDdjNDNkOWY5ODlhMTdlYWJhZTE1MjBiOWVj
OGExOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGlt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rp
b24gPSB1bnNpZ25lZCBsb25nIGxvbmcgKFBlcmZvcm1hbmNlVGltaW5nOjoqKSgpIGNvbnN0Owot
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+JiBy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXAoKQorc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5h
dmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25U
aW1pbmdGdW5jdGlvbk1hcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgTmF2
aWdhdGlvblRpbWluZ0Z1bmN0aW9uPj4oeworICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CiAgICAgICAgIHsgImNvbm5lY3RFbmQiX3Ms
ICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdEVuZCB9LAogICAgICAgICB7ICJjb25uZWN0U3Rh
cnQiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdFN0YXJ0IH0sCiAgICAgICAgIHsgImRv
bUNvbXBsZXRlIl9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmRvbUNvbXBsZXRlIH0sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0KaW5kZXggOWM0NWEyMjk0ZmJmYWNmMTk3NzBkNDgxZTZiZWU0ZmVkYWVhNjRmYy4uYTU1ZDVh
MDVlNGRkY2JmNWM4MWM3MTkxYjRkY2I5ZDJjMzQxZWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQpAQCAtMjks
MTcgKzI5LDE5IEBACiAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVNlcnZpY2VzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TVVJMRmlsZVR5cGVNYXBwaW5nc1NQSS5oPgorI2lt
cG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVu
c2lvbnNGb3JNSU1FVHlwZU1hcCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4+JiBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQogewogICAgIHN0YXRpYyBh
dXRvIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0g
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4+IG1hcDsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IG1hcDsKIAogICAgICAgICBhdXRv
IGFkZEV4dGVuc2lvbiA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSB7Ci0gICAgICAgICAgICBtYXAuYWRkKHR5cGUsIEhhc2hTZXQ8U3RyaW5nPigpKS5p
dGVyYXRvci0+dmFsdWUuYWRkKGV4dGVuc2lvbik7CisgICAgICAgICAgICBtYXAuYWRkKHR5cGUs
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIGFk
ZEV4dGVuc2lvbnMgPSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlLCBOU0FycmF5PE5TU3RyaW5nICo+
ICpleHRlbnNpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5N2I3OWZkOGY3
M2Q3ZC4uZjVhNjc1ODMzNTEzMTlmNDBmMTI4N2UyYTcyOWNjNDcxYmJkMWU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01MCw3ICs1MSw3
IEBAIHN0YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzZXQgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
W10gewotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKICAgICAgICAg
YXV0byBhZGQgPSBbJnNldF0gKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVQ2hhcj4gdW5pY29kZU5hbWUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG5hbWVMZW5ndGgg
PSBzdHJsZW4obmFtZSk7CiAgICAgICAgICAgICBzZXQuYWRkKEF0b21TdHJpbmcgeyBuYW1lLCBu
YW1lTGVuZ3RoLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCB9KTsKQEAgLTM4Miw3
ICszODMsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCBh
dXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PEF0b21TdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHsKICAgICAgICAgIkFtZXJpY2Fu
IFR5cGV3cml0ZXIiLAogICAgICAgICAiQXJpYWwgSGVicmV3IiwKICAgICAgICAgIkNoYWxrYm9h
cmQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggNGY0
MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MC4uMTQyNGQxYmVlZTZlM2MzMmM2
NmI0OWEyZjZmMjRiNDhiMmFjMmUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIEhBVkUoQVZDT05URU5US0VZU0VTU0lPTikKQEAgLTIw
NSw5ICsyMDYsOSBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2
YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTawogICAgIHJldHVybiBrZXlJRHM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlw
ZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyA9IEhhc2hTZXQ8QXRvbVN0
cmluZz4oeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHZhbGlkVHlwZXMoc3RkOjppbml0aWFsaXpl
cl9saXN0PEF0b21TdHJpbmc+IHsKICAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5n
OjpzaW5mTmFtZSgpLAogICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNrZE5h
bWUoKSwKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKaW5k
ZXggM2MxYjZmNjU3MmViMzhhOTM4MTA1Zjc0NzU4YjE3ODJmY2Q5NzkxNy4uYTQ3MDI0NDBlZGZi
MDMyMmZlYWY3Y2Q5MWI2ZWFkNDA3YjNjOTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcApAQCAtMzEsMTMgKzMxLDE0IEBA
CiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKIAorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGF1dG8gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10g
ewogICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSB7
CkBAIC02OCwxMSArNjksMTIgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9y
dGVkSW1hZ2VUeXBlcygpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIYXNoU2V0PFN0cmluZz4q
Pihjb250ZXh0KS0+YWRkKGltYWdlVHlwZSk7CiAgICAgICAgIH0sICZzeXN0ZW1TdXBwb3J0ZWRJ
bWFnZVR5cGVzKTsKIAotICAgICAgICBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcy5yZW1vdmVJ
ZihbJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXNdKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMuY29udGFpbnMo
aW1hZ2VUeXBlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0
ZWRJbWFnZVR5cGVzOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8U3RyaW5nPiBmaWx0ZXJlZDsKKyAgICAgICAgZm9yIChhdXRvJiBpbWFnZVR5cGUgOiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcykgeworICAgICAgICAgICAgaWYgKHN5c3RlbVN1cHBv
cnRlZEltYWdlVHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkKKyAgICAgICAgICAgICAgICBmaWx0
ZXJlZC5hZGQoaW1hZ2VUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsdGVyZWQ7
CiAgICAgfSgpKTsKIAogICAgIHJldHVybiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmlu
ZGV4IDViOGZlMjE3ZTg3M2QwYjBjODU2Njg2NzQwMGQ3NmVlM2M2NjU3NWUuLjRiMDE1YWZjOTVj
YWYyMzA4NmExY2JiNjFlM2U1NjRmNzdkMGI5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApAQCAtMjUsMTIgKzI1LDEyIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBv
cnRlZEltYWdlVHlwZXMoKTsKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogSGFzaFNldDxT
dHJpbmc+JiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
c0ZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KaW5kZXgg
ZjExMWYyODc3Yjk4ZjljODM3ZDM1NGNjODFkYmEwMjhiM2VlOTIzMy4uNjI2YzUyZGUwMjMyYjMy
NmNlMmI0YmY4MzJmZjA5ZjkwYTc4Yjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbQpAQCAt
MzIsOCArMzIsOSBAQAogI2ltcG9ydCAiSEVWQ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiTWVkaWFD
YXBhYmlsaXRpZXNJbmZvLmgiCiAKLSNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0
TGluay5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZv
dW5kYXRpb25Tb2Z0TGluay5oPgogCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgog
CkBAIC0xMjYsMTEgKzEyNywxMSBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1Bh
cmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJgogCiBzdGF0aWMg
T3B0aW9uYWw8Q01WaWRlb0NvZGVjVHlwZT4gY29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiB7Ci0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewotICAgICAg
ICB7ICJhdmMxIiwga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJhdmMzIiwg
a0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJodmMxIiwga0NNVmlkZW9Db2Rl
Y1R5cGVfSEVWQyB9LAotICAgICAgICB7ICJoZXYxIiwga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9
LAorICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewor
ICAgICAgICB7ICJhdmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCisgICAgICAgIHsg
ImF2YzMiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiaHZjMSJfcywg
a0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAorICAgICAgICB7ICJoZXYxIl9zLCBrQ01WaWRlb0Nv
ZGVjVHlwZV9IRVZDIH0sCiAgICAgfSk7CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBtYXAuZ2V0
KCkuZmluZChjb2RlY1N0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmlu
ZGV4IGQxZmNmZDBkY2JhMzI2YWQzYzU0YjBjYWNkNjdkZmJiOTVjMTJkOTkuLmU1MWI1ZDY5YzQ2
ZjQxNzdkYTRjOTlmNDczN2M4MmYwMzBmNDI5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uY3BwCkBAIC0xMzcxLDE1ICsxMzcxLDE1IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soQ2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
CiAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwog
fQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBv
cnRlZFZpZGVvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0Nv
ZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiLCAiVl9WUDkiIH0pOworICAgIHN0YXRpYyBhdXRvIGNv
ZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiX3MsICJWX1ZQOSJfcyB9KTsKICAgICByZXR1cm4g
Y29kZWNzOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0
ZWRBdWRpb0NvZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMiLCAiQV9PUFVTIiB9KTsKKyAgICBz
dGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+KHsgIkFfVk9SQklTIl9zLCAiQV9PUFVTIl9z
IH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
aAppbmRleCBmMGQ2YTVmZDZmMGY2YzJiMzg0ZjkyZjc0OGY0YzliYTVkOTFiOGQ0Li42NDFlNDcx
ODZlYWYzMjc2MGUxODI3NWFkM2Q4ZDUwNDZkNWM3MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTIzNSw4
ICsyMzYsOCBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDog
cHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZQogCiAgICAgVHJhY2tEYXRhKiB0cmFj
a0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBzdXBwb3J0ZWRWaWRlb0NvZGVjcygpOwotICAgIHN0YXRpYyBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIHN1cHBvcnRlZEF1ZGlvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRW
aWRlb0NvZGVjcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKIAogICAgIC8v
IHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9uRWxlbWVudEJlZ2luKGNvbnN0IHdl
Ym06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiopIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IDg4MGNiYmEwNGM4ZWQw
YjdiZjNiOGQyOTUzNTE0MmM1Mjc3Y2JhYWYuLmZlMGVkMzE0NDExNDhlZTE1M2IzNDZlNDUzNTQ1
NTU5MjZjM2E3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDMsOSArNDQsOSBAQCBTVkdSZXNv
dXJjZXM6OlNWR1Jlc291cmNlcygpCiB7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+
JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVyTWFza2Vy
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gImNvbnRhaW5lciBlbGVtZW50
cyI6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUNvbnRhaW5lckVs
ZW1lbnQKICAgICAgICAgLy8gImdyYXBoaWNzIGVsZW1lbnRzIiA6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUdyYXBoaWNzRWxlbWVudApAQCAtOTIsOSArOTMsOSBA
QCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQog
ICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmxpbmVUYWctPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6cGF0aFRhZy0+bG9jYWxO
YW1lKCkpOwpAQCAtMTA1LDkgKzEwNiw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxB
dG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRh
Z3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBz
X3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3Rh
Z0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZH
TmFtZXM6OmFsdEdseXBoVGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQo
KS5hZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy0+bG9jYWxOYW1lKCkpOwpAQCAtMTI2LDkgKzEyNyw5
IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiAgICAg
cmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWlu
YWJsZVJlc291cmNlVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6Omxp
bmVhckdyYWRpZW50VGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy0+bG9jYWxOYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUFkanVzdGVyLmNwcAppbmRleCA5NzU4YTI3ODM5YTJiODE4NjQ0YWNlYzJmYzg4YWMxN2Ux
ODMwZmRmLi5lNmFhMWI1Y2QxYmM4OTgzMzQwMTI3NmU1MzZmYWY0MDBjMmQ2Zjg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKQEAgLTQ5Nyw3ICs0OTgsNyBAQCB2b2lkIEFk
anVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNl
ckFnZW50QXBwZWFyYW5jZQogc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JE
aXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEhU
TUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7CiAgICAgICAgICAgICAmYnJUYWcu
Z2V0KCksCiAgICAgICAgICAgICAmd2JyVGFnLmdldCgpLApAQCAtNTE3LDcgKzUxOCw4IEBAIHN0
YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCiAgICAg
ICAgICAgICAmc2VsZWN0VGFnLmdldCgpLAogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0
b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkK
ICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4g
c2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCmluZGV4IGU0
YWFhYzA0Njg2YThjMjU4MzgyNTY5NGYyNDI4Zjk5ZTI4YTE3ODcuLjcxMjY4MGE1MGM5ODJkMWMy
MjkwM2VkNDU4YWRkNDNkMTc1NWVjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0xMjcsNyArMTI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKFN0cmluZ1ZpZXcgc3RyaW5nKQogYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1
dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRy
aWJ1dGVzKHNldCk7CiAgICAgICAgIHNldC5hZGQoewogICAgICAgICAgICAgU1ZHTmFtZXM6OnZh
bHVlc0F0dHIuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNGYyNzA0ZTQx
MDU2ZWNmNDEzZmQzNWZhMWY5M2ExY2U4ODE3ZWI1NC4uOWMxNDBjYzFkNGUwMzhhNDM2MzhjYjZk
YjJjNmIwY2FhMzQyY2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTUsMTMg
KzU1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChTVkdF
bGVtZW50KTsKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwg
Q1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpCitz
dGF0aWMgTkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxBdG9tU3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9w
ZXJ0eUlETWFwKCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIHVzaW5n
IG5hbWVzcGFjZSBTVkdOYW1lczsKQEAgLTE0MSwxNiArMTQyLDE2IEBAIHN0YXRpYyBORVZFUl9J
TkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJp
YnV0ZU5hbWVUCiAgICAgICAgICZ5QXR0ci5nZXQoKSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ1NTUHJvcGVydHlJRD4gbWFwOwog
CiAgICAgZm9yIChhdXRvJiBuYW1lIDogYXR0cmlidXRlTmFtZXMpIHsKICAgICAgICAgY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5h
ZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsKKyAgICAgICAg
bWFwLmFkZChsb2NhbE5hbWUsIGNzc1Byb3BlcnR5SUQobG9jYWxOYW1lKSk7CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IFdoZW4gQ1NTIHN1cHBvcnRzICJ0cmFuc2Zvcm0tb3JpZ2luIiB0aGlzIHNw
ZWNpYWwgY2FzZSBjYW4gYmUgcmVtb3ZlZCwKICAgICAvLyBhbmQgd2UgY2FuIGFkZCB0cmFuc2Zv
cm1fb3JpZ2luQXR0ciB0byB0aGUgdGFibGUgYWJvdmUgaW5zdGVhZC4KLSAgICBtYXAuYWRkKHRy
YW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUoKS5pbXBsKCksIENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luKTsKKyAgICBtYXAuYWRkKHRyYW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUo
KSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOwogCiAgICAgcmV0dXJuIG1hcDsKIH0KQEAg
LTcyNCw3ICs3MjUsNyBAQCBRdWFsaWZpZWROYW1lIFNWR0VsZW1lbnQ6OmFuaW1hdGFibGVBdHRy
aWJ1dGVGb3JOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZQogICAgICAgICAgICAgJlNW
R05hbWVzOjp6QXR0ci5nZXQoKSwKICAgICAgICAgICAgICZTVkdOYW1lczo6aHJlZkF0dHIuZ2V0
KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFt
ZT4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUg
OiBuYW1lcykgewogICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKG5hbWUtPmxv
Y2FsTmFtZSgpLCAqbmFtZSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNzgwLDcgKzc4MSw3IEBAIENTU1Byb3BlcnR5SUQg
U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYKICAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKIAogICAgIHN0YXRp
YyBjb25zdCBhdXRvIHByb3BlcnRpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlQXR0cmli
dXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpKTsKLSAgICByZXR1cm4gcHJvcGVydGllcy5nZXQo
KS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydGll
cy5nZXQoKS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkpOwogfQogCiBib29sIFNWR0VsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAppbmRleCAxZDJjZDk3OGVkMTMyMzZkNmFlNmE3OGFkNmI3
NGM2MDI4NzExNzJmLi5jNTgyMzEwYWZhZGNlNWYyYjY1NzA5OTZhNWZhNDQ1NTYxZThlZjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNWR1Rlc3Rz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IG1fY29udGV4dEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgp
OwogfQogCi12b2lkIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit2b2lkIFNWR1Rlc3RzOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKIHsKICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChyZXF1aXJlZEZlYXR1cmVzQXR0cik7CiAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQocmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGVzdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCmluZGV4IGE5
YzJhY2UwYTMwYzQ1MGU5ZDlkMjgxOTExNTI5NzZjNTIyYThjNWIuLjBjMjUyMTY2YWFkYTI2YWIx
Zjk2YjhhNDExZTJhYjBiMzlkOTk1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCkBAIC0yMyw2ICsy
Myw3IEBACiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU1ZHU3RyaW5n
TGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBTVkdUZXN0cyB7CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaGFzRmVhdHVyZUZvckxlZ2FjeUJpbmRpbmdzKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IGUwNWZiNTNjMDE5OTcxNmIzNDU2Zjc3MmRlYjk4NWZl
YjBmMGM3MTEuLmZhNzUzOTI4NzgyYTNjNDNkM2EyNDIyMmI4ZjRmYjM3NzExMTExMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzcsMTQgKzE3OCwxNCBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQo
KQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCiB7CiAgICAgLy8gU3BlYzogIkFueSAnc3Zn
JywgJ3N5bWJvbCcsICdnJywgZ3JhcGhpY3MgZWxlbWVudCBvciBvdGhlciAndXNlJyBpcyBwb3Rl
bnRpYWxseSBhIHRlbXBsYXRlIG9iamVjdCB0aGF0IGNhbiBiZSByZS11c2VkCiAgICAgLy8gKGku
ZS4sICJpbnN0YW5jZWQiKSBpbiB0aGUgU1ZHIGRvY3VtZW50IHZpYSBhICd1c2UnIGVsZW1lbnQu
IgogICAgIC8vICJHcmFwaGljcyBFbGVtZW50IiBpcyBkZWZpbmVkIGFzICdjaXJjbGUnLCAnZWxs
aXBzZScsICdpbWFnZScsICdsaW5lJywgJ3BhdGgnLCAncG9seWdvbicsICdwb2x5bGluZScsICdy
ZWN0JywgJ3RleHQnCiAgICAgLy8gRXhjbHVkZWQgYXJlIGFueXRoaW5nIHRoYXQgaXMgdXNlZCBi
eSByZWZlcmVuY2Ugb3IgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgdG8gYXBwZWFyIG9uY2UgaW4gYSBk
b2N1bWVudC4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0gICAgSGFzaFNldDxBdG9t
U3RyaW5nPiBzZXQ7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PEF0b21TdHJpbmc+IHNldDsKICAgICBmb3IgKGF1dG8mIHRhZyA6IHsgYVRhZy5nZXQoKSwgY2ly
Y2xlVGFnLmdldCgpLCBkZXNjVGFnLmdldCgpLCBlbGxpcHNlVGFnLmdldCgpLCBnVGFnLmdldCgp
LCBpbWFnZVRhZy5nZXQoKSwgbGluZVRhZy5nZXQoKSwgbWV0YWRhdGFUYWcuZ2V0KCksIHBhdGhU
YWcuZ2V0KCksIHBvbHlnb25UYWcuZ2V0KCksIHBvbHlsaW5lVGFnLmdldCgpLCByZWN0VGFnLmdl
dCgpLCBzdmdUYWcuZ2V0KCksIHN3aXRjaFRhZy5nZXQoKSwgc3ltYm9sVGFnLmdldCgpLCB0ZXh0
VGFnLmdldCgpLCB0ZXh0UGF0aFRhZy5nZXQoKSwgdGl0bGVUYWcuZ2V0KCksIHRyZWZUYWcuZ2V0
KCksIHRzcGFuVGFnLmdldCgpLCB1c2VUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0YWcu
bG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBzZXQ7CkBAIC0xOTIsNyArMTkzLDcgQEAgc3RhdGlj
IEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNEaXNhbGxvd2VkRWxlbWVudChjb25zdCBTVkdFbGVtZW50JiBlbGVtZW50
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzZXQg
PSBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9
IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CiAgICAgcmV0dXJuICFzZXQuZ2V0KCkuY29udGFp
bnMoZWxlbWVudC5sb2NhbE5hbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggNjgxOTFiOTRhNDAwMTA1ZmIyNmExNjky
ZTZmMDJkYjU3OGNiYWVjZC4uZTM0YTFhZTc2ZGE0YWZkNjA0OWRiY2E2MGI5MGZjY2Y5MjdlZWY5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYyLDcgKzQ2Myw3IEBAIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5n
LCBCZWdpbk9yRW5kIGJlZ2luCiAKIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIHN0YXRpYyBjb25z
dCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRl
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBTVkdOYW1lczo6YmVnaW5BdHRyLAogICAg
ICAgICBTVkdOYW1lczo6ZW5kQXR0ciwKICAgICAgICAgU1ZHTmFtZXM6OmR1ckF0dHIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCA5ZmRmYmE4YjEwMjNhZTY1Y2IyZmY4
YzJmYWY0MjMwNDBhMDM4YTA2Li4xMGYwYzIyZDRiNjdjZTVmZmEzYjgzMDY5Y2JmNDA2MDUxMjFl
ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02NjgsNDQgKzY2OSw0NCBAQCBzdHJ1Y3QgRnVuY3Rpb25NYXBWYWx1
ZSB7CiAgICAgSW50ZXJ2YWwgYXJndW1lbnRDb3VudEludGVydmFsOwogfTsKIAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCitzdGF0
aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgRnVuY3Rp
b25NYXBWYWx1ZT4gY3JlYXRlRnVuY3Rpb25NYXAoKQogewogICAgIHN0cnVjdCBGdW5jdGlvbk1h
cHBpbmcgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBBU0NJSUxpdGVyYWwg
bmFtZTsKICAgICAgICAgRnVuY3Rpb25NYXBWYWx1ZSBmdW5jdGlvbjsKICAgICB9OwogCiAgICAg
c3RhdGljIGNvbnN0IEZ1bmN0aW9uTWFwcGluZyBmdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAi
Ym9vbGVhbiIsIHsgY3JlYXRlRnVuY3Rpb25Cb29sZWFuLCAxIH0gfSwKLSAgICAgICAgeyAiY2Vp
bGluZyIsIHsgY3JlYXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKLSAgICAgICAgeyAiY29uY2F0
IiwgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwgSW50ZXJ2YWw6OkluZikgfSB9
LAotICAgICAgICB7ICJjb250YWlucyIsIHsgY3JlYXRlRnVuY3Rpb25Db250YWlucywgMiB9IH0s
Ci0gICAgICAgIHsgImNvdW50IiwgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKLSAgICAg
ICAgeyAiZmFsc2UiLCB7IGNyZWF0ZUZ1bmN0aW9uRmFsc2UsIDAgfSB9LAotICAgICAgICB7ICJm
bG9vciIsIHsgY3JlYXRlRnVuY3Rpb25GbG9vciwgMSB9IH0sCi0gICAgICAgIHsgImlkIiwgeyBj
cmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKLSAgICAgICAgeyAibGFuZyIsIHsgY3JlYXRlRnVuY3Rp
b25MYW5nLCAxIH0gfSwKLSAgICAgICAgeyAibGFzdCIsIHsgY3JlYXRlRnVuY3Rpb25MYXN0LCAw
IH0gfSwKLSAgICAgICAgeyAibG9jYWwtbmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUs
IEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25O
YW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5hbWVzcGFjZS11cmkiLCB7IGNy
ZWF0ZUZ1bmN0aW9uTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsg
Im5vcm1hbGl6ZS1zcGFjZSIsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2
YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJub3QiLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0g
fSwKLSAgICAgICAgeyAibnVtYmVyIiwgeyBjcmVhdGVGdW5jdGlvbk51bWJlciwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAotICAgICAgICB7ICJwb3NpdGlvbiIsIHsgY3JlYXRlRnVuY3Rpb25Qb3NpdGlv
biwgMCB9IH0sCi0gICAgICAgIHsgInJvdW5kIiwgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0g
fSwKLSAgICAgICAgeyAic3RhcnRzLXdpdGgiLCB7IGNyZWF0ZUZ1bmN0aW9uU3RhcnRzV2l0aCwg
MiB9IH0sCi0gICAgICAgIHsgInN0cmluZyIsIHsgY3JlYXRlRnVuY3Rpb25TdHJpbmcsIEludGVy
dmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgY3JlYXRlRnVuY3Rp
b25TdHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3Vic3RyaW5n
IiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZywgSW50ZXJ2YWwoMiwgMykgfSB9LAotICAgICAg
ICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIg
fSB9LAotICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0
cmluZ0JlZm9yZSwgMiB9IH0sCi0gICAgICAgIHsgInN1bSIsIHsgY3JlYXRlRnVuY3Rpb25TdW0s
IDEgfSB9LAotICAgICAgICB7ICJ0cmFuc2xhdGUiLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRl
LCAzIH0gfSwKLSAgICAgICAgeyAidHJ1ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcnVlLCAwIH0gfSwK
KyAgICAgICAgeyAiYm9vbGVhbiJfcywgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9LAor
ICAgICAgICB7ICJjZWlsaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ2VpbGluZywgMSB9IH0sCisg
ICAgICAgIHsgImNvbmNhdCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwg
SW50ZXJ2YWw6OkluZikgfSB9LAorICAgICAgICB7ICJjb250YWlucyJfcywgeyBjcmVhdGVGdW5j
dGlvbkNvbnRhaW5zLCAyIH0gfSwKKyAgICAgICAgeyAiY291bnQiX3MsIHsgY3JlYXRlRnVuY3Rp
b25Db3VudCwgMSB9IH0sCisgICAgICAgIHsgImZhbHNlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmFs
c2UsIDAgfSB9LAorICAgICAgICB7ICJmbG9vciJfcywgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAx
IH0gfSwKKyAgICAgICAgeyAiaWQiX3MsIHsgY3JlYXRlRnVuY3Rpb25JZCwgMSB9IH0sCisgICAg
ICAgIHsgImxhbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25MYW5nLCAxIH0gfSwKKyAgICAgICAgeyAi
bGFzdCJfcywgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAorICAgICAgICB7ICJsb2NhbC1u
YW1lIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgIm5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgICAgIHsgIm5hbWVzcGFjZS11cmkiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3Bh
Y2VVUkksIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uTm9ybWFsaXplU3BhY2UsIEludGVydmFsKDAsIDEpIH0gfSwKKyAg
ICAgICAgeyAibm90Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0gfSwKKyAgICAgICAgeyAi
bnVtYmVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgInBvc2l0aW9uIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUG9zaXRpb24sIDAgfSB9LAor
ICAgICAgICB7ICJyb3VuZCJfcywgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0gfSwKKyAgICAg
ICAgeyAic3RhcnRzLXdpdGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwK
KyAgICAgICAgeyAic3RyaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nLCBJbnRlcnZhbCgw
LCAxKSB9IH0sCisgICAgICAgIHsgInN0cmluZy1sZW5ndGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25T
dHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0sCisgICAgICAg
IHsgInN1YnN0cmluZy1hZnRlciJfcywgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZ0FmdGVyLCAy
IH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWJlZm9yZSJfcywgeyBjcmVhdGVGdW5jdGlvblN1
YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisgICAgICAgIHsgInN1bSJfcywgeyBjcmVhdGVGdW5jdGlv
blN1bSwgMSB9IH0sCisgICAgICAgIHsgInRyYW5zbGF0ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRy
YW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIHsgInRydWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25UcnVl
LCAwIH0gfSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+
IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBGdW5jdGlvbk1hcFZhbHVlPiBtYXA7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0
aW9ucykKICAgICAgICAgbWFwLmFkZChmdW5jdGlvbi5uYW1lLCBmdW5jdGlvbi5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4IGRmYjQ5
ZjhiMmZlMjUzZTNhZGViZDZiNjE2NTRkMGM3OTBkNTg5NTAuLjg5ZjdlZDlkNzIyZjJhOWZjMTU5
YzlkZDViZWZmZDAzYzEzN2ZhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlhQYXRoUGF0aC5oIgogI2luY2x1ZGUgIlhQYXRoU3Rl
cC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzYsMjggKzc3LDI4IEBAIHN0YXRpYyBYTUxD
YXQgY2hhckNhdChVQ2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIE5vdFBhcnRPZk5hbWU7CiB9
CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gY3JlYXRlQXhpc05hbWVzTWFw
KCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQogewogICAgIHN0cnVjdCBBeGlzTmFt
ZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1l
OwogICAgICAgICBTdGVwOjpBeGlzIGF4aXM7CiAgICAgfTsKICAgICBjb25zdCBBeGlzTmFtZSBh
eGlzTmFtZUxpc3RbXSA9IHsKLSAgICAgICAgeyAiYW5jZXN0b3IiLCBTdGVwOjpBbmNlc3RvckF4
aXMgfSwKLSAgICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiIsIFN0ZXA6OkFuY2VzdG9yT3JTZWxm
QXhpcyB9LAotICAgICAgICB7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCi0g
ICAgICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCi0gICAgICAgIHsgImRlc2NlbmRh
bnQiLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAotICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNl
bGYiLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAotICAgICAgICB7ICJmb2xsb3dpbmci
LCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIiwg
U3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMgfSwKLSAgICAgICAgeyAibmFtZXNwYWNlIiwgU3Rl
cDo6TmFtZXNwYWNlQXhpcyB9LAotICAgICAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlz
IH0sCi0gICAgICAgIHsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKLSAgICAg
ICAgeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5nQXhpcyB9LAot
ICAgICAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMgfQorICAgICAgICB7ICJhbmNlc3RvciJf
cywgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAgICAgIHsgImFuY2VzdG9yLW9yLXNlbGYiX3Ms
IFN0ZXA6OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorICAgICAgICB7ICJhdHRyaWJ1dGUiX3MsIFN0
ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKKyAgICAgICAgeyAiY2hpbGQiX3MsIFN0ZXA6OkNoaWxkQXhp
cyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50Il9zLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAor
ICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNlbGYiX3MsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZB
eGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZyJfcywgU3RlcDo6Rm9sbG93aW5nQXhpcyB9LAor
ICAgICAgICB7ICJmb2xsb3dpbmctc2libGluZyJfcywgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4
aXMgfSwKKyAgICAgICAgeyAibmFtZXNwYWNlIl9zLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisg
ICAgICAgIHsgInBhcmVudCJfcywgU3RlcDo6UGFyZW50QXhpcyB9LAorICAgICAgICB7ICJwcmVj
ZWRpbmciX3MsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKKyAgICAgICAgeyAicHJlY2VkaW5nLXNp
YmxpbmciX3MsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCisgICAgICAgIHsgInNlbGYi
X3MsIFN0ZXA6OlNlbGZBeGlzIH0KICAgICB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpB
eGlzPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0
cmluZywgU3RlcDo6QXhpcz4gbWFwOwogICAgIGZvciAoYXV0byYgYXhpc05hbWUgOiBheGlzTmFt
ZUxpc3QpCiAgICAgICAgIG1hcC5hZGQoYXhpc05hbWUubmFtZSwgYXhpc05hbWUuYXhpcyk7CiAg
ICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg3YmQyOGViNDhhZTI0MDA2NTU4ZThmZjhlYWFmN2U2
N2YxODQ0MTEuLjZkYzYzMWI3ODkzNDgzMjY0ZTBjNWEwOWM3ZWJiZTNkY2RjZTdlMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtNDksOCArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0yNzQsMTgg
KzI3NCwxOCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1h
VjEoKQogCiBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFB
bHRlcm5hdGUoKQogewotICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5z
XCIgKGRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQg
Tk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEws
IGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEws
IGlzUHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5P
VCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxM
LGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCki
OworICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5zXCIgKGRvbWFpbklE
IElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9UIE5VTEwgVU5J
UVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsIGhhZFVzZXJJbnRl
cmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBS
RUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsIGlzUHJldmFsZW50
IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRh
UmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMLGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7CiB9CiAKIHN0
YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1ucygp
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChW
ZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWluSUQiLCAiZGVzdGluYXRpb25TaXRlRG9t
YWluSUQiLCAic291cmNlSUQiLCAidGltZU9mQWRDbGljayIsICJ0b2tlbiIsICJzaWduYXR1cmUi
LCAia2V5SUQiIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJ0
b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZEF0dHJp
YnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJkZXN0
aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
IiwgInByaW9yaXR5IiwgInRpbWVPZkFkQ2xpY2siLCAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2UiLCAidG9rZW4iLCAic2lnbmF0dXJlIiwgImtleUlEIiwgImVhcmxpZXN0VGltZVRvU2VuZFRv
RGVzdGluYXRpb24iIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgImF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEiX3MsICJwcmlvcml0eSJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MsICJl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCkBAIC0yOTQsOSArMjk0LDkgQEAgc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVh
dGVUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHNjaGVtYSkKICAgICByZXR1cm4gc2NoZW1hLmNv
bnRhaW5zKCJSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwogfQogCi1zdGF0aWMgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNyZWF0ZVRhYmxlUXVlcmllcygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgY3JlYXRlVGFibGVRdWVyaWVzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjcmVhdGVUYWJsZVF1
ZXJpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geworICAg
IHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKICAg
ICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBjcmVhdGVPYnNlcnZlZERvbWFpbn0sCiAgICAg
ICAgIHsgIlRvcExldmVsRG9tYWlucyJfcywgY3JlYXRlVG9wTGV2ZWxEb21haW5zfSwKICAgICAg
ICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBjcmVhdGVTdG9yYWdl
QWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnN9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZTQ4ZTgzMjZhMmE3MzVlZjkyNGY4NzM3MmRjNzg2Mzlk
ODIzOTMzMC4uYmIyYjNjNDYwMWMwZTM4NzJhY2MxYWUzM2M5NTg3YzQ4MjNiZmQzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00OTcsOCArNDk3
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pj4gOiBWZWN0b3JBcmd1bWVudENvZGVyPHN0ZDo6
aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUsIFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5PiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2hUYWJsZVRy
YWl0cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hNYXBUeXBlOwogCiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBl
JiBoYXNoTWFwKQogICAgIHsKQEAgLTUxNCw2ICs1MTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFw
VHlwZSBoYXNoTWFwOworICAgICAgICBoYXNoTWFwLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaGFz
aE1hcFNpemUpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaGFzaE1hcFNpemU7
ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7CiAgICAgICAgICAgICBk
ZWNvZGVyID4+IGtleTsKQEAgLTU1MSw4ICs1NTIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aQogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtl
eUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4gewotICAgIHR5cGVkZWYgSGFzaFNldDxLZXlB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaFNldFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtleUFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CisgICAgdHlwZWRlZiBI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhh
c2hTZXRUeXBlOwogCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsKQEAgLTU3OSw2ICs1ODAsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZz4gc3RydWN0IEFyZ3VtZQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgICAgICBIYXNoU2V0VHlwZSBoYXNoU2V0OworICAgICAgICBoYXNoU2V0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaGFzaFNldFNpemUpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBp
IDwgaGFzaFNldFNpemU7ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7
CiAgICAgICAgICAgICBkZWNvZGVyID4+IGtleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KaW5kZXggNDkyYjljNjQ0MmJl
MTU0ZDUxZGRmNzY5ZjU5M2U4MDg0ZWIxYmQ2ZC4uOWE0ZDc4MDllNjNlNDg1MjQyNWYyMDU3Yzg2
MDEzMmE1OGE1YTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVm
YXVsdFdlYkJyb3dzZXJDaGVja3MubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2Ev
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvVmVyc2lvbkNoZWNrcy5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNp
bXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTU4LDcgKzU5LDcgQEAgT3B0aW9uYWw8VmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gZ2V0QXBwQm91bmREb21haW5zVGVzdGluZyhj
b25zdCBTdHIKICAgICBpZiAoYnVuZGxlSUQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4+IHsKKyAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gewogICAgICAgICB7ImluQXBwQnJv
d3NlclByaXZhY3lUZXN0SWRlbnRpZmllciJfcywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiB7IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoIjEyNy4wLjAuMSIpIH19LAogICAgIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IGJiY2VlNDE2
OTljMGQ1Zjg0ZGM2Yzc5MmFiNjQ0YzZmZGQ4MWQwZDcuLmNlNTZmOWNkNDYyODYwOTRjNmU0MTQx
MGVlYmI0Zjk0OWQ3ZWZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuY3BwCkBAIC01MiwxMyArNTIsMTMgQEAgdm9pZCBXZWJQcmVmZXJlbmNlc1N0b3Jl
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiBib29sIFdlYlByZWZlcmVu
Y2VzU3RvcmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYlByZWZlcmVuY2VzU3Rv
cmUmIHJlc3VsdCkKIHsKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmluZywgVmFsdWU+PiB2YWx1
ZXM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IHZhbHVlczsKICAgICBkZWNvZGVyID4+IHZhbHVl
czsKICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5t
X3ZhbHVlcyA9IFdURk1vdmUoKnZhbHVlcyk7CiAKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmlu
ZywgVmFsdWU+PiBvdmVycmlkZGVuRGVmYXVsdHM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IG92
ZXJyaWRkZW5EZWZhdWx0czsKICAgICBkZWNvZGVyID4+IG92ZXJyaWRkZW5EZWZhdWx0czsKICAg
ICBpZiAoIW92ZXJyaWRkZW5EZWZhdWx0cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IGM1ZmUzZmIzZmJiNjIx
NmRlYmUwMDA5ZGY1NTBjNWNhNmQ2ZjM2MDguLjRhM2Q4ZjJhNGU0Y2YwYzc4MWU5NzIyZjc3OTdk
ZjM2MTA2YzgxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJF
bmNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgV2ViUHJl
ZmVyZW5jZXNTdG9yZSB7CiAKICAgICB1c2luZyBWYWx1ZSA9IFZhcmlhbnQ8U3RyaW5nLCBib29s
LCB1aW50MzJfdCwgZG91YmxlPjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZhbHVl
PiBWYWx1ZU1hcDsKKyAgICB1c2luZyBWYWx1ZU1hcCA9IE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgVmFsdWU+OwogICAgIFZhbHVlTWFwIG1fdmFsdWVzOwogICAgIFZhbHVl
TWFwIG1fb3ZlcnJpZGRlbkRlZmF1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDJmMGFhYjVhOWI3ODI0
M2U5NzQ5NGI3NTQxNDQxY2E0ZTEzZjNiODcuLjA0MTc0OGI5MDQ0YWQyNTM2ODhlYWFjZWJhZjlh
OGZlNmU3ZjAwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC02NSw5ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdGF0aWMgY29uc3QgU2Vjb25kcyB1bmV4cGVjdGVkQWN0aXZpdHlEdXJhdGlvbiA9
IDEwX3M7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9y
bVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0
aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Moc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CiAg
ICAgICAgIFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3Jl
Il0ucmVzb3VyY2VQYXRoLnN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGgsCiAgICAgICAgIFtOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXS5yZXNvdXJjZVBh
dGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aAogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggNWE2NjIwMjI5MTMwNGJiZDczN2UxMTZi
ODg3YWM0Zjk5NjNhZjE0Yy4uNTlkODAwYWZiNDNiNzQ1MDM5YjBiNDgzMzUxZTQ4NDIzYzUzYTM2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0x
NjI0LDkgKzE2MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlQmFja2dyb3VuZFJl
c3BvbnNpdmVuZXNzVGltZXIoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJl
YWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxh
dGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IHBsYXRm
b3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiAgICAgcmV0dXJuIHBsYXRmb3JtUGF0aHNX
aXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggNjhkNjZjNjE1ZWJhNmU5N2IwYTNjODBkNDM0YjFiMTE0
OGIyZDA3Yy4uYWIxMzU1NTk2ZDU3MzM2NzFmZDMyMmUwNmMzMjUwMjZhOTc0OTMwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTU5LDYgKzU5LDcgQEAK
ICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogI2lmIEhBVkUoVklTSUJJTElUWV9QUk9Q
QUdBVElPTl9WSUVXKQpAQCAtNDc2LDcgKzQ3Nyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NQcm94eSA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHB1YmxpYyBSZXNwb25zaXZlbmVzc1RpbWVy
CiAgICAgYm9vbCBwbGF0Zm9ybUlzQmVpbmdEZWJ1Z2dlZCgpIGNvbnN0OwogICAgIGJvb2wgc2hv
dWxkQWxsb3dOb25WYWxpZEluamVjdGVkQ29kZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwor
ICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwogCiAgICAgUmVz
cG9uc2l2ZW5lc3NUaW1lciYgcmVzcG9uc2l2ZW5lc3NUaW1lcigpIHsgcmV0dXJuIG1fcmVzcG9u
c2l2ZW5lc3NUaW1lcjsgfQogICAgIHZvaWQgdXBkYXRlQmFja2dyb3VuZFJlc3BvbnNpdmVuZXNz
VGltZXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424810</attachid>
            <date>2021-03-31 13:12:59 -0700</date>
            <delta_ts>2021-03-31 23:55:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210331131258.patch</filename>
            <type>text/plain</type>
            <size>224450</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi41NGY4MmQ1OGYxNWEwMmUw
OTIyYThkYjBkODJmM2IzNDIyZDMzYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi5mY2FiZTNjZWMwMjQ5ODE4MDE2MTQ0NDY4MWMw
YTE2NzQyZDg4MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwOSBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hh
c2hNYXAuaDoKKyAgICAgICAgKFdURjo6WT46OnN3YXApOgorICAgICAgICAoV1RGOjpZPjo6c2l6
ZSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+OjpjYXBhY2l0eSBjb25zdCk6CisgICAgICAgIChX
VEY6Olk+Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmJlZ2luKToKKyAgICAg
ICAgKFdURjo6WT46OmVuZCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbiBjb25zdCk6CisgICAg
ICAgIChXVEY6Olk+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZmluZCk6CisgICAg
ICAgIChXVEY6Olk+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmNvbnRhaW5zIGNv
bnN0KToKKyAgICAgICAgKFdURjo6WT46OmdldCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpp
bmxpbmVHZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmlubGluZVNl
dCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lQWRkKToKKyAgICAgICAg
KFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUpOgorICAgICAgICAoV1RGOjpUYWJs
ZVRyYWl0c0FyZz46OnNldCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6YWRkKToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKToKKyAgICAgICAgKFdURjo6
VGFibGVUcmFpdHNBcmc+OjplbnN1cmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3ZlKToKKyAg
ICAgICAgKFdURjo6WT46OnJlbW92ZUlmKToKKyAgICAgICAgKFdURjo6WT46OmNsZWFyKToKKyAg
ICAgICAgKFdURjo6WT46OnRha2UpOgorICAgICAgICAoV1RGOjpZPjo6Y2hlY2tDb25zaXN0ZW5j
eSBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojppc1ZhbGlkS2V5KToKKyAgICAgICAgKFdURjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RGOjpY
Pjo6c3dhcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpzaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6WD46OmNhcGFjaXR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmlzRW1wdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVn
aW4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmVuZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y29u
dGFpbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Z2V0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZVNldCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0c0FyZz46OmlubGluZUVuc3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0c0FyZz46OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBl
ZFRyYWl0c0FyZz46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0Fy
Zz46OmZhc3RBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+Ojpl
bnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHM+OjpnZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6WD46OnJlbW92ZUlmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNsZWFyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Olg+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNoZWNr
Q29uc2lzdGVuY3kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNWYWxpZEtl
eSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6Vz46
OnN3YXApOgorICAgICAgICAoV1RGOjpXPjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+
OjpjYXBhY2l0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojppc0VtcHR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olc+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpmaW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
VEY6OlRhYmxlVHJhaXRzPjo6ZW5zdXJlKToKKyAgICAgICAgKFdURjo6Vz46OmFkZCk6CisgICAg
ICAgIChXVEY6Olc+OjphZGRWb2lkKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjphZGQp
OgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Vz46OnJlbW92ZUlm
KToKKyAgICAgICAgKFdURjo6Vz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6Vz46OnRha2UpOgor
ICAgICAgICAoV1RGOjpXPjo6dGFrZUFueSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+Ojp0YWtlKToKKyAgICAgICAgKFdU
Rjo6Vz46OmlzVmFsaWRWYWx1ZSk6CisgICAgICAgIChXVEY6Oj0gY29uc3QpOgorICAgICAgICAo
V1RGOjpXPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlY+Ojpzd2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpW
Pjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpiZWdpbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjplbmQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojpj
b250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmZpbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpjb250YWlucyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YWRkVm9pZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlY+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpWPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlQW55KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6VHJhaXRzPjo6dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc1ZhbGlkVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjphZGRJ
dGVyYXRvcik6CisgICAgICAgIChXVEY6OnJlbW92ZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
aW52YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6fkhhc2hUYWJs
ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9u
KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
OjppbnZhbGlkYXRlSXRlcmF0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9v
ZEhhc2hNYXAuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hTZXQuaDogQWRk
ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdp
biBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RG
OjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hU
YWJsZTo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFk
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RI
YXNoVGFibGU6OmlzRW1wdHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmlzRW1wdHlPckRlbGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tU
YWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9v
ZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjpzaG91bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OnNob3VsZEV4cGFuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJs
ZTo6c2hvdWxkU2hyaW5rIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpzaHJpbmspOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlc2lyZWRJbmRl
eCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cHJvYmVEaXN0YW5jZSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlQ29uc3RJdGVyYXRvciBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZEl0ZXJhdG9yKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25Hb29kQ29uc3RJdGVyYXRv
ciBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNv
bnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
dGFibGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJs
ZVNpemVNYXNrIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjprZXlD
b3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpjaGVja0tleSk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+Ojpsb29rdXApOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5
Pjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmluaXRpYWxpemVC
dWNrZXQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkKToKKyAgICAgICAgKFdURjo6
U2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZUZvckFkZCk6CisgICAgICAgIChXVEY6
OlNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUpOgorICAgICAgICAoV1RGOjpTaXplUG9s
aWN5Pjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92
ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpTaXpl
UG9saWN5Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWxs
b2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZXhwYW5kKToKKyAgICAgICAgKFdURjo6U2l6
ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OnNocmlua1RvQmVzdFNpemUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVoYXNo
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNsZWFyKToKKyAgICAgICAgKFdURjo6U2l6
ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpj
aGVja1RhYmxlQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSBjb25zdCk6CisgICAgICAgICogd3RmL3Rl
eHQvQXRvbVN0cmluZ0hhc2guaDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5j
cHA6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcDoKKyAgICAgICAgKFdU
Rjo6QXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKToKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp0YWJs
ZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaC5oOgorCiAyMDIxLTAzLTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU2VydmljZSBXb3JrZXIgc2Ny
aXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGluIHRoZSBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA2MWQ3ZGVkZWU2NmI0OTYwMGJmYmRkNzBhNTQyZGMwZWM5NDBkYWYwLi4xNTRmMTJhN2Jl
NzM1MDhjZDdlZjdjNWJhZmNlY2E3N2FmNTdhZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcg
QEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFjYXBhYmlsaXRp
ZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVja2V0TUlNRVR5
cGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cG9wdXBWYWx1ZSBjb25zdCk6
CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQXR0YWNo
QXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAg
ICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50TmFtZXNIZWFkZXJGaWxlKToK
KyAgICAgICAgKHByaW50RmFjdG9yeUNwcEZpbGUpOgorICAgICAgICAocHJpbnRXcmFwcGVyRmFj
dG9yeUNwcEZpbGUpOgorICAgICAgICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbGVt
ZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1Byb2hpYml0ZWRQYXJhZ3Jh
cGhDaGlsZCk6CisgICAgICAgICogaHRtbC9BdXRvZmlsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpmaWVsZE5hbWVNYXApOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZXZlbnRzUGFyZW50T2JqZWN0RnJvbUV4cG9zdXJlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2FzZU1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RTVkdUYWdOYW1lQ2FzZSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGp1c3RBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcmVpZ25BdHRy
aWJ1dGVzTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzV2l0aFByZWZpeCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uT3ZlcmxheTo6ZHJhd1JlY3QpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2VyVGlt
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRp
b25UaW1pbmdGdW5jdGlvbk1hcCk6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVS
ZWdpc3RyeUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5zaW9uc0Zvck1JTUVUeXBl
TWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1c2VCYWNrc2xhc2hBc1llblNpZ25Gb3JGYW1pbHkpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFt
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkSW5pdERhdGFUeXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SEVWQ1V0aWxpdGllc0NvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29kZWNUeXBlRm9yRG9W
aUNvZGVjU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcHBlckZp
bHRlck1hc2tlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVGFncyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsQW5kU3Ryb2tlVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFpbmFi
bGVSZXNvdXJjZVRhZ3MpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6Omhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNv
bnRlbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0
cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50OjphbmltYXRhYmxlQXR0cmlidXRlRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZSk6CisgICAgICAgICogc3Zn
L1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHVGVzdHMuaDoKKyAgICAgICAgKiBzdmcvU1ZH
VXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBbGxvd2VkRWxlbWVudFNl
dCk6CisgICAgICAgIChXZWJDb3JlOjppc0Rpc2FsbG93ZWRFbGVtZW50KToKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbk1hcCk6
CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpjcmVhdGVBeGlzTmFtZXNNYXApOgorCiAyMDIxLTAzLTMwICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIENvbXB1dGVkIHN0eWxlIGZvciBhIGJvcmRlci1y
YWRpdXMgY29ybmVyIHNob3VsZCBuZXZlciBiZSAwcHggd2hlbiB0aGUgcHJvdmlkZWQgd2lkdGgg
aXNuJ3QgMHB4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkY2Q1MGEyYzUwNDhjNGM5NDU2Zjg4YzMzMWY5NDc0MWMw
Mzk3MjQuLjI0YzQ1OTQxZDgzOTZhYWYxMDNjYTdkOGY5Y2RmNjMyM2I3NmM5NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDMtMzEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRl
KToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAg
ICAgKFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6
OmNyZWF0ZVRhYmxlUXVlcmllcyk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmg6CisgICAgICAgICogU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1t
OgorICAgICAgICAoV2ViS2l0OjpnZXRBcHBCb3VuZERvbWFpbnNUZXN0aW5nKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
ZWZlcmVuY2VzU3RvcmU6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhB
c3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhB
c3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5o
OgorCiAyMDIxLTAzLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdIEZhbGwgYmFjayB0byBjb250ZXh0IG1lbnUgcHJlc2VudGF0aW9uIGFm
dGVyIGxvbmcgcHJlc3NpbmcgaW1hZ2Ugb3ZlcmxheSB0ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDJhMDg4N2U3M2U1NzFmMDA4
ZTg4NGRiMzQzMDQ4NmQzNDIwMDcyMjAuLjdmOGFlNGYxNDBlZTc0M2QwZmU1ZjM5NTQzODdiZTNj
ZmQ2ZDVmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IENoYXJCdWZmZXJTZWFjaGVyIHsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgUHJpdmF0ZVN5
bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmluZz4mIHNl
dCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1
ZmZlcikKK3N0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBsKGNv
bnN0IEJ1aWx0aW5OYW1lczo6UHJpdmF0ZU5hbWVTZXQmIHNldCwgY29uc3QgV1RGOjpIYXNoVHJh
bnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0
ZXJhdG9yID0gc2V0LmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZl
cik7CiAgICAgaWYgKGl0ZXJhdG9yID09IHNldC5lbmQoKSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBz
dGF0aWMgUHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNo
U2V0PFN0cmluZz4mIHNldCwgY29ucwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPiYgbWFwLCBjb25zdCBXVEY6Okhhc2hUcmFuc2xh
dG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFN5bWJvbEltcGwq
IGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpXZWxsS25vd25T
eW1ib2xNYXAmIG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFj
dGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQ8Q2hhckJ1
ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yID09
IG1hcC5lbmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaAppbmRleCAzMTk0NWJmM2UxNmNkMzA0ZThkODgyOWIxOTk3MWRhN2NjY2UzOWEyLi4wMGQ5
NmQzYzc0NDVlYWE2YjQ4M2Q0MDlhZDRmODc4NWRiMzdjNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50
aWZpZXJzLmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0xOTksNiArMjAxLDkgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdWlsdGluTmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICAKIHB1YmxpYzoKKyAgICB1c2luZyBQcml2YXRlTmFtZVNldCA9IE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+OworICAgIHVzaW5nIFdlbGxL
bm93blN5bWJvbE1hcCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxT
dHJpbmcsIFN5bWJvbEltcGwqPjsKKwogICAgIEJ1aWx0aW5OYW1lcyhWTSYsIENvbW1vbklkZW50
aWZpZXJzKik7CiAKICAgICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWUoY29u
c3QgSWRlbnRpZmllciYpIGNvbnN0OwpAQCAtMjMyLDggKzIzNyw2IEBAIGNsYXNzIEJ1aWx0aW5O
YW1lcyB7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1OYW1lOwogICAgIGNv
bnN0IEpTQzo6SWRlbnRpZmllciBtX2RvbGxhclZNUHJpdmF0ZU5hbWU7CiAgICAgY29uc3QgSlND
OjpJZGVudGlmaWVyIG1fcG9seVByb3RvUHJpdmF0ZU5hbWU7Ci0gICAgdXNpbmcgUHJpdmF0ZU5h
bWVTZXQgPSBIYXNoU2V0PFN0cmluZz47Ci0gICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFwID0g
SGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKICAgICBQcml2YXRlTmFtZVNldCBtX3ByaXZh
dGVOYW1lU2V0OwogICAgIFdlbGxLbm93blN5bWJvbE1hcCBtX3dlbGxLbm93blN5bWJvbHNNYXA7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKaW5kZXggNWNmNGZhNTVjM2VlZWRlZjRmOGVhOTNjZDYx
ZDQ2NjFlYjY3ZjgyYS4uNzg1N2RiYTAxMTU4YTc2ZjdlMDE2YTIzNzkzNTA1ZDZkYTViMzBjMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVJbnRyaW5zaWNSZWdpc3RyeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIxMiw3ICsyMTMsNyBA
QCBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5IHsKIAogcHJpdmF0ZToKICAgICBWTSYg
bV92bTsKLSAgICBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVu
dGlmaWVyUmVwSGFzaD4gbV9ieXRlY29kZUludHJpbnNpY01hcDsKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgRW50
cnksIElkZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmluc2ljTWFwOwogCiAjZGVmaW5l
IEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKG5hbWUp
IFN0cm9uZzxVbmtub3duPiBtXyMjbmFtZTsKICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJ
TlNJQ19DT05TVEFOVFNfU0lNUExFX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRS
SU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZTA5NWE4
NDRmNjZlNjQ0ZmE0NGFmNzE2ZWNiNDU0MzQ1ZTM5NjJlMS4uMTBmNDU1M2M1YzI5ZWI5N2JiMDI0
YmVjMWU1MTg3MjQwNmU1OGI5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTg4LDYgKzg4LDcg
QEAKICNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPGRpcmVj
dC5oPgpAQCAtMTI4NCwxMSArMTI4NSw3NSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJpbnRJ
bnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbAogCiBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZE91dCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAg
U3RvcFdhdGNoIHN0b3BXYXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAg
ICAgIEZhc3RSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gc3RyaW5nVGFibGU7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nVGFi
bGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4o
c3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFl
NjsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkp
OworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChpICYgMHgxKQorICAgICAgICAgICAgICAgIHN0cmluZ1RhYmxlLnJlbW92ZShTdHJpbmc6Om51
bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuKHN0cmluZ1RhYmxlLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAgICAg
ICAgICAgaWYgKGkgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmluZ1RhYmxl
LmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nVGFi
bGUuYWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0cmluZ1RhYmxlLmNvbnRhaW5zKFN0cmluZzo6bnVtYmVyKGkpKSk7
CisgICAgICAgICAgICAgICAgc3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nTG4oc3RyaW5nVGFibGUu
c2l6ZSgpKTsKKyAgICB9CisgICAgc3RvcFdhdGNoLnN0b3AoKTsKKyAgICBkYXRhTG9nTG4oc3Rv
cFdhdGNoLmdldEVsYXBzZWRNUygpKTsKKyNlbmRpZgogICAgIHJldHVybiBwcmludEludGVybmFs
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdGRvdXQpOwogfQogCiBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25QcmludFN0ZEVyciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKKyNpZiAwCisgICAgU3RvcFdhdGNoIHN0b3BX
YXRjaDsKKyAgICBzdG9wV2F0Y2guc3RhcnQoKTsKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiBzdHJpbmdUYWJsZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDFlNjsg
KytpKSB7CisgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOwor
ICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMWU2OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmlu
Z1RhYmxlLmFkZChTdHJpbmc6Om51bWJlcihpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxv
Z0xuKHN0cmluZ1RhYmxlLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAxZTY7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJiAweDEpCisgICAgICAgICAgICAgICAg
c3RyaW5nVGFibGUucmVtb3ZlKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICAgICAgfQorICAgICAg
ICBkYXRhTG9nTG4oc3RyaW5nVGFibGUuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDFlNjsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAmIDB4MSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVCghc3RyaW5nVGFibGUuY29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkp
KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJsZS5hZGQoU3RyaW5nOjpudW1iZXIoaSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RyaW5nVGFibGUu
Y29udGFpbnMoU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdUYWJs
ZS5yZW1vdmUoU3RyaW5nOjpudW1iZXIoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGRhdGFMb2dMbihzdHJpbmdUYWJsZS5zaXplKCkpOworICAgIH0KKyAgICBzdG9wV2F0
Y2guc3RvcCgpOworICAgIGRhdGFMb2dMbihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpOworI2Vu
ZGlmCiAgICAgcmV0dXJuIHByaW50SW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHN0
ZGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaApp
bmRleCA0NGQxY2ZkYmQ0OTQ5MTZlZGJmZmQ0ZjMxNGY3Y2Q1ZmJmYjZmMTUzLi5hZTZkYmIwZjhm
NTkyMzUwYTRjZjJlNDEwZGYwYmQyZGFiYzc4YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSWRlbnRpZmllci5oCkBAIC0yOTQsNiArMjk0LDcgQEAgSlNWYWx1ZSBpZGVudGlm
aWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKIHN0cnVjdCBJ
ZGVudGlmaWVyUmVwSGFzaCA6IFB0ckhhc2g8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4gewog
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4m
IGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CiAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4ga2V5LT5l
eGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5kZXhIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxpbnQ+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCmluZGV4IDQ2NTUyNDhmMjgwNDkxMGU0YjRkY2MyMGU1YmJl
OTE0ZTU4OWYxZWEuLmM4MmZhNjBlYjBjMjY3ZGFlNzAxODNjY2NhZWM4ZTk5YmY5NTRhNzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcApAQCAt
MTk5LDcgKzE5OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgaWYgKCFjYXNlRmly
c3RPcHRpb24uaXNOdWxsKCkpCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLZildID0gY2FzZUZpcnN0T3B0aW9uOwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMo
KTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZhaWxh
YmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9i
amVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwg
bG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q28sIFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpLZiwgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktuIH0sIGxvY2FsZURhdGEpOwogCiAg
ICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CkBAIC00NDQsNyArNDQ0LDcgQEAgYm9vbCBJ
bnRsQ29sbGF0b3I6OnVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdAog
fQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLXZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2Fs
ZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBsb2NhbGVzKQordm9pZCBJbnRsQ29s
bGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmIGxvY2FsZXMp
CiB7CiAgICAgZm9yIChhdXRvJiBsb2NhbGUgOiBsb2NhbGVzKSB7CiAgICAgICAgIGF1dG8gY2hl
Y2tBU0NJSU9yZGVyaW5nV2l0aERVQ0VUID0gW10oY29uc3QgU3RyaW5nJiBsb2NhbGUsIFVDb2xs
YXRvciYgY29sbGF0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yLmgKaW5kZXggMjRkNjE2MTY0OWFkOWZlN2Q0ZjcwYWU2YzI5YzgyYTdlMmY5NmYyMy4u
NWU1MmExYzkyNWMyZWQ0MDNjMTM3NTNjNWMxNzJjOWZjZDNlZjA5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkludGxPYmpl
Y3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9p
Y3UvSUNVSGVscGVycy5oPgogCkBAIC03Myw5ICs3Myw5IEBAIGNsYXNzIEludGxDb2xsYXRvciBm
aW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIHN0YXRpYyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBIYXNo
U2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMo
Y29uc3QgTG9jYWxlU2V0Jik7CiAjZWxzZQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja0lD
VUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JikgeyB9CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmKSB7
IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKaW5kZXggZjUyZWJiMjIyYjM0YmQ2YzBkNDM4
MjliNTNiOTc1N2I5YTFmYzNiOS4uZjg5ODA2YzU2YjI2MDUyMmZjN2M3Yjk4YWY4NTJjZjczM2Y4
OTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4
dGVuc2lvbktleTo6SGMpXSA9IFN0cmluZygpOwogICAgIH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q2EsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpIYywgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2Fs
ZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggMWJiYTFiMDVjMmUzMmFjMGQxOGRkMTQzNmMzNDg4NjQwZjcw
YTRhOS4uYzA5MDliODkxZTk0MzBjMGRhNDM4YTEwNDgzYjBmMzJhMGYxMjk0NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YsIChKCiAgICAgLy8gMTIuMi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBM
ZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxl
c11dLgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxE
YXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAg
Ly8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2Nh
bGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXpl
TG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAppbmRl
eCAyMmExMTVkMTM5ZjZjNWIyNDVlZGViYTgwOWUyOGU5ODY3NjgwYjgzLi4wZGU1NzQyOTM0NWFk
ODFkYWU0MTYwZWFkZGI1MDk3YzY0MjBjMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lk
IEludGxEaXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBh
dXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2
YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9i
YWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNo
ZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJl
c29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwCmluZGV4IGQxZjA2NmYwYTA5
MzM3NjkxMWRiMTBiODhmYWE5ZjQ1ZjM1YjU2OGMuLjE3ZTA3OWZlNzdkYTBhMDdjNDM3ZTBlZTdh
NmQ5ODNmYmVjYzM3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzEx
Miw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0
b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLWludGwtZGlzcGxheW5hbWVzLyNzZWMtSW50bC5EaXNwbGF5TmFtZXMuc3VwcG9ydGVk
TG9jYWxlc09mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGlzcGxheU5h
bWVzJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxl
TG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2Fs
aXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2Nh
bGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXQuY3BwCmluZGV4IDgxN2I5Y2FlNTkzNGFmNzY1NTQ2MzJkZTk5NTc2ODVlMDkwYTMwOTIu
Ljg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1YmVlZmFmOWI1ZDM2ZjQxODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2Nh
bGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2Nh
bGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2Nh
bGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDQ3ZTVlZTIz
ZGJmMWUwYjAzOWMzY2FmMDc4MGYxYjY0M2Q1YzEyYzkuLjAwOGU5M2Q4Y2JhY2IyNjdlMGRmMGU2
Nzk4YmRhNzIyMjE1YTNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMTIsNyArMTEy
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3JT
dXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE8KICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJv
cG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVMaXN0Rm9ybWF0JS5b
W2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBh
dXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVM
aXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5v
bmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQu
Y3BwCmluZGV4IDAwN2M5ZDMwMjcxNWE1ODMyODU3NjBkY2M3MGIyZDRlZjlmMDU4Y2IuLmYwMzUw
Yzg0MzhkNzdlYmU3YTVmOTI3NDkwN2UzY2I0MmEzN2U1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCkBAIC0yOTIsNyArMjky
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1iZXJpbmdT
eXN0ZW07CiAgICAgfQogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1iZXJG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxl
cyA9IGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZl
ZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9j
YWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWM1YjI5M2FmY2RhZTJlYjYyZWJi
YzI2NDQzNzlhZjU5MzIxMTBmMC4uZjIxYTY5MjZmMzFlZDdhYWYyNWU4ZmQ0OWQ5OTdjMWQ1OTFm
MTM4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBw
b3J0ZWRMb2NhbGVzT2YsIChKU0cKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAg
ICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJs
ZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMg
PSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAg
ICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCA0MGY4OWU4
ZmU3NGU4ZGJjZjBlNTgzNTBhYmVjMWY3YTg1ZDhiZGU0Li45ZDUzNmQ3NGMwMTlkMThkYTc1ODM3
ZDU5YWI3Mzg3OTZlZWQ2MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIFN0cmluZyBsYW5ndWFnZVRhZ0Zvckxv
Y2FsZUlEKGNvbnN0IGNoYXIqIGxvY2FsZUlELCBib29sIGlzSW1tb3J0YWwpCiB9CiAKIC8vIEVu
c3VyZSB3ZSBoYXZlIHh4LVpaIHdoZW5ldmVyIHdlIGhhdmUgeHgtWXl5eS1aWi4KLXN0YXRpYyB2
b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQorc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xv
Y2FsZUlmTmVlZGVkKExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nVmlldyBsb2Nh
bGUpCiB7CiAgICAgaWYgKGxvY2FsZS5sZW5ndGgoKSA8IDEwKQogICAgICAgICByZXR1cm47CkBA
IC0zNzcsOSArMzc3LDkgQEAgc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVk
KEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW4KICAgICBhdmFpbGFibGVM
b2NhbGVzLmFkZChTdHJpbmdJbXBsOjpjcmVhdGVTdGF0aWNTdHJpbmdJbXBsKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCkpKTsKIH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZh
aWxhYmxlTG9jYWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVzKCkK
IHsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxh
YmxlTG9jYWxlczsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZh
aWxhYmxlTG9jYWxlczsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7
CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWls
YWJsZUxvY2FsZXMuY29uc3RydWN0KCk7CkBAIC00NTUsOSArNDU1LDkgQEAgY29uc3QgdWludDhf
dCBkdWNldFdlaWdodHNbMTI4XSA9IHsKICAgICA5NSwgOTcsIDk5LCAyMSwgMzYsIDIyLCAzNywg
MCwKIH07CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9j
YWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQog
ewotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFi
bGVMb2NhbGVzOworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2V0PiBhdmFp
bGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsK
ICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZdIHsKICAgICAgICAgYXZhaWxh
YmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKQEAgLTQ3NiwyMiArNDc2LDIxIEBAIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCiAgICAgcmV0dXJuIGF2
YWlsYWJsZUxvY2FsZXM7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRl
ckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZhaWxh
YmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5n
Pj4gY2FjaGVkQXZhaWxhYmxlTG9jYWxlczsKLSAgICBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBjYWNoZWRBdmFpbGFibGVMb2NhbGVzLmdldCgpOwotCisgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVPbmNlLCBbJl0gewotICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5
KCkpOworICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOworICAgICAgICBBU1NF
UlQoYXZhaWxhYmxlTG9jYWxlcy0+aXNFbXB0eSgpKTsKICAgICAgICAgY29uc3RleHByIGJvb2wg
aXNJbW1vcnRhbCA9IHRydWU7CiAgICAgICAgIGludDMyX3QgY291bnQgPSB1YnJrX2NvdW50QXZh
aWxhYmxlKCk7CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
ICAgICAgICAgICAgIFN0cmluZyBsb2NhbGUgPSBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKHVicmtf
Z2V0QXZhaWxhYmxlKGkpLCBpc0ltbW9ydGFsKTsKICAgICAgICAgICAgIGlmIChsb2NhbGUuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXZhaWxhYmxl
TG9jYWxlcy5hZGQobG9jYWxlKTsKLSAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5l
ZWRlZChhdmFpbGFibGVMb2NhbGVzLCBsb2NhbGUpOworICAgICAgICAgICAgYXZhaWxhYmxlTG9j
YWxlcy0+YWRkKGxvY2FsZSk7CisgICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVk
ZWQoYXZhaWxhYmxlTG9jYWxlcy5nZXQoKSwgbG9jYWxlKTsKICAgICAgICAgfQogICAgIH0pOwog
ICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzOwpAQCAtNjk4LDcgKzY5Nyw3IEBAIFZlY3RvcjxT
dHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBsb2NhCiAgICAgcmV0dXJuIHNlZW47CiB9CiAKLVN0cmluZyBiZXN0QXZhaWxh
YmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3Qg
U3RyaW5nJiBsb2NhbGUpCitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVT
ZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxlKQogewogICAgIHJldHVy
biBiZXN0QXZhaWxhYmxlTG9jYWxlKGxvY2FsZSwgWyZdKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRl
KSB7CiAgICAgICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSk7
CkBAIC03NjMsNyArNzYyLDcgQEAgU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAotc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNoZXJSZXN1bHQg
bG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVT
ZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzKQogewogICAgIC8vIExvb2t1cE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9v
a3VwbWF0Y2hlcgpAQCAtODA0LDcgKzgwMyw3IEBAIHN0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1
cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVzdEZpdE1hdGNo
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykK
K3N0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1hdGNoZXIgKGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdG1hdGNoZXIKQEAgLTgyNSw3ICs4MjQsNyBAQCBj
b25zdGV4cHIgQVNDSUlMaXRlcmFsIHJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5nKFJlbGV2YW50
RXh0ZW5zaW9uS2V5IGtleSkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7CiB9CiAK
LVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBj
b25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0
PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJp
bmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQor
UmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IFJl
c29sdmVMb2NhbGVPcHRpb25zJiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZh
bnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCps
b2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpCiB7CiAgICAg
Ly8gUmVzb2x2ZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0
aW9ucywgcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBsb2NhbGVEYXRhKQogICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXJlc29sdmVsb2NhbGUKQEAgLTg5MCw3ICs4ODks
NyBAQCBSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPgogICAgIHJldHVybiByZXNvbHZlZDsKIH0KIAot
c3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBsb29r
dXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExv
Y2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3Rl
ZExvY2FsZXMpCiB7CiAgICAgLy8gTG9va3VwU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWE0MDIvI3NlYy1sb29rdXBzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MTksNyArOTE4LDcgQEAgc3Rh
dGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgSGFzaFMKICAgICByZXR1cm4gc3Vic2V0OwogfQogCi1zdGF0aWMgSlNB
cnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9y
dGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQm
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
KQogewogICAgIC8vIEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCBy
ZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8j
c2VjLWJlc3RmaXRzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MjgsNyArOTI3LDcgQEAgc3RhdGljIEpT
QXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEhhc2gKICAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhnbG9iYWxP
YmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogfQogCi1KU1ZhbHVl
IHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVx
dWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitKU1ZhbHVlIHN1cHBvcnRlZExv
Y2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFp
bGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNW
YWx1ZSBvcHRpb25zVmFsdWUpCiB7CiAgICAgLy8gU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWE0MDIvI3NlYy1zdXBwb3J0ZWRsb2NhbGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKaW5kZXggZmEyZTgyODA3OGI3ZTg1MWE3NzFkYzBh
MDgwZmI2YTY4NWExMmFlZC4uNjE0MGMyMGQ2ZmQzZThlOGI1Mjg5NzVkNjM4NDhmZjE4M2ZjYWI3
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaApAQCAtMjks
NiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIHN0cnVjdCBV
RmllbGRQb3NpdGlvbkl0ZXJhdG9yOwogCkBAIC04MSwxNSArODIsMTYgQEAgY2xhc3MgSW50bE9i
amVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIH07CiAKIFN0cmluZyBkZWZh
dWx0TG9jYWxlKEpTR2xvYmFsT2JqZWN0Kik7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxB
dmFpbGFibGVMb2NhbGVzKCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2
YWlsYWJsZUxvY2FsZXMoKTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRlckF2
YWlsYWJsZUxvY2FsZXMoKTsKLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxEYXRl
VGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxl
cygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGlzcGxheU5hbWVzQXZh
aWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGlu
ZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bExpc3RG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsg
fQordXNpbmcgTG9jYWxlU2V0ID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz47Citjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVzKCk7Citj
b25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0IExv
Y2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKK2lubGluZSBjb25zdCBM
b2NhbGVTZXQmIGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBp
bnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsRGlz
cGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVz
KCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVM
b2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0
IExvY2FsZVNldCYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxSZWxh
dGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bExpc3RGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogCiBUcmlTdGF0
ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4g
b3B0aW9ucywgUHJvcGVydHlOYW1lKTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFs
T2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3Vu
ZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpAQCAtMTA3LDEwICsxMDksMTAgQEAgc3RydWN0IFJl
c29sdmVkTG9jYWxlIHsKICAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5zaW9uczsKIH07CiAK
LVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYs
IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRl
bnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KSk7Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOworUmVzb2x2
ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IExvY2FsZVNldCYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMs
IExvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3RkOjppbml0aWFs
aXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZl
Y3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNp
b25LZXkpKTsKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCosIGNvbnN0
IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CiBTdHJpbmcgcmVtb3ZlVW5pY29kZUxvY2Fs
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxvY2FsZSk7Ci1TdHJpbmcgYmVzdEF2YWlsYWJsZUxv
Y2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdGVkTG9jYWxlKTsKK1N0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IExv
Y2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRMb2NhbGUp
OwogdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPiBTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2Fs
ZShjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSwgUHJlZGljYXRlKTsKIFZlY3RvcjxTdHJp
bmc+IG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcApp
bmRleCBlNjVmYjBkNzMyNzE1MjliNWNhYTlkOWZhYmVjOWJlYmNiNGM1NmEyLi5jY2NmNDk3MTU4
MThkZmQzMDI2OGEzMTdhZGFkYjhlOGRjYmFmNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHUKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBp
bnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxv
b2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2Nh
bGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBM
b2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0
byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxv
Y2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xv
Y2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcAppbmRleCBmODg1MGIxMGE4
YmZlNjU3MDQzZDJhMWVhZDA3MTEwNDFiOTIwNTkxLi4yN2IyMzEwYjM0OGExZTRhNDVkZjBlZjkx
MTUzYTllNDVlOGZmNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCkBAIC0xMTUsNyArMTE1
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2wKIAogICAgIC8vIDEzLjMuMiBJbnRsLlBsdXJh
bFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiAobG9jYWxlcyBbLCBvcHRpb25zIF0pCiAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW50bC5wbHVyYWxydWxlcy5zdXBw
b3J0ZWRsb2NhbGVzb2YKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYg
YXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCmluZGV4
IGY3ZDM4YjgxZWFjODI4NjNmNWFkOGJjYzgzMjQ2NTI2OTI4MTc3NmUuLjJiNWQyOGVmZDhjZThm
MjdkNjU3NTg1MDJhMzEwOTgwNWI3MDczZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCkBAIC0xMDYsNyAr
MTA2LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVsYXRpdmVU
aW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgbG9jYWxlT3B0aW9uc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1iZXJp
bmdTeXN0ZW07CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVM
b2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBj
b25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxP
YmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIs
IGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2FsZURhdGEp
OwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5pc0Vt
cHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDE3NGI2
ZmRjZTJjODZiZmMxMWI1ZWIxZWY1MzcyMDk4ZWE4OTg0OTQuLjlhOGM4ZDRjYTZjNmM0ZWQzNWZm
NzBlOTdlN2QzZWNjNGY1OWFlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mCiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAg
YXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCAwNGNmMTdkNTA5MzU2MjFjNDI0OGU4NDhiNzc1MGVk
YTM3ZWE4MWU4Li4yYWQ3NGY5NGJiZThjYTE3Yzc3NTg5MmFmYmM2ZmVmNzEyYTYyYjU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcApAQCAt
NzksNyArNzksNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNlZ21lbnRlckF2
YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2
ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBt
X2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwCmluZGV4IGZmZDcz
ZjczNmE5NzQzMzc4ZGZkYjFhMzFkNGJmOTlmOThkZWFlNTIuLjA5Mzk0ZGMxOGVkZGYyYTkzMTk1
MWU3YzZmYWE5NzIyOGZiZjYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsU2VnbWVudGVyQ29uc3RydWN0b3JT
dXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE9iCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLWludGwtc2VnbWVudGVyLyNzZWMtaW50bC5zZWdtZW50ZXIuc3VwcG9ydGVkbG9jYWxl
c29mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlU2VnbWVudGVyJS5bW2F2
YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOwogCiAg
ICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXggODI3MzdkOGY5
YzY4ZGUxOGU4N2Y1ZTU3Y2VhMGE2MDIxMGU4ODg4Ni4uM2E3MTFmYjkwOWI2OTBlMGYxOWZlYTUx
NzRjNjgwNThjYmU0YzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVk
ZSAiV2Vhay5oIgogI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTQ1LDcgKzQ1LDcgQEAgY2xhc3MgUmVnRXhwQ2FjaGUgZmluYWwgOiBwcml2YXRlIFdlYWtIYW5k
bGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBmcmllbmQgY2xh
c3MgUmVnRXhwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPj4g
UmVnRXhwQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1h
cDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPj4gUmVnRXhwQ2FjaGVNYXA7CiAKIHB1YmxpYzoKICAg
ICBSZWdFeHBDYWNoZShWTSogdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBLZXkuaAppbmRleCBlMGY4ODMxMDIwZDZkOTM1YzcwMTkwMWZiNDliMjhjYjZkYzkzOGZjLi5k
MTY2Mjc5ZjZkYjJlY2VlYjJlM2U3MGIwN2Q5NjNiZWU0YWJlMjZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaApAQCAtNzEsNiArNzEsNyBAQCBzdHJ1Y3QgUmVn
RXhwS2V5IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnRXhwS2V5JiBr
ZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUmVnRXhwS2V5JiBhLCBjb25zdCBSZWdFeHBLZXkmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hh
c2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2
N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJ
RTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUg
LyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2
NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hU
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAz
QjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3
RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0
RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAv
KiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9i
aW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21w
YWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBh
Y3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUx
RUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2
NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb25t
b3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBA
QAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4
NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QURE
MDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYw
MEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAw
MzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUw
MDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAg
LyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUx
YTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUxZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0
ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0
KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAg
ICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNo
U2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEu
aAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1Yzdj
ZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4
NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVj
dCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitz
dHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFs
dWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFs
dWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwog
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0
eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1
bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9
IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBI
YXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4s
IHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFw
cGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4s
IHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJh
aXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZh
MWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi44OTAxYjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYx
YjBhZWZhOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSw3ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0
eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBj
bGFzcyBIYXNoTWFwIGZpbmFsIHsKIAogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJn
OwogCi0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1
ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhh
c2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBI
YXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlw
ZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5
VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJh
aXRzPjsKIAogICAgIGNsYXNzIEhhc2hNYXBLZXlzUHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZh
bHVlc1Byb3h5OwpAQCAtMjMyLDkxICsyMzIsODkgQEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9y
QWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFw
JiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsg
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNp
Z25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAg
IHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9v
bCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdp
bigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJl
dHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVn
aW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4g
Y29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlU
eXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+
IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5
cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5
cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZp
bmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlu
cyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVu
YW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZh
bHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZ
UEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZh
bHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25z
dCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVr
VHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9p
bXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMy
NCw5ICszMjIsOSBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBF
JiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+
Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQog
ewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50
ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMz
NCwxNiArMzMyLDE2IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNv
bnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBl
ZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUWVBFPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29u
c3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBh
aXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUg
S2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUg
S2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJh
aXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxL
ZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+
OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRk
UmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8
Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkgewpAQCAtMzUzLDkxICszNTEsOTEgQEAgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8
dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46Omlu
bGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBh
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFs
dWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hN
YXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9y
d2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5M
SU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+
IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFs
dWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcs
IHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gaW5saW5lU2V0KGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAt
PiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpm
b3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJl
c3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhh
c2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFz
aEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYm
IG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6
Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBt
YXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQo
S2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlu
bGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkg
LT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJn
Pjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAog
ewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
Zz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
ZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlT
X0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewog
ICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVk
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3Im
JiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3Vs
dAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4o
ZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3Rv
ciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+
OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAog
ewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Omdl
dChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0
KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1
cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtU
eXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3Qg
S2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFp
clR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0
ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVu
dHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBAIEFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1w
bC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAg
IHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJl
dHVybiBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92
ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkK
IHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxp
bmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQog
ewogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBr
ZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+
CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBL
ZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5k
KGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5
KSAtPiBNYXBwZWRUYWtlVHkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQ
dHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFs
dWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7
CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZh
bHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQ
dHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxL
Pjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwg
Y29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5k
PEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtl
eSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8
dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5z
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhh
c2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5h
bWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1h
cHBlZFBlZWtUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQ
ZWVrVHlwZT46OnR5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBU
cmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAg
aWYgKCFlbnRyeSkKQEAgLTUxNiwyMyArNTE0LDIzIEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUK
ICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6
UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQ
ZWVrVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJI
ZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWCwgWT46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5
cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQ
dHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFs
dWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5
cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09
IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAsMTQgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAg
IHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5h
bWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lz
dGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFs
aWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlw
ZSYga2V5KQogewogICAgIGlmIChLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTU2NSwxMyArNTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hN
YXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7
CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9p
dGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5l
bmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJl
dHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IDY4
YTE1ZGMwMzc1YTE3MTljN2FiMzI0NjJjN2FkZjc5ZWQ2MGI0ZWYuLmE0MDJjZTI3Mzc1YWNlYjBj
ZWIwNGY5ZWI1YTFlNDFhZDJjNjlmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hT
ZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAog
bmFtZXNwYWNlIFdURiB7CiAKLXN0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4K
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNDEsNyArMzksNyBA
QCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBW
YWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBwcml2YXRlOgotICAgIHVzaW5nIEhhc2hUYWJsZVR5
cGUgPSBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+OworICAgIHVzaW5nIEhhc2hU
YWJsZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZh
bHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFs
dWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKIAogcHVibGljOgogICAgIC8vIEhhc2hTZXQgaXRlcmF0
b3JzIGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CkBAIC0xODYsMTA5ICsxODQsMTA5IEBA
IHN0cnVjdCBIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3IgewogICAgIH0KIH07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBI
YXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAo
b3RoZXIubV9pbXBsKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+Ojpj
YXBhY2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNh
cGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5
KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0
b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
Pjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYs
IFc+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBj
b25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZpbmQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmZpbmQodmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBW
LCBXPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9pbXBsLmNvbnRhaW5zKHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKGNv
bnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFs
dWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8
SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBB
ZGRSZXN1bHQKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjplbnN1cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hTZXRFbnN1cmVU
cmFuc2xhdG9yQWRhcHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRS
ZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBI
YXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KQogewogICAgIG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRk
Vm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2
YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQK
IHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0
VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJ
dGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQog
ewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIg
PSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI5Niw5ICsyOTQsOSBAQCBpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5
cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4K
LWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4s
IEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1v
dmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikKQEAgLTMwNiw4ICszMDQsOCBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAg
IHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9y
IGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShpdGVyYXRvciBp
dCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzE2LDI3ICszMTQsMjcgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBW
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
LCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOyAKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwg
VSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKIHsKICAgICBpZiAo
aXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBWYWx1ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0
czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTM0Niw0OCArMzQ0LDQ4IEBAIGlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmlu
ZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZUFueSgpIC0+IFRha2VUeXBl
CiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0
ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZh
bHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnModHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFz
aEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1
ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlw
ZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2
YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRh
a2VUeXBlPjo6dHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDMsOSArNDAxLDkgQEAgaW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90
aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9w
ZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7
CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00MTYsMjIgKzQxNCwyMiBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBi
b29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBv
dGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpv
cGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAog
ewogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwg
Vj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25z
dCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+
IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Citp
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmlu
ZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEwYzBhNjI5NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVh
YzhkZWFhMzdlNDU3OThjMjRlMmJjMDc4ZTRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC03OSw0NiAr
NzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVy
YXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFz
cyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJh
dG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3Io
Y29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlw
ZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lk
IHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlk
YXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKTsKIAogI2lmICFDSEVDS19IQVNIVEFC
TEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNv
bnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0ZXJh
dG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9y
KEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5
cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0eXBlZGVmIGVudW0geyBIYXNoSXRlbUtub3duR29v
ZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1YmxpYyBz
dGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRp
ZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0
IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5
cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hU
YWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBpdGVyYXRvcjsKIAogICAgICAgICB2b2lkIHNraXBF
bXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBAIC0yNDMsMTggKzI0NSwxOCBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAgICAgfTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhh
c2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJh
dG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBWYWx1ZSosIFZhbHVlJj4gewogICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJh
dG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29u
c3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7
CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBj
b25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAg
IHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVl
VHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CiAKICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3Io
SGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kKSA6
IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kKSB7IH0KICAgICAgICAgSGFzaFRhYmxlSXRlcmF0
b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5k
LCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBlbmQs
IHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZSB7
CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9y
OwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRv
cjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYg
S2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcg
KzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwogICAgICAgICB+SGFzaFRhYmxlKCkgCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsgCisgICAgICAgICAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAgICAgICAgICAgIGlmIChtX3RhYmxlKQogICAgICAg
ICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFCTEVf
VVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC01NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lk
IGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYgQ0hF
Q0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMo
KTsKLSNlbHNlCi0gICAgICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0K
LSNlbmRpZgotCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUu
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9y
ID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRh
YmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7CkBAIC04NTYsNyArODUzLDcg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAog
ICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAg
ICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIApAQCAtOTMyLDcgKzkyOSw3
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAg
ICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7
CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIpOwpA
QCAtMTAxNyw3ICsxMDE0LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihr
ZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycyh0aGlzKTsKIAogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBl
eHBhbmQoKTsKQEAgLTExMTAsMTQgKzExMDcsMTQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5
cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAg
aW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1
ZVR5cGUqIHBvcykKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAg
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQpAQCAtMTM3Myw3ICsx
MzcwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpjbGVhcigpCiAgICAgewotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTQw
OSw4ICsxNDA2LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFz
aFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYg
b3RoZXIpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIG90
aGVyLmludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0
aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAgIHN0
ZDo6c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKIApAQCAtMTQzNCw3ICsxNDMxLDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgLCBtX211dGV4KG1ha2VVbmlxdWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKLSAgICAgICAg
b3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KCZvdGhlcik7CiAKICAgICAgICAgbV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJs
ZSwgbnVsbHB0cik7CiAKQEAgLTE1MDAsMzAgKzE0OTcsMjkgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2lmIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVy
YXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBp
bnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlKQogICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV9tdXRleCk7Ci0gICAgICAgIGNvbnN0X2l0
ZXJhdG9yKiBuZXh0OwotICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRv
cnM7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxl
LT5tX211dGV4KTsKKyAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0
b3IqIG5leHQ7CisgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRl
cmF0b3IqIHAgPSB0YWJsZS0+bV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CiAgICAgICAgICAg
ICBuZXh0ID0gcC0+bV9uZXh0OwotICAgICAgICAgICAgcC0+bV90YWJsZSA9IDA7Ci0gICAgICAg
ICAgICBwLT5tX25leHQgPSAwOwotICAgICAgICAgICAgcC0+bV9wcmV2aW91cyA9IDA7CisgICAg
ICAgICAgICBwLT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fbmV4dCA9IG51
bGxwdHI7CisgICAgICAgICAgICBwLT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgfQot
ICAgICAgICBtX2l0ZXJhdG9ycyA9IDA7CisgICAgICAgIHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51
bGxwdHI7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiogdGFibGUsCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25z
dCBIYXNoVGFibGVUeXBlKiB0YWJsZSwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAgICBp
dC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKIAog
ICAgICAgICAvLyBJbnNlcnQgaXRlcmF0b3IgYXQgaGVhZCBvZiBkb3VibHktbGlua2VkIGxpc3Qg
b2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgICAgICBpdC0+bV9u
ZXh0ID0gMDsKKyAgICAgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgp
OwogICAgICAgICAgICAgQVNTRVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2
LDggKzE1MzIsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0
ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJh
dG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRv
ciBmcm9tIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQt
Pm1fdGFibGUpIHsKQEAgLTE1NTksMTMgKzE1NTUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIGl0LT5tX3RhYmxlID0gMDsKLSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAg
ICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAgaXQtPm1fdGFibGUgPSBudWxscHRyOwor
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMgPSBu
dWxscHRyOwogICAgIH0KIAogI2VuZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAor
ICAgIHN0cnVjdCBIYXNoVGFibGVUcmFpdHMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1c2lu
ZyBUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0
ZXJzCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1
ZVR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6
Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJk
aWZmX3QsIGNvbnN0IFZhbHVlVHlwZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmlu
SG9vZEhhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTU0OWUzNmJlYWRmMDE2N2VhY2VkY2YzNWZiMDc3
NzViYTRmMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aE1hcC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhh
c2hUYWJsZVRyYWl0cz47CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUg
S2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1hcCA9
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwOwordXNpbmcgV1RGOjpNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDsKK3VzaW5nIFdU
Rjo6RmFzdFJvYmluSG9vZEhhc2hNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jp
bkhvb2RIYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmIyMGE5NTk5NmM3ODVmNGYzNWYyMjQ5YzE2ZGNmZDY4MDg1ZTAxMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaApAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1
bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFy
Zz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQgPSBIYXNo
U2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9v
ZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUg
VHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFz
aFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9v
ZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDsKK3VzaW5nIFdURjo6TWVtb3J5
Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNoU2V0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDg0ZWRmMmQ5YThh
NTc2ZDdjNjI2ZTA3YWNjZmQwMzA4ZDM5ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKQEAgLTAsMCArMSw4NTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlOworCitzdHJ1Y3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAvLyA5NSUgbG9h
ZCBmYWN0b3IuIFRoaXMgYSBiaXQgcmVncmVzcyAiaW5zZXJ0aW9uIiBwZXJmb3JtYW5jZSwgd2hp
bGUgaXQga2VlcHMgbG9va3VwIHBlcmZvcm1hbmNlIHNhbmUuCisgICAgLy8gUm9iaW5Ib29kSGFz
aFRhYmxlIGNhbiB3b3JrIHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5l
ZCBwcm9iZSBkaXN0YW5jZS4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRO
dW1lcmF0b3IgPSAxOTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5v
bWluYXRvciA9IDIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7
Cit9OworCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIC8vIDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdp
dGggc3VjaCBhIGhpZ2ggbG9hZC1mYWN0b3IuCisgICAgLy8gT2JzZXJ2ZWQgcGVyZm9ybWFuY2Ug
aXMgc2xpZ2h0bHkgd29yc2UgdGhhbiBIYXNoVGFibGUgKDc1JSBmb3Igc21hbGwgdGFibGUsIDUw
JSBmb3IgbGFyZ2UgdGFibGUpLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9h
ZE51bWVyYXRvciA9IDk7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVu
b21pbmF0b3IgPSAxMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2
OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICAv
LyA3NSUgbG9hZCBmYWN0b3IsIHRoaXMgbWFpbnRhaW5zIHRoZSBwZXJmb3JtYW5jZSBzYW1lIHRv
IEhhc2hUYWJsZSwgc3RpbGwgdGhlIGxvYWQgZmFjdG9yCisgICAgLy8gaXMgaGlnaGVyIChIYXNo
VGFibGUgdXNlcyA3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCisvLyBSb2Jpbkhvb2QgSGFz
aFRhYmxlIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIHVzdWFsIEhhc2hUYWJs
ZSwgdGhhdCdzIHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1bHQgb25lLgorLy8gUm9iaW5Ib29kIEhh
c2hUYWJsZSBjb21wdXRlcyBoYXNoIG11Y2ggbW9yZSBmcmVxdWVudGx5LiBUaGlzIG1lYW5zIHRo
YXQgdGhlIEtleSBzaG91bGQgY2FjaGUgY29tcHV0ZWQgaGFzaC4KKy8vIEJ1dCBvdXIgZGVmYXVs
dCBIYXNoVGFibGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2YWx1ZSBiZWNhdXNlIG9mIG1lbW9yeSB1
c2FnZS4gVGhpcyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkgdHlwZQorLy8gc2hvdWxkIGhhdmUgaGFz
aCB2YWx1ZSBpbnRydXNpdmVseSAoZS5nLiBXVEY6OlN0cmluZyBob2xkcyBoYXNoIHZhbHVlIGlu
dGVybmFsbHkpLgorLy8KKy8vIElmIHRoZSBhYm92ZSByZXF1aXJlbWVudHMgbWVldCB5b3VyIHVz
ZSBjYXNlLCB0aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9vZCBIYXNoVGFibGUuCisvLyBUaGUgbGFy
Z2VzdCBiZW5lZml0IGlzIHRoYXQgd2UgY2FuIHVzZSBzaWduaWZpY2FudGx5IGhpZ2ggbG9hZC1m
YWN0b3IgKDkwJSkhIFRoaXMgaXMgc3VpdGFibGUgZm9yIEF0b21pY1N0cmluZ1RhYmxlLgorLy8K
Ky8vIFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBk
ZWxldGlvbiwgZGVzY3JpYmVkIGluIFsyLDNdLgorLy8KKy8vIFsxXTogaHR0cHM6Ly9hY2NpZGVu
dGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0NTQ1NTk4Ny9ydXN0LWhhc2gtaXRl
cmF0aW9uLXJlaW5zZXJ0aW9uCisvLyBbMl06IGh0dHBzOi8vY29kZWNhcHN1bGUuY29tLzIwMTMv
MTEvMTEvcm9iaW4taG9vZC1oYXNoaW5nLworLy8gWzNdOiBodHRwczovL2NvZGVjYXBzdWxlLmNv
bS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlvbi8j
cmVmCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxl
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OworICAgIHVzaW5nIGl0ZXJhdG9yID0gSGFzaFRhYmxlSXRlcmF0b3I8SGFz
aFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz47CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gVHJhaXRzOwor
ICAgIHVzaW5nIEtleVR5cGUgPSBLZXk7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gVmFsdWU7Cisg
ICAgdXNpbmcgSWRlbnRpdHlUcmFuc2xhdG9yVHlwZSA9IElkZW50aXR5SGFzaFRyYW5zbGF0b3I8
VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+OworICAgIHVzaW5nIEFkZFJlc3VsdCA9IEhhc2hU
YWJsZUFkZFJlc3VsdDxpdGVyYXRvcj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQgPSAxMjg7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFLZXlU
cmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbik7CisgICAgc3RhdGljX2Fzc2Vy
dChIYXNoRnVuY3Rpb25zOjpoYXNIYXNoSW5WYWx1ZSk7CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFi
bGUoKSA9IGRlZmF1bHQ7CisKKyAgICB+Um9iaW5Ib29kSGFzaFRhYmxlKCkKKyAgICB7CisgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAgIGlmIChtX3RhYmxlKQorICAg
ICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6ZSgpKTsKKyAgICB9CisK
KyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJik7CisgICAg
dm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIFJvYmluSG9vZEhhc2hUYWJsZSYg
b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworCisgICAgUm9iaW5Ib29kSGFz
aFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9w
ZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisKKyAgICAvLyBXaGVuIHRoZSBoYXNoIHRh
YmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2FtZSBpdGVyYXRvciBmb3IgZW5kIGFzIGZv
ciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGJlY2F1c2Ugd2UgZG9uJ3Qg
aGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAgICAvLyBidWNrZXRzLCBh
bmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEgY29tbW9uIGNhc2UgdGhhdCdzIHdvcnRo
IG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpc0VtcHR5KCkgPyBl
bmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6
IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIHRhYmxl
U2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7CisgICAgICAgIGlmIChp
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICAgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vha1JhbmRvbVVpbnQzMigp
ICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldChidWNr
ZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoJmJ1Y2tl
dCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgcmFuZG9tKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNvbnN0X2Nhc3Q8Um9iaW5I
b29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1
bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV90YWJsZSk7CisgICAg
ICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJs
ZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG5l
d1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFibGVT
aXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFi
bGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgICAgIG1f
a2V5Q291bnQgPSAwOworICAgICAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKyAgICAgICAgaW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICBBZGRSZXN1bHQgYWRk
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JU
eXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQg
YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkpOyB9CisKKyAgICAv
LyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFz
aGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lk
IHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAg
ICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJh
JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRy
YSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBm
aW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBm
aW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJZGVudGl0eVRyYW5z
bGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkp
IGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVy
YXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFp
bnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOwor
ICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAg
c3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVy
biBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZh
bHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUpOyB9CisKKyAgICBW
YWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNs
YXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGlu
ZUxvb2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICB2b2lkIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vsc2UKKyAgICAgICAgc3RhdGljIHZvaWQg
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5kaWYKKworI2lmIENIRUNLX0hBU0hUQUJM
RV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsgfQorICAgICAgICB2b2lkIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNv
bnNpc3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICAgICAgc3RhdGlj
IHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgorCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWlu
dDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9h
ZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6
ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVu
c2lnbmVkIHNpemUpOworCisgICAgdXNpbmcgTG9va3VwVHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5
cGUqLCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9i
ZURpc3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlz
dGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKTsKKworICAgIHZvaWQgcmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKik7
CisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVt
b3ZlKFZhbHVlVHlwZSopOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRl
QmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQga2V5Q291bnQgPSB0aGlzLT5rZXlDb3Vu
dCgpOworICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAg
ICAgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgdGFibGVTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAvLyBJZiBwcm9iZS1sZW5ndGggZXhjZWVkcyBwcm9iZURp
c3RhbmNlVGhyZXNob2xkLCBhbmQgNTAlfiBpcyBmaWxsZWQsIGV4cGFuZCB0aGUgdGFibGUuCisg
ICAgICAgIHJldHVybiBtX3dpbGxFeHBhbmQgJiYga2V5Q291bnQgKiAyID49IHRhYmxlU2l6ZTsK
KyAgICB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
ICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOyB9CisgICAgdm9pZCBleHBhbmQoKTsKKyAgICB2b2lkIHNocmluaygpIHsg
cmVoYXNoKHRhYmxlU2l6ZSgpIC8gMik7IH0KKyAgICB2b2lkIHNocmlua1RvQmVzdFNpemUoKTsK
KworICAgIHZvaWQgcmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7CisgICAgdm9pZCByZWlu
c2VydChWYWx1ZVR5cGUmJik7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZh
bHVlVHlwZSYgYnVja2V0KTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZGVzaXJl
ZEluZGV4KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGhhc2ggJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHByb2JlRGlzdGFuY2UodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgsIHVuc2ln
bmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbmRl
eCArIHNpemUgLSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spKSAmIHNpemVNYXNrOworICAg
IH0KKworICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4g
aXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAg
IGl0ZXJhdG9yIG1ha2VLbm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4g
aXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25H
b29kKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZh
bHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1f
dGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBj
b25zdDsKKyNlbHNlCisgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4
Y2VwdFNpemUoKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6bWF4TG9hZE51bWVyYXRvcjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IFNpemVQb2xpY3k6Om1h
eExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQg
PSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAgdW5zaWduZWQgdGFibGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25lZCB0YWJsZVNpemVNYXNrKCkgY29u
c3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAgdW5zaWduZWQga2V5Q291bnQoKSBj
b25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBu
dWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQg
bV9rZXlDb3VudCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZhbHNlIH07CisKKyNp
ZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8gQWxsIGFjY2VzcyB0
byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCisgICAgbXV0YWJs
ZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07CisgICAgLy8gVXNlIHN0
ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1j
cHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9tdXRleCB7IG1ha2VV
bmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUg
dm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5KGNvbnN0IFQmKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywg
U2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBy
ZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJs
ZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2ln
bmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6
ZU1hc2soKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAg
dW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmlu
SG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3Rv
cAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3Rh
bmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7CisgICAgICAgIGlmIChkaXN0YW5j
ZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNo
ICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7Cisg
ICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojppbml0aWFsaXpl
QnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxp
emVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxpemU8VHJhaXRz
PihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgorQUxXQVlT
X0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRkKFQmJiBrZXks
IEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xh
dG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdl
IHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYg
d2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5l
ZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQg
ZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNo
b3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBz
aXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNr
KCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAg
dW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2ln
bmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAg
IHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBp
ZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6
dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRy
YT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWdu
ZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7Cisg
ICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50
cnlLZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNl
ID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAg
ICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0
YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4
cGFuZCA9IHRydWU7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRy
eSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1
ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hU
cmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpm
b3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNl
Rm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXpl
LCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9
CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50
cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0
YW5jZUZvckFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGRp
c3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKK3sKKyAgICB1c2luZyBz
dGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXpl
TWFzazsKKyAgICArK2Rpc3RhbmNlOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4
dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5j
ZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAg
ICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlz
dGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxF
eHBhbmQgPSB0cnVlOworICAgICAgICAgICAgc3dhcCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAg
ICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9
CisKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4
dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9y
PihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNo
b3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2Ug
ZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQg
dG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50
cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3Vs
ZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXpl
ID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7
CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7CisgICAgdW5z
aWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVk
IGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdo
aWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAo
aXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJh
bnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4o
ZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSk7
CisgICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwo
RXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRk
UmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1
bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBz
aXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsK
KyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xkKQorICAg
ICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAgICAvLyBTdGFydCBz
d2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlh
bnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5
KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZv
cndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAg
ICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSks
IGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzayk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsK
KyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3Vs
dChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6cmVpbnNlcnQoVmFsdWVUeXBlJiYgdmFsdWUpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAv
LyBGb3IgQysrIEFETC4KKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5z
aWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElk
ZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVu
c2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwg
V1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2Ug
PSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgc3dhcCh2YWx1
ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAg
KytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7
CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxv
b2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1
cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9v
ZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFs
dWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1v
dmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9z
KQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUo
VmFsdWVUeXBlKiBwb3MpCit7CisgICAgcG9zLT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6
ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXpl
ID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7
CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWdu
ZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZp
b3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlm
IChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBB
U1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOworICAgICAgICBhdXRvJiBlbnRy
eUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KTsKKyAgICAgICAg
aWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpw
cmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkpOworICAgICAgICBlbnRyeS0+flZhbHVlVHlw
ZSgpOworICAgICAgICBpbml0aWFsaXplQnVja2V0KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQ
cmV2aW91cyA9IGluZGV4OworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7
CisgICAgfQorCisgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICBzaHJpbmsoKTsKKwor
ICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihp
dC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0
aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0g
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0
RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRv
ci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUg
dm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICBy
ZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNp
emUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIg
ZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8g
Z2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJh
aXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9w
dHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2Vk
TWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+
KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXpl
QnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFs
bG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVU
eXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhwYW5kKCkKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXpl
OworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUp
CisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxz
ZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisKKyAgICByZWhhc2gobmV3U2l6ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Citjb25zdGV4cHIgdW5zaWduZWQgUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25l
ZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25lZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVw
VG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQs
IGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisKKyAgICBhdXRv
IGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24gPSBbXShkb3VibGUgbG9hZEZhY3Rvciwg
dW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVkIHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIC8v
IEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYWxjdWxhdGlvbiwgdXNpbmcgMy80
IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMy80IGFuZCBtaW5Mb2Fk
IGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAxMS8yNC4KKyAgICAgICAgLy8gSWYgd2UgYXJl
IGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAxMS8yNCBhbmQgMy80LCB3ZSBkb3VibGUgdGhlIHNp
emUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVpbmcgdG9vIGNsb3NlIHRvIGxvYWRNYXggYW5kIGJy
aW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8yNC4gVGhpcworICAgICAgICAvLyBnaXZlIHVzIGEg
bG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAxNS8yNCkuCisgICAgICAgIGRvdWJsZSBtYXhMb2Fk
UmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAgICBkb3VibGUgbWluTG9hZFJhdGlvID0gMS4wIC8g
bWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2ZXJhZ2VMb2FkUmF0aW8gPSAobWF4TG9hZFJhdGlv
ICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAgICAgIGRvdWJsZSBoYWxmV2F5QmV0d2VlbkF2ZXJh
Z2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFnZUxvYWRSYXRpbyArIG1heExvYWRSYXRpbykgLyAy
OworICAgICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5B
dmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAgIH07CisKKyAgICBjb25zdGV4cHIgZG91YmxlIGxv
YWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9h
ZERlbm9taW5hdG9yOworICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxv
YWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6
ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmlt
dW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1U
YWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnNocmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2ln
bmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAg
cmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtl
eUNvdW50KCkpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkK
K3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAg
IHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xk
VGFibGUgPSBtX3RhYmxlOworCisgICAgdW5zaWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgp
OworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJs
ZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgbV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworICAg
IG1fd2lsbEV4cGFuZCA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9s
ZFRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07
CisgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpCisgICAgICAgICAgICByZWlu
c2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsK
KyAgICB9CisKKyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJl
ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3Zv
aWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGRlYWxsb2NhdGVUYWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIpLCB0
YWJsZVNpemUoKSk7CisgICAgbV90YWJsZVNpemUgPSAwOworICAgIG1fa2V5Q291bnQgPSAwOwor
ICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFi
bGUmIG90aGVyKQorICAgIDogbV90YWJsZShvdGhlci5tX3RhYmxlU2l6ZSA/IGFsbG9jYXRlVGFi
bGUob3RoZXIubV90YWJsZVNpemUpIDogbnVsbHB0cikKKyAgICAsIG1fdGFibGVTaXplKG90aGVy
Lm1fdGFibGVTaXplKQorICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tleUNvdW50KQorICAgICwg
bV93aWxsRXhwYW5kKG90aGVyLm1fd2lsbEV4cGFuZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICBW
YWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAgVmFs
dWVUeXBlJiBlbnRyeSA9IG1fdGFibGVbaW5kZXhdOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNr
ZXQob3RoZXJFbnRyeSkpCisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eShl
bnRyeSwgb3RoZXJFbnRyeSk7CisgICAgfQorICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6c3dhcChSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQorewor
ICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBzd2Fw
KG1fdGFibGUsIG90aGVyLm1fdGFibGUpOworICAgIHN3YXAobV90YWJsZVNpemUsIG90aGVyLm1f
dGFibGVTaXplKTsKKyAgICBzd2FwKG1fa2V5Q291bnQsIG90aGVyLm1fa2V5Q291bnQpOworICAg
IHN3YXAobV93aWxsRXhwYW5kLCBvdGhlci5tX3dpbGxFeHBhbmQpOworCisgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFi
bGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRh
YmxlIHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikK
K3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBtX3RhYmxlID0gc3Rk
OjpleGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291bnQsIDApOworICAgIG1fd2lsbEV4cGFuZCA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV93aWxsRXhwYW5kLCBmYWxzZSk7CisKKyAgICBpbnRlcm5hbENoZWNr
VGFibGVDb25zaXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgYXV0byBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUm
JiBvdGhlcikgLT4gUm9iaW5Ib29kSGFzaFRhYmxlJgoreworICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSB0ZW1wKFdURk1vdmUob3RoZXIpKTsKKyAgICBzd2FwKHRlbXApOworICAgIHJldHVybiAqdGhp
czsKK30KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpjaGVja1RhYmxlQ29uc2lz
dGVuY3koKSBjb25zdAoreworICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKKyAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpOworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50
cnkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byYga2V5ID0gRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZChr
ZXkpOworICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CisgICAgICAgICsr
Y291bnQ7CisKKyAgICAgICAgVmFsdWVDaGVjazxLZXk+OjpjaGVja0NvbnNpc3RlbmN5KGtleSk7
CisgICAgfQorCisgICAgQVNTRVJUKGNvdW50ID09IGtleUNvdW50KCkpOworICAgIEFTU0VSVCh0
aGlzLT50YWJsZVNpemUoKSA+PSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemUpOworICAgIEFT
U0VSVCh0YWJsZVNpemVNYXNrKCkpOworICAgIEFTU0VSVCh0aGlzLT50YWJsZVNpemUoKSA9PSB0
YWJsZVNpemVNYXNrKCkgKyAxKTsKK30KKworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisKK3N0
cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisKK3N0
cnVjdCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0Um9i
aW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgRmFzdFJvYmluSG9vZEhh
c2hUYWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJp
bmdIYXNoLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKaW5kZXggOTJk
MjA4ZDM1ZTJhYWQ1Yjg4MjczZTM0MTg2YzI3YjVkMDdjZTFmZC4uYmFkMmNhYjBkNWFmNjk4NjNi
ZDA4YTI4OTBiNTQzZGE4ODM3ZTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVl
OwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdURjo6QXRvbVN0
cmluZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8V1RGOjpBdG9tU3RyaW5nPiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCmluZGV4IDJmNzY3MGI0ODEyZGYwYmNmZWYxNDZj
M2IyZWU4OWZlNzExN2Y1ZmEuLmExOGIzY2JkODgwMDJkMzlkZmNiMmVjMTc0M2E5NzVkNGVmNGNk
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwCkBAIC02Myw3ICs2Myw3
IEBAIGNsYXNzIEF0b21TdHJpbmdUYWJsZUxvY2tlciB7CiAKICNlbmRpZiAvLyBVU0UoV0VCX1RI
UkVBRCkKIAotdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5n
SW1wbD4+OwordXNpbmcgU3RyaW5nVGFibGVJbXBsID0gQXRvbVN0cmluZ1RhYmxlOjpTdHJpbmdU
YWJsZUltcGw7CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1wbCYgc3RyaW5n
VGFibGUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFi
bGUuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCmluZGV4IGUw
YzBhZmJhZWE0MzY4NjFiOGI4ZTQxZWUwNzZhZTJjNzQyMjRiY2YuLjg2ZWQyNWYyOGVjMDg2Njhl
ZjVlNGE1NmEyNDk3NWQyMDFmYThlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbVN0cmluZ1RhYmxlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdU
YWJsZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIEF0b21TdHJpbmdU
YWJsZTo6fkF0b21TdHJpbmdUYWJsZSgpCiB7Ci0gICAgZm9yIChjb25zdCBQYWNrZWRQdHI8U3Ry
aW5nSW1wbD4mIHN0cmluZyA6IG1fdGFibGUpCisgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcg
OiBtX3RhYmxlKQogICAgICAgICBzdHJpbmctPnNldElzQXRvbShmYWxzZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmggYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCmluZGV4IDJmMDg5Y2U5NjA4MWFhNmM3ZTU4YzFi
YzEyYzRlMzA0NTExM2E1N2UuLjI0NWEzYTYyMDFhNTBkZjI2NTlkYzE5MTBlMDc5ZTA1NTdkNDEy
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaApAQCAtMjIsOCArMjIsOSBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwu
aD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zMywxMiArMzQsMTUgQEAgY2xhc3MgU3RyaW5nSW1w
bDsKIGNsYXNzIEF0b21TdHJpbmdUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CisgICAgdXNpbmcgU3RyaW5nRW50cnkgPSBQYWNrZWRQdHI8U3RyaW5nSW1wbD47
CisgICAgdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gRmFzdFJvYmluSG9vZEhhc2hTZXQ8U3RyaW5n
RW50cnk+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAot
ICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3Rh
YmxlOyB9CisgICAgU3RyaW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0K
IAogcHJpdmF0ZToKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsK
KyAgICBTdHJpbmdUYWJsZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKaW5kZXggNWE4Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAz
MmYxYmRmMjFiNThkYmY2Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdIYXNoLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVl
ID0gdHJ1ZTsKICAgICB9OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01l
ZGlhQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmls
aXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhk
MDRhMjU2NDM2ZTc3MTVjYzYuLjA5NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQw
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMv
TWVkaWFDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
YXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNp
bmNsdWRlICJNZWRpYUVuY29kaW5nQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5
cGVzKCkKIHsKICAgICAvLyBBICJidWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRh
aW5lciB0eXBlIGRvZXMgbm90IHVuaXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6
IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+
KHsKLSAgICAgICAgImF1ZGlvLzNncHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAg
ICJhdWRpby8zZ3BwMiIsCi0gICAgICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9t
cDQiLAotICAgICAgICAidmlkZW8vbXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0g
ICAgICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0g
ICAgICAgICJhdWRpby92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBw
bGUubXBlZ3VybCIsCi0gICAgICAgICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwK
LSAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+PiBidWNrZXRNSU1FVHlwZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4gewor
ICAgICAgICAiYXVkaW8vM2dwcCJfcywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAg
ICJhdWRpby8zZ3BwMiJfcywKKyAgICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVk
aW8vbXA0Il9zLAorICAgICAgICAidmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24v
bXA0Il9zLAorICAgICAgICAidmlkZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRp
b24vbXAyMSJfcywKKyAgICAgICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAg
ICAidmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisg
ICAgICAgICJ2aWRlby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAi
YXVkaW8vd2VibSJfcywKICAgICB9KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKaW5kZXggOTA0MzU0ZDYyOGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQz
MTAxZWRlZjQ1MmFkMDk0ZjAzNWJmODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2
ICs4NCw3IEBACiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJW
aXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgpAQCAtMjYwNyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdXBwb3J0c0hhc1BvcHVwKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnBvcHVwVmFsdWUoKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8U3RyaW5nPiB7Ci0gICAgICAgICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwg
ImRpYWxvZyIKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJf
cywgInRyZWUiX3MsICJncmlkIl9zLCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBo
YXNQb3B1cCA9IGdldEF0dHJpYnV0ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2ZTc2NzI3NGE1OWUwZmJiMDE2
NzdlMDlkOWE3OTJlMzk5YzlkMjA3Li40NmJiZjllZTk2MmFlNGU5Y2MxMzdiY2FiN2QyN2RiMDQw
NjQ1ZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yMzg5LDcgKzIzODksNyBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRo
b3JTaGFkb3dSb290KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1
YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFn
LmdldCgpLAogICAgICAgICAgICAgJmFzaWRlVGFnLmdldCgpLApAQCAtMjQxMCw3ICsyNDEwLDgg
QEAgc3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBl
bGVtZW50KQogICAgICAgICAgICAgJnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3Bh
blRhZy5nZXQoKQogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJp
bmc+IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xp
c3QpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNl
dC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9RdWFsaWZpZWROYW1lLmgKaW5kZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVk
ZDM5MmY0Zi4uNDI5ZmM1NTk2NDM1MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxp
ZmllZE5hbWVIYXNoIHsKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1l
JiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwg
Y29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQogCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaElu
VmFsdWUgPSB0cnVlOwogfTsKIAogaW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmlu
ZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhi
MDMxOWNlMjUyYzZjNjZhY2I3OTNmNWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJj
OGE3ZDhlODUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAK
ICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNT
UyIsICRmYW1pbHlOYW1lc0ZpbGVCYXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApA
QCAtNzA5LDYgKzcxMCw3IEBAIHN1YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGlj
ZW5zZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfSwgPDxFTkQsICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlm
aWVkTmFtZSA6IHB1YmxpYyBRdWFsaWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5o
IgogRU5ECkBAIC05NTYsNyArOTU4LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTk5Niw3ICs5OTgsNyBAQCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFs
aWZpZWROYW1lOyAvLyBVc2UgcG9pbnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVt
cHR5VmFsdWUoKSBpbiBIYXNoTWFwIGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBO
RVZFUl9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1GYWN0b3J5TWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25z
dHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0
b3J5TWFwKCkKIHsKICAgICBzdHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWU7CkBAIC0xMDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYg
PDxFTkQKICAgICB9OwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0
byYgZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgp
LmltcGwoKSwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRy
eShlbnRyeS5mdW5jdGlvbiwgZW50cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5h
bWUubG9jYWxOYW1lKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9u
TWFwRW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwog
fQogCiBzdGF0aWMgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBF
bnRyeSBmaW5kJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9u
KGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBt
YXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3Rv
cnlNYXAoKSk7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7Cisg
ICAgcmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0
ZXJze25hbWVzcGFjZX1FbGVtZW50PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rv
cnk6OmNyZWF0ZUtub3duRWxlbWVudChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3Vt
ZW50JiBkb2N1bWVudCRmb3JtRWxlbWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCkBAIC0xMjI2LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9y
eUNwcEZpbGUKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVO
RAogOwpAQCAtMTI0Nyw3ICsxMjUwLDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGlj
IE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVz
cGFjZX1XcmFwcGVyTWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
V3JhcHBlck1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lOwpAQCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmlu
dCBGIDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZv
ciAoYXV0byYgZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2Fs
TmFtZSgpLmltcGwoKSwgZW50cnkuZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5h
bWUubG9jYWxOYW1lKCksIGVudHJ5LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBK
U0RPTU9iamVjdCogY3JlYXRlSlMkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnQ+JiYgZWxlbWVudCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7
Ci0gICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGwoKSkpCisgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0
KCkuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGds
b2JhbE9iamVjdCwgV1RGTW92ZShlbGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRh
MzljNjMwYmIyZmExYjRkZWJiM2QwLi5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdm
NDMwOTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0x
MTgsNyArMTE5LDcgQEAgRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9y
bWF0QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRp
YyBjb25zdCBhdXRvIGJsb2NrVGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxp
ZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+IHsKICAgICAgICAgYWRkcmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAg
ICAgYXNpZGVUYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZv
cm1hdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21t
YW5kLmNwcAppbmRleCA0ZWMwYjRlNTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42
NjE0MDdlMTQ1MjRjZjJhMTNmZWEzNjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3Zl
Rm9ybWF0Q29tbWFuZDo6UmVtb3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAK
IHN0YXRpYyBib29sIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0
byBlbGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAg
ICAgICBiVGFnLAogICAgICAgICBiZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2
YzJlMDA4ZmY4M2ZhZGEzYTdkYWYuLmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3
Y2UzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgi
CiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMg
Ym9vbCBpc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQog
ICAgICAgICAgICAgJnVsVGFnLmdldCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAg
ICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAg
ICAgIGZvciAoYXV0byYgdGFnIDogdGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0F1dG9maWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmlu
ZGV4IDY3MzVlMjY5ZjI1YWVmN2JjMDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIy
MWRjMjdlOTQyMjgyZjE0ZjkwMzJlOWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQXV0b2ZpbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBA
IHN0cnVjdCBBdXRvZmlsbEluZm8gewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9
OwogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVs
ZE5hbWVNYXAoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAg
IHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAg
IHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hN
YXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAg
IHsgImVtYWlsIiwgeyBBdXRvZmlsbEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6
OkNvbnRhY3QgfSB9LAogICAgICAgICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6
OkltcHAsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAg
ICBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZv
PiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAg
bWFwLmFkZChlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2Uy
OTA5NDRhNGI3Y2ZhZWRkOGQ3NS4uMDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2
MGRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBA
QAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMjI1LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nh
c2VTZW5zaXRpdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkK
ICAgICAgICAgICAgICZ2YWx1ZXR5cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0
ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7Cisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5n
PiBzZXQ7CiAgICAgICAgIGZvciAoYXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0
LmFkZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMy
NGI4YTAzZTZiMTcxNjIwZDZjYmUuLmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUy
ZjJjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hTZXQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2
ZW50c1BhcmVudE9iamVjdEZyb21FeHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAg
ICBzdGF0aWMgY29uc3QgYXV0byBtb3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtd
IHsKLSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAg
ICAgIGF1dG8qIHRhZ3MgPSBIVE1MTmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgSFRNTE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAg
ICAgICAgIGF1dG8mIHRhZyA9ICp0YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5
NGU5OWNiZTM5MTY4Zi4uOTJmMjc2ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNDc4LDkgKzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3Nl
KGNvbnN0IEhUTUxTdGFja0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUq
IGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJs
ZVF1YWxpZmllZE5hbWU+IHN0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJs
ZVF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFw
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9t
U3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFt
ZUNhc2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1h
cChTVkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05h
bWVzOjpnZXRTVkdUYWdzKCksIFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAg
ICBpZiAoY2FzZWROYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgdG9rZW4uc2V0TmFtZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5h
bWU+JiBtYXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRq
dXN0QXR0cmlidXRlcyhjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKIHsKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewog
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0
ZS5sb2NhbE5hbWUoKSk7CkBAIC01MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFk
anVzdEF0dHJpYnV0ZXMoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBB
dG8KIAogdGVtcGxhdGU8Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJs
ZSgpLCB1bnNpZ25lZCBhdHRyaWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0
dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2Fz
ZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0
ZXNUYWJsZSgpLCBhdHRyaWJ1dGVzVGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMo
bWFwLCB0b2tlbik7CiB9CiAKQEAgLTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRq
dXN0QXR0cmlidXRlczxNYXRoTUxOYW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpN
YXRoTUxBdHRyc0NvdW50Pih0b2tlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFBy
ZWZpeChIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21T
dHJpbmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWdu
ZWQgbGVuZ3RoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQo
cHJlZml4ICsgJzonICsgbG9jYWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1l
LCBuYW1lLm5hbWVzcGFjZVVSSSgpKSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRo
UHJlZml4ID0gW10oTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29u
c3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0
IEF0b21TdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBt
YXAuYWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxv
Y2FsTmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3Rh
dGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJp
YnV0ZXNNYXAoKQotewotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFw
OworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5n
LCBRdWFsaWZpZWROYW1lPiBtYXA7CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJl
Zml4KG1hcCwgeGxpbmtOYW1lLCBYTGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFt
ZXM6OlhMaW5rQXR0cnNDb3VudCk7CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQog
CiBzdGF0aWMgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1
YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1
dGVzTWFwKCk7CiAgICAgYWRqdXN0QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRi
YzlkOGUyNjM1MmQ1ZjYyMGQ3YjU1YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThm
YWYxMWJhNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJs
YXlzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUw
LDEwIEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24o
KQogICAgIHJldHVybiByZWdpb25DaGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMg
Y29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JH
QkE8dWludDhfdD4+JiB0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29u
c3QgYXV0byByZWdpb25Db2xvcnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBy
ZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJu
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVp
bnQ4X3Q+PiB7IHsKICAgICAgICAgICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYz
LCA1MCB9IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1
MCB9IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0g
fSwKQEAgLTE5NCw0OSArMTk1LDQ5IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVy
bGF5OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9u
dC51cGRhdGUobnVsbHB0cik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQi
KSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdl
dCgidG91Y2hzdGFydCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0g
ICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdl
bmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0
Il9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5k
UmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
dG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4
dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2ht
b3ZlIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgidG91Y2htb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3Vj
aGVuZCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1Jp
Z2h0QWxpZ25lZFRleHQoInRvdWNoZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQs
IGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwg
MzApOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5n
ZXQoInRvdWNoZm9yY2VjaGFuZ2UiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hF
dmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRl
eHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNo
Zm9yY2VjaGFuZ2UiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAg
IGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250
LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsK
ICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVy
cyIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoInBhc3NpdmUgbGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRS
ZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250
ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24i
KSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdl
dCgibW91c2Vkb3duIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAg
ICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5k
UmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9z
LCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVj
dC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJtb3VzZW1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91
Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5m
aWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3Zl
IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRB
bGlnbmVkVGV4dCgibW91c2Vtb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0
aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAi
X3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFs
aWduZWRUZXh0KCJtb3VzZXVwIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigp
KTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwg
bGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9y
bXMsIHRoZSAid2hlZWwiIHJlZ2lvbiBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSBy
ZWdpb24uCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgid2hlZWwiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgid2hlZWwiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJl
Y3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0
LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0
KCJub24tZmFzdCByZWdpb24iX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24o
KSk7CiAjZW5kaWYKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lv
biA6IG1fZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0
Y2hSZWdpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
VXNlclRpbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWlu
Zy5jcHAKaW5kZXggZWQ4ZGQ5MjM4ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAx
NTI3N2UwN2M0M2Q5Zjk4OWExN2VhYmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAj
aW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAo
UGVyZm9ybWFuY2VUaW1pbmc6OiopKCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmln
YXRpb25UaW1pbmdGdW5jdGlvbk1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYg
cmVzdHJpY3RlZE1hcmtOYW1lc1RvTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7
CisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlv
bj4+KHsKICAgICAgICAgeyAiY29ubmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25u
ZWN0RW5kIH0sCiAgICAgICAgIHsgImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5n
Ojpjb25uZWN0U3RhcnQgfSwKICAgICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5j
ZVRpbWluZzo6ZG9tQ29tcGxldGUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2Yx
OTc3MGQ0ODFlNmJlZTRmZWRhZWE2NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlk
MmMzNDFlYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1F
VHlwZVJlZ2lzdHJ5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
TUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9Db3JlU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2Ev
TlNVUkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1h
cC5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2Nv
YS9WZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFw
PFN0cmluZywgSGFzaFNldDxTdHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0
YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNG
b3JNSU1FVHlwZU1hcCgpCiB7CiAgICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBl
TWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhh
c2hTZXQ8U3RyaW5nPj4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPj4gbWFwOwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1h
cC5hZGQodHlwZSwgSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5z
aW9uKTsKKyAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24p
OwogICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBT
dHJpbmcmIHR5cGUsIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2Vh
NzQ1MmQ1ZmYyZTZjYjVmM2UxMTY2NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYx
Mjg3ZTJhNzI5Y2M0NzFiYmQxZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3Ns
YXNoQXNZZW5TaWduRm9yRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAo
ZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBhdXRvIHNldCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRv
bVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3Qg
Y2hhciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAg
ICAgIHNldC5hZGQoQXRvbVN0cmluZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsIH0pOwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2Nh
ZGU6Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJv
eWVkKEhhc2hTZXQ8QXRvbVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1h
a2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
QXRvbVN0cmluZz4gewogICAgICAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJB
cmlhbCBIZWJyZXciLAogICAgICAgICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1p
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TUZhaXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1
ZDBjYzg0OWQ5YTcwLi4xNDI0ZDFiZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
Q0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1
LDcgQEAKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJI
ZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYg
SEFWRShBVkNPTlRFTlRLRVlTRVNTSU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZl
Y3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0
cmFjdEtleUlEc1NrCiAgICAgcmV0dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hT
ZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXRE
YXRhVHlwZXMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJp
bmc+PiB2YWxpZFR5cGVzID0gSGFzaFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gdmFsaWRUeXBlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAg
ICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENE
TVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlT
VFJFQU1JTkdfQ0VOQ19JTklUREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVm
NzQ3NThiMTc4MmZjZDk3OTE3Li5hNDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5
MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElS
ZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJ
UmVnaXN0cnkuY3BwCkBAIC0zMSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNH
LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJ
bWFnZVR5cGVzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1h
Z2VUeXBlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5n
PiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhhc2hTZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBl
KTsKICAgICAgICAgfSwgJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRl
ZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VU
eXBlc10oY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lz
dGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsK
LQotICAgICAgICByZXR1cm4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOwor
ICAgICAgICBmb3IgKGF1dG8mIGltYWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KSB7CisgICAgICAgICAgICBpZiAoc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhp
bWFnZVR5cGUpKQorICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJu
IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2
ODY3NDAwZDc2ZWUzYzY2NTc1ZS4uNGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2Qw
YjliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJ
UmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElS
ZWdpc3RyeS5oCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3Qg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRT
dXBwb3J0ZWRJbWFnZVR5cGVzKCk7CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hF
VkNVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4
MWRiYTAyOGIzZWU5MjMzLi42MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZD
VXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJI
RVZDVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2lt
cG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVy
c2lvbi5oPgorI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNp
bXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJv
b2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBN
ZWRpYUNhcGFiaWxpdGllc0luZm8mCiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBl
PiBjb2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykK
IHsKLSAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJp
bmcsIENNVmlkZW9Db2RlY1R5cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVj
VHlwZV9IMjY0IH0sCi0gICAgICAgIHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0s
Ci0gICAgICAgIHsgImh2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsg
ImhldjEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0g
bWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxTdHJpbmcsIENNVmlkZW9Db2RlY1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZp
ZGVvQ29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5
cGVfSDI2NCB9LAorICAgICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0s
CisgICAgICAgIHsgImhldjEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsK
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRi
MGNhY2Q2N2RmYmI5NWMxMmQ5OS4uZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0
MjlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEz
NzEsMTUgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJl
YWRDYWxsYmFjayhDYWxsT25DbGllbnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVh
ZENhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3Qg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0
byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIs
ICJWX1ZQOSIgfSk7CisgICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVk
PE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQ
OCJfcywgIlZfVlA5Il9zIH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3Mo
KQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4m
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBz
dGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7
ICJBX1ZPUkJJUyIsICJBX09QVVMiIH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3Ry
aW5nPj4oeyAiQV9WT1JCSVMiX3MsICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIz
ODRmOTJmNzQ4ZjRjOWJhNWQ5MWI4ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0
NmQ1YzcyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVf
RVhQT1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2Vy
LCBwcml2YXRlCiAKICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2
NF90KTsKIAotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVv
Q29kZWNzKCk7Ci0gICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVk
aW9Db2RlY3MoKTsKKyAgICBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBz
dXBwb3J0ZWRBdWRpb0NvZGVjcygpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJt
OjpTdGF0dXMgT25FbGVtZW50QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2Vi
bTo6QWN0aW9uKikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlcy5jcHAKaW5kZXggODgwY2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFh
Zi4uZmUwZWQzMTQ0MTE0OGVlMTUzYjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC00Myw5ICs0NCw5IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdz
KCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHNfdGFnTGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHMTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhp
Y3MgZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJt
R3JhcGhpY3NFbGVtZW50CkBAIC05Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJp
bmc+JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0K
IAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFy
a2VyVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmlu
Zz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYg
KHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFk
ZChTVkdOYW1lczo6bGluZVRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0
KCkuYWRkKFNWR05hbWVzOjpwYXRoVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkg
QEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBz
X3RhZ0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tl
VGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21T
dHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2Fs
TmFtZSgpKTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFn
LT5sb2NhbE5hbWUoKSk7CkBAIC0xMjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0
cmluZz4mIGZpbGxBbmRTdHJva2VUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1z
dGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRp
YyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmlu
Zz4mIGNoYWluYWJsZVJlc291cmNlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBz
X3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAg
c190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5s
b2NhbE5hbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVz
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3
NThhMjc4MzlhMmI4MTg2NDRhY2VjMmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMz
NDAxMjc2ZTUzNmZhZjQwMGMyZDZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0
ZXIuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5
bGUgewpAQCAtNDk3LDcgKzQ5OCw3IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMg
Ym9vbCBoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVt
ZW50JiBlbGVtZW50KQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlz
cGxheS0zLyN1bmJveC1odG1sCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVz
ID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRh
Z0xpc3RbXSA9IHsKICAgICAgICAgICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJU
YWcuZ2V0KCksCkBAIC01MTcsNyArNTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlz
cGxheU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAg
ICAgICAgICZ0ZXh0YXJlYVRhZy5nZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCks
CiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0Owor
ICAgICAgICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAg
ICAgICBmb3IgKGF1dG8mIG5hbWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1l
LT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0
MjhmOTllMjhhMTc4Ny4uNzEyNjgwYTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNp
bmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3
ICsxMjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNw
bGluZXMoU3RyaW5nVmlldyBzdHJpbmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0
YXRpYyBjb25zdCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
W10gewotICAgICAgICBIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAg
ICAgICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0
LmFkZCh7CiAgICAgICAgICAgICBTVkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAppbmRleCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4
MTdlYjU0Li45YzE0MGNjMWQ0ZTAzOGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJf
SU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRy
aWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5
SUQ+IGNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAt
MTQxLDE2ICsxNDIsMTYgQEAgc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJ
bXBsKiwgQ1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRy
LmdldCgpLAogICAgIH07CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVy
dHlJRD4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBh
dHRyaWJ1dGVOYW1lcykgewogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBu
YW1lLT5sb2NhbE5hbWUoKTsKLSAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQ
cm9wZXJ0eUlEKGxvY2FsTmFtZSkpOworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJv
cGVydHlJRChsb2NhbE5hbWUpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3Vw
cG9ydHMgInRyYW5zZm9ybS1vcmlnaW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVk
LAogICAgIC8vIGFuZCB3ZSBjYW4gYWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJs
ZSBhYm92ZSBpbnN0ZWFkLgotICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2Fs
TmFtZSgpLmltcGwoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQo
dHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9y
aWdpbik7CiAKICAgICByZXR1cm4gbWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmll
ZE5hbWUgU1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxOYW1lCiAgICAgICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAg
ICAgICAgICAgJlNWR05hbWVzOjpocmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1l
PiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBA
IC03ODAsNyArNzgxLDcgQEAgQ1NTUHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlk
Rm9yU1ZHQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4g
Q1NTUHJvcGVydHlJbnZhbGlkOwogCiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9
IG1ha2VOZXZlckRlc3Ryb3llZChjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFw
KCkpOwotICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUo
KS5pbXBsKCkpOworICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2Nh
bE5hbWUoKSk7CiB9CiAKIGJvb2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmlu
ZGV4IDFkMmNkOTc4ZWQxMzIzNmQ2YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFk
Y2U1ZjJiNjU3MDk5NmE1ZmE0NDU1NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXN0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApA
QCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlk
YXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0
cmlidXRlcykKK3ZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRB
dHRyaWJ1dGVzKQogewogICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVy
ZXNBdHRyKTsKICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNB
dHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1
Mjk3NmM1MjJhOGM1Yi4uMGMyNTIxNjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3
IEBAIGNsYXNzIFNWR1Rlc3RzIHsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRl
ZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBo
YXNGZWF0dXJlRm9yTGVnYWN5QmluZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXgg
ZTA1ZmI1M2MwMTk5NzE2YjM0NTZmNzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0
M2QzYTI0MjIyYjhmNGZiMzc3MTExMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRl
ICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTE3NywxNCArMTc4LDE0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9t
U3RyaW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50
U2V0KCkKIHsKICAgICAvLyBTcGVjOiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGlj
cyBlbGVtZW50IG9yIG90aGVyICd1c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0
IHRoYXQgY2FuIGJlIHJlLXVzZWQKICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBT
VkcgZG9jdW1lbnQgdmlhIGEgJ3VzZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1l
bnQiIGlzIGRlZmluZWQgYXMgJ2NpcmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAn
cGF0aCcsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNs
dWRlZCBhcmUgYW55dGhpbmcgdGhhdCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkg
bWFrZSBzZW5zZSB0byBhcHBlYXIgb25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVz
cGFjZSBTVkdOYW1lczsKLSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZv
ciAoYXV0byYgdGFnIDogeyBhVGFnLmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0
KCksIGVsbGlwc2VUYWcuZ2V0KCksIGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFn
LmdldCgpLCBtZXRhZGF0YVRhZy5nZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQo
KSwgcG9seWxpbmVUYWcuZ2V0KCksIHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNo
VGFnLmdldCgpLCBzeW1ib2xUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdl
dCgpLCB0aXRsZVRhZy5nZXQoKSwgdHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRh
Zy5nZXQoKSB9KQogICAgICAgICBzZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJu
IHNldDsKQEAgLTE5Miw3ICsxOTMsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVh
dGVBbGxvd2VkRWxlbWVudFNldCgpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRF
bGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0
KCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQo
KTsKICAgICByZXR1cm4gIXNldC5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cAppbmRleCA2ODE5MWI5NGE0MDAxMDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFl
NzZkYTRhZmQ2MDQ5ZGJjYTYwYjkwZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC00NjIsNyArNDYzLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdp
bk9yRW5kKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9v
bCBTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRl
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0
aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAg
ICAgICAgIFNWR05hbWVzOjpiZWdpbkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAog
ICAgICAgICBTVkdOYW1lczo6ZHVyQXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCmluZGV4IDlmZGZiYThiMTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBj
MjJkNGI2N2NlNWZmYTNiODMwNjljYmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRnVuY3Rpb25zLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCAr
NjY5LDQ0IEBAIHN0cnVjdCBGdW5jdGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVu
dENvdW50SW50ZXJ2YWw7CiB9OwogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFw
VmFsdWU+IGNyZWF0ZUZ1bmN0aW9uTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlv
bk1hcCgpCiB7CiAgICAgc3RydWN0IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1h
cFZhbHVlIGZ1bmN0aW9uOwogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBw
aW5nIGZ1bmN0aW9uc1tdID0gewotICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlv
bkJvb2xlYW4sIDEgfSB9LAotICAgICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNl
aWxpbmcsIDEgfSB9LAotICAgICAgICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0
LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwg
eyBjcmVhdGVGdW5jdGlvbkNvbnRhaW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNy
ZWF0ZUZ1bmN0aW9uQ291bnQsIDEgfSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVu
Y3Rpb25GYWxzZSwgMCB9IH0sCi0gICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZs
b29yLCAxIH0gfSwKLSAgICAgICAgeyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAot
ICAgICAgICB7ICJsYW5nIiwgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7
ICJsYXN0IiwgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1u
YW1lIiwgeyBjcmVhdGVGdW5jdGlvbkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAg
ICAgICB7ICJuYW1lIiwgeyBjcmVhdGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwK
LSAgICAgICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkks
IEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVh
dGVGdW5jdGlvbk5vcm1hbGl6ZVNwYWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsg
Im5vdCIsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7
IGNyZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBv
c2l0aW9uIiwgeyBjcmVhdGVGdW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91
bmQiLCB7IGNyZWF0ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0
aCIsIHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5n
IiwgeyBjcmVhdGVGdW5jdGlvblN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7
ICJzdHJpbmctbGVuZ3RoIiwgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAotICAgICAgICB7ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3Ry
aW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsg
Y3JlYXRlRnVuY3Rpb25TdWJzdHJpbmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmlu
Zy1iZWZvcmUiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAg
ICAgeyAic3VtIiwgeyBjcmVhdGVGdW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5z
bGF0ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVl
IiwgeyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uQm9vbGVhbiwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsg
Y3JlYXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAg
ICAgIHsgImNvbnRhaW5zIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAg
ICAgICB7ICJjb3VudCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAg
eyAiZmFsc2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZs
b29yIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywg
eyBjcmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVG
dW5jdGlvbkxhbmcsIDEgfSB9LAorICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9u
TGFzdCwgMCB9IH0sCisgICAgICAgIHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25M
b2NhbE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVh
dGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNl
LXVyaSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9
LAorICAgICAgICB7ICJub3JtYWxpemUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxp
emVTcGFjZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRl
RnVuY3Rpb25Ob3QsIDEgfSB9LAorICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rp
b25OdW1iZXIsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsg
Y3JlYXRlRnVuY3Rpb25Qb3NpdGlvbiwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBj
cmVhdGVGdW5jdGlvblN0YXJ0c1dpdGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsg
Y3JlYXRlRnVuY3Rpb25TdHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3Ry
aW5nLWxlbmd0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwg
MSkgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJp
bmcsIEludGVydmFsKDIsIDMpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJp
bmctYmVmb3JlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAg
ICAgICAgeyAic3VtIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAi
dHJhbnNsYXRlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAg
eyAidHJ1ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBI
YXNoTWFwPFN0cmluZywgRnVuY3Rpb25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsK
ICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1
bmN0aW9uLm5hbWUsIGZ1bmN0aW9uLmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFBhcnNlci5jcHAKaW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQw
Yzc5MGQ1ODk1MC4uODlmN2VkOWQ3MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
WFBhdGhQYXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CkBAIC03NiwyOCArNzcsMjggQEAgc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3Rl
cikKICAgICByZXR1cm4gTm90UGFydE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNO
YW1lc01hcCgpCiB7CiAgICAgc3RydWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciog
bmFtZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhp
czsKICAgICB9OwogICAgIGNvbnN0IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAg
ICB7ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rv
ci1vci1zZWxmIiwgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJp
YnV0ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpD
aGlsZEF4aXMgfSwKLSAgICAgICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlz
IH0sCi0gICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNl
bGZBeGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwK
LSAgICAgICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhp
cyB9LAotICAgICAgICB7ICJuYW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAg
ICAgIHsgInBhcmVudCIsIFN0ZXA6OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5n
IiwgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIs
IFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpT
ZWxmQXhpcyB9CisgICAgICAgIHsgImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwK
KyAgICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlz
IH0sCisgICAgICAgIHsgImF0dHJpYnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAg
ICAgICB7ICJjaGlsZCJfcywgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRh
bnQiX3MsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3It
c2VsZiJfcywgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93
aW5nIl9zLCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJs
aW5nIl9zLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3Bh
Y2UiX3MsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVw
OjpQYXJlbnRBeGlzIH0sCisgICAgICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5n
QXhpcyB9LAorICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5n
U2libGluZ0F4aXMgfSwKKyAgICAgICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAg
IH07Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAg
ICAgZm9yIChhdXRvJiBheGlzTmFtZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChh
eGlzTmFtZS5uYW1lLCBheGlzTmFtZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXgg
ODdiZDI4ZWI0OGFlMjQwMDY1NThlOGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMy
NjRlMGM1YTA5YzdlYmJlM2RjZGNlN2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5j
bHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVh
ZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBT
dHJpbmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJp
bmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJu
ICJDUkVBVEUgVEFCTEUgXCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklN
QVJZIEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJ
Q1QgRkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVH
RVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEws
IGdyYW5kZmF0aGVyZWQgSU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1Qg
TlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3Zl
ZCBJTlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRl
cmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9T
dG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFC
TEUgXCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVn
aXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFz
dFNlZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEws
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVy
ZWQgSU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5
UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5P
VCBOVUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRF
R0VSIE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNz
QVBJIElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCBJTlRFR0VSIE5PVCBOVUxMKSJfczsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1u
cyYgZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0
byBjb2x1bW5zID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNp
dGVEb21haW5JRCIsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1l
T2ZBZENsaWNrIiwgInRva2VuIiwgInNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGlj
IGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7
ICJzb3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNv
dXJjZUlEIl9zLCAidGltZU9mQWRDbGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAi
a2V5SUQiX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25z
dCBFeHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0
YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmlu
Zz4geyAic291cmNlU2l0ZURvbWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNv
dXJjZUlEIiwgImF0dHJpYnV0aW9uVHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRD
bGljayIsICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUi
LCAia2V5SUQiLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3Rh
dGljIGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5n
PiB7ICJzb3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywg
InNvdXJjZUlEIl9zLCAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAi
dGltZU9mQWRDbGljayJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4i
X3MsICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGlu
YXRpb24iX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsy
OTQsOSBAQCBzdGF0aWMgYm9vbCBuZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmlu
ZyYgc2NoZW1hKQogICAgIHJldHVybiBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2
ZWxEb21haW5zIik7CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYg
Y3JlYXRlVGFibGVRdWVyaWVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQog
ewotICAgIHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVR
dWVyaWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMi
X3MsIGNyZWF0ZU9ic2VydmVkRG9tYWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9z
LCBjcmVhdGVUb3BMZXZlbERvbWFpbnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMiX3MsIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
c30sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBl
NDhlODMyNmEyYTczNWVmOTI0Zjg3MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3
MmFjYzFhZTMzYzk1ODdjNDgyM2JmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgKQEAgLTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNp
dHk+PiA6IFZlY3RvckFyZ3VtZW50Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwg
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBI
YXNoTWFwVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhh
c2hUYWJsZVRyYWl0cz4gSGFzaE1hcFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0
LDYgKzUxNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhh
c2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRp
b25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDgg
KzU1Miw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+
IHN0cnVjdCBBcmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmc+PiB7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
PiBIYXNoU2V0VHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVj
dCBBcmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhh
c2hUYWJsZVRyYWl0cz4+IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQp
CiAgICAgewpAQCAtNTc5LDYgKzU4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hT
ZXQ7CisgICAgICAgIGhhc2hTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7
CiAgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAg
ICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4g
a2V5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJy
b3dzZXJDaGVja3MubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5tbQppbmRleCA0OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFi
ZDZkLi45YTRkNzgwOWU2M2U0ODUyNDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5t
bQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAj
aW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
ICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpA
QCAtNTgsNyArNTksNyBAQCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4+PiBnZXRBcHBCb3VuZERvbWFpbnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJ
RC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBh
dXRvIGFwcEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRv
IGFwcEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+PiB7CiAgICAgICAgIHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVy
Il9zLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygi
MTI3LjAuMC4xIikgfX0sCiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHAKaW5kZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZk
ZDgxZDBkNy4uY2U1NmY5Y2Q0NjI4NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1
MiwxMyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiAKIGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVj
b2RlciYgZGVjb2RlciwgV2ViUHJlZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlv
bmFsPEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1h
cD4gdmFsdWVzOwogICAgIGRlY29kZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVz
KTsKIAotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZh
dWx0czsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRl
Y29kZXIgPj4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmgKaW5kZXggYzVmZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYw
OC4uNGEzZDhmMmE0ZTRjZjBjNzgxZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC02Niw3ICs2Niw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVz
aW5nIFZhbHVlID0gVmFyaWFudDxTdHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZh
bHVlTWFwID0gTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAg
ICAgVmFsdWVNYXAgbV92YWx1ZXM7CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
cm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1By
b3h5Q29jb2EubW0KaW5kZXggMmYwYWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4
Ny4uMDQxNzQ4YjkwNDRhZDI1MzY4OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0K
QEAgLTY1LDkgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNv
bmRzIHVuZXhwZWN0ZWRBY3Rpdml0eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nl
c3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcygp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1Q
YXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdp
dGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlT
dGFuZGFyZGl6aW5nUGF0aCwKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVy
OkAiY29tLmFwcGxlLldlYktpdCJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQ
YXRoCiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCA1YTY2MjAyMjkxMzA0YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBh
ZmI0M2I3NDUwMzliMGI0ODMzNTFlNDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5Ojp1cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5
OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFk
QWNjZXNzOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzczsKICAgICByZXR1cm4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCA2
OGQ2NmM2MTVlYmE2ZTk3YjBhM2M4MGQ0MzRiMWIxMTQ4YjJkMDdjLi5hYjEzNTU1OTZkNTczMzY3
MWZkMzIyZTA2YzMyNTAyNmE5NzQ5MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNl
dC5oPgogCiAjaWYgSEFWRShWSVNJQklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzYsNyAr
NDc3LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQ
cm94eSwgcHVibGljIFJlc3BvbnNpdmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWlu
Z0RlYnVnZ2VkKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRD
b2RlKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9y
bVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0
aEFzc3VtZWRSZWFkQWNjZXNzKCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25z
aXZlbmVzc1RpbWVyKCkgeyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9p
ZCB1cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424874</attachid>
            <date>2021-03-31 23:55:06 -0700</date>
            <delta_ts>2021-03-31 23:59:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210331235505.patch</filename>
            <type>text/plain</type>
            <size>296643</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi5jMGRiMWViY2VlYmVjN2Jk
OTBjMTQ3YWI2ZGVkYTViNDBhNmY5ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi4xNTA0Mjk0NDFlOTA3NTRmNjhhNWIyMTA5OTdh
MjE0ZjZkZTFmNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NSBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRv
bid0IHVzZSBpdCBhcyBhIGRlZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQg
cGVyZm9ybWFuY2Ugdi5zLiBtZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAg
YW5kIHRoaXMgcGF0Y2gncyBnb2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZh
dWx0LiBSYXRoZXIsIHRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8g
bm9uLXBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gc2F2ZSBtZW1vcnkuIFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29t
cHV0ZXMgaGFzaCB2YWx1ZSBjb21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGls
bCwgdGhpcyBpcyB1c2VmdWwgc2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFu
eSBzbWFsbCBIYXNoVGFibGVzIGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUg
c3VwZXIgbGFyZ2UgSGFzaFRhYmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2Ft
ZSBhbW91bnQgb2YgbWVtb3J5IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBn
b2FsIGlzIGFwcGx5aW5nIHRoaXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwg
YnV0IGEgZmV3IiBzaW5nbGV0b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSBtYWludGFpbnMgZGlzdGFuY2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBh
ZGp1c3RpbmcgZXhpc3RpbmcgZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcs
IGlmIHdlIGZvdW5kIHRoYXQgdGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJ
QiB0aGFuIHRoZSBjdXJyZW50IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVu
dHJpZXMsIGFuZCBpbnNlcnQgdGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4g
VGhpcyBpcyBnaXZpbmcKKyAgICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8g
cG9vciBlbnRyeSAodGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBh
bmQgbWFraW5nIGF2ZXJhZ2UgRElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29k
IGludmFyaWFudAorICAgICAgICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3
ZSBmb3VuZCB0aGF0IGV4aXN0aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4g
c3RvcCBzZWFyY2hpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0
aGF0CisgICAgICAgIHdlIHNob3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdo
ZW4gaW5zZXJ0aW5nLiBUaGVzZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3Jt
YW5jZSBldmVuIHVuZGVyIHNpZ25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQt
ZmFjdG9yCisgICAgICAgIGp1c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGlu
ZyBwZXJmb3JtYW5jZSwgYnV0IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMg
Y29tcGFyZWQgdG8gbm9ybWFsIG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAg
V2UgaW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRz
IG9mIHRhYmxlcyBiYXNlZCBvbiBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBU
aGlzIGhhcyA5NSUgbG9hZC1mYWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1h
cHMgd2hpY2ggaXMgbW9zdGx5LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tp
bmcgdXAgcmVwZWF0ZWRseS4gSW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1h
bnkgdGhpcyBraW5kIG9mIHRhYmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3Vz
IGtpbmRzIG9mIHRoaW5ncy4gV2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3Ig
dGFibGUgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAg
d2UgYXJlIG1haW50YWlucyBmYXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMg
aGFzIDkwJSBsb2FkLWZhY3Rvci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcg
aXQgaWYgc2V0cyBhbmQgbWFwcyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNp
dmUuCisKKyAgICAgICAgMy4gRmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAg
ICAgICAgIFRoaXMgaGFzIDc1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBh
cmVkIHRvIEhhc2hTZXQgYW5kIEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQt
ZmFjdG9yIGZvciBsYXJnZSBzaXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVy
Zm9ybWFuY2UgcmVncmVzc2VkCisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0
b3IgbGFyZ2UgSGFzaFNldCBhbmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1h
bmNlIGludGVuc2l2ZSAoZS5nLiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBl
cmZvcm1hbmNlIGludGVuc2l2ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSByZXBsYWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdp
dGggUm9iaW5Ib29kSGFzaFRhYmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0
aWFuc3lsdmFuLmNvbS9wb3N0L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZh
dWx0LWhhc2gtdGFibGUtaW1wbGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAg
ICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29u
c3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAg
ICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3Zl
SWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6
CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpY
Pjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJn
Pjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6
Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46
OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1
cmUpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtl
QW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToK
KyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFp
dHM+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92
ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpI
YXNoVGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
cmFuZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlu
cyBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFu
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29tcHV0ZVRhYmxlSGFzaCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wMy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFNlcnZpY2UgV29ya2VyIHNjcmlwdHMgdXNlIHRvbyBtdWNoIG1lbW9yeSBpbiB0
aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFkN2RlZGVlNjZiNDk2MDBiZmJkZDcw
YTU0MmRjMGVjOTQwZGFmMC4uMTU0ZjEyYTdiZTczNTA4Y2Q3ZWY3YzViYWZjZWNhNzdhZjU3YWY2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTAzLTMxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9v
ZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAq
IGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAg
ICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZhY3RvcnlDcHBGaWxl
KToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAgICAqIGh0bWwvQXV0
b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omlz
Q2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVjdEZyb21FeHBvc3Vy
ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U1ZHVGFn
TmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc1dp
dGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAg
ICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0NvZGVjcyk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRBdWRp
b0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9rZVRhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpoYXNFZmZl
Y3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0
dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NW
R1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNh
bGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVzTWFwKToKKwogMjAy
MS0wMy0zMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
b21wdXRlZCBzdHlsZSBmb3IgYSBib3JkZXItcmFkaXVzIGNvcm5lciBzaG91bGQgbmV2ZXIgYmUg
MHB4IHdoZW4gdGhlIHByb3ZpZGVkIHdpZHRoIGlzbid0IDBweApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZGNkNTBh
MmM1MDQ4YzRjOTQ1NmY4OGMzMzFmOTQ3NDFjMDM5NzI0Li4yNGM0NTk0MWQ4Mzk2YWFmMTAzY2E3
ZDhmOWNkZjYzMjNiNzZjOTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTAzLTMx
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVk
VW5hdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVkQXR0cmlidXRl
ZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYWJsZVF1ZXJpZXMpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbToKKyAgICAgICAgKFdlYktpdDo6Z2V0QXBwQm91
bmREb21haW5zVGVzdGluZyk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKwogMjAyMS0wMy0zMCAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGYWxsIGJhY2sgdG8g
Y29udGV4dCBtZW51IHByZXNlbnRhdGlvbiBhZnRlciBsb25nIHByZXNzaW5nIGltYWdlIG92ZXJs
YXkgdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcAppbmRleCAyYTA4ODdlNzNlNTcxZjAwOGU4ODRkYjM0MzA0ODZkMzQyMDA3MjIwLi43Zjhh
ZTRmMTQwZWU3NDNkMGZlNWYzOTU0Mzg3YmUzY2ZkNmQ1ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IHN0cnVjdCBDaGFyQnVmZmVyU2VhY2hlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRlTmFtZUlt
cGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JD
aGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitzdGF0aWMgUHJpdmF0ZVN5bWJvbElt
cGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBCdWlsdGluTmFtZXM6OlByaXZhdGVOYW1l
U2V0JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJCdWZmZXJT
ZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBzZXQu
ZW5kKCkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnMKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBTeW1ib2xJbXBsKiBsb29r
VXBXZWxsS25vd25TeW1ib2xJbXBsKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj4m
IG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKK3N0YXRpYyBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKGNv
bnN0IEJ1aWx0aW5OYW1lczo6V2VsbEtub3duU3ltYm9sTWFwJiBtYXAsIGNvbnN0IFdURjo6SGFz
aFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0
byBpdGVyYXRvciA9IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+Pihi
dWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggMzE5NDViZjNlMTZjZDMwNGU4
ZDg4MjliMTk5NzFkYTdjY2NlMzlhMi4uMDBkOTZkM2M3NDQ1ZWFhNmI0ODNkNDA5YWQ0Zjg3ODVk
YjM3YzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0
aW5zLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk5LDYgKzIwMSw5
IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnVpbHRp
bk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6CisgICAgdXNp
bmcgUHJpdmF0ZU5hbWVTZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPjsKKyAgICB1c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47CisKICAgICBC
dWlsdGluTmFtZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgUHJpdmF0ZVN5bWJv
bEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKQEAgLTIz
Miw4ICsyMzcsNiBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9kb2xsYXJW
TVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX3BvbHlQcm90b1ByaXZh
dGVOYW1lOwotICAgIHVzaW5nIFByaXZhdGVOYW1lU2V0ID0gSGFzaFNldDxTdHJpbmc+OwotICAg
IHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47
CiAgICAgUHJpdmF0ZU5hbWVTZXQgbV9wcml2YXRlTmFtZVNldDsKICAgICBXZWxsS25vd25TeW1i
b2xNYXAgbV93ZWxsS25vd25TeW1ib2xzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCmluZGV4
IDVjZjRmYTU1YzNlZWVkZWY0ZjhlYTkzY2Q2MWQ0NjYxZWI2N2Y4MmEuLjc4NTdkYmEwMTE1OGE3
NmY3ZTAxNmEyMzc5MzUwNWQ2ZGE1YjMwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0yMTIsNyArMjEzLDcgQEAgY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeSB7CiAKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07Ci0gICAgSGFzaE1hcDxSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNNYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRl
Y29kZUludHJpbnNpY01hcDsKIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5T
SUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBTdHJvbmc8VW5rbm93bj4gbV8jI25hbWU7CiAg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05B
TUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggNDRkMWNmZGJk
NDk0OTE2ZWRiZmZkNGYzMTRmN2NkNWZiZmI2ZjE1My4uYWU2ZGJiMGY4ZjU5MjM1MGE0Y2YyZTQx
MGRmMGJkMmRhYmM3OGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaApAQCAtMjk0LDYgKzI5NCw3IEBAIEpTVmFsdWUgaWRlbnRpZmllclRvU2FmZVB1Ymxp
Y0pTVmFsdWUoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiBzdHJ1Y3QgSWRlbnRpZmllclJlcEhh
c2ggOiBQdHJIYXNoPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHsKICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJu
IGtleS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdTeW1ib2xB
d2FyZUhhc2goKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9
IHRydWU7CiB9OwogCiBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8aW50PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAppbmRleCA0NjU1MjQ4ZjI4MDQ5MTBlNGI0ZGNjMjBlNWJiZTkxNGU1ODlmMWVhLi5j
ODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE5OSw3ICsxOTksNyBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVs
bCgpKQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6S2YpXSA9IGNhc2VGaXJzdE9wdGlvbjsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsK
ICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMs
IHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvLCBSZWxldmFudEV4dGVuc2lvbktleTo6S2YsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpLbiB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0g
cmVzb2x2ZWQubG9jYWxlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJvb2wgSW50bENvbGxhdG9yOjp1
cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3QKIH0KIAogI2lmIEFTU0VS
VF9FTkFCTEVECi12b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgbG9jYWxlcykKK3ZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lD
VUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JiBsb2NhbGVzKQogewogICAgIGZvciAo
YXV0byYgbG9jYWxlIDogbG9jYWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmlu
Z1dpdGhEVUNFVCA9IFtdKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9y
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4
IDI0ZDYxNjE2NDlhZDlmZTdkNGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLjVlNTJhMWM5MjVjMmVk
NDAzYzEzNzUzYzVjMTcyYzlmY2QzZWYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L0lDVUhlbHBlcnMu
aD4KIApAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzdGF0
aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNl
dCYpOwogI2Vsc2UKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlh
bnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpIHsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBj
aGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JikgeyB9CiAjZW5kaWYKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMwZDQzODI5YjUzYjk3NTdiOWEx
ZmMzYjkuLmY4OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3MzNmODk4NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cApAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgbG9j
YWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Okhj
KV0gPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmpl
Y3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxv
Y2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4dGVuc2lv
bktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAg
IG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDFiYmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0MGY3MGE0YTkuLmMwOTA5Yjg5
MWU5NDMwYzBkYTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSgogICAg
IC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1
ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVj
dG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggMjJhMTE1ZDEzOWY2
YzViMjQ1ZWRlYmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRi
NTA5N2M2NDIwYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBJbnRsRGlzcGxheU5h
bWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmEKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZmMGEwOTMzNzY5MTFkYjEwYjg4
ZmFhOWY0NWYzNWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2UwZWU3YTZkOTgzZmJlY2MzN2I4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yU3VwcG9ydGVkTG9j
YWxlc09mLCAoSlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWRp
c3BsYXluYW1lcy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBvcnRlZExvY2FsZXNPZgogCiAg
ICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3BsYXlOYW1lcyUuW1thdmFpbGFi
bGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAppbmRl
eCA4MTdiOWNhZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEzMDkyLi44ODBlZDI2ZTczYWZl
MWNhOTQ0Nzc0NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBJ
bnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7Cisg
ICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVj
dCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9j
YWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1ZWUyM2RiZjFlMGIwMzljM2Nh
ZjA3ODBmMWI2NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBkZjBlNjc5OGJkYTcyMjIxNWEz
YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlz
dC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAv
LyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1hdCUuW1thdmFpbGFibGVMb2Nh
bGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4g
TGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4K
ICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAwMDdj
OWQzMDI3MTVhNTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5mMDM1MGM4NDM4ZDc3ZWJlN2E1
ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0K
IAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVy
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwg
bG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2MmViYmMyNjQ0Mzc5YWY1OTMy
MTEwZjAuLmYyMWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFkNTkxZjEzOGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
LCAoSlNHCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBmODllOGZlNzRlOGRiY2YwZTU4
MzUwYWJlYzFmN2E4NWQ4YmRlNC4uOWQ1MzZkNzRjMDE5ZDE4ZGE3NTgzN2Q1OWFiNzM4Nzk2ZWVk
NjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAK
QEAgLTM1Miw3ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBj
aGFyKiBsb2NhbGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAvLyBFbnN1cmUgd2UgaGF2ZSB4
eC1aWiB3aGVuZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0aWMgdm9pZCBhZGRTY3JpcHRs
ZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJp
bmdWaWV3IGxvY2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChM
b2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQogewogICAgIGlm
IChsb2NhbGUubGVuZ3RoKCkgPCAxMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3Nyw5
IEBAIHN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluCiAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQoU3Ry
aW5nSW1wbDo6Y3JlYXRlU3RhdGljU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMo
KQorY29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7
CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNv
bnN0cnVjdCgpOwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVpbnQ4X3QgZHVjZXRXZWlnaHRz
WzEyOF0gPSB7CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwgMzcsIDAsCiB9OwogCi1jb25z
dCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3Qg
TG9jYWxlU2V0JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsK
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29u
c3RydWN0KCk7CkBAIC00NzYsMjIgKzQ3NiwyMSBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVz
OwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2Nh
bGVzKCkKK2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlZEF2YWls
YWJsZUxvY2FsZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gY2Fj
aGVkQXZhaWxhYmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZd
IHsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAg
YXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxv
Y2FsZXMtPmlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzSW1tb3J0YWwgPSB0
cnVlOwogICAgICAgICBpbnQzMl90IGNvdW50ID0gdWJya19jb3VudEF2YWlsYWJsZSgpOwogICAg
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgbG9jYWxlID0gbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRCh1YnJrX2dldEF2YWlsYWJsZShp
KSwgaXNJbW1vcnRhbCk7CiAgICAgICAgICAgICBpZiAobG9jYWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZSk7Ci0gICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxl
TG9jYWxlcywgbG9jYWxlKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMtPmFkZChsb2Nh
bGUpOworICAgICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxv
Y2FsZXMuZ2V0KCksIGxvY2FsZSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgICByZXR1cm4gYXZh
aWxhYmxlTG9jYWxlczsKQEAgLTY5OCw3ICs2OTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9j
YQogICAgIHJldHVybiBzZWVuOwogfQogCi1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxl
KQorU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKICAgICByZXR1cm4gYmVzdEF2YWlsYWJs
ZUxvY2FsZShsb2NhbGUsIFsmXShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSkgewogICAgICAgICBy
ZXR1cm4gYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpOwpAQCAtNzYzLDcgKzc2
Miw3IEBAIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bG9jYWxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBNYXRj
aGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAv
LyBMb29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAg
LTgwNCw3ICs4MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8UwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hl
clJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLWJlc3RmaXRtYXRjaGVyCkBAIC04MjUsNyArODI0LDcgQEAgY29uc3RleHByIEFTQ0lJ
TGl0ZXJhbCByZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktleSBr
ZXkpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxv
Y2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVu
c2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURh
dGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKK1Jlc29sdmVkTG9jYWxl
IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxl
U2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0
aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5
PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29u
c3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAgIC8vIFJlc29sdmVMb2Nh
bGUgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50
RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlCkBAIC04OTAsNyArODg5LDcgQEAgUmVzb2x2ZWRM
b2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4KICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5
KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewog
ICAgIC8vIExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9v
a3Vwc3VwcG9ydGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBAIHN0YXRpYyBKU0FycmF5KiBs
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBC
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0Zml0c3Vw
cG9ydGVkbG9jYWxlcwpAQCAtOTI4LDcgKzkyNyw3IEBAIHN0YXRpYyBKU0FycmF5KiBiZXN0Rml0
U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
CiAgICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBwb3J0ZWRMb2Nh
bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMs
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQorSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1Zh
bHVlKQogewogICAgIC8vIFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIG9wdGlvbnMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
NDAyLyNzZWMtc3VwcG9ydGVkbG9jYWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oCmluZGV4IGZhMmU4MjgwNzhiN2U4NTFhNzcxZGMwYTA4MGZiNmE2ODVhMTJh
ZWQuLjYxNDBjMjBkNmZkM2U4ZThiNTI4OTc1ZDYzODQ4ZmYxODNmY2FiNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb25J
dGVyYXRvcjsKIApAQCAtODEsMTUgKzgyLDE2IEBAIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiB9OwogCiBTdHJpbmcgZGVmYXVsdExvY2FsZShKU0ds
b2JhbE9iamVjdCopOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxl
cygpOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5l
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK3VzaW5nIExvY2Fs
ZVNldCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Owor
Y29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0
JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxT
ZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
RGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lu
bGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5P
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSk7CiBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlv
bmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrKTsKQEAgLTEwNywxMCArMTA5LDEwIEBAIHN0cnVjdCBSZXNvbHZlZExvY2FsZSB7
CiAgICAgUmVsZXZhbnRFeHRlbnNpb25zIGV4dGVuc2lvbnM7CiB9OwogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
TG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVj
dG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkpOwotSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKK1Jlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVy
LCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxl
dmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAo
KmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CitKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBsb2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExv
Y2FsZSk7CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4gU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgU3RyaW5n
JiByZXF1ZXN0ZWRMb2NhbGUsIFByZWRpY2F0ZSk7CiBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdT
eXN0ZW1zRm9yTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKaW5kZXggZTY1ZmIwZDcz
MjcxNTI5YjVjYWE5ZDlmYWJlYzliZWJjYjRjNTZhMi4uY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3
YWRhZGI4ZThkY2JhZjUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1
bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1CiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2Nh
bGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2Fs
ZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVz
dCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0
IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6
QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxl
c0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSBy
ZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKICAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjg4NTBiMTBhOGJmZTY1NzA0M2QyYTFl
YWQwNzExMDQxYjkyMDU5MS4uMjdiMjMxMGIzNDhhMWU0YTQ1ZGYwZWY5MTE1M2E5ZTQ1ZThmZjU3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YsIChKU0dsCiAKICAgICAvLyAxMy4zLjIgSW50bC5QbHVyYWxSdWxlcy5zdXBwb3J0
ZWRMb2NhbGVzT2YgKGxvY2FsZXMgWywgb3B0aW9ucyBdKQogICAgIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTQwMi8jc2VjLWludGwucGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29m
Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCBmN2QzOGI4MWVhYzgy
ODYzZjVhZDhiY2M4MzI0NjUyNjkyODE3NzZlLi4yYjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMx
MDk4MDViNzA3M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAg
IH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxNzRiNmZkY2UyYzg2YmZjMTFi
NWViMWVmNTM3MjA5OGVhODk4NDk0Li45YThjOGQ0Y2E2YzZjNGVkMzVmZjcwZTk3ZTdkM2VjYzRm
NTlhZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJl
bGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIGF1dG8gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHAKaW5kZXggMDRjZjE3ZDUwOTM1NjIxYzQyNDhlODQ4Yjc3NTBlZGEzN2VhODFlOC4uMmFk
NzRmOTRiYmU4Y2ExN2M3NzU4OTJhZmJjNmZlZjcxMmE2MmI1OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCBJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG8KICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFs
T2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVy
LCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNv
bHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmZmQ3M2Y3MzZhOTc0MzM3OGRm
ZGIxYTMxZDRiZjk5Zjk4ZGVhZTUyLi4wOTM5NGRjMThlZGRmMmE5MzE5NTFlN2M2ZmFhOTcyMjhm
YmY2MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPYgogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXNl
Z21lbnRlci8jc2VjLWludGwuc2VnbWVudGVyLnN1cHBvcnRlZGxvY2FsZXNvZgogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJVNlZ21lbnRlciUuW1thdmFpbGFibGVMb2NhbGVz
XV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCmluZGV4IDgyNzM3ZDhmOWM2OGRlMThlODdmNWU1
N2NlYTBhNjAyMTBlODg4ODYuLjNhNzExZmI5MDliNjkwZTBmMTlmZWE1MTc0YzY4MDU4Y2JlNGM0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNp
bmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIFJlZ0V4cENhY2hlIGZpbmFsIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFw
OworICAgIHR5cGVkZWYgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8UmVnRXhwS2V5LCBX
ZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFwOwogCiBwdWJsaWM6CiAgICAgUmVnRXhwQ2FjaGUo
Vk0qIHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKaW5kZXgg
ZTBmODgzMTAyMGQ2ZDkzNWM3MDE5MDFmYjQ5YjI4Y2I2ZGM5MzhmYy4uZDE2NjI3OWY2ZGIyZWNl
ZWIyZTNlNzBiMDdkOTYzYmVlNGFiZTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwS2V5LmgKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFJlZ0V4cEtleSB7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ0V4cEtleSYga2V5KSB7IHJldHVybiBr
ZXkucGF0dGVybi0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJl
Z0V4cEtleSYgYSwgY29uc3QgUmVnRXhwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRy
dWU7CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDI2YjQ1ZTU1M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1
NjEzN2IzYzMxZDMwZGJhYjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2
OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEz
QTIyOEJEQ0FCMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9v
ZEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
UmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1
QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9v
ZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAy
RDAwMzRBMDkyIC8qIE5ha2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRF
ODcwMDM1OURBOSAvKiBEYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2
NzAwQkY2MjVFIC8qIFJlY3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVjdXJzYWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzM4LDYgKzc0MCw3IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVl
TWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4
IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5
RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3Rl
bUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAw
MUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMw
MzE1MUE4MjVCMDA0MTIzRkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAw
OURENDQ1IC8qIFJlc291cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIz
RkYgLyogUmV0YWluUHRyLmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJv
YmluSG9vZEhhc2hNYXAuaCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9i
aW5Ib29kSGFzaFNldC5oICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jp
bkhvb2RIYXNoVGFibGUuaCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVu
TG9vcC5jcHAgKi8sCiAJCQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAq
LywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5o
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2Vi
NjViNmQyZmM5MTc4Li5lMWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hF
QURFUlMKICAgICBSZWZQdHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5o
CisgICAgUm9iaW5Ib29kSGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlLmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0
ZWRBcml0aG1ldGljLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEy
ZDY1YWM2Mzc4OWM0Li4zZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCkBAIC05Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVu
dW1UcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsK
IHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJs
ZVRyYWl0czsKK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3Ry
dWN0IEtleVZhbHVlUGFpcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1h
cHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVu
YW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFz
aFNldDsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2
NDFhMTE4NWJjZi4uODkwMWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaApAQCAtMzEsNyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5
VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAKICAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5
VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+
LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBj
bGFzcyBIYXNoTWFwS2V5c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAg
LTIzMiw5MSArMjMyLDg5IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAg
IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2
b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAg
ICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1
bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBs
LmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVn
aW4oKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0
ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVu
ZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBp
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewog
ICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJh
dG9yIAotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29u
c3QKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBh
dXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUg
bG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IE1hcHBlZFBlZWtUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5l
TG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBA
QCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMo
Y29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
VHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsm
JiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1
Myw5MSArMzUxLDkxIEBAIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtl
eSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywg
VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FM
V0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUo
SyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgYWRkPEhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVu
Y3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtl
eVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGlu
ZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5
cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBw
ZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFk
ZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2Fy
ZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92
ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lQWRkKFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBL
ZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lRW5zdXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5
cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lRW5zdXJlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3Vw
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4
ICs0NDMsOCBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUo
aXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3Zl
SWYoRnVuY3RvciYmIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJl
bW92ZUlmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlw
ZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJu
IHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwu
Y2xlYXIoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRU
YWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAt
PiBNYXBwZWRUYWtlVHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlm
IChpdCA9PSBlbmQoKSkKQEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25z
dF9pdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9y
Pjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
a2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5l
R2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5
cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlW
YWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBA
IC01MTYsMjMgKzUxNCwyMyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
bmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkUGVla1R5cGU+Ojp0eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtl
VHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewog
ICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0
MiwxNCArNTQwLDE0IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
dm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtl
eVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAg
ICBpZiAoS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NjUsMTMgKzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNp
emUoKSAhPSBiLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0g
YS5lbmQoKTsKICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQs
OCArNTgyLDggQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7
CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGExNWRjMDM3NWExNzE5
YzdhYjMyNDYyYzdhZGY3OWVkNjBiNGVmLi5hNDAyY2UyNzM3NWFjZWIwY2ViMDRmOWViNWExZTQx
YWQyYzY5ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCi1zdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTQxLDcgKzM5LDcgQEAgY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRy
YWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxl
PFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVl
VHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1
ZVRyYWl0cz47CiAKIHB1YmxpYzoKICAgICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBm
b2xsb3dpbmcgc3RydWN0dXJlOgpAQCAtMTg2LDEwOSArMTg0LDEwOSBAQCBzdHJ1Y3QgSGFzaFNl
dEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
RW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0
dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZh
bHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250
YWlucyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3Qg
VCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkg
Y29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Citpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0
b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojph
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2lt
cGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBl
JiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1
ZVR5cGUmJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3Vs
dAoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCkBAIC0yOTYsOSArMjk0LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICBy
ZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CkBAIC0zMDYsOCArMzA0LDggQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdl
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYg
KGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
NiwyNyArMzE0LDI3IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVy
YXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92
ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkK
IHsKICAgICBtX2ltcGwuY2xlYXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0
ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7CkBAIC0zNDYsNDggKzM0NCw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVy
biB0YWtlKGJlZ2luKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRh
a2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUK
IHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDAzLDkgKzQwMSw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXpl
KCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDE2LDIyICs0MTQsMjIgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9
PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25z
dCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlckNvbGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4g
bGlzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+Cit2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAg
IGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBs
LmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4Zjcy
YjJlMDM2YzE2MDAxMGMwYTYyOTU4N2M1ZWRmMGE4Li5kMzk5NzlhNDFlYWM4ZGVhYTM3ZTQ1Nzk4
YzI0ZTJiYzA3OGU0ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBjbGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhj
b25zdCBIYXNoVGFibGVUeXBlKik7CiAKICNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBp
bmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAg
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKikgeyB9CiAKICNl
bmRpZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtu
b3duR29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgog
ICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZh
bHVlKiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcg
SGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJl
ZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlw
ZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xh
c3MgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAg
ICAgICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkK
ICAgICAgICAgewpAQCAtMjQzLDE4ICsyNDUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
ciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVl
LCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVl
VHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBI
YXNoVGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRh
YmxlLCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5
cGUqIHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93
bkdvb2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAt
MzQ3LDggKzM0OSw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwog
ICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTQwNyw3ICs0MTAsNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBI
YXNoVGFibGUoKTsKICAgICAgICAgfkhhc2hUYWJsZSgpIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7IAorICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsgCiAgICAgICAgICAgICBpZiAobV90YWJsZSkKICAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlVGFibGUobV90YWJsZSk7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgpAQCAtNTU5LDEyICs1NjIsNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CiAjZW5kaWYKIAotI2lmIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAg
ICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgogICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNp
emVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwpAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAKQEAgLTkzMiw3ICs5MjksNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAg
Y2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlm
ICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsKQEAgLTEwMTcsNyArMTAx
NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0x
MTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAg
ICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJs
ZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleCht
YWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAg
ICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwog
CkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsK
LSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4
dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFi
bGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVy
YXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAg
IHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5z
ZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4K
ICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAg
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAg
IEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHkt
bGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBA
IC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1f
bmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9
CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEyNzM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9y
LgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA3NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3Vz
aW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RS
b2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
YTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
OTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZh
Y3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVl
QXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hT
ZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI1MmVhZTYwMDRmNTdh
MGE1MTZiMzUyMWFjNzdkZGQxYjY1NGY4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsODc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUlIGxvYWQgZmFjdG9yLiBU
aGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBz
IGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5j
ZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9
IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8v
IDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBh
IGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3
b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0
YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gNzUlIGxv
YWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFi
bGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChIYXNoVGFibGUgdXNlcyA3
NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IEZhc3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUgLSA5NSUpIQorLy8KKy8v
IFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxl
dGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIEN1cnJlbnRseSwgdGhpcyBSb2Jpbkhv
b2RIYXNoVGFibGUgaGFzIHNvbWUgY2FzZXMgd2hpY2ggY2F1c2VzIE8oTl4yKSB3aGVuIGl0ZXJh
dGluZyBpdCBhbmQgaW5zZXJ0aW5nIGl0IHRvIHNvbWUgbmV3IFJvYmluSG9vZEhhc2hUYWJsZQor
Ly8gd2l0aG91dCByZXNlcnZpbmcgY2FwYWNpdHkgYW5kIHRoaXMgaXMgYmVjYXVzZSBvZiBoaWdo
IGxvYWQtZmFjdG9yIGFuZCBleHBvc2VkIGhhc2gtb3JkZXJpbmcgYXQgaXRlcmF0aW9uWzNdLiBU
byBtaXRpZ2F0ZSBpdCwgd2UgY2FsY3VsYXRlCisvLyBoYXNoIGZvciBlYWNoIHRhYmxlLCBhbmQg
ZG8gWE9SIHdpdGggdGhlIGhhc2ggdmFsdWUgdG8gbWFrZSBoYXNoIHZhbHVlIGRpZmZlcmVudCBm
b3IgZWFjaCB0YWJsZS4KKy8vCisvLyBbMV06IGh0dHBzOi8vY29kZWNhcHN1bGUuY29tLzIwMTMv
MTEvMTEvcm9iaW4taG9vZC1oYXNoaW5nLworLy8gWzJdOiBodHRwczovL2NvZGVjYXBzdWxlLmNv
bS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlvbi8K
Ky8vIFszXTogaHR0cHM6Ly9hY2NpZGVudGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1
MzU0NTQ1NTk4Ny9ydXN0LWhhc2gtaXRlcmF0aW9uLXJlaW5zZXJ0aW9uCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgorY2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBIYXNoVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OworICAg
IHVzaW5nIGl0ZXJhdG9yID0gSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAg
dXNpbmcgY29uc3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5
cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OworICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gVHJhaXRzOworICAgIHVzaW5nIEtleVR5cGUg
PSBLZXk7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gVmFsdWU7CisgICAgdXNpbmcgSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZSA9IElkZW50aXR5SGFzaFRyYW5zbGF0b3I8VmFsdWVUcmFpdHMsIEhhc2hG
dW5jdGlvbnM+OworICAgIHVzaW5nIEFkZFJlc3VsdCA9IEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVy
YXRvcj47CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByb2JlRGlzdGFuY2VUaHJl
c2hvbGQgPSAxMjg7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFLZXlUcmFpdHM6Omhhc0lzUmVsZWFz
ZWRXZWFrVmFsdWVGdW5jdGlvbik7CisgICAgc3RhdGljX2Fzc2VydChIYXNoRnVuY3Rpb25zOjpo
YXNIYXNoSW5WYWx1ZSk7CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoKSA9IGRlZmF1bHQ7CisK
KyAgICB+Um9iaW5Ib29kSGFzaFRhYmxlKCkKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CisgICAgICAgIGlmIChtX3RhYmxlKQorICAgICAgICAgICAgZGVhbGxvY2F0
ZVRhYmxlKG1fdGFibGUsIHRhYmxlU2l6ZSgpKTsKKyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUoY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJik7CisgICAgdm9pZCBzd2FwKFJvYmluSG9v
ZEhhc2hUYWJsZSYpOworICAgIFJvYmluSG9vZEhhc2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFJv
YmluSG9vZEhhc2hUYWJsZSYpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhh
c2hUYWJsZSYmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShSb2Jpbkhvb2RI
YXNoVGFibGUmJik7CisKKyAgICAvLyBXaGVuIHRoZSBoYXNoIHRhYmxlIGlzIGVtcHR5LCBqdXN0
IHJldHVybiB0aGUgc2FtZSBpdGVyYXRvciBmb3IgZW5kIGFzIGZvciBiZWdpbi4KKyAgICAvLyBU
aGlzIGlzIG1vcmUgZWZmaWNpZW50IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0
aGUgZW1wdHkgYW5kIGRlbGV0ZWQKKyAgICAvLyBidWNrZXRzLCBhbmQgaXRlcmF0aW5nIGFuIGVt
cHR5IHRhYmxlIGlzIGEgY29tbW9uIGNhc2UgdGhhdCdzIHdvcnRoIG9wdGltaXppbmcuCisgICAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VJdGVyYXRv
cihtX3RhYmxlKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9y
KG1fdGFibGUpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFr
ZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorCisgICAg
aXRlcmF0b3IgcmFuZG9tKCkKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gZW5kKCk7CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGF1
dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vha1JhbmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygp
XTsKKyAgICAgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldChidWNrZXQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3IoJmJ1Y2tldCk7CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgcmFuZG9tKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3RfaXRlcmF0b3I+KGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhp
cyktPnJhbmRvbSgpKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGtl
eUNvdW50KCk7IH0KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxl
U2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWtleUNvdW50KCk7
IH0KKworICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBrZXlDb3VudCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV90YWJsZSk7CisgICAgICAgIEFTU0VSVCghdGFibGVT
aXplKCkpOworCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6
Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6
bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KSk7CisK
KyAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICAgICAg
bV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAgICAgIG1fa2V5Q291bnQgPSAwOworICAg
ICAgICBtX3RhYmxlSGFzaCA9IGNvbXB1dGVUYWJsZUhhc2gobV90YWJsZSk7CisgICAgICAgIG1f
d2lsbEV4cGFuZCA9IGZhbHNlOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOworICAgIH0KKworICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkg
eyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2
YWx1ZSksIHZhbHVlKTsgfQorICAgIEFkZFJlc3VsdCBhZGQoVmFsdWVUeXBlJiYgdmFsdWUpIHsg
cmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFs
dWUpLCBXVEZNb3ZlKHZhbHVlKSk7IH0KKworICAgIC8vIEEgc3BlY2lhbCB2ZXJzaW9uIG9mIGFk
ZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKyAgICAv
LyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJz
aW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGluIHRoZSB0YWJsZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+IEFkZFJlc3VsdCBhZGQoVCYmIGtleSwgRXh0cmEmJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQg
YWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYpOworCisgICAgaXRlcmF0b3IgZmlu
ZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZT4oa2V5KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBj
b25zdCB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gY29udGFpbnM8
SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVCYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7CisKKyAg
ICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3Ip
OworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvcik7
CisgICAgdm9pZCByZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJh
dG9yKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8
S2V5VHJhaXRzPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKTsgfQorICAgIHN0YXRpYyBib29s
IGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4g
aXNFbXB0eUJ1Y2tldCh2YWx1ZSk7IH0KKworICAgIFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IEtl
eSYga2V5KSB7IHJldHVybiBsb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5
cGUqIGxvb2t1cChjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+IFZhbHVlVHlwZSogaW5saW5lTG9va3VwKGNvbnN0IFQmKTsKKworI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgICAgIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29u
c3Q7CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7
IH0KKyNlbmRpZgorCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCisgICAgICAgIHZv
aWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdCB7IGNoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOyB9CisgICAgICAgIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lF
eGNlcHRTaXplKCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7IH0K
KyNlbHNlCisgICAgICAgIHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
RXhjZXB0U2l6ZSgpIHsgfQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpIHsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hv
dWxkRXhwYW5kKHVpbnQ2NF90IGtleUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCisgICAgewor
ICAgICAgICByZXR1cm4ga2V5Q291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXpl
ICogbWF4TG9hZE51bWVyYXRvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhbHVl
VHlwZSogYWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFs
bG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSk7CisKKyAgICB1c2lu
ZyBMb29rdXBUeXBlID0gc3RkOjpwYWlyPFZhbHVlVHlwZSosIGJvb2w+OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29u
c3QgVCYpOworCisgICAgdm9pZCBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoVmFsdWVUeXBl
JiYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5z
aWduZWQgc2l6ZU1hc2ssIHVuc2lnbmVkIHRhYmxlSGFzaCk7CisKKyAgICB2b2lkIHJlbW92ZUFu
ZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSopOworICAg
IHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZShW
YWx1ZVR5cGUqKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlVGFibGVIYXNoKFZhbHVl
VHlwZSogdGFibGUpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFZhbHVlVHlwZSo+OjpoYXNoKHRhYmxl
KTsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6
ZSh1bnNpZ25lZCBrZXlDb3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgdW5zaWduZWQga2V5Q291bnQgPSB0aGlzLT5rZXlDb3VudCgpOworICAgICAg
ICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAgICAgaWYgKHNo
b3VsZEV4cGFuZChrZXlDb3VudCwgdGFibGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAvLyBJZiBwcm9iZS1sZW5ndGggZXhjZWVkcyBwcm9iZURpc3RhbmNlVGhyZXNo
b2xkLCBhbmQgNTAlfiBpcyBmaWxsZWQsIGV4cGFuZCB0aGUgdGFibGUuCisgICAgICAgIHJldHVy
biBtX3dpbGxFeHBhbmQgJiYga2V5Q291bnQgKiAyID49IHRhYmxlU2l6ZTsKKyAgICB9CisgICAg
Ym9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8
IHRhYmxlU2l6ZSgpICYmIHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXpl
OyB9CisgICAgdm9pZCBleHBhbmQoKTsKKyAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKHRhYmxl
U2l6ZSgpIC8gMik7IH0KKyAgICB2b2lkIHNocmlua1RvQmVzdFNpemUoKTsKKworICAgIHZvaWQg
cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSk7CisgICAgdm9pZCByZWluc2VydChWYWx1ZVR5
cGUmJik7CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVj
a2V0KTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZGVzaXJlZEluZGV4KHVuc2ln
bmVkIGhhc2gsIHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2gg
JiBzaXplTWFzazsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByb2Jl
RGlzdGFuY2UodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNpemUsIHVu
c2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbmRleCArIHNpemUgLSBk
ZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spKSAmIHNpemVNYXNrOworICAgIH0KKworICAgIGl0
ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhp
cywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgbWFr
ZUNvbnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGl0ZXJhdG9yIG1h
a2VLbm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4gaXRlcmF0b3IodGhp
cywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorICAg
IGNvbnN0X2l0ZXJhdG9yIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9z
KSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJs
ZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdDsKKyNlbHNl
CisgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7
IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJh
dG9yID0gU2l6ZVBvbGljeTo6bWF4TG9hZE51bWVyYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IFNpemVQb2xpY3k6Om1heExvYWREZW5vbWlu
YXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSBTaXplUG9saWN5
OjptaW5Mb2FkOworCisgICAgdW5zaWduZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90
YWJsZVNpemU7IH0KKyAgICB1bnNpZ25lZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyByZXR1cm4g
bV90YWJsZVNpemUgLSAxOyB9CisgICAgdW5zaWduZWQga2V5Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX2tleUNvdW50OyB9CisgICAgdW5zaWduZWQgdGFibGVIYXNoKCkgY29uc3QgeyByZXR1cm4g
bV90YWJsZUhhc2g7IH0KKworICAgIFZhbHVlVHlwZSogbV90YWJsZSB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBtX3RhYmxlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2tleUNvdW50IHsg
MCB9OworICAgIHVuc2lnbmVkIG1fdGFibGVIYXNoIHsgMCB9OworICAgIGJvb2wgbV93aWxsRXhw
YW5kIHsgZmFsc2UgfTsKKworI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKK3B1YmxpYzoK
KyAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3JzIHNob3VsZCBiZSBndWFyZGVkIHdpdGgg
bV9tdXRleC4KKyAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0ZXJhdG9ycyB7IG51bGxw
dHIgfTsKKyAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNvIEhhc2hUYWJsZSBjYW4gc3RpbGwg
YmUgbWVtbW92ZSdkIG9yIG1lbWNweSdlZC4KKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxM
b2NrPiBtX211dGV4IHsgbWFrZVVuaXF1ZTxMb2NrPigpIH07CisjZW5kaWYKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSBhdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bG9va3VwKGNvbnN0IFQmIGtleSkgLT4g
VmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVMb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtl
eSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYXV0byBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVl
VHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIFZhbHVl
VHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9IHRo
aXMtPnRhYmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFz
aChrZXkpIF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhh
c2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAg
ICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1haW50YWlucyB0aGlzIGludmFyaWFu
dCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHByb2Jpbmcgd2hlbiBkaXN0YW5jZSBl
eGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0aW5nIGVudHJ5LgorICAgICAgICBh
dXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNp
Z25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBe
IHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0YW5jZShlbnRyeUhh
c2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFs
KGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQp
Cit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8VHJhaXRzOjplbXB0eVZhbHVlSXNa
ZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1Y2tldCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRkUmVz
dWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hvdWxkIGV4cGFuZCBiZWZvcmUgcG90
ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBleHBhbmQgYSB0YWJsZSBhZnRlciBp
bnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0byByZS1sb29rIHVwIGVudHJ5IGZy
b20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRyeSBwb3NpdGlvbiBpcyBub3Qgc3Rh
YmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAgICAgIGV4
cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIEFT
U0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1
bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhh
c2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0
b3I6Omhhc2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJ
bmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAg
VmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50
cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkp
IHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZv
cndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6
ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRy
YW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKGVu
dHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkK
KyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3Rh
bmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3Rh
bmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2Jl
RGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRvIG1haW50YWlu
IHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlwZSBleGlzdGlu
Z0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRy
YW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+
KGV4dHJhKSk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoV1RGTW92
ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUsIHNpemVNYXNrLCB0
YWJsZUhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQor
CisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKKworICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitBTFdBWVNfSU5MSU5F
IHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlzdGFu
Y2VGb3JBZGQoVmFsdWVUeXBlJiYgdmFsdWUsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBkaXN0
YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2ssIHVuc2lnbmVkIHRhYmxlSGFz
aCkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICArK2Rpc3RhbmNlOworCisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAg
aWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFz
c2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5z
bGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsK
KyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNo
LCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURp
c3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVz
aG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAgICAg
c3dhcCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5j
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsK
KyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
YWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAor
eworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlh
bGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0
aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRo
ZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBk
dXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQo
KTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQo
bV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0g
dGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpo
YXNoKGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgo
aGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVl
VHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0g
bV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7Cisg
ICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6
OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlU
cmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIGlmIChl
bnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRy
YWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93
bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURp
c3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7
CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlm
IChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1f
d2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGlu
ZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAg
ICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAg
IEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwg
c3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAgICAgbWFpbnRhaW5Q
cm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBlbnRyeURp
c3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAg
ICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQgKz0gMTsKKworICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1h
a2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpy
ZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZv
ciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0
aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKSBeIHRhYmxlSGFzaDsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5
KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZN
b3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAgICAgICAgdW5zaWduZWQgZW50cnlE
aXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2sp
OworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBz
d2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNl
OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOwor
ICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRl
cmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAg
IFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAgaWYg
KCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93bkdv
b2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+IGNvbnN0
X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisK
KyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUqPih0
aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisgICAg
ICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRv
cihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAoreworICAgIGlmICgh
bV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lD
aGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwor
ICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVU
eXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICAvLyBUaGlzIGlzIHJlbW92YWwgdmlhICJi
YWNrd2FyZC1zaGlmdC1kZWxldGlvbiIuIFRoaXMgYmFzaWNhbGx5IHNoaWZ0IGV4aXN0aW5nIGVu
dHJpZXMgdG8gcmVtb3ZlZCBlbXB0eSBlbnRyeSBwbGFjZSBzbyB0aGF0IHdlIG1ha2UKKyAgICAv
LyB0aGUgdGFibGUgYXMgaWYgbm8gcmVtb3ZhbCBoYXBwZW5lZCBzbyBmYXIuIFRoaXMgZGVjcmVh
c2VzIGRpc3RhbmNlLXRvLWluaXRpYWwtYnVja2V0IChESUIpIG9mIHRoZSBzdWJzZXF1ZW50IGVu
dHJpZXMgYnkgMS4gVGhpcyBtYWludGFpbnMKKyAgICAvLyBESUIgb2YgdGhlIHRhYmxlIGxvdyBh
bmQgcmVsYXRpdmVseSBjb25zdGFudCBldmVuIGlmIHdlIGhhdmUgbWFueSByZW1vdmFscywgY29t
cGFyZWQgdG8gdXNpbmcgdG9tYnN0b25lcy4KKyAgICAvLyBodHRwczovL2NvZGVjYXBzdWxlLmNv
bS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlvbi8K
KyAgICBwb3MtPn5WYWx1ZVR5cGUoKTsKKyAgICBpbml0aWFsaXplQnVja2V0KCpwb3MpOworICAg
IG1fa2V5Q291bnQgLT0gMTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAg
ICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJs
ZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0g
cG9zIC0gbV90YWJsZTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsgMSkg
JiBzaXplTWFzazsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91c0Vu
dHJ5ID0gbV90YWJsZSArIGluZGV4UHJldmlvdXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9IG1f
dGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0Vu
dHJ5KSk7CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRy
eSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6
Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2Uo
ZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKnByZXZpb3VzRW50cnksIFdURk1v
dmUoKmVudHJ5KSk7CisgICAgICAgIGVudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgIGluaXRp
YWxpemVCdWNrZXQoKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0gaW5kZXg7Cisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpZiAo
c2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGlu
ZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0
KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3Zl
QW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3Np
dGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hl
Y2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25z
dF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNv
bnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtleSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywg
U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4gVmFsdWVUeXBlKgor
eworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxp
Y2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIg
dG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVtcHR5VmFsdWVJc1pl
cm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0
aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Moc2l6ZSAqIHNpemVv
ZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVycHJldF9j
YXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjpt
YWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9p
ZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5
cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBIYXNoVGFi
bGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjpleHBhbmQoKQoreworICAgIHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWduZWQgb2xk
U2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3U2l6ZSA9
IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5ld1NpemUg
PSBvbGRTaXplICogMjsKKworICAgIHJlaGFzaChuZXdTaXplKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2NvbnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQoreworICAg
IHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5Q291
bnQpOworCisgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisg
ICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hvbGRGb3JF
YWdlckV4cGFuc2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlDb3VudCwg
dW5zaWduZWQgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUgcmF0aW9u
YWxlIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3IuCisgICAg
ICAgIC8vIFdpdGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIgYXZlcmFn
ZSBsb2FkIGlzIDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxmLXdheSBi
ZXR3ZWVuIDExLzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAvLyB0byBh
dm9pZCBiZWluZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlvIGNsb3Nl
IHRvIDExLzI0LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMg
WzkvMjQsIDE1LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRGYWN0b3I7
CisgICAgICAgIGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAgICAgICBk
b3VibGUgYXZlcmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0aW8pIC8g
MjsKKyAgICAgICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbyA9
IChhdmVyYWdlTG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJldHVybiBr
ZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0
aW87CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19j
YXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAg
aWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQs
IGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAgdW5zaWdu
ZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBy
ZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6
ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZWhhc2goc3RkOjptYXgobWlu
aW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQoKSkpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQ
b2xpY3k+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplKQoreworICAgIGludGVybmFsQ2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisgICAgdW5zaWduZWQgb2xkVGFibGVT
aXplID0gdGFibGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFibGU7CisK
KyAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CisgICAgbV90YWJsZSA9IGFs
bG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6
ZTsKKyAgICBtX2tleUNvdW50ID0gb2xkS2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21w
dXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIGF1
dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldChv
bGRFbnRyeSkpCisgICAgICAgICAgICByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7CisgICAg
ICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICB9CisKKyAgICBpZiAob2xkVGFibGUpCisg
ICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPihvbGRU
YWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpZiAo
IW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9
IHRhYmxlU2l6ZSgpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0gMDsK
KyAgICBtX3RhYmxlSGFzaCA9IDA7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7CisgICAgZGVh
bGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIG9sZFRhYmxlU2l6
ZSk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlw
ZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9iaW5I
b29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgaWYg
KCFvdGhlci5tX3RhYmxlU2l6ZSB8fCAhb3RoZXIubV9rZXlDb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUob3RoZXIubV90YWJsZVNpemUpOworICAg
IG1fdGFibGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7CisgICAgbV9rZXlDb3VudCA9IG90aGVy
Lm1fa2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUp
OworICAgIG1fd2lsbEV4cGFuZCA9IG90aGVyLm1fd2lsbEV4cGFuZDsKKworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFibGVTaXplOyArK2luZGV4KSB7Cisg
ICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVyLm1fdGFibGVbaW5kZXhdOworICAg
ICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob3RoZXJFbnRyeSkpCisgICAgICAgICAgICByZWluc2Vy
dChWYWx1ZVR5cGUob3RoZXJFbnRyeSkpOworICAgIH0KKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhl
cikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGludmFsaWRh
dGVJdGVyYXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOworCisg
ICAgc3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1fdGFibGVTaXplLCBv
dGhlci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNvdW50
KTsKKyAgICBzd2FwKG1fdGFibGVIYXNoLCBvdGhlci5tX3RhYmxlSGFzaCk7CisgICAgc3dhcCht
X3dpbGxFeHBhbmQsIG90aGVyLm1fd2lsbEV4cGFuZCk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFi
bGVDb25zaXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3Ro
ZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdG1w
KG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKQoreworICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXplID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9IHN0ZDo6ZXhjaGFu
Z2Uob3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV90YWJsZUhhc2ggPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fdGFibGVIYXNoLCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fd2lsbEV4cGFuZCwgZmFsc2UpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIp
IC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcChX
VEZNb3ZlKG90aGVyKSk7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
KworI2lmIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lk
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkg
Y29uc3QKK3sKKyAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cisg
ICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50
cnkgPSBtX3RhYmxlICsgaTsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGtleSA9IEV4dHJhY3Rvcjo6ZXh0
cmFjdCgqZW50cnkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKKyAg
ICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAgICArK2NvdW50Owor
CisgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShrZXkpOworICAgIH0K
KworICAgIEFTU0VSVChjb3VudCA9PSBrZXlDb3VudCgpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFi
bGVTaXplKCkgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplKTsKKyAgICBBU1NFUlQodGFi
bGVTaXplTWFzaygpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkgPT0gdGFibGVTaXpl
TWFzaygpICsgMSk7Cit9CisKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorCitzdHJ1Y3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2lu
ZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhh
c2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVU
cmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCmluZGV4IDkyZDIwOGQzNWUy
YWFkNWI4ODI3M2UzNDE4NmMyN2I1ZDA3Y2UxZmQuLmJhZDJjYWIwZDVhZjY5ODYzYmQwOGEyODkw
YjU0M2RhODgzN2U1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z0hhc2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKQEAgLTQ1
LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9
OwogCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdURjo6QXRvbVN0cmluZz4gewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlm
ZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFz
cyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAK
LXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsK
K3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBs
OwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRleCBlMGMwYWZiYWVh
NDM2ODYxYjhiOGU0MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4NjY4ZWY1ZTRhNTZh
MjQ5NzVkMjAxZmE4ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJp
bmdUYWJsZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3Bw
CkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3RyaW5nVGFibGU6On5B
dG9tU3RyaW5nVGFibGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+
JiBzdHJpbmcgOiBtX3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV90YWJs
ZSkKICAgICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMw
NDUxMTNhNTdlLi5mZmFmODM2NDIyYzUyOWUzOWU2ZDE3MGRiY2I4NGY5OWI2Nzk0ZmI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNzIFN0cmluZ0ltcGw7
CiBjbGFzcyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgorICAgIHVzaW5nIFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0cmluZ0ltcGw+Owor
ICAgIHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nRW50cnk+OworCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFj
a2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3Ry
aW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAg
ICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJs
ZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggNWE4
Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYxYmRmMjFiNThkYmY2
Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTkw
LDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9
OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBh
YmlsaXRpZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhkMDRhMjU2NDM2ZTc3MTVj
YzYuLjA5NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQwNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVk
aWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNpbmNsdWRlICJNZWRpYUVu
Y29kaW5nQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlv
bkZhY3RvcnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKIHsKICAgICAv
LyBBICJidWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRhaW5lciB0eXBlIGRvZXMg
bm90IHVuaXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6IGh0dHBzOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+KHsKLSAgICAgICAgImF1
ZGlvLzNncHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAgICJhdWRpby8zZ3BwMiIs
Ci0gICAgICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9tcDQiLAotICAgICAgICAi
dmlkZW8vbXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0gICAgICAgICJ2aWRlby9x
dWlja3RpbWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0gICAgICAgICJhdWRpby92
bmQuYXBwbGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBwbGUubXBlZ3VybCIsCi0g
ICAgICAgICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwKLSAgICAgICAgInZpZGVv
L3dlYm0iLAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+PiBidWNrZXRN
SU1FVHlwZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgICAgICAiYXVkaW8v
M2dwcCJfcywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAgICJhdWRpby8zZ3BwMiJf
cywKKyAgICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVkaW8vbXA0Il9zLAorICAg
ICAgICAidmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXA0Il9zLAorICAgICAg
ICAidmlkZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXAyMSJfcywKKyAg
ICAgICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAgICAidmlkZW8vdm5kLmFw
cGxlLm1wZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby9v
Z2ciX3MsCisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAiYXVkaW8vd2VibSJfcywK
ICAgICB9KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTA0
MzU0ZDYyOGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQzMTAxZWRlZjQ1MmFkMDk0
ZjAzNWJmODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2ICs4NCw3IEBACiAjaW5j
bHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIK
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpA
QCAtMjYwNyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0hh
c1BvcHVwKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvcHVwVmFsdWUo
KSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmlu
Zz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Ci0g
ICAgICAgICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwgImRpYWxvZyIKKyAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8U3RyaW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJfcywgInRyZWUiX3MsICJn
cmlkIl9zLCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBoYXNQb3B1cCA9IGdldEF0
dHJpYnV0ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCA2ZTc2NzI3NGE1OWUwZmJiMDE2NzdlMDlkOWE3OTJlMzk5
YzlkMjA3Li40NmJiZjllZTk2MmFlNGU5Y2MxMzdiY2FiN2QyN2RiMDQwNjQ1ZWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC0yMzg5LDcgKzIzODksNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92
ZVNoYWRvd1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290KGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hT
ZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRh
Z05hbWVzID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNv
bnN0IHRhZ0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFnLmdldCgpLAogICAgICAg
ICAgICAgJmFzaWRlVGFnLmdldCgpLApAQCAtMjQxMCw3ICsyNDEwLDggQEAgc3RhdGljIGJvb2wg
Y2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgICAg
ICAgICAgJnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3BhblRhZy5nZXQoKQogICAg
ICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAg
ICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAg
Zm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9j
YWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1l
LmgKaW5kZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVkZDM5MmY0Zi4uNDI5ZmM1
NTk2NDM1MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlm
aWVkTmFtZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxpZmllZE5hbWVIYXNoIHsK
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lJiBhLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwgY29uc3QgUXVhbGlmaWVk
TmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogCi0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwog
fTsKIAogaW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhiMDMxOWNlMjUyYzZjNjZh
Y2I3OTNmNWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJjOGE3ZDhlODUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAKICAgICBwcmludExpY2Vu
c2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNTUyIsICRmYW1pbHlOYW1l
c0ZpbGVCYXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApAQCAtNzA5LDYgKzcxMCw3
IEBAIHN1YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7
CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSwg
PDxFTkQsICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlmaWVkTmFtZSA6IHB1Ymxp
YyBRdWFsaWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogRU5ECkBAIC05NTYs
NyArOTU4LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5Niw3ICs5
OTgsNyBAQCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFsaWZpZWROYW1lOyAvLyBV
c2UgcG9pbnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVtcHR5VmFsdWUoKSBpbiBI
YXNoTWFwIGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFz
aE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1
bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkK
K3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9u
TWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkKIHsKICAg
ICBzdHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWU7
CkBAIC0xMDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYgPDxFTkQKICAgICB9Owog
Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25z
dHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0
cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkgOiB0YWJs
ZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeShlbnRyeS5mdW5jdGlv
biwgZW50cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCks
ICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnku
ZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBzdGF0aWMgJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeSBmaW5kJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9uKGNvbnN0IEF0b21TdHJp
bmcmIGxvY2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlNYXAoKSk7Ci0gICAg
cmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1hcC5n
ZXQoKS5nZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUtub3du
RWxlbWVudChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3VtZW50JiBkb2N1bWVudCRm
b3JtRWxlbWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCkBA
IC0xMjI2LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVORAogOwpAQCAtMTI0Nyw3
ICsxMjUwLDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGljIE5FVkVSX0lOTElORSBI
YXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1l
bnRXcmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyTWFw
KCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3Jh
cHBlckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCiB7
CiAgICAgc3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lOwpAQCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAg
fTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkg
OiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwg
ZW50cnkuZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCks
IGVudHJ5LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBKU0RPTU9iamVjdCogY3Jl
YXRlSlMkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+JiYgZWxlbWVudCkK
IHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
Y3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7Ci0gICAgaWYgKGF1dG8g
ZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwo
KSkpCisgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQt
PmxvY2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgV1RG
TW92ZShlbGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRhMzljNjMwYmIyZmExYjRk
ZWJiM2QwLi5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdmNDMwOTY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgsNyArMTE5LDcgQEAg
RWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5k
KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGJs
b2NrVGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAg
ICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKICAgICAg
ICAgYWRkcmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAgICAgYXNpZGVUYWcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAppbmRleCA0
ZWMwYjRlNTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42NjE0MDdlMTQ1MjRjZjJh
MTNmZWEzNjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6
UmVtb3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGlz
RWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNo
U2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1h
a2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAgICAgICBiVGFnLAogICAg
ICAgICBiZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2YzJlMDA4ZmY4M2ZhZGEz
YTdkYWYuLmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3Y2UzMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBA
IC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFy
a3VwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMgYm9vbCBpc1Byb2hpYml0
ZWRQYXJhZ3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAgICAgICAgICAgJnVs
VGFnLmdldCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAgICAgICAgfTsKLSAgICAg
ICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGZvciAoYXV0byYg
dGFnIDogdGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2NhbE5hbWUoKSk7CiAgICAg
ICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmluZGV4IDY3MzVlMjY5ZjI1
YWVmN2JjMDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIyMWRjMjdlOTQyMjgyZjE0
ZjkwMzJlOWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHN0cnVjdCBBdXRvZmls
bEluZm8gewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9OwogCi1zdGF0aWMgY29u
c3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQorc3Rh
dGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3Ry
aW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAgIHN0YXRpYyBjb25zdCBh
dXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRy
eSB7CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywg
QXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAgIHsgImVtYWlsIiwgeyBB
dXRvZmlsbEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAog
ICAgICAgICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6OkltcHAsIEF1dG9maWxs
Q2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBtYXA7CiAgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5u
YW1lLCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2UyOTA5NDRhNGI3Y2ZhZWRk
OGQ3NS4uMDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2MGRlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMjI1LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAgICAgICAgICAgICZ2
YWx1ZXR5cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0ci5nZXQoKSwKICAgICAg
ICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAg
IGZvciAoYXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMyNGI4YTAzZTZiMTcxNjIw
ZDZjYmUuLmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUyZjJjNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNp
bmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzLmgiCkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVy
RmFsbGJhY2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2ZW50c1BhcmVudE9iamVj
dEZyb21FeHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAgICBzdGF0aWMgY29uc3Qg
YXV0byBtb3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFz
aFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIGF1dG8qIHRhZ3Mg
PSBIVE1MTmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgSFRNTE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAgICAgICAgIGF1dG8mIHRh
ZyA9ICp0YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5NGU5OWNiZTM5MTY4Zi4u
OTJmMjc2ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBA
CiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiAjaWYgRU5BQkxF
KFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
NDc4LDkgKzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFj
a0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFRh
YmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFt
ZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10s
IHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+
IHN0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUq
IGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBIYXNoTWFwPEF0b21TdHJp
bmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5h
bWUgPSBuYW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNhc2UoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9t
U3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0
U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcs
IFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05hbWVzOjpnZXRTVkdUYWdz
KCksIFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNh
c2VkTmFtZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAgICBpZiAoY2FzZWROYW1l
LmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgdG9rZW4uc2V0TmFt
ZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0
QXR0cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhj
b25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBmb3Ig
KGF1dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewogICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSk7
CkBAIC01MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMo
SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG8KIAogdGVtcGxhdGU8
Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgpLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxB
dG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVz
VGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1
YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNUYWJsZSgpLCBhdHRy
aWJ1dGVzVGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFwLCB0b2tlbik7CiB9
CiAKQEAgLTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RNYXRoTUxB
dHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRqdXN0QXR0cmlidXRlczxN
YXRoTUxOYW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpNYXRoTUxBdHRyc0NvdW50
Pih0b2tlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFByZWZpeChIYXNoTWFwPEF0
b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQorc3Rh
dGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBR
dWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiB7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
TmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQocHJlZml4ICsgJzonICsg
bG9jYWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lLm5hbWVzcGFj
ZVVSSSgpKSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRoUHJlZml4ID0gW10oTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBtYXAuYWRkKHByZWZpeCAr
ICc6JyArIGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5u
YW1lc3BhY2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3RhdGljIEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQotewot
ICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1l
PiBtYXA7CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJlZml4KG1hcCwgeGxpbmtO
YW1lLCBYTGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFtZXM6OlhMaW5rQXR0cnND
b3VudCk7CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogCiBzdGF0aWMgdm9pZCBh
ZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBt
YXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCk7CiAgICAg
YWRqdXN0QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Rl
YnVnUGFnZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRiYzlkOGUyNjM1MmQ1ZjYy
MGQ3YjU1YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThmYWYxMWJhNmFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUwLDEwIEBAIGJvb2wgTm9u
RmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24oKQogICAgIHJldHVybiBy
ZWdpb25DaGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVp
bnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhfdD4+JiB0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byByZWdpb25D
b2xvcnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICByZXR1cm4gSGFzaE1hcDxT
dHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKICAg
ICAgICAgICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYzLCA1MCB9IH0sCiAgICAg
ICAgICAgICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1MCB9IH0sCiAgICAgICAg
ICAgICB7ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0gfSwKQEAgLTE5NCw0OSAr
MTk1LDQ5IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5OjpkcmF3UmVjdChQ
YWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9udC51cGRhdGUobnVsbHB0
cik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiKSk7CisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hzdGFydCJf
cykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxp
Z25lZFRleHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9u
KCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0Il9zLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMw
KTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0
KCJ0b3VjaG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdl
bmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2htb3ZlIiwgY29udGV4dCwg
Zm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgi
dG91Y2htb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAg
ICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAgICBjb250ZXh0LnNldEZp
bGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCJfcykpOwogICAg
IGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQo
InRvdWNoZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBk
cmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJl
Y3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9yY2Vj
aGFuZ2UiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVn
ZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9yY2VjaGFuZ2UiLCBj
b250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWdu
ZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwot
ICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyIsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInBh
c3NpdmUgbGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkp
OwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xv
cih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24iKSk7CisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vkb3duIl9z
KSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigp
KTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9zLCBjb250ZXh0LCBmb250
LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsK
LSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJt
b3VzZW1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpLmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRS
ZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3ZlIiwgY29udGV4dCwgZm9u
dCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91
c2Vtb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAg
bGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiX3MpKTsKICAgICBjb250
ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3Vz
ZXVwIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9ybXMsIHRoZSAid2hlZWwi
IHJlZ2lvbiBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24uCi0gICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgid2hlZWwiKSk7
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
d2hlZWwiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdS
aWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0LCBmb250LCBsZWdlbmRS
ZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdp
b24iX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZW5kaWYKIAog
ICAgIGZvciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lvbiA6IG1fZXZlbnRUcmFj
a2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKaW5kZXggZWQ4
ZGQ5MjM4ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAxNTI3N2UwN2M0M2Q5Zjk4
OWExN2VhYmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9y
bWFuY2VVc2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIE5hdmln
YXRpb25UaW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAoUGVyZm9ybWFuY2VUaW1p
bmc6OiopKCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25U
aW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5j
dGlvbk1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVzdHJpY3RlZE1hcmtO
YW1lc1RvTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPEhh
c2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CisgICAgc3RhdGljIGF1
dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+KHsKICAgICAgICAg
eyAiY29ubmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0RW5kIH0sCiAgICAg
ICAgIHsgImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0U3RhcnQg
fSwKICAgICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tQ29t
cGxldGUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVU
eXBlUmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVU
eXBlUmVnaXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2YxOTc3MGQ0ODFlNmJlZTRm
ZWRhZWE2NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlkMmMzNDFlYjc1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3Ry
eUNvY29hLm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9D
b3JlU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNVUkxGaWxlVHlwZU1h
cHBpbmdzU1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgorI2ltcG9ydCA8
d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSGFzaFNl
dDxTdHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCgp
CiB7CiAgICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4g
bWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3Ry
aW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gbWFw
OwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgSGFz
aFNldDxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKKyAgICAgICAg
ICAgIG1hcC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24pOwogICAgICAgICB9Owog
CiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIE5T
QXJyYXk8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2VhNzQ1MmQ1ZmYyZTZjYjVm
M2UxMTY2NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYxMjg3ZTJhNzI5Y2M0NzFi
YmQxZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9y
RmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAoZmFtaWx5LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldCA9IG1h
a2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0Owor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmlu
Zz4gc2V0OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3QgY2hhciogbmFtZSwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewogICAgICAgICAgICAgdW5z
aWduZWQgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAgIHNldC5hZGQoQXRv
bVN0cmluZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsIH0pOwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZl
cmFnZUNoYXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKEhhc2hTZXQ8QXRv
bVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gewog
ICAgICAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJBcmlhbCBIZWJyZXciLAog
ICAgICAgICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFt
aW5nLmNwcAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwLi4x
NDI0ZDFiZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJl
YW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgSEFWRShBVkNPTlRFTlRL
RVlTRVNTSU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVk
QnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrCiAg
ICAgcmV0dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4m
IHZhbGlkSW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB2YWxpZFR5cGVz
ID0gSGFzaFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBl
cyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAgICAgICBDRE1Qcml2YXRl
RmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENETVByaXZhdGVGYWlyUGxh
eVN0cmVhbWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19J
TklUREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1VUSVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVmNzQ3NThiMTc4MmZjZDk3
OTE3Li5hNDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5MjBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCkBA
IC0zMSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVm
YXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKIHsK
ICAgICBzdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWZhdWx0U3VwcG9y
dGVkSW1hZ2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEhhc2hTZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBlKTsKICAgICAgICAgfSwg
JnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRlZmF1bHRTdXBwb3J0ZWRJ
bWFnZVR5cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlc10oY29uc3QgU3Ry
aW5nJiBpbWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lzdGVtU3VwcG9ydGVkSW1h
Z2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1
cm4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOworICAgICAgICBmb3IgKGF1
dG8mIGltYWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKSB7CisgICAgICAgICAg
ICBpZiAoc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpKQorICAg
ICAgICAgICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0
ZWRJbWFnZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvVVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1VUSVJlZ2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2ODY3NDAwZDc2ZWUzYzY2
NTc1ZS4uNGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2QwYjliYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCkBAIC0y
NSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5
cGVzKCk7CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCk7
CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRp
ZXNDb2NvYS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4MWRiYTAyOGIzZWU5MjMz
Li42MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxp
dGllc0NvY29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJIRVZDVXRpbGl0aWVzLmgi
CiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2ltcG9ydCA8cGFsL2NvY29h
L0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorI2ltcG9y
dCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNpbXBvcnQgIlZpZGVvVG9v
bGJveFNvZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJvb2wgdmFsaWRhdGVIRVZD
UGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGll
c0luZm8mCiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBjb2RlY1R5cGVGb3JE
b1ZpQ29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKIHsKLSAgICBzdGF0aWMg
YXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENNVmlkZW9Db2Rl
Y1R5cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0g
ICAgICAgIHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAgICAgIHsgImh2
YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhldjEiLCBrQ01WaWRl
b0NvZGVjVHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJv
eWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIENNVmlk
ZW9Db2RlY1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gy
NjQgfSwKKyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAorICAg
ICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgICAgIHsgImhl
djEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsKIAogICAgIGF1dG8gZmlu
ZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRiMGNhY2Q2N2RmYmI5NWMx
MmQ5OS4uZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0MjlmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEzNzEsMTUgQEAgdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhDYWxs
T25DbGllbnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnN1cHBvcnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIsICJWX1ZQOSIgfSk7Cisg
ICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCJfcywgIlZfVlA5Il9z
IH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQorY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2Rl
Y3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJBX1ZPUkJJUyIsICJB
X09QVVMiIH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JC
SVMiX3MsICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIzODRmOTJmNzQ4ZjRjOWJh
NWQ5MWI4ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0NmQ1YzcyZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3
dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlh
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlCiAKICAg
ICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotICAgIHN0
YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7Ci0gICAg
c3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKKyAg
ICBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0
cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRBdWRpb0Nv
ZGVjcygpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpTdGF0dXMgT25FbGVt
ZW50QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKikgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5k
ZXggODgwY2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFhZi4uZmUwZWQzMTQ0MTE0
OGVlMTUzYjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNW
R1BhdHRlcm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
CiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00Myw5
ICs0NCw5IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsKIH0KIAotc3RhdGljIEhh
c2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKK3N0YXRpYyBjb25z
dCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNs
aXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFn
TGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyAi
Y29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRt
bCNUZXJtQ29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhpY3MgZWxlbWVudHMiIDog
aHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3JhcGhpY3NFbGVtZW50
CkBAIC05Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmls
dGVyTWFza2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hT
ZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2VyVGFncygpCiB7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGlu
ZVRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVz
OjpwYXRoVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkgQEAgc3RhdGljIEhhc2hT
ZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAK
LXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCitzdGF0aWMg
Y29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+
JiBmaWxsQW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hT
ZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xp
c3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdM
aXN0LmdldCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLT5sb2NhbE5hbWUoKSk7
CkBAIC0xMjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGZpbGxBbmRT
dHJva2VUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxB
dG9tU3RyaW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWluYWJsZVJl
c291cmNlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAg
aWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgp
LmFkZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFtZSgpKTsKICAgICAgICAg
c190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5sb2NhbE5hbWUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3NThhMjc4MzlhMmI4MTg2
NDRhY2VjMmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMzNDAxMjc2ZTUzNmZhZjQw
MGMyZDZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC01Nyw2
ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewpAQCAtNDk3LDcg
KzQ5OCw3IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMgYm9vbCBoYXNFZmZlY3Rp
dmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQog
ewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1o
dG1sCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05h
bWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAg
ICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAg
ICAgICAgICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJUYWcuZ2V0KCksCkBAIC01
MTcsNyArNTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNw
bGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZ0ZXh0YXJl
YVRhZy5nZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0g
ICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBzZXQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAgICAgICBmb3IgKGF1dG8m
IG5hbWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2NhbE5hbWUoKSk7
CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0MjhmOTllMjhhMTc4Ny4u
NzEyNjgwYTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3ICsxMjgsNyBAQCBzdGF0
aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoU3RyaW5nVmll
dyBzdHJpbmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRv
IHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBI
YXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAgICAgU1ZHVGVzdHM6
OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0LmFkZCh7CiAgICAgICAg
ICAgICBTVkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAppbmRleCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4MTdlYjU0Li45YzE0MGNj
MWQ0ZTAzOGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8
QXRvbVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQ
cm9wZXJ0eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJp
YnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAtMTQxLDE2ICsxNDIsMTYg
QEAgc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVy
dHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRyLmdldCgpLAogICAgIH07
CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4gbWFwOworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDU1NQ
cm9wZXJ0eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRyaWJ1dGVOYW1lcykg
ewogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLT5sb2NhbE5hbWUo
KTsKLSAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQcm9wZXJ0eUlEKGxvY2Fs
TmFtZSkpOworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJvcGVydHlJRChsb2NhbE5h
bWUpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3VwcG9ydHMgInRyYW5zZm9y
bS1vcmlnaW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVkLAogICAgIC8vIGFuZCB3
ZSBjYW4gYWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJsZSBhYm92ZSBpbnN0ZWFk
LgotICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLmltcGwoKSwg
Q1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdp
bkF0dHItPmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbik7CiAKICAgICBy
ZXR1cm4gbWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmllZE5hbWUgU1ZHRWxlbWVu
dDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1l
CiAgICAgICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAgICAgICAgICAgJlNWR05h
bWVzOjpocmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3Ry
aW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CiAgICAgICAg
IGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1hcC5hZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03ODAsNyArNzgxLDcg
QEAgQ1NTUHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRl
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZh
bGlkOwogCiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkpOwotICAgIHJldHVy
biBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
IHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAK
IGJvb2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmluZGV4IDFkMmNkOTc4ZWQx
MzIzNmQ2YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFkY2U1ZjJiNjU3MDk5NmE1
ZmE0NDU1NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlkYXRlU3R5bGVBbmRSZW5k
ZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3ZvaWQg
U1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQogewog
ICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNBdHRyKTsKICAgICBz
dXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1Rlc3RzLmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1Mjk3NmM1MjJhOGM1Yi4u
MGMyNTIxNjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
c3RzLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNp
bmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGNsYXNzIFNWR1Rl
c3RzIHsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFz
aFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJp
YnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5h
bWU+Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBoYXNGZWF0dXJlRm9yTGVn
YWN5QmluZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggZTA1ZmI1M2MwMTk5NzE2
YjM0NTZmNzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0M2QzYTI0MjIyYjhmNGZi
Mzc3MTExMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3NywxNCArMTc4LDE0
IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVB
bGxvd2VkRWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCkKIHsKICAgICAv
LyBTcGVjOiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGljcyBlbGVtZW50IG9yIG90
aGVyICd1c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0IHRoYXQgY2FuIGJlIHJl
LXVzZWQKICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBTVkcgZG9jdW1lbnQgdmlh
IGEgJ3VzZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1lbnQiIGlzIGRlZmluZWQg
YXMgJ2NpcmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAncGF0aCcsICdwb2x5Z29u
JywgJ3BvbHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNsdWRlZCBhcmUgYW55dGhp
bmcgdGhhdCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkgbWFrZSBzZW5zZSB0byBh
cHBlYXIgb25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsK
LSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZvciAoYXV0byYgdGFnIDog
eyBhVGFnLmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0KCksIGVsbGlwc2VUYWcu
Z2V0KCksIGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFnLmdldCgpLCBtZXRhZGF0
YVRhZy5nZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQoKSwgcG9seWxpbmVUYWcu
Z2V0KCksIHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNoVGFnLmdldCgpLCBzeW1i
b2xUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdldCgpLCB0aXRsZVRhZy5n
ZXQoKSwgdHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRhZy5nZXQoKSB9KQogICAg
ICAgICBzZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNldDsKQEAgLTE5Miw3
ICsxOTMsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVu
dFNldCgpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRFbGVtZW50KGNvbnN0IFNW
R0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
QXRvbVN0cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxB
dG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsKICAgICByZXR1cm4g
IXNldC5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCA2ODE5MWI5
NGE0MDAxMDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFlNzZkYTRhZmQ2MDQ5ZGJj
YTYwYjkwZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlhMaW5rTmFt
ZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NjIs
NyArNDYzLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKGNvbnN0IFN0
cmluZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9vbCBTVkdTTUlMRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7
Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9IG1ha2VOZXZlckRl
c3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBz
dXBwb3J0ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIFNWR05hbWVz
OjpiZWdpbkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAogICAgICAgICBTVkdOYW1l
czo6ZHVyQXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9u
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDlmZGZi
YThiMTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBjMjJkNGI2N2NlNWZmYTNi
ODMwNjljYmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNw
cApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCArNjY5LDQ0IEBAIHN0cnVj
dCBGdW5jdGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVudENvdW50SW50ZXJ2YWw7
CiB9OwogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IGNyZWF0ZUZ1
bmN0aW9uTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCiB7CiAgICAg
c3RydWN0IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAg
ICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1hcFZhbHVlIGZ1bmN0aW9u
OwogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1td
ID0gewotICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9
LAotICAgICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNlaWxpbmcsIDEgfSB9LAot
ICAgICAgICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJ
bnRlcnZhbDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwgeyBjcmVhdGVGdW5jdGlv
bkNvbnRhaW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ291
bnQsIDEgfSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9
IH0sCi0gICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAxIH0gfSwKLSAg
ICAgICAgeyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAotICAgICAgICB7ICJsYW5n
IiwgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7ICJsYXN0IiwgeyBjcmVh
dGVGdW5jdGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1uYW1lIiwgeyBjcmVhdGVG
dW5jdGlvbkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJuYW1lIiwg
eyBjcmVhdGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFt
ZXNwYWNlLXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkksIEludGVydmFsKDAsIDEp
IH0gfSwKLSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVhdGVGdW5jdGlvbk5vcm1h
bGl6ZVNwYWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5vdCIsIHsgY3JlYXRl
RnVuY3Rpb25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7IGNyZWF0ZUZ1bmN0aW9u
TnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBvc2l0aW9uIiwgeyBjcmVh
dGVGdW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91bmQiLCB7IGNyZWF0ZUZ1
bmN0aW9uUm91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0aCIsIHsgY3JlYXRlRnVu
Y3Rpb25TdGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5nIiwgeyBjcmVhdGVGdW5j
dGlvblN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJzdHJpbmctbGVuZ3Ro
IiwgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAg
ICAgICB7ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgy
LCAzKSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgY3JlYXRlRnVuY3Rpb25T
dWJzdHJpbmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1iZWZvcmUiLCB7IGNy
ZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAgICAgeyAic3VtIiwgeyBj
cmVhdGVGdW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5zbGF0ZSIsIHsgY3JlYXRl
RnVuY3Rpb25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVlIiwgeyBjcmVhdGVGdW5j
dGlvblRydWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7IGNyZWF0ZUZ1bmN0aW9u
Qm9vbGVhbiwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25D
ZWlsaW5nLCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29u
Y2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgICAgIHsgImNvbnRhaW5z
Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAgICAgICB7ICJjb3VudCJf
cywgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAgeyAiZmFsc2UiX3MsIHsg
Y3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZsb29yIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywgeyBjcmVhdGVGdW5jdGlv
bklkLCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEg
fSB9LAorICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTGFzdCwgMCB9IH0sCisg
ICAgICAgIHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUsIEludGVy
dmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWUs
IEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNlLXVyaSJfcywgeyBjcmVh
dGVGdW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJu
b3JtYWxpemUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2
YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEg
fSB9LAorICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rpb25OdW1iZXIsIEludGVy
dmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsgY3JlYXRlRnVuY3Rpb25Q
b3NpdGlvbiwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUm91
bmQsIDEgfSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0
YXJ0c1dpdGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25T
dHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3RyaW5nLWxlbmd0aCJfcywg
eyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAg
ICB7ICJzdWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcsIEludGVydmFsKDIs
IDMpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9u
U3Vic3RyaW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICAgICAgeyAic3VtIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAidHJhbnNsYXRlIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAgeyAidHJ1ZSJfcywgeyBj
cmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
RnVuY3Rpb25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsKICAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1bmN0aW9uLm5hbWUsIGZ1
bmN0aW9uLmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNl
ci5jcHAKaW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQwYzc5MGQ1ODk1MC4uODlm
N2VkOWQ3MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBh
dGhQYXJzZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAj
aW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC03NiwyOCArNzcs
MjggQEAgc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4g
Tm90UGFydE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBj
cmVhdGVBeGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1lc01hcCgpCiB7CiAg
ICAgc3RydWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAg
QVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsKICAgICB9OwogICAg
IGNvbnN0IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAgICB7ICJhbmNlc3RvciIs
IFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3Rl
cDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJpYnV0ZSIsIFN0ZXA6OkF0
dHJpYnV0ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKLSAg
ICAgICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCi0gICAgICAgIHsg
ImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzIH0sCi0gICAg
ICAgIHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKLSAgICAgICAgeyAiZm9s
bG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAotICAgICAgICB7
ICJuYW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAgICAgIHsgInBhcmVudCIs
IFN0ZXA6OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5nIiwgU3RlcDo6UHJlY2Vk
aW5nQXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGlu
Z1NpYmxpbmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9CisgICAg
ICAgIHsgImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAgICAgICAgeyAiYW5j
ZXN0b3Itb3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCisgICAgICAgIHsg
ImF0dHJpYnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAgICB7ICJjaGlsZCJf
cywgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQiX3MsIFN0ZXA6OkRl
c2NlbmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiJfcywgU3RlcDo6
RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nIl9zLCBTdGVwOjpG
b2xsb3dpbmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIl9zLCBTdGVwOjpG
b2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2UiX3MsIFN0ZXA6Ok5h
bWVzcGFjZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVwOjpQYXJlbnRBeGlzIH0s
CisgICAgICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAorICAgICAg
ICB7ICJwcmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwK
KyAgICAgICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAgIH07Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAgICAgZm9yIChhdXRvJiBh
eGlzTmFtZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChheGlzTmFtZS5uYW1lLCBh
eGlzTmFtZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggODdiZDI4ZWI0OGFlMjQw
MDY1NThlOGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMyNjRlMGM1YTA5YzdlYmJl
M2RjZGNlN2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL0NhbGxi
YWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2lu
Y2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21h
aW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJuICJDUkVBVEUgVEFCTEUg
XCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0
cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNl
ZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQg
SU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJl
dmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBO
VUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJ
IElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJ
TlRFR0VSIE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFCTEUgXCJPYnNlcnZlZERv
bWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0cmFibGVEb21haW4g
VEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNlZW4gUkVBTCBOT1Qg
TlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBOT1Qg
TlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVH
RVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9U
IE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBO
VUxMKSJfczsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRVbmF0
dHJpYnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFr
ZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJk
ZXN0aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1lT2ZBZENsaWNrIiwgInRv
a2VuIiwgInNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29s
dW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9t
YWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAidGlt
ZU9mQWRDbGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MgfSk7CiAg
ICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBFeHBlY3RlZENvbHVt
bnMmIGV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRv
IGNvbHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0
ZURvbWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJjZUlEIiwgImF0dHJp
YnV0aW9uVHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRDbGljayIsICJlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUiLCAia2V5SUQiLCAiZWFy
bGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8g
Y29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRl
RG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAi
YXR0cmlidXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJf
cywgImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUi
X3MsICJrZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CiAg
ICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsyOTQsOSBAQCBzdGF0aWMg
Ym9vbCBuZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgc2NoZW1hKQogICAg
IHJldHVybiBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zIik7CiB9
CiAKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3JlYXRlVGFibGVRdWVy
aWVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQogewotICAgIHN0YXRpYyBh
dXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVyaWVzID0gbWFrZU5l
dmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIGNyZWF0ZU9ic2Vy
dmVkRG9tYWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBjcmVhdGVUb3BMZXZl
bERvbWFpbnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMi
X3MsIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc30sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBlNDhlODMyNmEyYTczNWVm
OTI0Zjg3MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3MmFjYzFhZTMzYzk1ODdj
NDgyM2JmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmgKQEAgLTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+PiA6IFZlY3RvckFy
Z3VtZW50Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFz
aFRhYmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4g
SGFzaE1hcFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0LDYgKzUxNCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhhc2hNYXAucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtl
eTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDggKzU1Miw4IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7Ci0gICAgdHlw
ZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVy
PEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+
IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhh
c2hUYWJsZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewpAQCAtNTc5
LDYgKzU4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hTZXQ7CisgICAgICAgIGhh
c2hTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7CiAgICAgICAgIGZvciAo
dWludDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRp
b25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpp
bmRleCA0OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFiZDZkLi45YTRkNzgwOWU2
M2U0ODUyNDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNpbXBvcnQgPHd0Zi9T
b2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAtNTgsNyArNTksNyBA
QCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBnZXRBcHBCb3Vu
ZERvbWFpbnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJRC5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9t
YWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9tYWlu
TGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiB7CiAg
ICAgICAgIHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVyIl9zLCBWZWN0b3I8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygiMTI3LjAuMC4xIikgfX0s
CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5j
cHAKaW5kZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZkZDgxZDBkNy4uY2U1NmY5
Y2Q0NjI4NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1MiwxMyBAQCB2b2lkIFdl
YlByZWZlcmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAK
IGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
V2ViUHJlZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3Ry
aW5nLCBWYWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gdmFsdWVzOwogICAg
IGRlY29kZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVzKTsKIAotICAgIE9wdGlv
bmFsPEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZhdWx0czsKKyAgICBPcHRp
b25hbDxWYWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRlY29kZXIgPj4gb3ZlcnJp
ZGRlbkRlZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
c1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKaW5k
ZXggYzVmZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYwOC4uNGEzZDhmMmE0ZTRj
ZjBjNzgxZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02Niw3ICs2Niw3
IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVzaW5nIFZhbHVlID0gVmFy
aWFudDxTdHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZhbHVlTWFwID0gTWVtb3J5
Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAgICAgVmFsdWVNYXAgbV92
YWx1ZXM7CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5k
ZXggMmYwYWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4Ny4uMDQxNzQ4YjkwNDRh
ZDI1MzY4OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTY1LDkgKzY1LDkg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHVuZXhwZWN0ZWRB
Y3Rpdml0eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQorY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVk
UmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJp
bmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxTdHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0
aCwKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
YktpdCJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoCiAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1YTY2MjAy
MjkxMzA0YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBhZmI0M2I3NDUwMzliMGI0
ODMzNTFlNDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1
cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1Q
YXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhz
V2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKICAgICByZXR1
cm4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCA2OGQ2NmM2MTVlYmE2ZTk3
YjBhM2M4MGQ0MzRiMWIxMTQ4YjJkMDdjLi5hYjEzNTU1OTZkNTczMzY3MWZkMzIyZTA2YzMyNTAy
NmE5NzQ5MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApA
QCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCiAjaWYgSEFW
RShWSVNJQklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzYsNyArNDc3LDcgQEAgY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHVibGljIFJl
c3BvbnNpdmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWluZ0RlYnVnZ2VkKCkgY29u
c3Q7CiAgICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRDb2RlKCkgY29uc3Q7CiAK
LSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3Vt
ZWRSZWFkQWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNj
ZXNzKCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZlbmVzc1RpbWVyKCkg
eyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9pZCB1cGRhdGVCYWNrZ3Jv
dW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5NDdhZmY0MDQ3ZThhMWE3MDcwOTllZWNmNzhjMDgyZmU3
MzMxOTYuLmQ1OTUzNzFmN2I1YTc0NWQ1N2Q3MGVkM2IzZjFlZTYwNTFmZDE4Y2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBA
QAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAg
ICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVk
QWRkcmVzc09mT3BlcmF0b3IuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9I
YXNoTWFwLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RNb3ZpbmdVc2luZ0Vuc3Vy
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdBZGQpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YnVja2V0Rm9yS2V5KToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6Olplcm9IYXNoOjpoYXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Ok9i
amVjdFdpdGhSZWZMb2dnZXI6Ok9iamVjdFdpdGhSZWZMb2dnZXIpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nRW5zdXJlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RNb3ZpbmdVc2luZ0FkZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpEZXJlZk9ic2Vy
dmVyOjpyZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6ZGVyZWYp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9y
OjpUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yOjp+VGVzdE9iamVjdFdpdGhDdXN0b21E
ZXN0cnVjdG9yKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RI
YXNoU2V0LmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aFNldC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0SW5pdGlhbENhcGFjaXR5KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4p
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkRlcmVmT2JzZXJ2ZXI6OnJlZik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpEZXJlZk9ic2Vy
dmVyOjpkZXJlZik6CisKIDIwMjEtMDMtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBTZXJ2aWNlIFdvcmtlciBzY3JpcHRzIHVzZSB0b28gbXVjaCBtZW1vcnkg
aW4gdGhlIG5ldHdvcmsgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXgg
OWM1NWU0ZjZlYWE4ZTViYWFhZGExMjI1NjYyMDU5ZWRmNjI1Y2QwZS4uM2Y3Y2ZmZGUyOTFjMmQ4
MmRkMTI1MWJiZWM4YzgxMzExMjdmYmVmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CkBAIC03OSw2ICs3OSw4IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvUmVm
Q291bnRlci5jcHAKICAgICBUZXN0cy9XVEYvUmVmTG9nZ2VyLmNwcAogICAgIFRlc3RzL1dURi9S
ZWZQdHIuY3BwCisgICAgVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCisgICAgVGVzdHMv
V1RGL1JvYmluSG9vZEhhc2hTZXQuY3BwCiAgICAgVGVzdHMvV1RGL1J1bkxvb3AuY3BwCiAgICAg
VGVzdHMvV1RGL1NIQTEuY3BwCiAgICAgVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVy
YXRpb25zLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYmEwMzJjODU4M2I5ZjE4Nzg4
MThiYTY0OTY5MzQ2YzRlMDRiNzMzLi5hOWM3NDgxMjhhMzg4NGY5MWUwYWM3ZDQzMjY5YmQwYzJl
ZTVkZWZlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTExMiw2ICsxMTEyLDggQEAKIAkJ
RTMyNUM5MDcyM0UzODcwMjAwQkM3RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyNUM5MDYyM0Uz
ODcwMjAwQkM3RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tICovOyB9OwogCQlFMzJC
NTQ5MjIyODEwQUM0MDA4QUQ3MDIgLyogUGFja2VkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMkI1NDkxMjI4MTBBQzAwMDhBRDcwMiAvKiBQYWNr
ZWQuY3BwICovOyB9OwogCQlFMzRBNkQxOTI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NU
b1ByZWZlcmVuY2VzU2VydmljZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzNEE2RDE4MjQxMkRFMzkwMDEyQUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJl
ZmVyZW5jZXNTZXJ2aWNlLm1tICovOyB9OworCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyog
Um9iaW5Ib29kSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5j
cHAgKi87IH07CisJCUUzNTVBNjMyMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVB
NjMxMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCAqLzsgfTsKIAkJRTM1
QjkwODIyM0Y2MEREMDAwMDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QjkwODEyM0Y2MEREMDAw
MDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tICovOyB9OwogCQlFMzVGQzdCMjIyQjgy
QTczMDBGMzJGOTggLyogSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4
IC8qIEpTTG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSAqLzsgfTsKIAkJRTM3M0Q3OTExRjJDRjM1
MjAwQzZGQUFGIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM5NTNGOTUxRjJDRjMyMTAwQTc2QTJFIC8qIFNpZ25hbHMuY3BwICov
OyB9OwpAQCAtMjg5OSw2ICsyOTAxLDggQEAKIAkJRTMyNUM5MDYyM0UzODcwMjAwQkM3RDNCIC8q
IFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGljdHVy
ZUluUGljdHVyZVN1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkI1
NDkxMjI4MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFj
a2VkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0QTZEMTgyNDEyREUzOTAw
MTJBQjZFIC8qIEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZpY2UubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29k
SGFzaFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSb2Jpbkhv
b2RIYXNoU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1NUE2MzEyNjE1
NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzNUI5MDgxMjNGNjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VN
b2RlbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsaXplZERldmljZU1vZGVsLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVGQzdCMTIyQjgyQTZEMDBGMzJGOTggLyog
SlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzg4ODg3MDIwQzkwOTgxMDBFNjMyQkMgLyogV29ya2VyUG9vbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJQb29sLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDIsNiArNDQwNiw4IEBACiAJCQkJNDQyQkJG
NjgxQzkxQ0FEOTAwMTcwODdGIC8qIFJlZkxvZ2dlci5jcHAgKi8sCiAJCQkJOTNBNDI3QUQxODBE
QTYwRjAwQ0QyNEQ3IC8qIFJlZkxvZ2dlci5oICovLAogCQkJCTkzQTQyN0E4MTgwRDlCMDcwMENE
MjRENyAvKiBSZWZQdHIuY3BwICovLAorCQkJCUUzNTVBNjMxMjYxNTcxOEYwMDFDMTEyOSAvKiBS
b2Jpbkhvb2RIYXNoTWFwLmNwcCAqLywKKwkJCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyog
Um9iaW5Ib29kSGFzaFNldC5jcHAgKi8sCiAJCQkJRTRDOUFCQzcxQjNEQjE3MTAwNDBBOTg3IC8q
IFJ1bkxvb3AuY3BwICovLAogCQkJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMUEzNTI0QUMxRDYzQTRGQjAwMzE3
MjlCIC8qIFNjb3BlLmNwcCAqLywKQEAgLTUxNDgsNiArNTE1NCw4IEBACiAJCQkJN0M4M0RGMTYx
RDBBNTkwQzAwRkVCQ0YzIC8qIFJlZlB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NEFDOEJD
NjIxRDAyNDVBMDBDQUZCMzQgLyogUmV0YWluUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
ODNERjI0MUQwQTU5MEMwMEZFQkNGMyAvKiBSZXRhaW5QdHIubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlFMzU1QTYzMjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwNTFEMEE1OTBDMDBGRUJDRjMgLyogUnVu
TG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYyNjFEMEE1OTBDMDBGRUJDRjMgLyog
U2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEz
NTI0QUUxRDYzQTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJh
dG9yLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3Bl
cmF0b3IuaAppbmRleCA0NWNjZmE0MDMwZTEyYWQzYzVhNmRjMzc0YzE1YmQ5ZWQzMTA5MDJhLi5m
ZGZhYmVlYzRiZjRlMGQwN2NmODUwYzQyMmM0MTI0YjQ3ZTQ3MWJmIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3Iu
aApAQCAtNzcsNiArNzcsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxEZWxldGVk
QWRkcmVzc09mT3BlcmF0b3I+IHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsgLy8gVGhpcyBpcyBub3QgY29ycmVjdCwgYnV0IGZv
ciBkZWJ1Z2dpbmcgb2YgUm9iaW5Ib29kSGFzaFNldC4KIH07CiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKaW5kZXggYWFiZTdkZGFjMjc3M2I2Zjc5NmUyMDQw
YjMyMmJlNTllMWYwNzg2ZC4uYzg0M2U3YzU1YWIxMzQzZTgwMmFiNzg0NzA0N2Y5Zjg2YTUyNDdi
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKQEAgLTY2OCwx
NCArNjY4LDE0IEBAIGNsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIgewogfTsKIAogCi12b2lkIHRl
c3RNb3ZpbmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lk
IHRlc3RNb3ZpbmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBI
YXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1h
cDsKICAgICAKICAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBtYWtlVW5pcXVlPE9iamVj
dFdpdGhSZWZMb2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0pOwogfQogCi12b2lkIHRlc3RNb3Zp
bmdVc2luZ0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lkIHRlc3RNb3Zp
bmdVc2luZ0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBIYXNoTWFwPHVuc2ln
bmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1hcDsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAppbmRleCBlN2NmYmNjYWQxZDQ1OWNk
NjRjYTIxMjg4OGE3YTk2MmNkNWUzMDMxLi5iMGM2NDkyMjZlZWEzYmNmMzFlMGIwMjg2NDg1N2Vi
ZDY2NGI3ZDQ5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNo
U2V0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcApA
QCAtNzAsMTEgKzcwLDExIEBAIHZvaWQgdGVzdEluaXRpYWxDYXBhY2l0eSgpCiAgICAgRVhQRUNU
X0dUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2Fw
YWNpdHkpOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2b2lkIGdlbmVyYXRlVGVzdENh
cGFjaXR5VXBUb1NpemUoKTsKLXRlbXBsYXRlPD4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVw
VG9TaXplPDA+KCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRl
VGVzdENhcGFjaXR5VXBUb1NpemUoKTsKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVU
ZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPigpCiB7CiB9Ci10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2
b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQordGVtcGxhdGU8dW5zaWduZWQgc2l6
ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpCiB7CiAgICAgZ2Vu
ZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4oKTsKICAgICB0ZXN0SW5pdGlhbENh
cGFjaXR5PHNpemU+KCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Nb3ZlT25seS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaApp
bmRleCBkOWMyMDZjMjhlYzQ5ZGNjZDBjZjlkNDA3YWQzNzJmYWMwMjQ0YmFkLi5hMTBjNWU4Zjg2
NTFlN2RhNjQyZmM0ZmRmMDFkMmUwZThmNTM1NzA0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL01vdmVPbmx5LmgKQEAgLTk0LDcgKzk0LDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8TW92ZU9ubHk+IHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVl
OyAvLyBUaGlzIGlzIG5vdCBjb3JyZWN0LCBidXQgZm9yIGRlYnVnZ2luZyBvZiBSb2Jpbkhvb2RI
YXNoU2V0LgogfTsKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MDc0Nzgx
NGM3ZGNjMTA3OWRkYzg1ODUzNzQ3NWQ1N2FlMTQzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcApAQCAtMCwwICsx
LDEyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQ291bnRlcnMuaCIKKyNpbmNsdWRlICJEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCIKKyNp
bmNsdWRlICJNb3ZlT25seS5oIgorI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1ZGUgIlRl
c3QuaCIKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFJvYmluSG9vZEhhc2ggOiBwdWJsaWMgRGVmYXVsdEhh
c2g8VD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7
Cit9OworCit0eXBlZGVmIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPGludCwgaW50LCBSb2Jpbkhvb2RIYXNoPGludD4+IEludEhhc2hNYXA7CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIEhhc2hUYWJsZUl0ZXJhdG9yQ29tcGFyaXNvbikKK3sKKyAgICBJ
bnRIYXNoTWFwIG1hcDsKKyAgICBtYXAuYWRkKDEsIDIpOworICAgIEFTU0VSVF9UUlVFKG1hcC5i
ZWdpbigpICE9IG1hcC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5iZWdpbigpID09IG1h
cC5lbmQoKSk7CisKKyAgICBJbnRIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IG1hcC5i
ZWdpbigpOworICAgIEFTU0VSVF9UUlVFKGJlZ2luID09IG1hcC5iZWdpbigpKTsKKyAgICBBU1NF
UlRfVFJVRShtYXAuYmVnaW4oKSA9PSBiZWdpbik7CisgICAgQVNTRVJUX1RSVUUoYmVnaW4gIT0g
bWFwLmVuZCgpKTsKKyAgICBBU1NFUlRfVFJVRShtYXAuZW5kKCkgIT0gYmVnaW4pOworICAgIEFT
U0VSVF9GQUxTRShiZWdpbiAhPSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5i
ZWdpbigpICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4gPT0gbWFwLmVuZCgpKTsK
KyAgICBBU1NFUlRfRkFMU0UobWFwLmVuZCgpID09IGJlZ2luKTsKK30KKworc3RydWN0IFRlc3RE
b3VibGVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxkb3VibGU+IHsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbmltdW1UYWJsZVNpemUgPSA4OworfTsKKwordHlwZWRlZiBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8ZG91YmxlLCBpbnQ2NF90LCBSb2Jpbkhvb2RIYXNoPGRv
dWJsZT4sIFRlc3REb3VibGVIYXNoVHJhaXRzPiBEb3VibGVIYXNoTWFwOworCitzdGF0aWMgaW50
IGJ1Y2tldEZvcktleShkb3VibGUga2V5KQoreworICAgIHJldHVybiBEZWZhdWx0SGFzaDxkb3Vi
bGU+OjpoYXNoKGtleSkgJiAoVGVzdERvdWJsZUhhc2hUcmFpdHM6Om1pbmltdW1UYWJsZVNpemUg
LSAxKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpZ1RhYmxlSGFzaFRyYWl0
cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1U
YWJsZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTw0MDk2Pjo6dmFsdWU7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWmVyb0hhc2ggOiBwdWJsaWMgSW50SGFz
aDxUPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpIHsgcmV0dXJuIDA7IH0K
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRG91YmxlSGFzaENvbGxpc2lvbnMpCit7CisgICAg
Ly8gVGhlICJjbG9iYmVyIiBrZXkgaGVyZSBpcyBvbmUgdGhhdCBlbmRzIHVwIHN0ZWFsaW5nIHRo
ZSBidWNrZXQgdGhhdCB0aGUgLTAga2V5CisgICAgLy8gb3JpZ2luYWxseSB3YW50cyB0byBiZSBp
bi4gVGhpcyBtYWtlcyB0aGUgMCBhbmQgLTAga2V5cyBjb2xsaWRlIGFuZCB0aGUgdGVzdCB0aGVu
CisgICAgLy8gZmFpbHMgdW5sZXNzIHRoZSBGbG9hdEhhc2g6OmVxdWFscygpIGltcGxlbWVudGF0
aW9uIGNhbiBkaXN0aW5ndWlzaCB0aGVtLgorICAgIGNvbnN0IGRvdWJsZSBjbG9iYmVyS2V5ID0g
NjsKKyAgICBjb25zdCBkb3VibGUgemVyb0tleSA9IDA7CisgICAgY29uc3QgZG91YmxlIG5lZ2F0
aXZlWmVyb0tleSA9IC16ZXJvS2V5OworCisgICAgRG91YmxlSGFzaE1hcCBtYXA7CisgICAgbWFw
LmFkZChjbG9iYmVyS2V5LCAxKTsKKyAgICBtYXAuYWRkKHplcm9LZXksIDIpOworICAgIG1hcC5h
ZGQobmVnYXRpdmVaZXJvS2V5LCAzKTsKKworICAgIEFTU0VSVF9FUShidWNrZXRGb3JLZXkoY2xv
YmJlcktleSksIGJ1Y2tldEZvcktleShuZWdhdGl2ZVplcm9LZXkpKTsKKyAgICBBU1NFUlRfRVEo
bWFwLmdldChjbG9iYmVyS2V5KSwgMSk7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQoemVyb0tleSks
IDIpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KG5lZ2F0aXZlWmVyb0tleSksIDMpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBNb3ZlT25seVZhbHVlcykKK3sKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIE1vdmVPbmx5LCBSb2Jp
bkhvb2RIYXNoPHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsK
KyAgICAgICAgbW92ZU9ubHlWYWx1ZXMuc2V0KGkgKyAxLCBXVEZNb3ZlKG1vdmVPbmx5KSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBh
dXRvIGl0ID0gbW92ZU9ubHlWYWx1ZXMuZmluZChpICsgMSk7CisgICAgICAgIEFTU0VSVF9GQUxT
RShpdCA9PSBtb3ZlT25seVZhbHVlcy5lbmQoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCA1MDsgKytpKQorICAgICAgICBBU1NFUlRfRVEobW92ZU9ubHlWYWx1ZXMudGFr
ZShpICsgMSkudmFsdWUoKSwgaSArIDEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDUwOyBpIDwg
MTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5VmFsdWVzLnJlbW92ZShpICsg
MSkpOworCisgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlWYWx1ZXMuaXNFbXB0eSgpKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgTW92ZU9ubHlLZXlzKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxNb3ZlT25seSwgdW5zaWduZWQ+IG1vdmVP
bmx5S2V5czsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgTW92ZU9ubHkgbW92ZU9ubHkoaSArIDEpOworICAgICAgICBtb3ZlT25seUtleXMuc2V0KFdU
Rk1vdmUobW92ZU9ubHkpLCBpICsgMSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAxMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbW92ZU9ubHlLZXlzLmZpbmQoTW92
ZU9ubHkoaSArIDEpKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5S2V5cy5l
bmQoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAg
ICAgICAgQVNTRVJUX0ZBTFNFKG1vdmVPbmx5S2V5cy5hZGQoTW92ZU9ubHkoaSArIDEpLCBpICsg
MSkuaXNOZXdFbnRyeSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgICAgICBBU1NFUlRfVFJVRShtb3ZlT25seUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAxKSkp
OworCisgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLmlzRW1wdHkoKSk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hNYXAsIEluaXRpYWxpemVyTGlzdCkKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6c3RyaW5nLCBSb2Jp
bkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwID0geworICAgICAgICB7IDEsICJvbmUiIH0sCisgICAg
ICAgIHsgMiwgInR3byIgfSwKKyAgICAgICAgeyAzLCAidGhyZWUiIH0sCisgICAgICAgIHsgNCwg
ImZvdXIiIH0sCisgICAgfTsKKworICAgIEVYUEVDVF9FUSg0dSwgbWFwLnNpemUoKSk7CisKKyAg
ICBFWFBFQ1RfRVEoIm9uZSIsIG1hcC5nZXQoMSkpOworICAgIEVYUEVDVF9FUSgidHdvIiwgbWFw
LmdldCgyKSk7CisgICAgRVhQRUNUX0VRKCJ0aHJlZSIsIG1hcC5nZXQoMykpOworICAgIEVYUEVD
VF9FUSgiZm91ciIsIG1hcC5nZXQoNCkpOworICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygpLCBt
YXAuZ2V0KDUpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRWZmaWNpZW50R2V0
dGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNp
Z25lZCwgQ29weU1vdmVDb3VudGVyLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAg
IG1hcC5zZXQoMSwgQ29weU1vdmVDb3VudGVyKCkpOworCisgICAgeworICAgICAgICBDb3B5TW92
ZUNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAgICAgbWFwLmdldCgxKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAg
ICAgICAgRVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCk7CisgICAgICAg
IEVYUEVDVF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgQ29weU1vdmVDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgICAg
IG1hcC5nZXQoMik7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjpj
b3B5Q291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6bW92ZUNv
dW50KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktl
eSkKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2Nv
cGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhh
c2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOwor
CisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI+KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0
cnVjdGlvbkNvdW50KTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0N1c3RvbURl
bGV0ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3Bl
IGNvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXJTY29wZTsKKyAgICBEZWxldGVyQ291bnRlcjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6VGVzdGluZ1Njb3BlIGRlbGV0ZXJDb3VudGVy
U2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+PiBtYXA7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4+IHVuaXF1ZVB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcigpLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigp
KTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAg
ICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9u
Q291bnQpOworCisgICAgRVhQRUNUX0VRKDB1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworCisgICAgbWFwLmNsZWFyKCk7CisK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVj
dGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgRVhQRUNUX0VRKDF1LCBEZWxldGVyQ291bnRl
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfRmluZFVzaW5nUmF3UG9pbnRl
cikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1
bmlxdWVfcHRyPGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+
IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9j
Q2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAu
YWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBhdXRvIGl0ID0gbWFwLmZpbmQocHRy
KTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIs
IGl0LT5rZXkuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgyLCBpdC0+dmFsdWUpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50
ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6
dW5pcXVlX3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+
PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFw
LmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG1hcC5j
b250YWlucyhwdHIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRy
S2V5X0dldFVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxz
dGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVu
aXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1
ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBp
bnQgdmFsdWUgPSBtYXAuZ2V0KHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHZhbHVlKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUg
c2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFw
OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5p
cXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IG1hcC5yZW1vdmUocHRyKTsK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQ
b2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29w
ZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxz
dGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludCwgUm9iaW5I
b29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBt
YXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1
bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGludCByZXN1bHQgPSBtYXAudGFrZShwdHIpOwor
ICAgIEVYUEVDVF9FUSgyLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUmVmVmFsdWUpCit7CisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgVW5pcXVlUmVmPGludD4sIFJv
YmluSG9vZEhhc2g8aW50Pj4gbWFwOworICAgIFVuaXF1ZVJlZjxpbnQ+IGZpdmUgPSBtYWtlVW5p
cXVlUmVmV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIG1hcC5hZGQoNSwgV1RG
TW92ZShmaXZlKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNvbnRhaW5zKDUpKTsKKyAgICBpbnQq
IHNob3VsZEJlRml2ZSA9IG1hcC5nZXQoNSk7CisgICAgRVhQRUNUX0VRKCpzaG91bGRCZUZpdmUs
IDUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHRha2VuRml2ZSA9IG1hcC50YWtlKDUpOwor
ICAgIEVYUEVDVF9FUSgqdGFrZW5GaXZlLCA1KTsKKyAgICBtYXAuZW5zdXJlKDYsIFtdIHsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNik7
CisgICAgfSk7CisgICAgRVhQRUNUX0ZBTFNFKG1hcC5jb250YWlucyg1KSk7CisgICAgRVhQRUNU
X1RSVUUobWFwLmNvbnRhaW5zKDYpKTsKKyAgICBmb3IgKFVuaXF1ZVJlZjxpbnQ+JiBhIDogbWFw
LnZhbHVlcygpKQorICAgICAgICBFWFBFQ1RfRVEoYS5nZXQoKSwgNik7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGQpCit7CisgICAgeworICAgICAgICBEZXJp
dmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQ
dHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEp
OworICAgICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJy
ZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmVsZWFz
ZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShwdHIp
LCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0
cktleV9BZGRVc2luZ01vdmUpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+
IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAu
YWRkKFdURk1vdmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdSYXcpCit7CisgICAgeworICAgICAgICBEZXJp
dmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQ
dHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEp
OworICAgICAgICBtYXAuYWRkKHB0ci5nZXQoKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NU
UkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZEtleUFs
cmVhZHlQcmVzZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBp
bnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsK
KyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBw
dHIyKCZhKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKHB0cjIsIDApOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktl
eV9BZGRVc2luZ1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+
Pj4gbWFwOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAg
ICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAg
ICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bWFwLmFkZChXVEZNb3ZlKHB0cjIpLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVY
UEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdNb3ZlS2V5QWxyZWFkeVBy
ZXNlbnQpCit7CisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9i
aW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0K
KworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEp
OworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQoV1RGTW92ZShwdHIyKSwgMCk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAg
RVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRy
S2V5X1NldCkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVm
TG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisg
ICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAw
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAgRGVy
aXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
UHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZh
KTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVD
VF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKwor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdNb3ZlKQorewor
ICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQs
IFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRy
PFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOwor
ICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1Nl
dFVzaW5nUmF3KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxS
ZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIu
Z2V0KCksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7
CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jp
bkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZM
b2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBF
Q1RfU1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuc2V0KHB0cjIsIDEpOworICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBt
YXAuZ2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNl
S2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+
IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAu
c2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8UmVm
TG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLnNldChX
VEZNb3ZlKHB0cjIpLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChwdHIuZ2V0KCkpKTsK
KyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZUtleUFscmVhZHlQcmVzZW50KQorewor
ICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQs
IFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRy
PFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworCisgICAgICAg
IEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RGTW92ZShwdHIyKSwgMSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAg
RVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAgIH0KKworICAgICAgICBF
WFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cisg
ICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZSkKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVu
c2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAgIHsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIDE7IH0pOworICAgICAgICBF
WFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdDIgPSBtYXAuZW5zdXJl
KDEsIFtdIHsgcmV0dXJuIDI7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIu
aXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJh
dG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsK
KyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9Nb3ZlT25seVZh
bHVlcykKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5z
aWduZWQsIE1vdmVPbmx5LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7
CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1vdmVPbmx5VmFsdWVzLmVuc3VyZSgx
LCBbXSB7IHJldHVybiBNb3ZlT25seSgxKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBh
ZGRSZXN1bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbW92ZU9ubHlWYWx1ZXMuZW5z
dXJlKDEsIFtdIHsgcmV0dXJuIE1vdmVPbmx5KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1
LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRk
UmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIEVuc3VyZV9VbmlxdWVQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkPiwgUm9i
aW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbWFwLmVuc3VyZSgxLCBbXSB7IHJldHVybiBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2ND
aGVjazx1bnNpZ25lZD4oMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsICptYXAuZ2V0KDEp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9yLT5rZXkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0MiA9IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0
TWFsbG9jQ2hlY2s8dW5zaWduZWQ+KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFw
LmdldCgxKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKmFkZFJlc3VsdDIuaXRlcmF0b3ItPnZh
bHVlLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5r
ZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9SZWZQdHIpCit7CisgICAg
RGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNo
PHVuc2lnbmVkPj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRy
PFJlZkxvZ2dlcj4oJmEpOyB9KTsKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBSZWZQdHI8
UmVmTG9nZ2VyPigmYSk7IH0pOworICAgIEVYUEVDVF9TVFJFUSgiIiwgdGFrZUxvZ1N0cigpLmNf
c3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworY2xhc3MgT2JqZWN0V2l0aFJlZkxvZ2dl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqZWN0V2l0
aFJlZkxvZ2dlcihSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKKyAgICAgICAgOiBtX2xvZ2dlcihX
VEZNb3ZlKGxvZ2dlcikpCisgICAgeworICAgIH0KKworICAgIFJlZjxSZWZMb2dnZXI+IG1fbG9n
Z2VyOworfTsKKworCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxv
Z2dlcj4mJiBsb2dnZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJl
dHVybiBtYWtlVW5pcXVlPE9iamVjdFdpdGhSZWZMb2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0p
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdBZGQoUmVmPFJlZkxvZ2dlcj4mJiBs
b2dnZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVu
c2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBhdXRvJiBzbG90ID0gbWFwLmFkZCgxLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgc2xvdCA9IG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxv
Z2dlcj4oV1RGTW92ZShsb2dnZXIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
RW5zdXJlX0xhbWJkYXNDYXB0dXJpbmdCeVJlZmVyZW5jZSkKK3sKKyAgICB7CisgICAgICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7Cisg
ICAgICAgIHRlc3RNb3ZpbmdVc2luZ0Vuc3VyZShXVEZNb3ZlKHJlZikpOworCisgICAgICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBS
ZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHRlc3RNb3ZpbmdVc2luZ0FkZChXVEZNb3Zl
KHJlZikpOworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKKyAgICB9Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgVmFsdWVJc0Rlc3RydWN0ZWRPblJlbW92ZSkKK3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9i
c2VydmVyIHsKKyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVyKCkgPSBkZWZhdWx0OworCisgICAg
ICAgIERlc3RydWN0b3JPYnNlcnZlcihib29sKiBkZXN0cnVjdGVkKQorICAgICAgICAgICAgOiBk
ZXN0cnVjdGVkKGRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5E
ZXN0cnVjdG9yT2JzZXJ2ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGVzdHJ1Y3Rl
ZCkKKyAgICAgICAgICAgICAgICAqZGVzdHJ1Y3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBEZXN0cnVjdG9yT2JzZXJ2ZXIoRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisgICAg
ICAgICAgICA6IGRlc3RydWN0ZWQob3RoZXIuZGVzdHJ1Y3RlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3RoZXIuZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBE
ZXN0cnVjdG9yT2JzZXJ2ZXImIG9wZXJhdG9yPShEZXN0cnVjdG9yT2JzZXJ2ZXImJiBvdGhlcikK
KyAgICAgICAgeworICAgICAgICAgICAgZGVzdHJ1Y3RlZCA9IG90aGVyLmRlc3RydWN0ZWQ7Cisg
ICAgICAgICAgICBvdGhlci5kZXN0cnVjdGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wqIGRlc3RydWN0ZWQgeyBudWxscHRy
IH07CisgICAgfTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxpbnQsIERlc3RydWN0b3JPYnNlcnZlciwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAg
ICBib29sIGRlc3RydWN0ZWQgPSBmYWxzZTsKKyAgICBtYXAuYWRkKDUsIERlc3RydWN0b3JPYnNl
cnZlciB7ICZkZXN0cnVjdGVkIH0pOworCisgICAgRVhQRUNUX0ZBTFNFKGRlc3RydWN0ZWQpOwor
CisgICAgYm9vbCByZW1vdmVSZXN1bHQgPSBtYXAucmVtb3ZlKDUpOworCisgICAgRVhQRUNUX1RS
VUUocmVtb3ZlUmVzdWx0KTsKKyAgICBFWFBFQ1RfVFJVRShkZXN0cnVjdGVkKTsKK30KKworc3Ry
dWN0IERlcmVmT2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
KyAgICBORVZFUl9JTkxJTkUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgKytjb3VudDsKKyAg
ICB9CisgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgLS1jb3Vu
dDsKKyAgICAgICAgb2JzZXJ2ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICB9
CisgICAgdW5zaWduZWQgY291bnQgeyAxIH07CisgICAgY29uc3QgUmVmUHRyPERlcmVmT2JzZXJ2
ZXI+KiBidWNrZXRBZGRyZXNzIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IERlcmVmT2JzZXJ2ZXIq
IG9ic2VydmVkQnVja2V0IHsgbnVsbHB0ciB9OworfTsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCit7CisgICAgYXV0byBvYnNlcnZlciA9
IG1ha2VVbmlxdWU8RGVyZWZPYnNlcnZlcj4oKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4sIGludCwgUm9iaW5Ib29k
SGFzaDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4+PiBtYXA7CisgICAgbWFwLmFkZChhZG9wdFJlZihv
YnNlcnZlci5nZXQoKSksIDUpOworCisgICAgYXV0byBpdGVyYXRvciA9IG1hcC5maW5kKG9ic2Vy
dmVyLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpdGVyYXRvciAhPSBtYXAuZW5kKCkpOworCisg
ICAgb2JzZXJ2ZXItPmJ1Y2tldEFkZHJlc3MgPSAmaXRlcmF0b3ItPmtleTsKKworICAgIEVYUEVD
VF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1Rf
VFJVRShtYXAucmVtb3ZlKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICAvLyBSb2Jpbkhvb2RIYXNo
U2V0IGRvZXMgbm90IHVzZSB0b21ic3RvbmUuIFRoZSB1c2VkIGJ1Y2tldCBtYXkgaW5jbHVkZSBh
biBleGlzdGluZyBlbnRyeSwgb3IgZW1wdHkuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBkaWQg
bm90IGFkZCB0aGUgb3RoZXIgRGVyZWZPYnNlcnZlci4gU28gdGhpcyBtdXN0IGJlIGFuIGVtcHR5
IChudWxscHRyKS4KKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0g
bnVsbHB0cik7CisgICAgRVhQRUNUX0VRKG9ic2VydmVyLT5jb3VudCwgMHUpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZfS2V5KQoreworICAgIHsKKyAgICAgICAgUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+
IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQo
V1RGTW92ZShyZWYpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJl
ZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dl
ciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuc2V0KFdU
Rk1vdmUocmVmKSwgMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFw
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoV1RG
TW92ZShyZWZBKSwgMSk7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQTIoYSk7CisgICAg
ICAgIG1hcC5zZXQoV1RGTW92ZShyZWZBMiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJF
USgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJv
YmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dl
cj4gcmVmKGEpOworICAgICAgICBtYXAuZW5zdXJlKFdURk1vdmUocmVmKSwgW10oKSB7CisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVR
KCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAg
ICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxS
ZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIDEpOworCisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmlu
ZCgmYSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGl0ICE9IG1hcC5lbmQoKSk7CisKKyAgICAgICAg
QVNTRVJUX0VRKGl0LT5rZXkucHRyKCksICZhKTsKKyAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1
ZSwgMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVm
TG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAg
ICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiks
IDEpOworCisgICAgICAgIG1hcC5yZW1vdmUoJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAg
ICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8
UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKworICAgICAgICBpbnQgaSA9IG1hcC50YWtl
KCZhKTsKKyAgICAgICAgQVNTRVJUX0VRKGksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dn
ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBv
ZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFrLiBObyBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkg
Z3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYgPSBhZG9wdFJlZigqbmV3IFJl
ZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAgIGF1dG8qIHBvaW50ZXIgPSByZWYucHRyKCk7Cisg
ICAgICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgaSArIDEpOworICAgICAgICAgICAgQVNT
RVJUX1RSVUUobWFwLmNvbnRhaW5zKHBvaW50ZXIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZfVmFsdWUpCit7CisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKwor
ICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92
ZShyZWYpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwg
UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxS
ZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLnNldCgxLCBXVEZNb3ZlKHJlZikpOworICAg
IH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVm
TG9nZ2VyIGIoImIiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQShhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZN
b3ZlKHJlZkEpKTsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZCKGIpOworICAgICAgICBt
YXAuc2V0KDEsIFdURk1vdmUocmVmQikpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVm
KGEpIHJlZihiKSBkZXJlZihhKSBkZXJlZihiKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9v
ZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYUdldCA9IG1hcC5n
ZXQoMSk7CisgICAgICAgIEFTU0VSVF9FUShhR2V0LCAmYSk7CisgICAgfQorCisgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
eworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBS
ZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgYXV0byBl
bXB0eUdldCA9IG1hcC5nZXQoMSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGVtcHR5R2V0ID09IG51
bGxwdHIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVm
TG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dl
cj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisKKyAgICAgICAg
YXV0byBhT3V0ID0gbWFwLnRha2UoMSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0
PGJvb2w+KGFPdXQpKTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKwor
ICAgICAgICBhdXRvIGVtcHR5VGFrZSA9IG1hcC50YWtlKDEpOworICAgICAgICBBU1NFUlRfRkFM
U0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAgfQorCisgICAgeworICAgICAg
ICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwg
V1RGTW92ZShyZWYpKTsKKyAgICAgICAgbWFwLnJlbW92ZSgxKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhh
c2g8aW50Pj4gbWFwOworCisgICAgICAgIG1hcC5lbnN1cmUoMSwgWyZdKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgICAgICByZXR1cm4gcmVm
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhv
b2RIYXNoPGludD4+IG1hcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxl
YWsuIE5vIGJpZyBkZWFsIGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZM
b2dnZXI+IHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAg
bWFwLmFkZChpICsgMSwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKG1h
cC5jb250YWlucyhpICsgMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVR
KCJkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcikKK3sKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3Is
IFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwMTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbWFwMS52
YWx1ZXMoKSkKKyAgICAgICAgKHZvaWQpdmFsdWU7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hNYXAsIFJlZk1hcHBlZFRvTm9uWmVyb0VtcHR5VmFsdWUpCit7CisgICAgY2xhc3MgVmFsdWUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWUoKSA9IGRlZmF1bHQ7CisgICAgICAgIFZhbHVl
KFZhbHVlJiYpID0gZGVmYXVsdDsKKyAgICAgICAgVmFsdWUoY29uc3QgVmFsdWUmKSA9IGRlZmF1
bHQ7CisgICAgICAgIFZhbHVlJiBvcGVyYXRvcj0oVmFsdWUmJikgPSBkZWZhdWx0OworCisgICAg
ICAgIFZhbHVlKGludDMyX3QgZikKKyAgICAgICAgICAgIDogbV9maWVsZChmKQorICAgICAgICB7
IH0KKworICAgICAgICBpbnQzMl90IGZpZWxkKCkgeyByZXR1cm4gbV9maWVsZDsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgaW50MzJfdCBtX2ZpZWxkIHsgMHhiYWRiZWVmIH07CisgICAgfTsK
KworICAgIGNsYXNzIEtleSA6IHB1YmxpYyBSZWZDb3VudGVkPEtleT4geworICAgICAgICBLZXko
KSA9IGRlZmF1bHQ7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPEtleT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXkpOyB9CisgICAgfTsKKworICAgIHN0YXRpY19h
c3NlcnQoIVdURjo6SGFzaFRyYWl0czxWYWx1ZT46OmVtcHR5VmFsdWVJc1plcm8sICIiKTsKKwor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8S2V5PiwgVmFs
dWUsIFJvYmluSG9vZEhhc2g8UmVmPEtleT4+PiBtYXA7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxS
ZWY8S2V5PiwgaW50MzJfdD4+IHZlY3Rvck1hcDsKKworICAgIGZvciAoaW50MzJfdCBpID0gMDsg
aSA8IDE2MDsgKytpKSB7CisgICAgICAgIFJlZjxLZXk+IGtleSA9IEtleTo6Y3JlYXRlKCk7Cisg
ICAgICAgIG1hcC5hZGQoUmVmPEtleT4oa2V5LmdldCgpKSwgVmFsdWUgeyBpIH0pOworICAgICAg
ICB2ZWN0b3JNYXAuYXBwZW5kKHsgV1RGTW92ZShrZXkpLCBpIH0pOworICAgIH0KKworICAgIGZv
ciAoYXV0byYgcGFpciA6IHZlY3Rvck1hcCkKKyAgICAgICAgQVNTRVJUX0VRKHBhaXIuc2Vjb25k
LCBtYXAuZ2V0KHBhaXIuZmlyc3QpLmZpZWxkKCkpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDog
dmVjdG9yTWFwKQorICAgICAgICBBU1NFUlRfVFJVRShtYXAucmVtb3ZlKHBhaXIuZmlyc3QpKTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX0VtcHR5KQoreworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5y
YW5kb20oKTsKKyAgICBBU1NFUlRfRVEocmVzdWx0LCBtYXAuZW5kKCkpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBSYW5kb21fV3JhcEFyb3VuZCkKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBaZXJvSGFz
aDx1bnNpZ25lZD4sIEJpZ1RhYmxlSGFzaFRyYWl0czx1bnNpZ25lZD4+IG1hcDsKKyAgICBtYXAu
YWRkKDEsIDEpOworCisgICAgYXV0byByZXN1bHQgPSBtYXAucmFuZG9tKCk7CisgICAgQVNTRVJU
X0VRKHJlc3VsdCwgbWFwLmJlZ2luKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSYW5kb21fSXNFdmVubHlEaXN0cmlidXRlZCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVu
c2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1h
cDsKKyAgICBtYXAuYWRkKDAsIDApOworICAgIG1hcC5hZGQoMSwgMSk7CisKKyAgICB1bnNpZ25l
ZCB6ZXJvcyA9IDA7CisgICAgdW5zaWduZWQgb25lcyA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAucmFuZG9tKCk7
CisgICAgICAgIGlmICghaXQtPnZhbHVlKQorICAgICAgICAgICAgKyt6ZXJvczsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlRfRVEoaXQtPnZhbHVlLCAxdSk7CisgICAgICAgICAg
ICArK29uZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfRVEoemVyb3MgKyBvbmVz
LCAxMDAwdSk7CisgICAgQVNTRVJUX0xFKHplcm9zLCA2MDB1KTsKKyAgICBBU1NFUlRfTEUob25l
cywgNjAwdSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlc2VydmVJbml0aWFs
Q2FwYWNpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtYXA7CisgICAgRVhQRUNUX0VRKDB1LCBtYXAuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIG1hcC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKDE2Mzg0dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA5OTk5OyArK2kpCisgICAgICAgIG1hcC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSksIG1ha2VT
dHJpbmcoImJhciIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkpOworICAg
IEVYUEVDVF9FUSgxNjM4NHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAu
Y29udGFpbnMoImZvbzMiX3N0cikpOworICAgIEVYUEVDVF9TVFJFUSgiYmFyMyIsIG1hcC5nZXQo
ImZvbzMiX3N0cikudXRmOCgpLmRhdGEoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5
OTk7ICsraSkKKyAgICAgICAgbWFwLmFkZChtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSwgbWFrZVN0
cmluZygiYmF6IiwgaSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSArIDk5OTl1LCBtYXAuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwLnJlbW92ZSht
YWtlU3RyaW5nKCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgbWFwLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9TVFJF
USgiYmF6MyIsIG1hcC5nZXQoImV4Y2VzczMiX3N0cikudXRmOCgpLmRhdGEoKSk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwLnJl
bW92ZShtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNp
emUoKSk7CisgICAgRVhQRUNUX0VRKDh1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDI7Cisg
ICAgbWFwMi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9GQUxTRSht
YXAyLnJlbW92ZSgiZm9vMSJfcykpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDAwOyAr
K2kpCisgICAgICAgIG1hcDIuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtlU3RyaW5nKCJi
YXIiLCBpKSk7CisgICAgRVhQRUNUX0VRKDIwMDB1LCBtYXAyLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKDE2Mzg0dSwgbWFwMi5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MjAwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShtYXAyLnJlbW92ZShtYWtlU3RyaW5nKCJm
b28iLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVDVF9F
USg4dSwgbWFwMi5jYXBhY2l0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
UmFuZG9tX0lzRXZlbmx5RGlzdHJpYnV0ZWRBZnRlclJlbW92ZSkKK3sKKyAgICBmb3IgKHNpemVf
dCB0YWJsZVNpemUgPSAyOyB0YWJsZVNpemUgPD0gMiAqIDY7ICsrdGFibGVTaXplKSB7IC8vIE91
ciBoYXNoIHRhYmxlcyBzaHJpbmsgYXQgYSBsb2FkIGZhY3RvciBvZiAxIC8gNi4KKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25l
ZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFi
bGVTaXplOyArK2kpCisgICAgICAgICAgICBtYXAuYWRkKGksIGkpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMjsgaSA8IHRhYmxlU2l6ZTsgKytpKQorICAgICAgICAgICAgbWFwLnJlbW92ZShp
KTsKKworICAgICAgICB1bnNpZ25lZCB6ZXJvcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG9uZXMg
PSAwOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXQgPSBtYXAucmFuZG9tKCk7CisgICAgICAgICAgICBpZiAoIWl0LT52
YWx1ZSkKKyAgICAgICAgICAgICAgICArK3plcm9zOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAgICAgICAgICsr
b25lczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9FUSh6ZXJv
cyArIG9uZXMsIDEwMDB1KTsKKyAgICAgICAgQVNTRVJUX0xFKHplcm9zLCA2MDB1KTsKKyAgICAg
ICAgQVNTRVJUX0xFKG9uZXMsIDYwMHUpOworICAgIH0KK30KKworY2xhc3MgVGVzdE9iamVjdFdp
dGhDdXN0b21EZXN0cnVjdG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3IoRnVuY3Rpb248dm9pZCgpPiYm
IHJ1bkluRGVzdHJ1Y3RvcikKKyAgICAgICAgOiBtX3J1bkluRGVzdHJ1Y3RvcihXVEZNb3ZlKHJ1
bkluRGVzdHJ1Y3RvcikpCisgICAgeyB9CisKKyAgICB+VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0
cnVjdG9yKCkKKyAgICB7CisgICAgICAgIG1fcnVuSW5EZXN0cnVjdG9yKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9ydW5JbkRlc3RydWN0b3I7Cit9OworCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBDbGVhcl9SZWVudGVyKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRy
PFRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcj4sIFJvYmluSG9vZEhhc2g8dWludDY0X3Q+
PiBtYXA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSAxMDsgKytpKSB7CisgICAgICAg
IG1hcC5hZGQoaSwgbWFrZVVuaXF1ZTxUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3I+KFsm
bWFwXSB7CisgICAgICAgICAgICBtYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgw
VSwgbWFwLnNpemUoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtYXAuaXNFbXB0eSgpKTsK
KyAgICAgICAgfSkpOworICAgIH0KKyAgICBFWFBFQ1RfRVEoMTBVLCBtYXAuc2l6ZSgpKTsKKyAg
ICBtYXAuY2xlYXIoKTsKKyAgICBFWFBFQ1RfRVEoMFUsIG1hcC5zaXplKCkpOworICAgIEVYUEVD
VF9UUlVFKG1hcC5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBB
ZGRBbmRJZGVudGl0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZD4gbWFwOworICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlMzsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuc2V0
KHN0cmluZy5pbXBsKCksIGluZGV4KTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICBFWFBFQ1RfRVEocmVzdWx0Lml0ZXJhdG9yLT5rZXksIHN0cmluZy5p
bXBsKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgTGFyZ2VSZW1v
dmFsKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQ
dHI8U3RyaW5nSW1wbD4sIHVuc2lnbmVkPiBtYXA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5n
OjpudW1iZXIoaW5kZXgpOworICAgICAgICBtYXAuc2V0KHN0cmluZy5pbXBsKCksIGluZGV4KTsK
KyAgICB9CisgICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDFlNCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlmIChpbmRleCAm
IDB4MSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7
CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVtb3ZlKHN0cmluZy5pbXBsKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
RVhQRUNUX0VRKG1hcC5zaXplKCksIDFlNCAvIDIpOworICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmlu
Zzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKQorICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKG1hcC5jb250YWlucyhzdHJpbmcuaW1wbCgpKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSBtYXAuZ2V0KHN0cmluZy5pbXBsKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAg
ICAgICAgaWYgKCEoaW5kZXggJiAweDEpKSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0
cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1hcC5yZW1v
dmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEobWFwLnNpemUoKSwgMHUpOworICAgIEVYUEVD
VF9FUShtYXAuY2FwYWNpdHkoKSwgOHUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RI
YXNoU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hT
ZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNhMWQ4M2NhOGM1MDZkYmE5OGYxZDQ5OWY1NzY2ODI4YjliMTI0
NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jp
bkhvb2RIYXNoU2V0LmNwcApAQCAtMCwwICsxLDU3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ291bnRlcnMuaCIKKyNpbmNsdWRlICJEZWxl
dGVkQWRkcmVzc09mT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJNb3ZlT25seS5oIgorI2luY2x1ZGUg
IlJlZkxvZ2dlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdG9wd2F0Y2guaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit0
ZW1wbGF0ZTxpbnQgaW5pdGlhbENhcGFjaXR5Pgorc3RydWN0IEluaXRpYWxDYXBhY2l0eVRlc3RI
YXNoVHJhaXRzIDogcHVibGljIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
PiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gaW5pdGlhbENhcGFj
aXR5OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBSb2Jpbkhvb2RIYXNoIDog
cHVibGljIERlZmF1bHRIYXNoPFQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFz
aEluVmFsdWUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4KK3ZvaWQgdGVz
dEluaXRpYWxDYXBhY2l0eSgpCit7CisgICAgY29uc3QgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5
ID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNpemU8c2l6ZT46OnZhbHVlOworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxpbnQsIFJvYmluSG9vZEhhc2g8aW50
PiwgSW5pdGlhbENhcGFjaXR5VGVzdEhhc2hUcmFpdHM8aW5pdGlhbENhcGFjaXR5PiA+IHRlc3RT
ZXQ7CisKKyAgICAvLyBJbml0aWFsIGNhcGFjaXR5IGlzIG51bGwuCisgICAgQVNTRVJUX0VRKDB1
LCB0ZXN0U2V0LmNhcGFjaXR5KCkpOworCisgICAgLy8gQWRkaW5nIGl0ZW1zIHVwIHRvIHNpemUg
c2hvdWxkIG5ldmVyIGNoYW5nZSB0aGUgY2FwYWNpdHkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgdGVzdFNldC5hZGQoaSk7CisgICAgICAgIEFTU0VS
VF9FUShpbml0aWFsQ2FwYWNpdHksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFj
aXR5KCkpKTsKKyAgICB9CisKKyAgICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gbGVzcyB0aGFuIDMv
NCBvZiB0aGUgY2FwYWNpdHkgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGNhcGFjaXR5LgorICAgIHVu
c2lnbmVkIGNhcGFjaXR5TGltaXQgPSBpbml0aWFsQ2FwYWNpdHkgKiAzIC8gNCAtIDE7CisgICAg
Zm9yIChzaXplX3QgaSA9IHNpemU7IGkgPCBjYXBhY2l0eUxpbWl0OyArK2kpIHsKKyAgICAgICAg
dGVzdFNldC5hZGQoaSk7CisgICAgICAgIEFTU0VSVF9FUShpbml0aWFsQ2FwYWNpdHksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpKTsKKyAgICB9CisKKyAgICAvLyBB
ZGRpbmcgb25lIG1vcmUgaXRlbSBpbmNyZWFzZSB0aGUgY2FwYWNpdHkuCisgICAgdGVzdFNldC5h
ZGQoaW5pdGlhbENhcGFjaXR5KTsKKyAgICBFWFBFQ1RfR1Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHRlc3RTZXQuY2FwYWNpdHkoKSksIGluaXRpYWxDYXBhY2l0eSk7Cit9CisKK3RlbXBsYXRlPHVu
c2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKTsK
K3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPigp
Cit7Cit9Cit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RD
YXBhY2l0eVVwVG9TaXplKCkKK3sKKyAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPHNp
emUgLSAxPigpOworICAgIHRlc3RJbml0aWFsQ2FwYWNpdHk8c2l6ZT4oKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgSW5pdGlhbENhcGFjaXR5KQoreworICAgIGdlbmVyYXRlVGVz
dENhcGFjaXR5VXBUb1NpemU8MTI4PigpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0
LCBNb3ZlT25seSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8TW92ZU9ubHk+IGhhc2hTZXQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsg
KytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgaGFzaFNl
dC5hZGQoV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuY29udGFpbnMoTW92
ZU9ubHkoaSArIDEpKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKwor
ICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hTZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1Rf
VFJVRShoYXNoU2V0LnRha2UoTW92ZU9ubHkoaSArIDEpKSA9PSBNb3ZlT25seShpICsgMSkpOwor
CisgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5KCkpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgaGFzaFNldC5hZGQoTW92ZU9ubHkoaSArIDEp
KTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxNb3ZlT25s
eT4gc2Vjb25kU2V0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAg
ICAgICAgc2Vjb25kU2V0LmFkZChoYXNoU2V0LnRha2VBbnkoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShoYXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsg
KytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZWNvbmRTZXQuY29udGFpbnMoTW92ZU9ubHkoaSAr
IDEpKSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5KQor
eworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsK
KworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1
ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gc2V0OworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7
CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKKworICAgIHNldC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIp
Cit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5p
cXVlX3B0cjxpbnQ+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0Owor
CisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxp
bnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RG
TW92ZSh1bmlxdWVQdHIpKTsKKworICAgIGF1dG8gaXQgPSBzZXQuZmluZChwdHIpOworICAgIEFT
U0VSVF9UUlVFKGl0ICE9IHNldC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmdldCgp
KTsKKyAgICBFWFBFQ1RfRVEoNSwgKml0LT5nZXQoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGlu
dD4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBzZXQ7CisKKyAgICBhdXRv
IHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNSk7Cisg
ICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1
ZVB0cikpOworCisgICAgRVhQRUNUX0VRKHRydWUsIHNldC5jb250YWlucyhwdHIpKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUg
c2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNo
PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsKKyAg
ICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIu
Z2V0KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7Cisg
ICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlv
bkNvdW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0LnJlbW92ZShwdHIpOworICAgIEVYUEVD
VF9FUSh0cnVlLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7CisKKyAgICBhdXRv
IHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsK
KyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7
CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQ
RUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gc2V0LnRha2UocHRyKTsKKyAgICBFWFBFQ1RfRVEocHRy
LCByZXN1bHQuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIHJlc3VsdCA9
IG51bGxwdHI7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoU2V0LCBDb3B5RW1wdHkpCit7CisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+
PiBmb287CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1
bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGJhcihmb28pOworCisgICAgICAgIEVY
UEVDVF9FUSgwdSwgYmFyLmNhcGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5z
aXplKCkpOworICAgIH0KKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGZvbyh7IDEs
IDUsIDY0LCA0MiB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDR1LCBmb28uc2l6ZSgpKTsKKyAgICAg
ICAgZm9vLnJlbW92ZSgxKTsKKyAgICAgICAgZm9vLnJlbW92ZSg1KTsKKyAgICAgICAgZm9vLnJl
bW92ZSg0Mik7CisgICAgICAgIGZvby5yZW1vdmUoNjQpOworICAgICAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWdu
ZWQ+PiBiYXIoZm9vKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5jYXBhY2l0eSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hTZXQsIENvcHlBbGxvY2F0ZUF0TGVhc3RNaW5pbXVtQ2FwYWNpdHkpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBS
b2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vKHsgNDIgfSk7CisgICAgRVhQRUNUX0VRKDF1LCBm
b28uc2l6ZSgpKTsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgIEVYUEVD
VF9FUSg4dSwgYmFyLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9FUSgxdSwgYmFyLnNpemUoKSk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIENvcHlDYXBhY2l0eUlzTm90T25Cb3Vu
ZGFyeSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHNpemUgPSA0OyBzaXplIDwgMTAwOyArK3NpemUp
IHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2ln
bmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gc291cmNlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZSArIDE7ICsraSkKKyAgICAgICAgICAgIHNvdXJjZS5hZGQoaSk7
CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2ln
bmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29weTEoc291cmNlKTsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RI
YXNoPHVuc2lnbmVkPj4gY29weTIoc291cmNlKTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4g
Y29weTMoc291cmNlKTsKKworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwgY29weTEuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkyLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UShzaXplLCBjb3B5My5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZSArIDE7ICsraSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29weTEuY29udGFpbnMo
aSkpIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb3B5Mi5jb250YWlucyhpKSkgPDwg
aTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkzLmNvbnRhaW5zKGkpKSA8PCBpOworICAg
ICAgICB9CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5MS5jb250YWlucyhzaXplICsgMikpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTIuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNvcHkzLmNvbnRhaW5zKHNpemUgKyAyKSk7CisKKyAgICAgICAgRVhQRUNU
X1RSVUUoY29weTIucmVtb3ZlKDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5
KCksIGNvcHkyLmNhcGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTIuY29udGFp
bnMoMSkpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkzLmFkZChzaXplICsgMikuaXNOZXdF
bnRyeSk7CisgICAgICAgIGlmICgoY29weTEuY2FwYWNpdHkoKSAqIDAuOTUpIDw9IGNvcHkxLnNp
emUoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpICogMiwgY29weTMu
Y2FwYWNpdHkoKSkgPDwgY29weTEuc2l6ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBF
WFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSwgY29weTMuY2FwYWNpdHkoKSkgPDwgY29weTEuc2l6
ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5jb250YWlucyhzaXplICsgMikpOworICAg
IH0KK30KKworc3RydWN0IERlcmVmT2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKKyAgICBORVZFUl9JTkxJTkUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAg
Kytjb3VudDsKKyAgICB9CisgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVyZWYoKQorICAgIHsKKyAg
ICAgICAgLS1jb3VudDsKKyAgICAgICAgb2JzZXJ2ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5n
ZXQoKTsKKyAgICB9CisgICAgdW5zaWduZWQgY291bnQgeyAxIH07CisgICAgY29uc3QgUmVmUHRy
PERlcmVmT2JzZXJ2ZXI+KiBidWNrZXRBZGRyZXNzIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IERl
cmVmT2JzZXJ2ZXIqIG9ic2VydmVkQnVja2V0IHsgbnVsbHB0ciB9OworfTsKKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaFNldCwgUmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCit7CisgICAgYXV0
byBvYnNlcnZlciA9IG1ha2VVbmlxdWU8RGVyZWZPYnNlcnZlcj4oKTsKKworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4sIFJv
YmluSG9vZEhhc2g8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+Pj4gc2V0OworICAgIHNldC5hZGQoYWRv
cHRSZWYob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuZmluZChv
YnNlcnZlci5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoaXRlcmF0b3IgIT0gc2V0LmVuZCgpKTsK
KworICAgIG9ic2VydmVyLT5idWNrZXRBZGRyZXNzID0gaXRlcmF0b3IuZ2V0KCk7CisKKyAgICBF
WFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQ
RUNUX1RSVUUoc2V0LnJlbW92ZShvYnNlcnZlci5nZXQoKSkpOworCisgICAgLy8gUm9iaW5Ib29k
SGFzaFNldCBkb2VzIG5vdCB1c2UgdG9tYnN0b25lLiBUaGUgdXNlZCBidWNrZXQgbWF5IGluY2x1
ZGUgYW4gZXhpc3RpbmcgZW50cnksIG9yIGVtcHR5LgorICAgIC8vIEluIHRoaXMgY2FzZSwgd2Ug
ZGlkIG5vdCBhZGQgdGhlIG90aGVyIERlcmVmT2JzZXJ2ZXIuIFNvIHRoaXMgbXVzdCBiZSBhbiBl
bXB0eSAobnVsbHB0cikuCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0
ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKK30KKwor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJOb3RaZXJvZWRCZWZvcmVEZXN0
cnVjdG9yKQoreworICAgIHN0cnVjdCBEZXN0cnVjdG9yT2JzZXJ2ZXIgeworICAgICAgICB+RGVz
dHJ1Y3Rvck9ic2VydmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgb2JzZXJ2ZSgpOworICAg
ICAgICB9CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBvYnNlcnZlOworICAgIH07CisK
KyAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RGVzdHJ1Y3Rvck9ic2VydmVyPiogYnVja2V0QWRk
cmVzcyA9IG51bGxwdHI7CisgICAgY29uc3QgRGVzdHJ1Y3Rvck9ic2VydmVyKiBvYnNlcnZlZEJ1
Y2tldCA9IG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4g
b2JzZXJ2ZXIobmV3IERlc3RydWN0b3JPYnNlcnZlciB7IFsmXSgpIHsKKyAgICAgICAgb2JzZXJ2
ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICB9fSk7CisKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPERlc3RydWN0
b3JPYnNlcnZlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNl
cnZlcj4+PiBzZXQ7CisgICAgYXV0byBhZGRSZXN1bHQgPSBzZXQuYWRkKFdURk1vdmUob2JzZXJ2
ZXIpKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBFWFBF
Q1RfVFJVRShvYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKworICAgIGJ1Y2tldEFkZHJlc3Mg
PSBhZGRSZXN1bHQuaXRlcmF0b3IuZ2V0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlZEJ1
Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKCphZGRSZXN1bHQu
aXRlcmF0b3IpKTsKKworICAgIC8vIFJvYmluSG9vZEhhc2hTZXQgZG9lcyBub3QgdXNlIHRvbWJz
dG9uZS4gVGhlIHVzZWQgYnVja2V0IG1heSBpbmNsdWRlIGFuIGV4aXN0aW5nIGVudHJ5LCBvciBl
bXB0eS4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRpZCBub3QgYWRkIHRoZSBvdGhlciBEZXN0
cnVjdG9yT2JzZXJ2ZXIuIFNvIHRoaXMgbXVzdCBiZSBhbiBlbXB0eSAobnVsbHB0cikuCisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hTZXQsIFJlZikKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxS
ZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOwor
ICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4s
IFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxv
Z2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKHJlZi5jb3B5UmVmKCkpOworICAgIH0KKwor
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZM
b2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJl
ZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworICAg
ICAgICBzZXQucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZN
b3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91dCA9IHNldC50YWtlKCZhKTsKKyAgICAgICAg
QVNTRVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBBU1NFUlRfRVEo
JmEsIGFPdXQuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUo
cmVmKSk7CisKKyAgICAgICAgYXV0byBhT3V0ID0gc2V0LnRha2VBbnkoKTsKKyAgICAgICAgQVNT
RVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBBU1NFUlRfRVEoJmEs
IGFPdXQuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNo
PFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBhdXRvIGVtcHR5VGFrZSA9IHNldC50YWtl
QW55KCk7CisgICAgICAgIEFTU0VSVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihlbXB0eVRha2Up
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBS
b2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworCisgICAgICAgIEFT
U0VSVF9UUlVFKHNldC5jb250YWlucygmYSkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+
LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ug
UmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1ZXNzLgor
ICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZMb2dnZXIo
ImEiKSk7CisgICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOworICAgICAgICAg
ICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworICAgICAgICAgICAgQVNTRVJUX1RSVUUoc2V0LmNv
bnRhaW5zKHBvaW50ZXIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfU1RSRVEoImRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7Cisg
ICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJl
ZikpOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVm
PFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQyKHNldCk7Cisg
ICAgfQorICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQs
IERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8RGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yPiBzZXQxOworICAgIHNl
dDEuYWRkKDEwKTsKKworICAgIHNldDEucmVtb3ZlKDEwKTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaFNldCwgUmVtb3ZlUmFuZG9tKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IHNldDEg
eyAxLCAyLCAzIH07CisgICAgc2V0MS5yZW1vdmUoc2V0MS5yYW5kb20oKSk7CisgICAgc2V0MS5y
ZW1vdmUoc2V0MS5yYW5kb20oKSk7CisgICAgc2V0MS5yZW1vdmUoc2V0MS5yYW5kb20oKSk7Cisg
ICAgQVNTRVJUX1RSVUUoc2V0MS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoU2V0LCBSZXNlcnZlSW5pdGlhbENhcGFjaXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHNldDsKKyAgICBFWFBFQ1RfRVEoMHUsIHNl
dC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LmNhcGFjaXR5KCkpOworCisgICAgc2V0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0LmFkZChtYWtlU3RyaW5nKCJm
b28iLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTYzODR1LCBzZXQuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5z
KCJmb28zIl9zdHIpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAg
ICAgICBzZXQuYWRkKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5
OXUgKyA5OTk5dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDMyNzY4dSwgc2V0LmNhcGFj
aXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVY
UEVDVF9UUlVFKHNldC5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwgaSkpKTsKKyAgICBFWFBFQ1Rf
RVEoOTk5OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIHNldC5jYXBhY2l0
eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBFWFBF
Q1RfVFJVRShzZXQucmVtb3ZlKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIHNldC5jYXBhY2l0eSgpKTsK
KworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHNl
dDI7CisgICAgc2V0Mi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9G
QUxTRShzZXQyLnJlbW92ZSgiZm9vMSJfcykpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy
MDAwOyArK2kpCisgICAgICAgIHNldDIuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpKTsKKyAgICBF
WFBFQ1RfRVEoMjAwMHUsIHNldDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1LCBzZXQy
LmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDAwOyArK2kpCisgICAg
ICAgIEVYUEVDVF9UUlVFKHNldDIucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAg
RVhQRUNUX0VRKDB1LCBzZXQyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDh1LCBzZXQyLmNhcGFj
aXR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBBZGRBbmRJZGVudGl0eSkK
K3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmUHRyPFN0
cmluZ0ltcGw+PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWUz
OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgp
OworICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQoc3RyaW5nLmltcGwoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNUX0VRKCpyZXN1
bHQuaXRlcmF0b3IsIHN0cmluZy5pbXBsKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaFNldCwgTGFyZ2VSZW1vdmFsKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxSZWZQdHI8U3RyaW5nSW1wbD4+IHNldDsKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJp
bmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIHNldC5hZGQoc3RyaW5nLmltcGwo
KSk7CisgICAgfQorICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCAxZTQpOworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoaW5k
ZXggJiAweDEpIHsKKyAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5k
ZXgpOworICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gc2V0LnJlbW92ZShzdHJpbmcuaW1wbCgp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQor
ICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCAxZTQgLyAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBT
dHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGlmIChpbmRleCAmIDB4MSkKKyAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoc3RyaW5nLmltcGwoKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoc3RyaW5nLmltcGwoKSkp
OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytp
bmRleCkgeworICAgICAgICBpZiAoIShpbmRleCAmIDB4MSkpIHsKKyAgICAgICAgICAgIGF1dG8g
c3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9vbCByZW1vdmVk
ID0gc2V0LnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJl
bW92ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCAwdSk7
CisgICAgRVhQRUNUX0VRKHNldC5jYXBhY2l0eSgpLCA4dSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424875</attachid>
            <date>2021-03-31 23:59:03 -0700</date>
            <delta_ts>2021-04-01 01:04:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210331235902.patch</filename>
            <type>text/plain</type>
            <size>296635</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi5jMGRiMWViY2VlYmVjN2Jk
OTBjMTQ3YWI2ZGVkYTViNDBhNmY5ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi4xNTA0Mjk0NDFlOTA3NTRmNjhhNWIyMTA5OTdh
MjE0ZjZkZTFmNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NSBAQAorMjAyMS0wMy0zMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRv
bid0IHVzZSBpdCBhcyBhIGRlZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQg
cGVyZm9ybWFuY2Ugdi5zLiBtZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAg
YW5kIHRoaXMgcGF0Y2gncyBnb2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZh
dWx0LiBSYXRoZXIsIHRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8g
bm9uLXBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gc2F2ZSBtZW1vcnkuIFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29t
cHV0ZXMgaGFzaCB2YWx1ZSBjb21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGls
bCwgdGhpcyBpcyB1c2VmdWwgc2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFu
eSBzbWFsbCBIYXNoVGFibGVzIGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUg
c3VwZXIgbGFyZ2UgSGFzaFRhYmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2Ft
ZSBhbW91bnQgb2YgbWVtb3J5IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBn
b2FsIGlzIGFwcGx5aW5nIHRoaXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwg
YnV0IGEgZmV3IiBzaW5nbGV0b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSBtYWludGFpbnMgZGlzdGFuY2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBh
ZGp1c3RpbmcgZXhpc3RpbmcgZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcs
IGlmIHdlIGZvdW5kIHRoYXQgdGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJ
QiB0aGFuIHRoZSBjdXJyZW50IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVu
dHJpZXMsIGFuZCBpbnNlcnQgdGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4g
VGhpcyBpcyBnaXZpbmcKKyAgICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8g
cG9vciBlbnRyeSAodGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBh
bmQgbWFraW5nIGF2ZXJhZ2UgRElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29k
IGludmFyaWFudAorICAgICAgICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3
ZSBmb3VuZCB0aGF0IGV4aXN0aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4g
c3RvcCBzZWFyY2hpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0
aGF0CisgICAgICAgIHdlIHNob3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdo
ZW4gaW5zZXJ0aW5nLiBUaGVzZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3Jt
YW5jZSBldmVuIHVuZGVyIHNpZ25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQt
ZmFjdG9yCisgICAgICAgIGp1c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGlu
ZyBwZXJmb3JtYW5jZSwgYnV0IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMg
Y29tcGFyZWQgdG8gbm9ybWFsIG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAg
V2UgaW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRz
IG9mIHRhYmxlcyBiYXNlZCBvbiBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBU
aGlzIGhhcyA5NSUgbG9hZC1mYWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1h
cHMgd2hpY2ggaXMgbW9zdGx5LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tp
bmcgdXAgcmVwZWF0ZWRseS4gSW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1h
bnkgdGhpcyBraW5kIG9mIHRhYmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3Vz
IGtpbmRzIG9mIHRoaW5ncy4gV2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3Ig
dGFibGUgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAg
d2UgYXJlIG1haW50YWlucyBmYXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMg
aGFzIDkwJSBsb2FkLWZhY3Rvci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcg
aXQgaWYgc2V0cyBhbmQgbWFwcyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNp
dmUuCisKKyAgICAgICAgMy4gRmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAg
ICAgICAgIFRoaXMgaGFzIDc1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBh
cmVkIHRvIEhhc2hTZXQgYW5kIEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQt
ZmFjdG9yIGZvciBsYXJnZSBzaXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVy
Zm9ybWFuY2UgcmVncmVzc2VkCisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0
b3IgbGFyZ2UgSGFzaFNldCBhbmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1h
bmNlIGludGVuc2l2ZSAoZS5nLiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBl
cmZvcm1hbmNlIGludGVuc2l2ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSByZXBsYWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdp
dGggUm9iaW5Ib29kSGFzaFRhYmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0
aWFuc3lsdmFuLmNvbS9wb3N0L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZh
dWx0LWhhc2gtdGFibGUtaW1wbGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAg
ICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29u
c3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAg
ICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3Zl
SWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6
CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpY
Pjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJn
Pjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6
Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46
OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1
cmUpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtl
QW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToK
KyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFp
dHM+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92
ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpI
YXNoVGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
cmFuZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlu
cyBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFu
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29tcHV0ZVRhYmxlSGFzaCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wMy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFNlcnZpY2UgV29ya2VyIHNjcmlwdHMgdXNlIHRvbyBtdWNoIG1lbW9yeSBpbiB0
aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFkN2RlZGVlNjZiNDk2MDBiZmJkZDcw
YTU0MmRjMGVjOTQwZGFmMC4uMTU0ZjEyYTdiZTczNTA4Y2Q3ZWY3YzViYWZjZWNhNzdhZjU3YWY2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTAzLTMxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9v
ZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAq
IGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAg
ICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZhY3RvcnlDcHBGaWxl
KToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAgICAqIGh0bWwvQXV0
b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omlz
Q2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVjdEZyb21FeHBvc3Vy
ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U1ZHVGFn
TmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc1dp
dGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAg
ICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0NvZGVjcyk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRBdWRp
b0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9rZVRhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpoYXNFZmZl
Y3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0
dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NW
R1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNh
bGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVzTWFwKToKKwogMjAy
MS0wMy0zMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
b21wdXRlZCBzdHlsZSBmb3IgYSBib3JkZXItcmFkaXVzIGNvcm5lciBzaG91bGQgbmV2ZXIgYmUg
MHB4IHdoZW4gdGhlIHByb3ZpZGVkIHdpZHRoIGlzbid0IDBweApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZGNkNTBh
MmM1MDQ4YzRjOTQ1NmY4OGMzMzFmOTQ3NDFjMDM5NzI0Li4yNGM0NTk0MWQ4Mzk2YWFmMTAzY2E3
ZDhmOWNkZjYzMjNiNzZjOTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTAzLTMx
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVk
VW5hdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVkQXR0cmlidXRl
ZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYWJsZVF1ZXJpZXMpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbToKKyAgICAgICAgKFdlYktpdDo6Z2V0QXBwQm91
bmREb21haW5zVGVzdGluZyk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKwogMjAyMS0wMy0zMCAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGYWxsIGJhY2sgdG8g
Y29udGV4dCBtZW51IHByZXNlbnRhdGlvbiBhZnRlciBsb25nIHByZXNzaW5nIGltYWdlIG92ZXJs
YXkgdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcAppbmRleCAyYTA4ODdlNzNlNTcxZjAwOGU4ODRkYjM0MzA0ODZkMzQyMDA3MjIwLi43Zjhh
ZTRmMTQwZWU3NDNkMGZlNWYzOTU0Mzg3YmUzY2ZkNmQ1ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IHN0cnVjdCBDaGFyQnVmZmVyU2VhY2hlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRlTmFtZUlt
cGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JD
aGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitzdGF0aWMgUHJpdmF0ZVN5bWJvbElt
cGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBCdWlsdGluTmFtZXM6OlByaXZhdGVOYW1l
U2V0JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJCdWZmZXJT
ZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBzZXQu
ZW5kKCkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnMKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBTeW1ib2xJbXBsKiBsb29r
VXBXZWxsS25vd25TeW1ib2xJbXBsKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj4m
IG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKK3N0YXRpYyBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKGNv
bnN0IEJ1aWx0aW5OYW1lczo6V2VsbEtub3duU3ltYm9sTWFwJiBtYXAsIGNvbnN0IFdURjo6SGFz
aFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0
byBpdGVyYXRvciA9IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+Pihi
dWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggMzE5NDViZjNlMTZjZDMwNGU4
ZDg4MjliMTk5NzFkYTdjY2NlMzlhMi4uMDBkOTZkM2M3NDQ1ZWFhNmI0ODNkNDA5YWQ0Zjg3ODVk
YjM3YzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0
aW5zLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk5LDYgKzIwMSw5
IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnVpbHRp
bk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6CisgICAgdXNp
bmcgUHJpdmF0ZU5hbWVTZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPjsKKyAgICB1c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47CisKICAgICBC
dWlsdGluTmFtZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgUHJpdmF0ZVN5bWJv
bEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKQEAgLTIz
Miw4ICsyMzcsNiBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9kb2xsYXJW
TVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX3BvbHlQcm90b1ByaXZh
dGVOYW1lOwotICAgIHVzaW5nIFByaXZhdGVOYW1lU2V0ID0gSGFzaFNldDxTdHJpbmc+OwotICAg
IHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47
CiAgICAgUHJpdmF0ZU5hbWVTZXQgbV9wcml2YXRlTmFtZVNldDsKICAgICBXZWxsS25vd25TeW1i
b2xNYXAgbV93ZWxsS25vd25TeW1ib2xzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCmluZGV4
IDVjZjRmYTU1YzNlZWVkZWY0ZjhlYTkzY2Q2MWQ0NjYxZWI2N2Y4MmEuLjc4NTdkYmEwMTE1OGE3
NmY3ZTAxNmEyMzc5MzUwNWQ2ZGE1YjMwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0yMTIsNyArMjEzLDcgQEAgY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeSB7CiAKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07Ci0gICAgSGFzaE1hcDxSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNNYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRl
Y29kZUludHJpbnNpY01hcDsKIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5T
SUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBTdHJvbmc8VW5rbm93bj4gbV8jI25hbWU7CiAg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05B
TUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggNDRkMWNmZGJk
NDk0OTE2ZWRiZmZkNGYzMTRmN2NkNWZiZmI2ZjE1My4uYWU2ZGJiMGY4ZjU5MjM1MGE0Y2YyZTQx
MGRmMGJkMmRhYmM3OGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaApAQCAtMjk0LDYgKzI5NCw3IEBAIEpTVmFsdWUgaWRlbnRpZmllclRvU2FmZVB1Ymxp
Y0pTVmFsdWUoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiBzdHJ1Y3QgSWRlbnRpZmllclJlcEhh
c2ggOiBQdHJIYXNoPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHsKICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJu
IGtleS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdTeW1ib2xB
d2FyZUhhc2goKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9
IHRydWU7CiB9OwogCiBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8aW50PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAppbmRleCA0NjU1MjQ4ZjI4MDQ5MTBlNGI0ZGNjMjBlNWJiZTkxNGU1ODlmMWVhLi5j
ODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE5OSw3ICsxOTksNyBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVs
bCgpKQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6S2YpXSA9IGNhc2VGaXJzdE9wdGlvbjsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsK
ICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMs
IHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvLCBSZWxldmFudEV4dGVuc2lvbktleTo6S2YsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpLbiB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0g
cmVzb2x2ZWQubG9jYWxlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJvb2wgSW50bENvbGxhdG9yOjp1
cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3QKIH0KIAogI2lmIEFTU0VS
VF9FTkFCTEVECi12b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgbG9jYWxlcykKK3ZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lD
VUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JiBsb2NhbGVzKQogewogICAgIGZvciAo
YXV0byYgbG9jYWxlIDogbG9jYWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmlu
Z1dpdGhEVUNFVCA9IFtdKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9y
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4
IDI0ZDYxNjE2NDlhZDlmZTdkNGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLjVlNTJhMWM5MjVjMmVk
NDAzYzEzNzUzYzVjMTcyYzlmY2QzZWYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L0lDVUhlbHBlcnMu
aD4KIApAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzdGF0
aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNl
dCYpOwogI2Vsc2UKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlh
bnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpIHsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBj
aGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JikgeyB9CiAjZW5kaWYKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMwZDQzODI5YjUzYjk3NTdiOWEx
ZmMzYjkuLmY4OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3MzNmODk4NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cApAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgbG9j
YWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Okhj
KV0gPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmpl
Y3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxv
Y2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4dGVuc2lv
bktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAg
IG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDFiYmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0MGY3MGE0YTkuLmMwOTA5Yjg5
MWU5NDMwYzBkYTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSgogICAg
IC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1
ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVj
dG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggMjJhMTE1ZDEzOWY2
YzViMjQ1ZWRlYmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRi
NTA5N2M2NDIwYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBJbnRsRGlzcGxheU5h
bWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmEKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZmMGEwOTMzNzY5MTFkYjEwYjg4
ZmFhOWY0NWYzNWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2UwZWU3YTZkOTgzZmJlY2MzN2I4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yU3VwcG9ydGVkTG9j
YWxlc09mLCAoSlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWRp
c3BsYXluYW1lcy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBvcnRlZExvY2FsZXNPZgogCiAg
ICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3BsYXlOYW1lcyUuW1thdmFpbGFi
bGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAppbmRl
eCA4MTdiOWNhZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEzMDkyLi44ODBlZDI2ZTczYWZl
MWNhOTQ0Nzc0NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBJ
bnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7Cisg
ICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVj
dCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9j
YWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1ZWUyM2RiZjFlMGIwMzljM2Nh
ZjA3ODBmMWI2NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBkZjBlNjc5OGJkYTcyMjIxNWEz
YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlz
dC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAv
LyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1hdCUuW1thdmFpbGFibGVMb2Nh
bGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4g
TGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4K
ICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAwMDdj
OWQzMDI3MTVhNTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5mMDM1MGM4NDM4ZDc3ZWJlN2E1
ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0K
IAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVy
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwg
bG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2MmViYmMyNjQ0Mzc5YWY1OTMy
MTEwZjAuLmYyMWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFkNTkxZjEzOGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
LCAoSlNHCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBmODllOGZlNzRlOGRiY2YwZTU4
MzUwYWJlYzFmN2E4NWQ4YmRlNC4uOWQ1MzZkNzRjMDE5ZDE4ZGE3NTgzN2Q1OWFiNzM4Nzk2ZWVk
NjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAK
QEAgLTM1Miw3ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBj
aGFyKiBsb2NhbGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAvLyBFbnN1cmUgd2UgaGF2ZSB4
eC1aWiB3aGVuZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0aWMgdm9pZCBhZGRTY3JpcHRs
ZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJp
bmdWaWV3IGxvY2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChM
b2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQogewogICAgIGlm
IChsb2NhbGUubGVuZ3RoKCkgPCAxMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3Nyw5
IEBAIHN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluCiAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQoU3Ry
aW5nSW1wbDo6Y3JlYXRlU3RhdGljU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMo
KQorY29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7
CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNv
bnN0cnVjdCgpOwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVpbnQ4X3QgZHVjZXRXZWlnaHRz
WzEyOF0gPSB7CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwgMzcsIDAsCiB9OwogCi1jb25z
dCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3Qg
TG9jYWxlU2V0JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsK
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29u
c3RydWN0KCk7CkBAIC00NzYsMjIgKzQ3NiwyMSBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVz
OwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2Nh
bGVzKCkKK2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlZEF2YWls
YWJsZUxvY2FsZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gY2Fj
aGVkQXZhaWxhYmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZd
IHsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAg
YXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxv
Y2FsZXMtPmlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzSW1tb3J0YWwgPSB0
cnVlOwogICAgICAgICBpbnQzMl90IGNvdW50ID0gdWJya19jb3VudEF2YWlsYWJsZSgpOwogICAg
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgbG9jYWxlID0gbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRCh1YnJrX2dldEF2YWlsYWJsZShp
KSwgaXNJbW1vcnRhbCk7CiAgICAgICAgICAgICBpZiAobG9jYWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZSk7Ci0gICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxl
TG9jYWxlcywgbG9jYWxlKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMtPmFkZChsb2Nh
bGUpOworICAgICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxv
Y2FsZXMuZ2V0KCksIGxvY2FsZSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgICByZXR1cm4gYXZh
aWxhYmxlTG9jYWxlczsKQEAgLTY5OCw3ICs2OTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9j
YQogICAgIHJldHVybiBzZWVuOwogfQogCi1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxl
KQorU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKICAgICByZXR1cm4gYmVzdEF2YWlsYWJs
ZUxvY2FsZShsb2NhbGUsIFsmXShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSkgewogICAgICAgICBy
ZXR1cm4gYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpOwpAQCAtNzYzLDcgKzc2
Miw3IEBAIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bG9jYWxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBNYXRj
aGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAv
LyBMb29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAg
LTgwNCw3ICs4MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8UwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hl
clJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLWJlc3RmaXRtYXRjaGVyCkBAIC04MjUsNyArODI0LDcgQEAgY29uc3RleHByIEFTQ0lJ
TGl0ZXJhbCByZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktleSBr
ZXkpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxv
Y2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVu
c2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURh
dGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKK1Jlc29sdmVkTG9jYWxl
IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxl
U2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0
aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5
PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29u
c3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAgIC8vIFJlc29sdmVMb2Nh
bGUgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50
RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlCkBAIC04OTAsNyArODg5LDcgQEAgUmVzb2x2ZWRM
b2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4KICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5
KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewog
ICAgIC8vIExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9v
a3Vwc3VwcG9ydGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBAIHN0YXRpYyBKU0FycmF5KiBs
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBC
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0Zml0c3Vw
cG9ydGVkbG9jYWxlcwpAQCAtOTI4LDcgKzkyNyw3IEBAIHN0YXRpYyBKU0FycmF5KiBiZXN0Rml0
U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
CiAgICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBwb3J0ZWRMb2Nh
bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMs
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQorSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1Zh
bHVlKQogewogICAgIC8vIFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIG9wdGlvbnMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
NDAyLyNzZWMtc3VwcG9ydGVkbG9jYWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oCmluZGV4IGZhMmU4MjgwNzhiN2U4NTFhNzcxZGMwYTA4MGZiNmE2ODVhMTJh
ZWQuLjYxNDBjMjBkNmZkM2U4ZThiNTI4OTc1ZDYzODQ4ZmYxODNmY2FiNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb25J
dGVyYXRvcjsKIApAQCAtODEsMTUgKzgyLDE2IEBAIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiB9OwogCiBTdHJpbmcgZGVmYXVsdExvY2FsZShKU0ds
b2JhbE9iamVjdCopOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxl
cygpOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5l
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK3VzaW5nIExvY2Fs
ZVNldCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Owor
Y29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0
JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxT
ZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
RGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lu
bGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5P
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSk7CiBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlv
bmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrKTsKQEAgLTEwNywxMCArMTA5LDEwIEBAIHN0cnVjdCBSZXNvbHZlZExvY2FsZSB7
CiAgICAgUmVsZXZhbnRFeHRlbnNpb25zIGV4dGVuc2lvbnM7CiB9OwogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
TG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVj
dG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkpOwotSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKK1Jlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVy
LCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxl
dmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAo
KmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CitKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBsb2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExv
Y2FsZSk7CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4gU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgU3RyaW5n
JiByZXF1ZXN0ZWRMb2NhbGUsIFByZWRpY2F0ZSk7CiBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdT
eXN0ZW1zRm9yTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKaW5kZXggZTY1ZmIwZDcz
MjcxNTI5YjVjYWE5ZDlmYWJlYzliZWJjYjRjNTZhMi4uY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3
YWRhZGI4ZThkY2JhZjUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1
bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1CiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2Nh
bGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2Fs
ZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVz
dCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0
IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6
QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxl
c0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSBy
ZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKICAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjg4NTBiMTBhOGJmZTY1NzA0M2QyYTFl
YWQwNzExMDQxYjkyMDU5MS4uMjdiMjMxMGIzNDhhMWU0YTQ1ZGYwZWY5MTE1M2E5ZTQ1ZThmZjU3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YsIChKU0dsCiAKICAgICAvLyAxMy4zLjIgSW50bC5QbHVyYWxSdWxlcy5zdXBwb3J0
ZWRMb2NhbGVzT2YgKGxvY2FsZXMgWywgb3B0aW9ucyBdKQogICAgIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTQwMi8jc2VjLWludGwucGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29m
Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCBmN2QzOGI4MWVhYzgy
ODYzZjVhZDhiY2M4MzI0NjUyNjkyODE3NzZlLi4yYjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMx
MDk4MDViNzA3M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAg
IH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxNzRiNmZkY2UyYzg2YmZjMTFi
NWViMWVmNTM3MjA5OGVhODk4NDk0Li45YThjOGQ0Y2E2YzZjNGVkMzVmZjcwZTk3ZTdkM2VjYzRm
NTlhZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJl
bGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIGF1dG8gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHAKaW5kZXggMDRjZjE3ZDUwOTM1NjIxYzQyNDhlODQ4Yjc3NTBlZGEzN2VhODFlOC4uMmFk
NzRmOTRiYmU4Y2ExN2M3NzU4OTJhZmJjNmZlZjcxMmE2MmI1OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCBJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG8KICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFs
T2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVy
LCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNv
bHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmZmQ3M2Y3MzZhOTc0MzM3OGRm
ZGIxYTMxZDRiZjk5Zjk4ZGVhZTUyLi4wOTM5NGRjMThlZGRmMmE5MzE5NTFlN2M2ZmFhOTcyMjhm
YmY2MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPYgogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXNl
Z21lbnRlci8jc2VjLWludGwuc2VnbWVudGVyLnN1cHBvcnRlZGxvY2FsZXNvZgogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJVNlZ21lbnRlciUuW1thdmFpbGFibGVMb2NhbGVz
XV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCmluZGV4IDgyNzM3ZDhmOWM2OGRlMThlODdmNWU1
N2NlYTBhNjAyMTBlODg4ODYuLjNhNzExZmI5MDliNjkwZTBmMTlmZWE1MTc0YzY4MDU4Y2JlNGM0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNp
bmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIFJlZ0V4cENhY2hlIGZpbmFsIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFw
OworICAgIHR5cGVkZWYgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8UmVnRXhwS2V5LCBX
ZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFwOwogCiBwdWJsaWM6CiAgICAgUmVnRXhwQ2FjaGUo
Vk0qIHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKaW5kZXgg
ZTBmODgzMTAyMGQ2ZDkzNWM3MDE5MDFmYjQ5YjI4Y2I2ZGM5MzhmYy4uZDE2NjI3OWY2ZGIyZWNl
ZWIyZTNlNzBiMDdkOTYzYmVlNGFiZTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwS2V5LmgKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFJlZ0V4cEtleSB7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ0V4cEtleSYga2V5KSB7IHJldHVybiBr
ZXkucGF0dGVybi0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJl
Z0V4cEtleSYgYSwgY29uc3QgUmVnRXhwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRy
dWU7CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDI2YjQ1ZTU1M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1
NjEzN2IzYzMxZDMwZGJhYjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2
OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEz
QTIyOEJEQ0FCMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9v
ZEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
UmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1
QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9v
ZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAy
RDAwMzRBMDkyIC8qIE5ha2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRF
ODcwMDM1OURBOSAvKiBEYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2
NzAwQkY2MjVFIC8qIFJlY3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVjdXJzYWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzM4LDYgKzc0MCw3IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVl
TWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4
IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5
RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3Rl
bUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAw
MUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMw
MzE1MUE4MjVCMDA0MTIzRkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAw
OURENDQ1IC8qIFJlc291cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIz
RkYgLyogUmV0YWluUHRyLmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJv
YmluSG9vZEhhc2hNYXAuaCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9i
aW5Ib29kSGFzaFNldC5oICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jp
bkhvb2RIYXNoVGFibGUuaCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVu
TG9vcC5jcHAgKi8sCiAJCQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAq
LywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5o
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2Vi
NjViNmQyZmM5MTc4Li5lMWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hF
QURFUlMKICAgICBSZWZQdHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5o
CisgICAgUm9iaW5Ib29kSGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlLmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0
ZWRBcml0aG1ldGljLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEy
ZDY1YWM2Mzc4OWM0Li4zZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCkBAIC05Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVu
dW1UcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsK
IHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJs
ZVRyYWl0czsKK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3Ry
dWN0IEtleVZhbHVlUGFpcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1h
cHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVu
YW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFz
aFNldDsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2
NDFhMTE4NWJjZi4uODkwMWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaApAQCAtMzEsNyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5
VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAKICAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5
VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+
LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBj
bGFzcyBIYXNoTWFwS2V5c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAg
LTIzMiw5MSArMjMyLDg5IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAg
IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2
b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAg
ICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1
bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBs
LmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVn
aW4oKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0
ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVu
ZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBp
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewog
ICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJh
dG9yIAotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29u
c3QKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBh
dXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUg
bG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IE1hcHBlZFBlZWtUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5l
TG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBA
QCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMo
Y29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
VHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsm
JiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1
Myw5MSArMzUxLDkxIEBAIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtl
eSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywg
VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FM
V0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUo
SyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgYWRkPEhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVu
Y3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtl
eVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGlu
ZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5
cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBw
ZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFk
ZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2Fy
ZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92
ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lQWRkKFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBL
ZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lRW5zdXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5
cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lRW5zdXJlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3Vw
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4
ICs0NDMsOCBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUo
aXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3Zl
SWYoRnVuY3RvciYmIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJl
bW92ZUlmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlw
ZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJu
IHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwu
Y2xlYXIoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRU
YWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAt
PiBNYXBwZWRUYWtlVHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlm
IChpdCA9PSBlbmQoKSkKQEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25z
dF9pdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9y
Pjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
a2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5l
R2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5
cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlW
YWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBA
IC01MTYsMjMgKzUxNCwyMyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
bmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkUGVla1R5cGU+Ojp0eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtl
VHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewog
ICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0
MiwxNCArNTQwLDE0IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
dm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtl
eVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAg
ICBpZiAoS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NjUsMTMgKzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNp
emUoKSAhPSBiLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0g
YS5lbmQoKTsKICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQs
OCArNTgyLDggQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7
CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGExNWRjMDM3NWExNzE5
YzdhYjMyNDYyYzdhZGY3OWVkNjBiNGVmLi5hNDAyY2UyNzM3NWFjZWIwY2ViMDRmOWViNWExZTQx
YWQyYzY5ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCi1zdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTQxLDcgKzM5LDcgQEAgY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRy
YWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxl
PFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVl
VHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1
ZVRyYWl0cz47CiAKIHB1YmxpYzoKICAgICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBm
b2xsb3dpbmcgc3RydWN0dXJlOgpAQCAtMTg2LDEwOSArMTg0LDEwOSBAQCBzdHJ1Y3QgSGFzaFNl
dEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
RW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0
dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZh
bHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250
YWlucyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3Qg
VCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkg
Y29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Citpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0
b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojph
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2lt
cGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBl
JiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1
ZVR5cGUmJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3Vs
dAoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCkBAIC0yOTYsOSArMjk0LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICBy
ZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CkBAIC0zMDYsOCArMzA0LDggQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdl
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYg
KGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
NiwyNyArMzE0LDI3IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVy
YXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92
ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkK
IHsKICAgICBtX2ltcGwuY2xlYXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0
ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7CkBAIC0zNDYsNDggKzM0NCw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVy
biB0YWtlKGJlZ2luKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRh
a2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUK
IHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDAzLDkgKzQwMSw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXpl
KCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDE2LDIyICs0MTQsMjIgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9
PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25z
dCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlckNvbGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4g
bGlzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+Cit2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAg
IGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBs
LmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4Zjcy
YjJlMDM2YzE2MDAxMGMwYTYyOTU4N2M1ZWRmMGE4Li5kMzk5NzlhNDFlYWM4ZGVhYTM3ZTQ1Nzk4
YzI0ZTJiYzA3OGU0ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBjbGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhj
b25zdCBIYXNoVGFibGVUeXBlKik7CiAKICNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBp
bmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAg
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKikgeyB9CiAKICNl
bmRpZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtu
b3duR29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgog
ICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZh
bHVlKiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcg
SGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJl
ZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlw
ZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xh
c3MgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAg
ICAgICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkK
ICAgICAgICAgewpAQCAtMjQzLDE4ICsyNDUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
ciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVl
LCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVl
VHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBI
YXNoVGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRh
YmxlLCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5
cGUqIHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93
bkdvb2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAt
MzQ3LDggKzM0OSw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwog
ICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTQwNyw3ICs0MTAsNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBI
YXNoVGFibGUoKTsKICAgICAgICAgfkhhc2hUYWJsZSgpIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7IAorICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsgCiAgICAgICAgICAgICBpZiAobV90YWJsZSkKICAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlVGFibGUobV90YWJsZSk7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgpAQCAtNTU5LDEyICs1NjIsNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CiAjZW5kaWYKIAotI2lmIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAg
ICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgogICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNp
emVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwpAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAKQEAgLTkzMiw3ICs5MjksNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAg
Y2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlm
ICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsKQEAgLTEwMTcsNyArMTAx
NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0x
MTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAg
ICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJs
ZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleCht
YWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAg
ICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwog
CkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsK
LSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4
dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFi
bGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVy
YXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAg
IHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5z
ZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4K
ICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAg
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAg
IEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHkt
bGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBA
IC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1f
bmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9
CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEyNzM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9y
LgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA3NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3Vz
aW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RS
b2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
YTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
OTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZh
Y3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVl
QXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hT
ZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZiNWI5MjU5ODVhMzdl
NDRlMDc3M2E0ZWUxZWFjNTVlYTU5ZDVkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsODc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUlIGxvYWQgZmFjdG9yLiBU
aGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBz
IGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5j
ZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9
IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8v
IDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBh
IGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3
b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0
YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gNzUlIGxv
YWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFi
bGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChIYXNoVGFibGUgdXNlcyA3
NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IEZhc3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUgLSA5NSUpIQorLy8KKy8v
IFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxl
dGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIE5haXZlIFJvYmluSG9vZEhhc2hUYWJs
ZSBoYXMgc29tZSBjYXNlcyB3aGljaCBjYXVzZSBPKE5eMikgd2hlbiBpdGVyYXRpbmcgaXQgYW5k
IGluc2VydGluZyBpdCB0byBzb21lIG5ldyBSb2Jpbkhvb2RIYXNoVGFibGUKKy8vIHdpdGhvdXQg
cmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB0aGlzIGlzIGJlY2F1c2Ugb2YgaGlnaCBsb2FkLWZhY3Rv
ciBhbmQgZXhwb3NlZCBoYXNoLW9yZGVyaW5nIGF0IGl0ZXJhdGlvblszXS4gVG8gbWl0aWdhdGUg
aXQsCisvLyB3ZSBjYWxjdWxhdGUgaGFzaCBmb3IgZWFjaCB0YWJsZSwgYW5kIGRvIFhPUiB3aXRo
IHRoZSBoYXNoIHZhbHVlIHRvIG1ha2UgaGFzaC1vcmRlcmluZyBkaWZmZXJlbnQgZm9yIGVhY2gg
dGFibGUuCisvLworLy8gWzFdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3Jv
YmluLWhvb2QtaGFzaGluZy8KKy8vIFsyXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisvLyBbM106
IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0NTU5
ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5Owor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRv
clR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25z
PjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlVGhyZXNob2xkID0g
MTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1Zh
bHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0aW9uczo6aGFzSGFzaElu
VmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJv
YmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUm
Jik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4g
dGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBt
b3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5
IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJs
ZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJs
ZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxl
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9y
IHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNr
ZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAg
ICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKwor
ICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5k
b20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
OyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAg
ICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsK
KworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVt
VGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5p
bXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVT
aXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAgbV90
YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgICAgICBtX3dpbGxFeHBh
bmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAg
ICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2
YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBh
ZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RG
TW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0
IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBz
b21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0
aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRS
ZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
S2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyBy
ZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2
b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZv
aWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7Cisg
ICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0
cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlC
dWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkg
eyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29r
dXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vs
c2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5k
aWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsgfQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxzZQor
ICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFu
ZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExv
YWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFs
bG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRh
YmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdXNpbmcgTG9va3Vw
VHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsK
KworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1bnNp
Z25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNp
emVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpOworCisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlk
YXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJl
bW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBl
Kik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVRhYmxlSGFzaChWYWx1ZVR5cGUqIHRh
YmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxWYWx1ZVR5cGUqPjo6aGFzaCh0YWJsZSk7IH0KKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWdu
ZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+a2V5Q291bnQoKTsKKyAgICAgICAgdW5zaWdu
ZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgIGlmIChzaG91bGRFeHBh
bmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCwgYW5k
IDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRhYmxlLgorICAgICAgICByZXR1cm4gbV93aWxs
RXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJsZVNpemU7CisgICAgfQorICAgIGJvb2wgc2hv
dWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNp
emUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQorICAg
IHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAv
IDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICB2b2lkIHJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYpOwor
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNo
LCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1h
c2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNl
KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBz
aXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpdGVyYXRvciBt
YWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlz
LCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25H
b29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3Qg
eyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCks
IEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxzZQorICAgICAg
ICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisjZW5k
aWYKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNp
emVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhMb2FkRGVub21pbmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9h
ZDsKKworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
OyB9CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVT
aXplIC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlD
b3VudDsgfQorICAgIHVuc2lnbmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVI
YXNoOyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX3RhYmxlSGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZh
bHNlIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8g
QWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXgu
CisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07Cisg
ICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1v
dmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9t
dXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5
KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlw
ZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7
CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRh
YmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJs
ZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBe
IHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXpl
TWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhh
dCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBw
cm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50
cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhh
c2g7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtl
eSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAg
IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRl
bXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5
IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5n
IGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0
YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJp
bmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90
YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhp
cy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAg
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIGlmIChlbnRyeUhhc2gg
PT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtleSkpCisgICAgICAg
ICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNl
KTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVu
dHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNl
VGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAg
ICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1k
aXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9
IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUo
KmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkp
OworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3Rp
bmdFbnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1f
a2V5Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisK
KyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorQUxXQVlTX0lOTElORSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRk
KFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVu
c2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpCit7Cisg
ICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgc2l6ZU1hc2s7CisgICAgKytkaXN0YW5jZTsKKworICAgIHdoaWxlICgxKSB7CisgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0Vt
cHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0Vt
cHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAg
IHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgs
IHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkg
eworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisg
ICAgICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHN3YXAodmFs
dWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBj
aGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CisKKyAgICAvLyBXZSBzaG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNl
cnRpbmcgYW4gZW50cnkuIElmIHdlIGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBl
bnRyeSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUg
c2luY2UgdGhlIGluc2VydGVkIGVudHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJl
aGFzaW5nLgorICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUp
OworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9IHRoaXMtPnRh
YmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
IF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNp
emVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUg
KyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRv
clR5cGU6Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9
IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFu
Y2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBh
bmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkg
dG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50LgorICAgICAgICAgICAgVmFsdWVU
eXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAgICBIYXNoVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9y
d2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIG1haW50YWluUHJvYmVEaXN0
YW5jZUZvckFkZChXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZW50cnlEaXN0YW5jZSwg
c2l6ZSwgc2l6ZU1hc2ssIHRhYmxlSGFzaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytk
aXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVpbnNlcnQo
VmFsdWVUeXBlJiYgdmFsdWUpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFE
TC4KKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFi
bGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhh
c2goRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQg
aW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3Rh
bmNlID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBt
X3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
ZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2Ug
PSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgc3dhcCh2YWx1
ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAg
KytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7
CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxv
b2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1
cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9v
ZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFs
dWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1v
dmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9z
KQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUo
VmFsdWVUeXBlKiBwb3MpCit7CisgICAgLy8gVGhpcyBpcyByZW1vdmFsIHZpYSAiYmFja3dhcmQt
c2hpZnQtZGVsZXRpb24iLiBUaGlzIGJhc2ljYWxseSBzaGlmdCBleGlzdGluZyBlbnRyaWVzIHRv
IHJlbW92ZWQgZW1wdHkgZW50cnkgcGxhY2Ugc28gdGhhdCB3ZSBtYWtlCisgICAgLy8gdGhlIHRh
YmxlIGFzIGlmIG5vIHJlbW92YWwgaGFwcGVuZWQgc28gZmFyLiBUaGlzIGRlY3JlYXNlcyBkaXN0
YW5jZS10by1pbml0aWFsLWJ1Y2tldCAoRElCKSBvZiB0aGUgc3Vic2VxdWVudCBlbnRyaWVzIGJ5
IDEuIFRoaXMgbWFpbnRhaW5zCisgICAgLy8gRElCIG9mIHRoZSB0YWJsZSBsb3cgYW5kIHJlbGF0
aXZlbHkgY29uc3RhbnQgZXZlbiBpZiB3ZSBoYXZlIG1hbnkgcmVtb3ZhbHMsIGNvbXBhcmVkIHRv
IHVzaW5nIHRvbWJzdG9uZXMuCisgICAgLy8gaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisgICAgcG9z
LT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNv
dW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0g
dGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1f
dGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1h
c2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1f
dGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsg
aW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBBU1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOwor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFz
aCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRy
eSkpOworICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVj
a2V0KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNo
cmluaygpKQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAg
ICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFs
aWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhp
dGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0
X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0
b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3Zl
KGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAv
LyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVj
aWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8
Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVU
eXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNp
emUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJs
ZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhw
YW5kKCkKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0
YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFp
dHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6
ZSAqIDI7CisKKyAgICByZWhhc2gobmV3U2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Citjb25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKwor
ICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBi
ZXN0VGFibGVTaXplICo9IDI7CisKKyAgICBhdXRvIGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBh
bnNpb24gPSBbXShkb3VibGUgbG9hZEZhY3RvciwgdW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVk
IHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhp
bmQgdGhpcyBjYWxjdWxhdGlvbiwgdXNpbmcgMy80IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBX
aXRoIG1heExvYWQgYXQgMy80IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBp
cyAxMS8yNC4KKyAgICAgICAgLy8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAx
MS8yNCBhbmQgMy80LCB3ZSBkb3VibGUgdGhlIHNpemUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVp
bmcgdG9vIGNsb3NlIHRvIGxvYWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8y
NC4gVGhpcworICAgICAgICAvLyBnaXZlIHVzIGEgbG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAx
NS8yNCkuCisgICAgICAgIGRvdWJsZSBtYXhMb2FkUmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAg
ICBkb3VibGUgbWluTG9hZFJhdGlvID0gMS4wIC8gbWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2
ZXJhZ2VMb2FkUmF0aW8gPSAobWF4TG9hZFJhdGlvICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAg
ICAgIGRvdWJsZSBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFn
ZUxvYWRSYXRpbyArIG1heExvYWRSYXRpbykgLyAyOworICAgICAgICByZXR1cm4ga2V5Q291bnQg
Pj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAg
IH07CisKKyAgICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgIGlmIChhYm92
ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFi
bGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmlt
dW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnNo
cmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJs
ZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KCkpKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5z
aWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRh
YmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAg
bV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxl
SGFzaChtX3RhYmxlKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRF
bnRyeSA9IG9sZFRhYmxlW2ldOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob2xkRW50cnkp
KQorICAgICAgICAgICAgcmVpbnNlcnQoV1RGTW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRF
bnRyeS5+VmFsdWVUeXBlKCk7CisgICAgfQorCisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2xl
YXIoKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV90
YWJsZUhhc2ggPSAwOworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworICAgIGRlYWxsb2NhdGVU
YWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIpLCBvbGRUYWJsZVNpemUpOworICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIGlmICghb3RoZXIu
bV90YWJsZVNpemUgfHwgIW90aGVyLm1fa2V5Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBtX3RhYmxl
U2l6ZSA9IG90aGVyLm1fdGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvdGhlci5tX2tleUNv
dW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxlSGFzaChtX3RhYmxlKTsKKyAgICBt
X3dpbGxFeHBhbmQgPSBvdGhlci5tX3dpbGxFeHBhbmQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICBW
YWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAgaWYg
KCFpc0VtcHR5QnVja2V0KG90aGVyRW50cnkpKQorICAgICAgICAgICAgcmVpbnNlcnQoVmFsdWVU
eXBlKG90aGVyRW50cnkpKTsKKyAgICB9CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7Cisg
ICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKHRoaXMpOworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAo
bV90YWJsZSwgb3RoZXIubV90YWJsZSk7CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90
YWJsZVNpemUpOworICAgIHN3YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7CisgICAg
c3dhcChtX3RhYmxlSGFzaCwgb3RoZXIubV90YWJsZUhhc2gpOworICAgIHN3YXAobV93aWxsRXhw
YW5kLCBvdGhlci5tX3dpbGxFeHBhbmQpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBS
b2Jpbkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7
CisgICAgc3dhcCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmlu
SG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKCZvdGhlcik7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX3RhYmxlLCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV90YWJsZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fa2V5Q291bnQsIDApOworICAgIG1fdGFibGVIYXNoID0gc3RkOjpleGNoYW5nZShvdGhlci5t
X3RhYmxlSGFzaCwgMCk7CisgICAgbV93aWxsRXhwYW5kID0gc3RkOjpleGNoYW5nZShvdGhlci5t
X3dpbGxFeHBhbmQsIGZhbHNlKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7CisgICAgb3RoZXIuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jp
bkhvb2RIYXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAoV1RGTW92ZShv
dGhlcikpOworICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCisKKyNpZiBB
U1NFUlRfRU5BQkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0Cit7
CisgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAoreworICAgIGlmICghbV90YWJs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2ln
bmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWJsZVNpemU7ICsraSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90
YWJsZSArIGk7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBhdXRvJiBrZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVu
dHJ5KTsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CisgICAgICAgIEFT
U0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKKyAgICAgICAgKytjb3VudDsKKworICAgICAg
ICBWYWx1ZUNoZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koa2V5KTsKKyAgICB9CisKKyAgICBB
U1NFUlQoY291bnQgPT0ga2V5Q291bnQoKSk7CisgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgp
ID49IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZSk7CisgICAgQVNTRVJUKHRhYmxlU2l6ZU1h
c2soKSk7CisgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID09IHRhYmxlU2l6ZU1hc2soKSAr
IDEpOworfQorCisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKworc3RydWN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVz
aW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IE1lbW9yeUNvbXBh
Y3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVU
eXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVT
aXplUG9saWN5PjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBGYXN0
Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaAppbmRleCA5MmQyMDhkMzVlMmFhZDViODgy
NzNlMzQxODZjMjdiNWQwN2NlMWZkLi5iYWQyY2FiMGQ1YWY2OTg2M2JkMDhhMjg5MGI1NDNkYTg4
MzdlNTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCkBAIC00NSw2ICs0NSw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAg
IHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V1RGOjpBdG9tU3RyaW5nPiA6IFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nSW1wbC5jcHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVm
YS4uYTE4YjNjYmQ4ODAwMmQzOWRmY2IyZWMxNzQzYTk3NWQ0ZWY0Y2RiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgQXRvbVN0
cmluZ1RhYmxlTG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBT
dHJpbmdUYWJsZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47Cit1c2luZyBT
dHJpbmdUYWJsZUltcGwgPSBBdG9tU3RyaW5nVGFibGU6OlN0cmluZ1RhYmxlSW1wbDsKIAogc3Rh
dGljIEFMV0FZU19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXggZTBjMGFmYmFlYTQzNjg2MWI4
YjhlNDFlZTA3NmFlMmM3NDIyNGJjZi4uODZlZDI1ZjI4ZWMwODY2OGVmNWU0YTU2YTI0OTc1ZDIw
MWZhOGU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcApAQCAtMjks
NyArMjksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmlu
Z1RhYmxlKCkKIHsKLSAgICBmb3IgKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgc3RyaW5n
IDogbV90YWJsZSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1fdGFibGUpCiAgICAg
ICAgIHN0cmluZy0+c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0
cmluZ1RhYmxlLmgKaW5kZXggMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3
ZS4uZmZhZjgzNjQyMmM1MjllMzllNmQxNzBkYmNiODRmOTliNjc5NGZiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTMzLDEyICszNCwxNSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3Mg
QXRvbVN0cmluZ1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
KyAgICB1c2luZyBTdHJpbmdFbnRyeSA9IFBhY2tlZFB0cjxTdHJpbmdJbXBsPjsKKyAgICB1c2lu
ZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNoU2V0PFN0cmluZ0VudHJ5PjsKKwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxT
dHJpbmdJbXBsPj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxl
SW1wbCYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNl
dDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1f
dGFibGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hh
c2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDVhODM4NWUwNGE5
NTkwNGUwNmJhMTI4ZDZlYWExM2Q5MWViOTBmYjkuLmYwMzJmMWJkZjIxYjU4ZGJmNmNlNjI1NDU0
NDZjNDg3NjVmYWM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC05MCw2ICs5MCw3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAg
IHN0cnVjdCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCA3NDkwNzMzODgwN2VhOTc1ZTA3MjI4ZDA0YTI1NjQzNmU3NzE1Y2M2Li4wOTQz
ZDdiODVhM2IzM2M5YzE2Njk5MDhlZjgzMzIzZmNlMjJkMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJp
bGl0aWVzLmNwcApAQCAtMzksMzEgKzM5LDMxIEBACiAjaW5jbHVkZSAiTWVkaWFFbmNvZGluZ0Nv
bmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGJ1
Y2tldE1JTUVUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVUeXBlcygpCiB7CiAgICAgLy8gQSAiYnVj
a2V0IiBNSU1FIHR5cGVzIGlzIG9uZSB3aG9zZSBjb250YWluZXIgdHlwZSBkb2VzIG5vdCB1bmlx
dWVseSBzcGVjaWZ5IGEgY29kZWMuCiAgICAgLy8gU2VlOiBodHRwczovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNjM4MQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+
IGJ1Y2tldE1JTUVUeXBlcyA9IEhhc2hTZXQ8U3RyaW5nPih7Ci0gICAgICAgICJhdWRpby8zZ3Bw
IiwKLSAgICAgICAgInZpZGVvLzNncHAiLAotICAgICAgICAiYXVkaW8vM2dwcDIiLAotICAgICAg
ICAidmlkZW8vM2dwcDIiLAotICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgInZpZGVvL21w
NCIsCi0gICAgICAgICJhcHBsaWNhdGlvbi9tcDQiLAotICAgICAgICAidmlkZW8vcXVpY2t0aW1l
IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wMjEiLAotICAgICAgICAiYXVkaW8vdm5kLmFwcGxl
Lm1wZWd1cmwiLAotICAgICAgICAidmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiLAotICAgICAgICAi
YXVkaW8vb2dnIiwKLSAgICAgICAgInZpZGVvL29nZyIsCi0gICAgICAgICJ2aWRlby93ZWJtIiwK
LSAgICAgICAgImF1ZGlvL3dlYm0iLAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVz
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAgICAgICAgImF1ZGlvLzNncHAiX3Ms
CisgICAgICAgICJ2aWRlby8zZ3BwIl9zLAorICAgICAgICAiYXVkaW8vM2dwcDIiX3MsCisgICAg
ICAgICJ2aWRlby8zZ3BwMiJfcywKKyAgICAgICAgImF1ZGlvL21wNCJfcywKKyAgICAgICAgInZp
ZGVvL21wNCJfcywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wNCJfcywKKyAgICAgICAgInZpZGVv
L3F1aWNrdGltZSJfcywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wMjEiX3MsCisgICAgICAgICJh
dWRpby92bmQuYXBwbGUubXBlZ3VybCJfcywKKyAgICAgICAgInZpZGVvL3ZuZC5hcHBsZS5tcGVn
dXJsIl9zLAorICAgICAgICAiYXVkaW8vb2dnIl9zLAorICAgICAgICAidmlkZW8vb2dnIl9zLAor
ICAgICAgICAidmlkZW8vd2VibSJfcywKKyAgICAgICAgImF1ZGlvL3dlYm0iX3MsCiAgICAgfSk7
CiAgICAgcmV0dXJuIGJ1Y2tldE1JTUVUeXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDkwNDM1NGQ2Mjhh
YjU0Zjc3YmFjOGUxZjA2NjVlZmNlN2FkNTU4NDguLjg0MzEwMWVkZWY0NTJhZDA5NGYwMzViZjg0
MjQyNWJiZjY2NjkwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIlVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KQEAgLTI2MDcs
OCArMjYwOCw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNIYXNQb3B1cCgp
IGNvbnN0CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3B1cFZhbHVlKCkgY29uc3QK
IHsKLSAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhbGxv
d2VkUG9wdXBWYWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4gewotICAgICAgICAi
bWVudSIsICJsaXN0Ym94IiwgInRyZWUiLCAiZ3JpZCIsICJkaWFsb2ciCisgICAgc3RhdGljIGNv
bnN0IE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxTdHJpbmc+PiBhbGxvd2VkUG9wdXBWYWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmlu
Zz4geworICAgICAgICAibWVudSJfcywgImxpc3Rib3giX3MsICJ0cmVlIl9zLCAiZ3JpZCJfcywg
ImRpYWxvZyJfcywKICAgICB9KTsKIAogICAgIGF1dG8gaGFzUG9wdXAgPSBnZXRBdHRyaWJ1dGUo
YXJpYV9oYXNwb3B1cEF0dHIpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggNmU3NjcyNzRhNTllMGZiYjAxNjc3ZTA5ZDlhNzkyZTM5OWM5ZDIwNy4u
NDZiYmY5ZWU5NjJhZTRlOWNjMTM3YmNhYjdkMjdkYjA0MDY0NWVlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcApAQCAtMjM4OSw3ICsyMzg5LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFkb3dS
b290KCkKIAogc3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21T
dHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9
IFtdIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdM
aXN0W10gPSB7CiAgICAgICAgICAgICAmYXJ0aWNsZVRhZy5nZXQoKSwKICAgICAgICAgICAgICZh
c2lkZVRhZy5nZXQoKSwKQEAgLTI0MTAsNyArMjQxMCw4IEBAIHN0YXRpYyBib29sIGNhbkF0dGFj
aEF1dGhvclNoYWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZz
ZWN0aW9uVGFnLmdldCgpLAogICAgICAgICAgICAgJnNwYW5UYWcuZ2V0KCkKICAgICAgICAgfTsK
LSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIHNldC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVvZih0YWdMaXN0KSk7CiAgICAgICAgIGZvciAoYXV0
byYgbmFtZSA6IHRhZ0xpc3QpCiAgICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9R
dWFsaWZpZWROYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4
IDI2NGM0NzkxNTBjY2JmN2EwNjVkZWE1NWFjZWJhNDRlZGQzOTJmNGYuLjQyOWZjNTU5NjQzNTFm
MTI0OWJjMWM4ZjI4OWUzNzdhNGRkM2UzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9RdWFsaWZpZWROYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUu
aApAQCAtMTM3LDcgKzEzNyw4IEBAIHN0cnVjdCBRdWFsaWZpZWROYW1lSGFzaCB7CiAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgYSwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVh
bGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIGEsIGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1
YWxpZmllZE5hbWVJbXBsKiBiKSB7IHJldHVybiBhID09IGI7IH0KIAotICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIGlu
bGluZSBTdHJpbmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFr
ZV9uYW1lcy5wbAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTljZTI1MmM2YzY2YWNiNzkzZjVi
Li40Mjg1NDI4OGVhODFlMjg2MzA0OTMwZWJlMzBiZWEyYzhhN2Q4ZTg1IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
bWFrZV9uYW1lcy5wbApAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgcHJpbnRMaWNlbnNlSGVhZGVy
KCRGKTsKICAgICBwcmludEhlYWRlckhlYWQoJEYsICJDU1MiLCAkZmFtaWx5TmFtZXNGaWxlQmFz
ZSwgPDxFTkQsICIiKTsKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiBFTkQKQEAgLTcwOSw2ICs3MTAsNyBAQCBzdWIg
cHJpbnROYW1lc0hlYWRlckZpbGUKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHBy
aW50SGVhZGVySGVhZCgkRiwgIkRPTSIsICRwYXJhbWV0ZXJze25hbWVzcGFjZX0sIDw8RU5ELCAi
Y2xhc3MgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVF1YWxpZmllZE5hbWUgOiBwdWJsaWMgUXVhbGlm
aWVkTmFtZSB7IH07XG5cbiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZy5oPgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKIEVORApAQCAtOTU2LDcgKzk1OCw3
IEBAIEVORAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OTYsNyArOTk4LDcgQEAg
RU5ECiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogcXVhbGlmaWVkTmFtZTsgLy8gVXNlIHBvaW50
ZXIgaW5zdGVhZCBvZiByZWZlcmVuY2Ugc28gdGhhdCBlbXB0eVZhbHVlKCkgaW4gSGFzaE1hcCBp
cyBjaGVhcCB0byBjcmVhdGUuCiB9OwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRv
bVN0cmluZ0ltcGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1h
cEVudHJ5PiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCitzdGF0aWMg
TkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9t
U3RyaW5nLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5
PiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCiB7CiAgICAgc3RydWN0
IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lOwpAQCAtMTAx
MiwxNiArMTAxNCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsKIAotICAgIEhh
c2hNYXA8QXRvbVN0cmluZ0ltcGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JG
dW5jdGlvbk1hcEVudHJ5PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1
bmN0aW9uTWFwRW50cnk+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAg
ICAgIG1hcC5hZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksICRwYXJhbWV0ZXJze25h
bWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5
Lm5hbWUpKTsKKyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCAkcGFyYW1l
dGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5KGVudHJ5LmZ1bmN0aW9u
LCBlbnRyeS5uYW1lKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogc3RhdGljICRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkgZmluZCRwYXJhbWV0ZXJze25h
bWVzcGFjZX1FbGVtZW50Q29uc3RydWN0b3JGdW5jdGlvbihjb25zdCBBdG9tU3RyaW5nJiBsb2Nh
bE5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVk
KGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkpOwotICAgIHJldHVybiBt
YXAuZ2V0KCkuZ2V0KGxvY2FsTmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtYXAuZ2V0KCkuZ2V0
KGxvY2FsTmFtZSk7CiB9CiAKIFJlZlB0cjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudD4g
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRGYWN0b3J5OjpjcmVhdGVLbm93bkVsZW1lbnQo
Y29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQkZm9ybUVsZW1l
bnRBcmd1bWVudEZvckRlZmluaXRpb24sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtMTIyNiw2
ICsxMjI4LDcgQEAgc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlCiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiBFTkQKIDsKQEAgLTEyNDcsNyArMTI1MCw3
IEBAIEVORAogCiBwcmludCBGIDw8RU5ECiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1hcDxB
dG9tU3RyaW5nSW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBl
ckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCitzdGF0
aWMgTkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5j
dGlvbj4gY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKQogewogICAgIHN0
cnVjdCBUYWJsZUVudHJ5IHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZTsKQEAg
LTEyODUsMTYgKzEyODgsMTYgQEAgRU5ECiAgICAgcHJpbnQgRiA8PEVORAogICAgIH07CiAKLSAg
ICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnRXcmFwcGVyRnVuY3Rpb24+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnRXcmFwcGVyRnVuY3Rpb24+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUp
Ci0gICAgICAgIG1hcC5hZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksIGVudHJ5LmZ1
bmN0aW9uKTsKKyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCBlbnRyeS5m
dW5jdGlvbik7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogSlNET01PYmplY3QqIGNyZWF0ZUpTJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAg
c3RhdGljIGNvbnN0IGF1dG8gZnVuY3Rpb25zID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRw
YXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyTWFwKCkpOwotICAgIGlmIChhdXRvIGZ1bmN0aW9u
ID0gZnVuY3Rpb25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpKQorICAg
IGlmIChhdXRvIGZ1bmN0aW9uID0gZnVuY3Rpb25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5h
bWUoKSkpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbihnbG9iYWxPYmplY3QsIFdURk1vdmUoZWxl
bWVudCkpOwogRU5ECiA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1h
dEJsb2NrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAKaW5kZXggYzc4ZDFlYmY4NmViMGI0OTBkYTM5YzYzMGJiMmZhMWI0ZGViYjNkMC4u
YjgyZTJlNmM5NWU1NjM2YjVhMzI4ZTg4MWJmMWU3YTU3ZjQzMDk2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTE4LDcgKzExOSw3IEBAIEVsZW1lbnQq
IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBP
cHRpb25hbDxTaW1wbGVSCiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3Mg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGlj
IGNvbnN0IGF1dG8gYmxvY2tUYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIGFkZHJl
c3NUYWcsCiAgICAgICAgIGFydGljbGVUYWcsCiAgICAgICAgIGFzaWRlVGFnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKaW5kZXggNGVjMGI0ZTU1
YzNlYWY2NDA4ZjI1MDU5OTZjYTFkY2RhYTVmMjM1My4uNjYxNDA3ZTE0NTI0Y2YyYTEzZmVhMzY1
NTEzZDc5YWJlNTNlNjlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1v
dmVGb3JtYXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZv
cm1hdENvbW1hbmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00Niw3ICs0Nyw3IEBAIFJlbW92ZUZvcm1hdENvbW1hbmQ6OlJlbW92ZUZv
cm1hdENvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBzdGF0aWMgYm9vbCBpc0VsZW1lbnRG
b3JSZW1vdmVGb3JtYXRDb21tYW5kKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgc3Rh
dGljIGNvbnN0IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFs
aWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+IHsKICAgICAgICAgYWNyb255bVRhZywKICAgICAgICAgYlRhZywKICAgICAgICAgYmRv
VGFnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAppbmRleCAwMTkxOWViMzVjNzljNTQ5OGViNmMyZTAwOGZmODNmYWRhM2E3ZGFmLi5j
YzMzZGY3MmEyYzdhOGJmZjExZjg2NjE3NDI0NjU0MWVlN2NlMzA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNjcsNiAr
NjcsNyBAQAogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03MzksNyArNzQwLDcgQEAgc3RhdGljIGJvb2wgaXNQcm9oaWJpdGVkUGFyYWdy
YXBoQ2hpbGQoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKICAgICAgICAgICAgICZ1bFRhZy5nZXQo
KSwKICAgICAgICAgICAgICZ4bXBUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8mIHRhZyA6IHRh
Z3MpCiAgICAgICAgICAgICBzZXQuYWRkKHRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1
cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcAppbmRleCA2NzM1ZTI2OWYyNWFlZjdiYzA5
MTI3NTUzOTIxNDgxY2RlM2U4ZWI1Li44ZjcxMmY3MWQyMjFkYzI3ZTk0MjI4MmYxNGY5MDMyZTlh
ODkxMTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZ0hhc2guaD4KIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgQXV0b2ZpbGxJbmZvIHsK
ICAgICBBdXRvZmlsbENhdGVnb3J5IGNhdGVnb3J5OwogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hN
YXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKK3N0YXRpYyBjb25z
dCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0
b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkgewpAQCAt
MTEzLDcgKzExNCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxs
SW5mbz4mIGZpZWxkTmFtZU1hcCgpCiAgICAgICAgICAgICB7ICJlbWFpbCIsIHsgQXV0b2ZpbGxG
aWVsZE5hbWU6OkVtYWlsLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0IH0gfSwKICAgICAgICAg
ICAgIHsgImltcHAiLCB7IEF1dG9maWxsRmllbGROYW1lOjpJbXBwLCBBdXRvZmlsbENhdGVnb3J5
OjpDb250YWN0IH0gfSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBB
dXRvZmlsbEluZm8+IG1hcDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOwogICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogZW50cmllcykKICAgICAgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZSwgZW50
cnkudmFsdWUpOwogICAgICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuY3BwCmluZGV4IDhkZjYyYzZiYjQ5MWY4NDhlZWNlMjkwOTQ0YTRiN2NmYWVkZDhkNzUuLjAw
YmY2N2FlZDU2NWFjOTBmNDZkOGZhNzM4ZGY3YTUyOTM3NjBkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyNSw3
ICsyMjYsNyBAQCBib29sIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICAmdmFsdWV0eXBl
QXR0ci5nZXQoKSwKICAgICAgICAgICAgICZ2bGlua0F0dHIuZ2V0KCksCiAgICAgICAgIH07Ci0g
ICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1
dG8qIG5hbWUgOiBuYW1lcykKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkp
OwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVt
ZW50LmNwcAppbmRleCBkYzFmMTBjYjJjZjA4NDIxODgzMjRiOGEwM2U2YjE3MTYyMGQ2Y2JlLi5h
NmYzYzBmMTJkMjcxNTY5NTkxOGI3NjNkOTI0NjI2NWZlMmYyYzZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
IldpZGdldC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgpA
QCAtMzYxLDcgKzM2Miw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNr
Q29udGVudCgpCiBzdGF0aWMgaW5saW5lIGJvb2wgcHJldmVudHNQYXJlbnRPYmplY3RGcm9tRXhw
b3N1cmUoY29uc3QgRWxlbWVudCYgY2hpbGQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbW9z
dEtub3duVGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gc2V0OwogICAgICAgICBhdXRvKiB0YWdzID0gSFRNTE5h
bWVzOjpnZXRIVE1MVGFncygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxO
YW1lczo6SFRNTFRhZ3NDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBhdXRvJiB0YWcgPSAqdGFn
c1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CmluZGV4IGIxOTMwZTQ2M2RhNDRkOTdkYjc0NTQ1Y2U2OTRlOTljYmUzOTE2OGYuLjkyZjI3NmYz
OGI3NDRkNTFlYzUxYzhmY2Y5YWI0NmZlNzJkMmVkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1
ZGUgIlhNTE5TTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogI2lmIEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ3OCw5ICs0
NzksOSBAQCB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQwogICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudChXVEZNb3ZlKHRva2VuKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxp
ZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0
ZUNhc2VNYXAoY29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25l
ZCBsZW5ndGgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxp
ZmllZE5hbWU+IGNyZWF0ZUNhc2VNYXAoY29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBu
YW1lc1tdLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFs
aWZpZWROYW1lPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSA9ICpuYW1lc1tpXTsKICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFt
ZS5sb2NhbE5hbWUoKTsKQEAgLTQ5MywxNCArNDk0LDE0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBU
YWJsZVF1YWxpZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5h
bWU+CiAKIHN0YXRpYyB2b2lkIGFkanVzdFNWR1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoU1ZHTmFtZXM6OmdldFNWR1RhZ3Mo
KSwgU1ZHTmFtZXM6OlNWR1RhZ3NDb3VudCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZp
ZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdO
YW1lczo6U1ZHVGFnc0NvdW50KTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUg
PSBtYXAuZ2V0KCkuZ2V0KHRva2VuLm5hbWUoKSk7CiAgICAgaWYgKGNhc2VkTmFtZS5sb2NhbE5h
bWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHRva2VuLnNldE5hbWUoY2FzZWRO
YW1lLmxvY2FsTmFtZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0
ZXMoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQorc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+JiBtYXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgZm9yIChhdXRvJiBh
dHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgY2FzZWROYW1lID0gbWFwLmdldChhdHRyaWJ1dGUubG9jYWxOYW1lKCkpOwpAQCAtNTEx
LDcgKzUxMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvCiAKIHRlbXBsYXRlPGNvbnN0IFF1
YWxpZmllZE5hbWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmlidXRl
c1RhYmxlTGVuZ3RoPiBzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoYXR0cmlidXRlc1RhYmxlKCks
IGF0dHJpYnV0ZXNUYWJsZUxlbmd0aCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWRO
YW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1Rh
YmxlTGVuZ3RoKTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwogfQogCkBAIC01
MjUsMTggKzUyNiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TWF0aE1MQXR0cmlidXRl
cyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGFkanVzdEF0dHJpYnV0ZXM8TWF0aE1MTmFt
ZXM6OmdldE1hdGhNTEF0dHJzLCBNYXRoTUxOYW1lczo6TWF0aE1MQXR0cnNDb3VudD4odG9rZW4p
OwogfQogCi1zdGF0aWMgdm9pZCBhZGROYW1lc1dpdGhQcmVmaXgoSGFzaE1hcDxBdG9tU3RyaW5n
LCBRdWFsaWZpZWROYW1lPiYgbWFwLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1
YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lID0gKm5hbWVzW2ldOwotICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBu
YW1lLmxvY2FsTmFtZSgpOwotICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFt
ZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkp
OwotICAgIH0KLX0KKyAgICBhdXRvIGFkZE5hbWVzV2l0aFByZWZpeCA9IFtdKE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYg
bWFwLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0
IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUgPSAqbmFtZXNbaV07CisgICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUg
PSBuYW1lLmxvY2FsTmFtZSgpOworICAgICAgICAgICAgbWFwLmFkZChwcmVmaXggKyAnOicgKyBs
b2NhbE5hbWUsIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG5hbWUubmFtZXNwYWNl
VVJJKCkpKTsKKyAgICAgICAgfQorICAgIH07CiAKLXN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcs
IFF1YWxpZmllZE5hbWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKLXsKLSAgICBIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwog
CiAgICAgQXRvbVN0cmluZyB4bGlua05hbWUoInhsaW5rIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogICAgIGFkZE5hbWVzV2l0aFByZWZpeChtYXAsIHhsaW5rTmFtZSwgWExp
bmtOYW1lczo6Z2V0WExpbmtBdHRycygpLCBYTGlua05hbWVzOjpYTGlua0F0dHJzQ291bnQpOwpA
QCAtNTUwLDcgKzU1MCw3IEBAIHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5h
bWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKIAogc3RhdGljIHZvaWQgYWRqdXN0Rm9y
ZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3Jl
YXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+PiBtYXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOwogICAgIGFkanVzdEF0
dHJpYnV0ZXMobWFwLCB0b2tlbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VP
dmVybGF5cy5jcHAKaW5kZXggZmEzZTJmYWE0OGI5NmFkYmM5ZDhlMjYzNTJkNWY2MjBkN2I1NWFh
MS4uYjU5NjVmNTZhNDlhOTVlMDJjOGYwNzk1ZGVjY2U4ZmFmMTFiYTZhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDksMTAgKzE1MCwxMCBAQCBib29sIE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uT3ZlcmxheTo6dXBkYXRlUmVnaW9uKCkKICAgICByZXR1cm4gcmVnaW9uQ2hh
bmdlZDsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4m
IHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcmVnaW9uQ29sb3JzID0g
bWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBT
UkdCQTx1aW50OF90Pj4geyB7CisgICAgICAgIHJldHVybiBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4geyB7CiAgICAgICAgICAg
ICB7ICJ0b3VjaHN0YXJ0Il9zLCB7IDE5MSwgMTkxLCA2MywgNTAgfSB9LAogICAgICAgICAgICAg
eyAidG91Y2htb3ZlIl9zLCB7IDgwLCAyMDQsIDI0NSwgNTAgfSB9LAogICAgICAgICAgICAgeyAi
dG91Y2hlbmQiX3MsIHsgMTkxLCA2MywgMTI3LCA1MCB9IH0sCkBAIC0xOTQsNDkgKzE5NSw0OSBA
QCB2b2lkIE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJs
YXkmIHBhZ2VPdmVybGF5LCBHcmFwaGljcwogICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOwogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaHN0YXJ0IikpOworICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiX3MpKTsKICAg
ICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0
KCJ0b3VjaHN0YXJ0IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAg
ICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hzdGFydCJfcywgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2ht
b3ZlIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMo
KS5nZXQoInRvdWNobW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7
Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSIsIGNvbnRleHQsIGZvbnQsIGxl
Z2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92
ZSJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2Vu
ZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmdldCgidG91Y2hlbmQiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
dG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hlbmQiX3MpKTsKICAgICBjb250ZXh0
LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGVu
ZCIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoInRvdWNoZW5kIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0
aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGZvcmNlY2hhbmdlIikp
OworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQo
InRvdWNoZm9yY2VjaGFuZ2UiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3Qp
OwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIiwgY29udGV4dCwg
Zm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgi
dG91Y2hmb3JjZWNoYW5nZSJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigp
KTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IobV9jb2xvcik7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3
UmlnaHRBbGlnbmVkVGV4dCgicGFzc2l2ZSBsaXN0ZW5lcnMiLCBjb250ZXh0LCBmb250LCBsZWdl
bmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxp
c3RlbmVycyJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAg
IGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hF
dmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vkb3duIikpOworICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNlZG93biJfcykpOwogICAg
IGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQo
Im1vdXNlZG93biIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAg
ZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlZG93biJfcywgY29udGV4dCwgZm9udCwgbGVnZW5k
UmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3Zl
IikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5n
ZXQoIm1vdXNlbW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0g
ICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2Vu
ZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSJf
cywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJl
Y3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgibW91c2V1cCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIl9zKSk7CiAgICAgY29udGV4dC5maWxs
UmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCIsIGNv
bnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25l
ZFRleHQoIm1vdXNldXAiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7
CiAjZWxzZQogICAgIC8vIE9uIGRlc2t0b3AgcGxhdGZvcm1zLCB0aGUgIndoZWVsIiByZWdpb24g
aW5jbHVkZXMgdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uLgotICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIl9z
KSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgibm9uLWZhc3QgcmVnaW9uIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibm9uLWZhc3QgcmVnaW9uIl9zLCBj
b250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogI2VuZGlmCiAKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdp
b25zLmV2ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCmluZGV4IGVkOGRkOTIzOGQz
MzczYzAxODJiMmYzMDhlZGEwMDI3ZTRhZmI5MDIuLjQwMTUyNzdlMDdjNDNkOWY5ODlhMTdlYWJh
ZTE1MjBiOWVjOGExOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VVc2VyVGltaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNl
clRpbWluZy5jcHAKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBOYXZpZ2F0aW9uVGlt
aW5nRnVuY3Rpb24gPSB1bnNpZ25lZCBsb25nIGxvbmcgKFBlcmZvcm1hbmNlVGltaW5nOjoqKSgp
IGNvbnN0Owotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVu
Y3Rpb24+JiByZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXAo
KQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxT
dHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05h
dmlnYXRpb25UaW1pbmdGdW5jdGlvbk1hcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIAotICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0
cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPj4oeworICAgIHN0YXRpYyBhdXRvIG1hcCA9
IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CiAgICAgICAgIHsgImNvbm5l
Y3RFbmQiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdEVuZCB9LAogICAgICAgICB7ICJj
b25uZWN0U3RhcnQiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdFN0YXJ0IH0sCiAgICAg
ICAgIHsgImRvbUNvbXBsZXRlIl9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmRvbUNvbXBsZXRlIH0s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lz
dHJ5Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lz
dHJ5Q29jb2EubW0KaW5kZXggOWM0NWEyMjk0ZmJmYWNmMTk3NzBkNDgxZTZiZWU0ZmVkYWVhNjRm
Yy4uYTU1ZDVhMDVlNGRkY2JmNWM4MWM3MTkxYjRkY2I5ZDJjMzQxZWI3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5t
bQpAQCAtMjksMTcgKzI5LDE5IEBACiAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVNlcnZp
Y2VzU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TVVJMRmlsZVR5cGVNYXBwaW5nc1NQ
SS5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5n
Pj4mIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4+JiBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQogewogICAg
IHN0YXRpYyBhdXRvIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChbXSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4+IG1hcDsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IG1hcDsKIAogICAg
ICAgICBhdXRvIGFkZEV4dGVuc2lvbiA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKSB7Ci0gICAgICAgICAgICBtYXAuYWRkKHR5cGUsIEhhc2hTZXQ8U3Ry
aW5nPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGV4dGVuc2lvbik7CisgICAgICAgICAgICBtYXAu
YWRkKHR5cGUsIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKICAgICAgICAgfTsKIAogICAgICAg
ICBhdXRvIGFkZEV4dGVuc2lvbnMgPSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlLCBOU0FycmF5PE5T
U3RyaW5nICo+ICpleHRlbnNpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5
N2I3OWZkOGY3M2Q3ZC4uZjVhNjc1ODMzNTEzMTlmNDBmMTI4N2UyYTcyOWNjNDcxYmJkMWU3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01
MCw3ICs1MSw3IEBAIHN0YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzZXQgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoW10gewotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsK
ICAgICAgICAgYXV0byBhZGQgPSBbJnNldF0gKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxVQ2hhcj4gdW5pY29kZU5hbWUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG5h
bWVMZW5ndGggPSBzdHJsZW4obmFtZSk7CiAgICAgICAgICAgICBzZXQuYWRkKEF0b21TdHJpbmcg
eyBuYW1lLCBuYW1lTGVuZ3RoLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCB9KTsK
QEAgLTM4Miw3ICszODMsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFy
V2lkdGgoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHN0YXRp
YyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PEF0b21TdHJpbmc+
IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHsKICAgICAgICAg
IkFtZXJpY2FuIFR5cGV3cml0ZXIiLAogICAgICAgICAiQXJpYWwgSGVicmV3IiwKICAgICAgICAg
IkNoYWxrYm9hcmQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAK
aW5kZXggNGY0MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MC4uMTQyNGQxYmVl
ZTZlM2MzMmM2NmI0OWEyZjZmMjRiNDhiMmFjMmUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIEhBVkUoQVZDT05URU5US0VZU0VTU0lP
TikKQEAgLTIwNSw5ICsyMDYsOSBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTawogICAgIHJldHVy
biBrZXlJRHM7CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZElu
aXREYXRhVHlwZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKIHsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyA9IEhhc2hT
ZXQ8QXRvbVN0cmluZz4oeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHZhbGlkVHlwZXMoc3RkOjpp
bml0aWFsaXplcl9saXN0PEF0b21TdHJpbmc+IHsKICAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5
U3RyZWFtaW5nOjpzaW5mTmFtZSgpLAogICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1p
bmc6OnNrZE5hbWUoKSwKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5jcHAKaW5kZXggM2MxYjZmNjU3MmViMzhhOTM4MTA1Zjc0NzU4YjE3ODJmY2Q5NzkxNy4uYTQ3
MDI0NDBlZGZiMDMyMmZlYWY3Y2Q5MWI2ZWFkNDA3YjNjOTIwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcApAQCAtMzEsMTMg
KzMxLDE0IEBACiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKIAorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBw
b3J0ZWRJbWFnZVR5cGVzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IGF1dG8gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSBtYWtlTmV2ZXJEZXN0
cm95ZWQoW10gewogICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVmYXVsdFN1cHBvcnRlZEltYWdl
VHlwZXMgPSB7CkBAIC02OCwxMSArNjksMTIgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkZWZh
dWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIYXNoU2V0
PFN0cmluZz4qPihjb250ZXh0KS0+YWRkKGltYWdlVHlwZSk7CiAgICAgICAgIH0sICZzeXN0ZW1T
dXBwb3J0ZWRJbWFnZVR5cGVzKTsKIAotICAgICAgICBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBl
cy5yZW1vdmVJZihbJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXNdKGNvbnN0IFN0cmluZyYgaW1h
Z2VUeXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gIXN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMu
Y29udGFpbnMoaW1hZ2VUeXBlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1
bHRTdXBwb3J0ZWRJbWFnZVR5cGVzOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBmaWx0ZXJlZDsKKyAgICAgICAgZm9yIChhdXRvJiBpbWFn
ZVR5cGUgOiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcykgeworICAgICAgICAgICAgaWYgKHN5
c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkKKyAgICAgICAgICAg
ICAgICBmaWx0ZXJlZC5hZGQoaW1hZ2VUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmlsdGVyZWQ7CiAgICAgfSgpKTsKIAogICAgIHJldHVybiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VU
eXBlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5oCmluZGV4IDViOGZlMjE3ZTg3M2QwYjBjODU2Njg2NzQwMGQ3NmVlM2M2NjU3NWUuLjRi
MDE1YWZjOTVjYWYyMzA4NmExY2JiNjFlM2U1NjRmNzdkMGI5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApAQCAtMjUsMTIgKzI1
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVm
YXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKTsKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOwog
SGFzaFNldDxTdHJpbmc+JiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlc0ZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2Eu
bW0KaW5kZXggZjExMWYyODc3Yjk4ZjljODM3ZDM1NGNjODFkYmEwMjhiM2VlOTIzMy4uNjI2YzUy
ZGUwMjMyYjMyNmNlMmI0YmY4MzJmZjA5ZjkwYTc4Yjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2Nv
YS5tbQpAQCAtMzIsOCArMzIsOSBAQAogI2ltcG9ydCAiSEVWQ1V0aWxpdGllcy5oIgogI2ltcG9y
dCAiTWVkaWFDYXBhYmlsaXRpZXNJbmZvLmgiCiAKLSNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5k
YXRpb25Tb2Z0TGluay5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKyNpbXBvcnQgPHBhbC9j
b2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgogCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0
TGluay5oIgogCkBAIC0xMjYsMTEgKzEyNywxMSBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRl
cnMoSEVWQ1BhcmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJgog
CiBzdGF0aWMgT3B0aW9uYWw8Q01WaWRlb0NvZGVjVHlwZT4gY29kZWNUeXBlRm9yRG9WaUNvZGVj
U3RyaW5nKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiB7Ci0gICAgc3RhdGljIGF1dG8gbWFw
ID0gbWFrZU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4o
ewotICAgICAgICB7ICJhdmMxIiwga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7
ICJhdmMzIiwga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJodmMxIiwga0NN
VmlkZW9Db2RlY1R5cGVfSEVWQyB9LAotICAgICAgICB7ICJoZXYxIiwga0NNVmlkZW9Db2RlY1R5
cGVfSEVWQyB9LAorICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNU
eXBlPj4oeworICAgICAgICB7ICJhdmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCisg
ICAgICAgIHsgImF2YzMiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAi
aHZjMSJfcywga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAorICAgICAgICB7ICJoZXYxIl9zLCBr
Q01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCiAgICAgfSk7CiAKICAgICBhdXRvIGZpbmRSZXN1bHQg
PSBtYXAuZ2V0KCkuZmluZChjb2RlY1N0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0uY3BwCmluZGV4IGQxZmNmZDBkY2JhMzI2YWQzYzU0YjBjYWNkNjdkZmJiOTVjMTJkOTkuLmU1
MWI1ZDY5YzQ2ZjQxNzdkYTRjOTlmNDczN2M4MmYwMzBmNDI5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0xMzcxLDE1ICsxMzcxLDE1IEBAIHZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soQ2FsbE9uQ2xpZW50
VGhyZWFkQ2FsCiAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0
ZWRWaWRlb0NvZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiLCAiVl9WUDkiIH0pOworICAgIHN0YXRp
YyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiX3MsICJWX1ZQOSJfcyB9KTsKICAg
ICByZXR1cm4gY29kZWNzOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpzdXBwb3J0ZWRBdWRpb0NvZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFr
ZU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMiLCAiQV9PUFVTIiB9
KTsKKyAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+KHsgIkFfVk9SQklTIl9zLCAi
QV9PUFVTIl9zIH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uaAppbmRleCBmMGQ2YTVmZDZmMGY2YzJiMzg0ZjkyZjc0OGY0YzliYTVkOTFiOGQ0
Li42NDFlNDcxODZlYWYzMjc2MGUxODI3NWFkM2Q4ZDUwNDZkNWM3MmYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0JveC5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
QEAgLTIzNSw4ICsyMzYsOCBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZQogCiAgICAgVHJhY2tE
YXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKLSAgICBzdGF0aWMgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRWaWRlb0NvZGVjcygpOwotICAgIHN0YXRpYyBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZEF1ZGlvQ29kZWNzKCk7CisgICAgc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBz
dXBwb3J0ZWRWaWRlb0NvZGVjcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsK
IAogICAgIC8vIHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9uRWxlbWVudEJlZ2lu
KGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiopIGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IDg4MGNi
YmEwNGM4ZWQwYjdiZjNiOGQyOTUzNTE0MmM1Mjc3Y2JhYWYuLmZlMGVkMzE0NDExNDhlZTE1M2Iz
NDZlNDUzNTQ1NTU5MjZjM2E3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlcy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdQYXR0ZXJu
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIEVO
QUJMRShUUkVFX0RFQlVHR0lORykKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDMsOSArNDQsOSBA
QCBTVkdSZXNvdXJjZXM6OlNWR1Jlc291cmNlcygpCiB7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0
b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmls
dGVyTWFza2VyVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAg
ICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gImNvbnRhaW5l
ciBlbGVtZW50cyI6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUNv
bnRhaW5lckVsZW1lbnQKICAgICAgICAgLy8gImdyYXBoaWNzIGVsZW1lbnRzIiA6IGh0dHA6Ly93
d3cudzMub3JnL1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUdyYXBoaWNzRWxlbWVudApAQCAtOTIs
OSArOTMsOSBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tl
clRhZ3MoKQogICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21T
dHJpbmc+JiBtYXJrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmxpbmVUYWctPmxv
Y2FsTmFtZSgpKTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6cGF0aFRh
Zy0+bG9jYWxOYW1lKCkpOwpAQCAtMTA1LDkgKzEwNiw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21T
dHJpbmc+JiBtYXJrZXJUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMg
SGFzaFNldDxBdG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQorc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgZmlsbEFu
ZFN0cm9rZVRhZ3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21T
dHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAg
IGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQo
KS5hZGQoU1ZHTmFtZXM6OmFsdEdseXBoVGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFn
TGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy0+bG9jYWxOYW1lKCkpOwpAQCAtMTI2
LDkgKzEyNyw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFn
cygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmlu
Zz4mIGNoYWluYWJsZVJlc291cmNlVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjaGFpbmFibGVSZXNvdXJjZVRh
Z3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBz
X3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3Rh
Z0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZH
TmFtZXM6OmxpbmVhckdyYWRpZW50VGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlz
dC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy0+bG9jYWxOYW1lKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAppbmRleCA5NzU4YTI3ODM5YTJiODE4NjQ0YWNlYzJm
Yzg4YWMxN2UxODMwZmRmLi5lNmFhMWI1Y2QxYmM4OTgzMzQwMTI3NmU1MzZmYWY0MDBjMmQ2Zjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtNTcsNiArNTcsNyBA
QAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIldl
YkFuaW1hdGlvblR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKQEAgLTQ5Nyw3ICs0OTgsNyBA
QCB2b2lkIEFkanVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogdXNlckFnZW50QXBwZWFyYW5jZQogc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxh
eU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtd
IHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7CiAgICAgICAgICAg
ICAmYnJUYWcuZ2V0KCksCiAgICAgICAgICAgICAmd2JyVGFnLmdldCgpLApAQCAtNTE3LDcgKzUx
OCw4IEBAIHN0YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRl
bnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0
KCksCiAgICAgICAgICAgICAmc2VsZWN0VGFnLmdldCgpLAogICAgICAgICB9OwotICAgICAgICBI
YXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDog
dGFnTGlzdCkKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAg
ICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
CmluZGV4IGU0YWFhYzA0Njg2YThjMjU4MzgyNTY5NGYyNDI4Zjk5ZTI4YTE3ODcuLjcxMjY4MGE1
MGM5ODJkMWMyMjkwM2VkNDU4YWRkNDNkMTc1NWVjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC0xMjcsNyArMTI4LDcgQEAgc3RhdGljIE9wdGlv
bmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKFN0cmluZ1ZpZXcgc3RyaW5n
KQogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0
ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxR
dWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKHNldCk7CiAgICAgICAgIHNldC5hZGQoewogICAgICAgICAgICAgU1ZH
TmFtZXM6OnZhbHVlc0F0dHIuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXgg
NGYyNzA0ZTQxMDU2ZWNmNDEzZmQzNWZhMWY5M2ExY2U4ODE3ZWI1NC4uOWMxNDBjYzFkNGUwMzhh
NDM2MzhjYjZkYjJjNmIwY2FhMzQyY2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApA
QCAtNTUsMTMgKzU1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChTVkdFbGVtZW50KTsKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJp
bmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJ
RE1hcCgpCitzdGF0aWMgTkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1l
VG9DU1NQcm9wZXJ0eUlETWFwKCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
ICAgIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKQEAgLTE0MSwxNiArMTQyLDE2IEBAIHN0YXRp
YyBORVZFUl9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IGNy
ZWF0ZUF0dHJpYnV0ZU5hbWVUCiAgICAgICAgICZ5QXR0ci5nZXQoKSwKICAgICB9OwogCi0gICAg
SGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IG1hcDsKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ1NTUHJvcGVydHlJ
RD4gbWFwOwogCiAgICAgZm9yIChhdXRvJiBuYW1lIDogYXR0cmlidXRlTmFtZXMpIHsKICAgICAg
ICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7Ci0gICAg
ICAgIG1hcC5hZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsK
KyAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUsIGNzc1Byb3BlcnR5SUQobG9jYWxOYW1lKSk7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IFdoZW4gQ1NTIHN1cHBvcnRzICJ0cmFuc2Zvcm0tb3JpZ2lu
IiB0aGlzIHNwZWNpYWwgY2FzZSBjYW4gYmUgcmVtb3ZlZCwKICAgICAvLyBhbmQgd2UgY2FuIGFk
ZCB0cmFuc2Zvcm1fb3JpZ2luQXR0ciB0byB0aGUgdGFibGUgYWJvdmUgaW5zdGVhZC4KLSAgICBt
YXAuYWRkKHRyYW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUoKS5pbXBsKCksIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luKTsKKyAgICBtYXAuYWRkKHRyYW5zZm9ybV9vcmlnaW5BdHRyLT5s
b2NhbE5hbWUoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOwogCiAgICAgcmV0dXJuIG1h
cDsKIH0KQEAgLTcyNCw3ICs3MjUsNyBAQCBRdWFsaWZpZWROYW1lIFNWR0VsZW1lbnQ6OmFuaW1h
dGFibGVBdHRyaWJ1dGVGb3JOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZQogICAgICAg
ICAgICAgJlNWR05hbWVzOjp6QXR0ci5nZXQoKSwKICAgICAgICAgICAgICZTVkdOYW1lczo6aHJl
ZkF0dHIuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgICAgICBmb3IgKGF1
dG8mIG5hbWUgOiBuYW1lcykgewogICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRk
KG5hbWUtPmxvY2FsTmFtZSgpLCAqbmFtZSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNzgwLDcgKzc4MSw3IEBAIENTU1By
b3BlcnR5SUQgU1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYKICAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKIAog
ICAgIHN0YXRpYyBjb25zdCBhdXRvIHByb3BlcnRpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3Jl
YXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpKTsKLSAgICByZXR1cm4gcHJvcGVy
dGllcy5nZXQoKS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICByZXR1cm4g
cHJvcGVydGllcy5nZXQoKS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkpOwogfQogCiBib29sIFNW
R0VsZW1lbnQ6OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAppbmRleCAxZDJjZDk3OGVkMTMyMzZkNmFl
NmE3OGFkNmI3NGM2MDI4NzExNzJmLi5jNTgyMzEwYWZhZGNlNWYyYjY1NzA5OTZhNWZhNDQ1NTYx
ZThlZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lk
IFNWR1Rlc3RzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgIG1fY29udGV4dEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9y
U3VidHJlZSgpOwogfQogCi12b2lkIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit2b2lkIFNWR1Rlc3Rz
OjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKIHsKICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEZlYXR1cmVzQXR0cik7CiAgICAgc3VwcG9ydGVk
QXR0cmlidXRlcy5hZGQocmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5o
CmluZGV4IGE5YzJhY2UwYTMwYzQ1MGU5ZDlkMjgxOTExNTI5NzZjNTIyYThjNWIuLjBjMjUyMTY2
YWFkYTI2YWIxZjk2YjhhNDExZTJhYjBiMzlkOTk1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAi
U1ZHU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBTVkdUZXN0cyB7CiAg
ICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0
cmluZyYpOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaGFzRmVhdHVyZUZvckxlZ2FjeUJpbmRp
bmdzKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IGUwNWZiNTNjMDE5OTcxNmIzNDU2Zjc3
MmRlYjk4NWZlYjBmMGM3MTEuLmZhNzUzOTI4NzgyYTNjNDNkM2EyNDIyMmI4ZjRmYjM3NzExMTEx
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzcsMTQgKzE3OCwxNCBAQCB2b2lk
IFNWR1VzZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVs
ZW1lbnRTZXQoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCiB7CiAgICAgLy8gU3BlYzog
IkFueSAnc3ZnJywgJ3N5bWJvbCcsICdnJywgZ3JhcGhpY3MgZWxlbWVudCBvciBvdGhlciAndXNl
JyBpcyBwb3RlbnRpYWxseSBhIHRlbXBsYXRlIG9iamVjdCB0aGF0IGNhbiBiZSByZS11c2VkCiAg
ICAgLy8gKGkuZS4sICJpbnN0YW5jZWQiKSBpbiB0aGUgU1ZHIGRvY3VtZW50IHZpYSBhICd1c2Un
IGVsZW1lbnQuIgogICAgIC8vICJHcmFwaGljcyBFbGVtZW50IiBpcyBkZWZpbmVkIGFzICdjaXJj
bGUnLCAnZWxsaXBzZScsICdpbWFnZScsICdsaW5lJywgJ3BhdGgnLCAncG9seWdvbicsICdwb2x5
bGluZScsICdyZWN0JywgJ3RleHQnCiAgICAgLy8gRXhjbHVkZWQgYXJlIGFueXRoaW5nIHRoYXQg
aXMgdXNlZCBieSByZWZlcmVuY2Ugb3IgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgdG8gYXBwZWFyIG9u
Y2UgaW4gYSBkb2N1bWVudC4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0gICAgSGFz
aFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKICAgICBmb3IgKGF1dG8mIHRhZyA6IHsgYVRhZy5n
ZXQoKSwgY2lyY2xlVGFnLmdldCgpLCBkZXNjVGFnLmdldCgpLCBlbGxpcHNlVGFnLmdldCgpLCBn
VGFnLmdldCgpLCBpbWFnZVRhZy5nZXQoKSwgbGluZVRhZy5nZXQoKSwgbWV0YWRhdGFUYWcuZ2V0
KCksIHBhdGhUYWcuZ2V0KCksIHBvbHlnb25UYWcuZ2V0KCksIHBvbHlsaW5lVGFnLmdldCgpLCBy
ZWN0VGFnLmdldCgpLCBzdmdUYWcuZ2V0KCksIHN3aXRjaFRhZy5nZXQoKSwgc3ltYm9sVGFnLmdl
dCgpLCB0ZXh0VGFnLmdldCgpLCB0ZXh0UGF0aFRhZy5nZXQoKSwgdGl0bGVUYWcuZ2V0KCksIHRy
ZWZUYWcuZ2V0KCksIHRzcGFuVGFnLmdldCgpLCB1c2VUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0
LmFkZCh0YWcubG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBzZXQ7CkBAIC0xOTIsNyArMTkzLDcg
QEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNEaXNhbGxvd2VkRWxlbWVudChjb25zdCBTVkdFbGVtZW50
JiBlbGVtZW50KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJp
bmc+PiBzZXQgPSBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmlu
Zz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CiAgICAgcmV0dXJuICFzZXQuZ2V0
KCkuY29udGFpbnMoZWxlbWVudC5sb2NhbE5hbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggNjgxOTFiOTRhNDAwMTA1
ZmIyNmExNjkyZTZmMDJkYjU3OGNiYWVjZC4uZTM0YTFhZTc2ZGE0YWZkNjA0OWRiY2E2MGI5MGZj
Y2Y5MjdlZWY5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYyLDcgKzQ2Myw3
IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmIHBh
cnNlU3RyaW5nLCBCZWdpbk9yRW5kIGJlZ2luCiAKIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzU3Vw
cG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIHN0
YXRpYyBjb25zdCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVk
QXR0cmlidXRlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBTVkdOYW1lczo6YmVnaW5B
dHRyLAogICAgICAgICBTVkdOYW1lczo6ZW5kQXR0ciwKICAgICAgICAgU1ZHTmFtZXM6OmR1ckF0
dHIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCA5ZmRmYmE4YjEwMjNh
ZTY1Y2IyZmY4YzJmYWY0MjMwNDBhMDM4YTA2Li4xMGYwYzIyZDRiNjdjZTVmZmEzYjgzMDY5Y2Jm
NDA2MDUxMjFlZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NjgsNDQgKzY2OSw0NCBAQCBzdHJ1Y3QgRnVuY3Rp
b25NYXBWYWx1ZSB7CiAgICAgSW50ZXJ2YWwgYXJndW1lbnRDb3VudEludGVydmFsOwogfTsKIAot
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1h
cCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmlu
ZywgRnVuY3Rpb25NYXBWYWx1ZT4gY3JlYXRlRnVuY3Rpb25NYXAoKQogewogICAgIHN0cnVjdCBG
dW5jdGlvbk1hcHBpbmcgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBBU0NJ
SUxpdGVyYWwgbmFtZTsKICAgICAgICAgRnVuY3Rpb25NYXBWYWx1ZSBmdW5jdGlvbjsKICAgICB9
OwogCiAgICAgc3RhdGljIGNvbnN0IEZ1bmN0aW9uTWFwcGluZyBmdW5jdGlvbnNbXSA9IHsKLSAg
ICAgICAgeyAiYm9vbGVhbiIsIHsgY3JlYXRlRnVuY3Rpb25Cb29sZWFuLCAxIH0gfSwKLSAgICAg
ICAgeyAiY2VpbGluZyIsIHsgY3JlYXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKLSAgICAgICAg
eyAiY29uY2F0IiwgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwgSW50ZXJ2YWw6
OkluZikgfSB9LAotICAgICAgICB7ICJjb250YWlucyIsIHsgY3JlYXRlRnVuY3Rpb25Db250YWlu
cywgMiB9IH0sCi0gICAgICAgIHsgImNvdW50IiwgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0g
fSwKLSAgICAgICAgeyAiZmFsc2UiLCB7IGNyZWF0ZUZ1bmN0aW9uRmFsc2UsIDAgfSB9LAotICAg
ICAgICB7ICJmbG9vciIsIHsgY3JlYXRlRnVuY3Rpb25GbG9vciwgMSB9IH0sCi0gICAgICAgIHsg
ImlkIiwgeyBjcmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKLSAgICAgICAgeyAibGFuZyIsIHsgY3Jl
YXRlRnVuY3Rpb25MYW5nLCAxIH0gfSwKLSAgICAgICAgeyAibGFzdCIsIHsgY3JlYXRlRnVuY3Rp
b25MYXN0LCAwIH0gfSwKLSAgICAgICAgeyAibG9jYWwtbmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25M
b2NhbE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZSIsIHsgY3JlYXRl
RnVuY3Rpb25OYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5hbWVzcGFjZS11
cmkiLCB7IGNyZWF0ZUZ1bmN0aW9uTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0g
ICAgICAgIHsgIm5vcm1hbGl6ZS1zcGFjZSIsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFj
ZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJub3QiLCB7IGNyZWF0ZUZ1bmN0aW9u
Tm90LCAxIH0gfSwKLSAgICAgICAgeyAibnVtYmVyIiwgeyBjcmVhdGVGdW5jdGlvbk51bWJlciwg
SW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJwb3NpdGlvbiIsIHsgY3JlYXRlRnVuY3Rp
b25Qb3NpdGlvbiwgMCB9IH0sCi0gICAgICAgIHsgInJvdW5kIiwgeyBjcmVhdGVGdW5jdGlvblJv
dW5kLCAxIH0gfSwKLSAgICAgICAgeyAic3RhcnRzLXdpdGgiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Rh
cnRzV2l0aCwgMiB9IH0sCi0gICAgICAgIHsgInN0cmluZyIsIHsgY3JlYXRlRnVuY3Rpb25TdHJp
bmcsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgY3Jl
YXRlRnVuY3Rpb25TdHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAi
c3Vic3RyaW5nIiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZywgSW50ZXJ2YWwoMiwgMykgfSB9
LAotICAgICAgICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5n
QWZ0ZXIsIDIgfSB9LAotICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyBjcmVhdGVGdW5j
dGlvblN1YnN0cmluZ0JlZm9yZSwgMiB9IH0sCi0gICAgICAgIHsgInN1bSIsIHsgY3JlYXRlRnVu
Y3Rpb25TdW0sIDEgfSB9LAotICAgICAgICB7ICJ0cmFuc2xhdGUiLCB7IGNyZWF0ZUZ1bmN0aW9u
VHJhbnNsYXRlLCAzIH0gfSwKLSAgICAgICAgeyAidHJ1ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcnVl
LCAwIH0gfSwKKyAgICAgICAgeyAiYm9vbGVhbiJfcywgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4s
IDEgfSB9LAorICAgICAgICB7ICJjZWlsaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ2VpbGluZywg
MSB9IH0sCisgICAgICAgIHsgImNvbmNhdCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50
ZXJ2YWwoMiwgSW50ZXJ2YWw6OkluZikgfSB9LAorICAgICAgICB7ICJjb250YWlucyJfcywgeyBj
cmVhdGVGdW5jdGlvbkNvbnRhaW5zLCAyIH0gfSwKKyAgICAgICAgeyAiY291bnQiX3MsIHsgY3Jl
YXRlRnVuY3Rpb25Db3VudCwgMSB9IH0sCisgICAgICAgIHsgImZhbHNlIl9zLCB7IGNyZWF0ZUZ1
bmN0aW9uRmFsc2UsIDAgfSB9LAorICAgICAgICB7ICJmbG9vciJfcywgeyBjcmVhdGVGdW5jdGlv
bkZsb29yLCAxIH0gfSwKKyAgICAgICAgeyAiaWQiX3MsIHsgY3JlYXRlRnVuY3Rpb25JZCwgMSB9
IH0sCisgICAgICAgIHsgImxhbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25MYW5nLCAxIH0gfSwKKyAg
ICAgICAgeyAibGFzdCJfcywgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAorICAgICAgICB7
ICJsb2NhbC1uYW1lIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgICAgIHsgIm5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lLCBJbnRlcnZh
bCgwLCAxKSB9IH0sCisgICAgICAgIHsgIm5hbWVzcGFjZS11cmkiX3MsIHsgY3JlYXRlRnVuY3Rp
b25OYW1lc3BhY2VVUkksIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibm9ybWFsaXpl
LXNwYWNlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTm9ybWFsaXplU3BhY2UsIEludGVydmFsKDAsIDEp
IH0gfSwKKyAgICAgICAgeyAibm90Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0gfSwKKyAg
ICAgICAgeyAibnVtYmVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAx
KSB9IH0sCisgICAgICAgIHsgInBvc2l0aW9uIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUG9zaXRpb24s
IDAgfSB9LAorICAgICAgICB7ICJyb3VuZCJfcywgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0g
fSwKKyAgICAgICAgeyAic3RhcnRzLXdpdGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRo
LCAyIH0gfSwKKyAgICAgICAgeyAic3RyaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nLCBJ
bnRlcnZhbCgwLCAxKSB9IH0sCisgICAgICAgIHsgInN0cmluZy1sZW5ndGgiX3MsIHsgY3JlYXRl
RnVuY3Rpb25TdHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3Vi
c3RyaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0s
CisgICAgICAgIHsgInN1YnN0cmluZy1hZnRlciJfcywgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmlu
Z0FmdGVyLCAyIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWJlZm9yZSJfcywgeyBjcmVhdGVG
dW5jdGlvblN1YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisgICAgICAgIHsgInN1bSJfcywgeyBjcmVh
dGVGdW5jdGlvblN1bSwgMSB9IH0sCisgICAgICAgIHsgInRyYW5zbGF0ZSJfcywgeyBjcmVhdGVG
dW5jdGlvblRyYW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIHsgInRydWUiX3MsIHsgY3JlYXRlRnVu
Y3Rpb25UcnVlLCAwIH0gfSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9u
TWFwVmFsdWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBtYXA7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlv
biA6IGZ1bmN0aW9ucykKICAgICAgICAgbWFwLmFkZChmdW5jdGlvbi5uYW1lLCBmdW5jdGlvbi5m
dW5jdGlvbik7CiAgICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmlu
ZGV4IGRmYjQ5ZjhiMmZlMjUzZTNhZGViZDZiNjE2NTRkMGM3OTBkNTg5NTAuLjg5ZjdlZDlkNzIy
ZjJhOWZjMTU5YzlkZDViZWZmZDAzYzEzN2ZhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2Vy
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlhQYXRoUGF0aC5oIgogI2luY2x1ZGUg
IlhQYXRoU3RlcC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzYsMjggKzc3LDI4IEBAIHN0
YXRpYyBYTUxDYXQgY2hhckNhdChVQ2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIE5vdFBhcnRP
Zk5hbWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gY3JlYXRlQXhp
c05hbWVzTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQogewogICAgIHN0cnVj
dCBBeGlzTmFtZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIEFTQ0lJTGl0
ZXJhbCBuYW1lOwogICAgICAgICBTdGVwOjpBeGlzIGF4aXM7CiAgICAgfTsKICAgICBjb25zdCBB
eGlzTmFtZSBheGlzTmFtZUxpc3RbXSA9IHsKLSAgICAgICAgeyAiYW5jZXN0b3IiLCBTdGVwOjpB
bmNlc3RvckF4aXMgfSwKLSAgICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiIsIFN0ZXA6OkFuY2Vz
dG9yT3JTZWxmQXhpcyB9LAotICAgICAgICB7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVB
eGlzIH0sCi0gICAgICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCi0gICAgICAgIHsg
ImRlc2NlbmRhbnQiLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAotICAgICAgICB7ICJkZXNjZW5k
YW50LW9yLXNlbGYiLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAotICAgICAgICB7ICJm
b2xsb3dpbmciLCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZy1z
aWJsaW5nIiwgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMgfSwKLSAgICAgICAgeyAibmFtZXNw
YWNlIiwgU3RlcDo6TmFtZXNwYWNlQXhpcyB9LAotICAgICAgICB7ICJwYXJlbnQiLCBTdGVwOjpQ
YXJlbnRBeGlzIH0sCi0gICAgICAgIHsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMg
fSwKLSAgICAgICAgeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5n
QXhpcyB9LAotICAgICAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMgfQorICAgICAgICB7ICJh
bmNlc3RvciJfcywgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAgICAgIHsgImFuY2VzdG9yLW9y
LXNlbGYiX3MsIFN0ZXA6OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorICAgICAgICB7ICJhdHRyaWJ1
dGUiX3MsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKKyAgICAgICAgeyAiY2hpbGQiX3MsIFN0ZXA6
OkNoaWxkQXhpcyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50Il9zLCBTdGVwOjpEZXNjZW5kYW50
QXhpcyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNlbGYiX3MsIFN0ZXA6OkRlc2NlbmRh
bnRPclNlbGZBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZyJfcywgU3RlcDo6Rm9sbG93aW5n
QXhpcyB9LAorICAgICAgICB7ICJmb2xsb3dpbmctc2libGluZyJfcywgU3RlcDo6Rm9sbG93aW5n
U2libGluZ0F4aXMgfSwKKyAgICAgICAgeyAibmFtZXNwYWNlIl9zLCBTdGVwOjpOYW1lc3BhY2VB
eGlzIH0sCisgICAgICAgIHsgInBhcmVudCJfcywgU3RlcDo6UGFyZW50QXhpcyB9LAorICAgICAg
ICB7ICJwcmVjZWRpbmciX3MsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKKyAgICAgICAgeyAicHJl
Y2VkaW5nLXNpYmxpbmciX3MsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCisgICAgICAg
IHsgInNlbGYiX3MsIFN0ZXA6OlNlbGZBeGlzIH0KICAgICB9OwotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gbWFwOwogICAgIGZvciAoYXV0byYgYXhpc05hbWUg
OiBheGlzTmFtZUxpc3QpCiAgICAgICAgIG1hcC5hZGQoYXhpc05hbWUubmFtZSwgYXhpc05hbWUu
YXhpcyk7CiAgICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg3YmQyOGViNDhhZTI0MDA2NTU4ZThm
ZjhlYWFmN2U2N2YxODQ0MTEuLjZkYzYzMWI3ODkzNDgzMjY0ZTBjNWEwOWM3ZWJiZTNkY2RjZTdl
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNDksOCArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3Jl
Z2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3
dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBA
IC0yNzQsMTggKzI3NCwxOCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1Rh
YmxlU2NoZW1hVjEoKQogCiBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxl
U2NoZW1hVjFBbHRlcm5hdGUoKQogewotICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2
ZWREb21haW5zXCIgKGRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9t
YWluIFRFWFQgTk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwg
Tk9UIE5VTEwsIGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIg
Tk9UIE5VTEwsIGlzUHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJ
TlRFR0VSIE5PVCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1l
c0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVM
TCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VS
IE5PVCBOVUxMLGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBO
T1QgTlVMTCkiOworICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5zXCIg
KGRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9U
IE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsIGhh
ZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsIGlz
UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBO
VUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2VkQXNG
aXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMLGlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7
CiB9CiAKIHN0YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkVW5hdHRyaWJ1dGVk
Q29sdW1ucygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRl
c3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWluSUQiLCAiZGVzdGluYXRp
b25TaXRlRG9tYWluSUQiLCAic291cmNlSUQiLCAidGltZU9mQWRDbGljayIsICJ0b2tlbiIsICJz
aWduYXR1cmUiLCAia2V5SUQiIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBt
YWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9z
LCAiZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xp
Y2siX3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwogICAgIHJldHVy
biBjb2x1bW5zLmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBl
Y3RlZEF0dHJpYnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5z
ID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5J
RCIsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhIiwgInByaW9yaXR5IiwgInRpbWVPZkFkQ2xpY2siLCAiZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UiLCAidG9rZW4iLCAic2lnbmF0dXJlIiwgImtleUlEIiwgImVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb24iIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklE
Il9zLCAiZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgImF0dHJpYnV0
aW9uVHJpZ2dlckRhdGEiX3MsICJwcmlvcml0eSJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJlYXJs
aWVzdFRpbWVUb1NlbmRUb1NvdXJjZSJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5
SUQiX3MsICJlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIl9zIH0pOwogICAgIHJldHVy
biBjb2x1bW5zLmdldCgpOwogfQogCkBAIC0yOTQsOSArMjk0LDkgQEAgc3RhdGljIGJvb2wgbmVl
ZHNOZXdDcmVhdGVUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHNjaGVtYSkKICAgICByZXR1cm4g
c2NoZW1hLmNvbnRhaW5zKCJSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwogfQogCi1zdGF0
aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNyZWF0ZVRhYmxlUXVlcmllcygpCitz
dGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgY3JlYXRlVGFibGVRdWVyaWVzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjcmVh
dGVUYWJsZVF1ZXJpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4geworICAgIHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IHsKICAgICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBjcmVhdGVPYnNlcnZlZERvbWFp
bn0sCiAgICAgICAgIHsgIlRvcExldmVsRG9tYWlucyJfcywgY3JlYXRlVG9wTGV2ZWxEb21haW5z
fSwKICAgICAgICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBjcmVh
dGVTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnN9LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZTQ4ZTgzMjZhMmE3MzVlZjkyNGY4NzM3
MmRjNzg2MzlkODIzOTMzMC4uYmIyYjNjNDYwMWMwZTM4NzJhY2MxYWUzM2M5NTg3YzQ4MjNiZmQz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00
OTcsOCArNDk3LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8VmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pj4gOiBWZWN0b3JBcmd1bWVudENv
ZGVyPHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUsIFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+PiB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIEhh
c2hUYWJsZVRyYWl0cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRy
YWl0cz4+IHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hNYXBU
eXBlOwogCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhh
c2hNYXBUeXBlJiBoYXNoTWFwKQogICAgIHsKQEAgLTUxNCw2ICs1MTQsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAg
ICBIYXNoTWFwVHlwZSBoYXNoTWFwOworICAgICAgICBoYXNoTWFwLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaGFzaE1hcFNpemUpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaGFz
aE1hcFNpemU7ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7CiAgICAg
ICAgICAgICBkZWNvZGVyID4+IGtleTsKQEAgLTU1MSw4ICs1NTIsOCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaQogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4gewotICAgIHR5cGVkZWYgSGFz
aFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaFNldFR5cGU7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0
PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CisgICAg
dHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVU
cmFpdHM+IEhhc2hTZXRUeXBlOwogCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsKQEAgLTU3OSw2ICs1ODAs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgICAgICBIYXNoU2V0VHlwZSBoYXNoU2V0OworICAgICAgICBoYXNoU2V0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoaGFzaFNldFNpemUpOwogICAgICAgICBmb3IgKHVpbnQ2NF90
IGkgPSAwOyBpIDwgaGFzaFNldFNpemU7ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5
QXJnPiBrZXk7CiAgICAgICAgICAgICBkZWNvZGVyID4+IGtleTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KaW5kZXggNDky
YjljNjQ0MmJlMTU0ZDUxZGRmNzY5ZjU5M2U4MDg0ZWIxYmQ2ZC4uOWE0ZDc4MDllNjNlNDg1MjQy
NWYyMDU3Yzg2MDEzMmE1OGE1YTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvVmVyc2lvbkNoZWNrcy5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4K
ICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhh
c2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtp
bmcuaD4KICNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTU4LDcgKzU5LDcgQEAgT3B0aW9u
YWw8VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gZ2V0QXBwQm91bmREb21haW5z
VGVzdGluZyhjb25zdCBTdHIKICAgICBpZiAoYnVuZGxlSUQuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3Qg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4+IHsKKyAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBt
YWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PFN0cmluZywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gewogICAgICAgICB7
ImluQXBwQnJvd3NlclByaXZhY3lUZXN0SWRlbnRpZmllciJfcywgVmVjdG9yPFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiB7IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoIjEyNy4wLjAuMSIpIH19LAogICAgIH0p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4
IGJiY2VlNDE2OTljMGQ1Zjg0ZGM2Yzc5MmFiNjQ0YzZmZGQ4MWQwZDcuLmNlNTZmOWNkNDYyODYw
OTRjNmU0MTQxMGVlYmI0Zjk0OWQ3ZWZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuY3BwCkBAIC01MiwxMyArNTIsMTMgQEAgdm9pZCBXZWJQcmVmZXJl
bmNlc1N0b3JlOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiBib29sIFdl
YlByZWZlcmVuY2VzU3RvcmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYlByZWZl
cmVuY2VzU3RvcmUmIHJlc3VsdCkKIHsKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmluZywgVmFs
dWU+PiB2YWx1ZXM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IHZhbHVlczsKICAgICBkZWNvZGVy
ID4+IHZhbHVlczsKICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJlc3VsdC5tX3ZhbHVlcyA9IFdURk1vdmUoKnZhbHVlcyk7CiAKLSAgICBPcHRpb25hbDxIYXNo
TWFwPFN0cmluZywgVmFsdWU+PiBvdmVycmlkZGVuRGVmYXVsdHM7CisgICAgT3B0aW9uYWw8VmFs
dWVNYXA+IG92ZXJyaWRkZW5EZWZhdWx0czsKICAgICBkZWNvZGVyID4+IG92ZXJyaWRkZW5EZWZh
dWx0czsKICAgICBpZiAoIW92ZXJyaWRkZW5EZWZhdWx0cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IGM1ZmUz
ZmIzZmJiNjIxNmRlYmUwMDA5ZGY1NTBjNWNhNmQ2ZjM2MDguLjRhM2Q4ZjJhNGU0Y2YwYzc4MWU5
NzIyZjc3OTdkZjM2MTA2YzgxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNp
bmNsdWRlICJFbmNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNyArNjYsNyBAQCBzdHJ1
Y3QgV2ViUHJlZmVyZW5jZXNTdG9yZSB7CiAKICAgICB1c2luZyBWYWx1ZSA9IFZhcmlhbnQ8U3Ry
aW5nLCBib29sLCB1aW50MzJfdCwgZG91YmxlPjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFZhbHVlPiBWYWx1ZU1hcDsKKyAgICB1c2luZyBWYWx1ZU1hcCA9IE1lbW9yeUNvbXBhY3RS
b2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgVmFsdWU+OwogICAgIFZhbHVlTWFwIG1fdmFsdWVzOwog
ICAgIFZhbHVlTWFwIG1fb3ZlcnJpZGRlbkRlZmF1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDJmMGFh
YjVhOWI3ODI0M2U5NzQ5NGI3NTQxNDQxY2E0ZTEzZjNiODcuLjA0MTc0OGI5MDQ0YWQyNTM2ODhl
YWFjZWJhZjlhOGZlNmU3ZjAwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC02NSw5ICs2NSw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgU2Vjb25kcyB1bmV4cGVjdGVkQWN0aXZpdHlE
dXJhdGlvbiA9IDEwX3M7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5
OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKK2NvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBs
YXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nl
c3Moc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxh
dGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3Ry
aW5nPiB7CiAgICAgICAgIFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBs
ZS5XZWJDb3JlIl0ucmVzb3VyY2VQYXRoLnN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGgsCiAgICAg
ICAgIFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXS5y
ZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aAogICAgIH0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggNWE2NjIwMjI5MTMwNGJi
ZDczN2UxMTZiODg3YWM0Zjk5NjNhZjE0Yy4uNTlkODAwYWZiNDNiNzQ1MDM5YjBiNDgzMzUxZTQ4
NDIzYzUzYTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
Y3BwCkBAIC0xNjI0LDkgKzE2MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlQmFj
a2dyb3VuZFJlc3BvbnNpdmVuZXNzVGltZXIoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQot
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRo
QXNzdW1lZFJlYWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1
bWVkUmVhZEFjY2VzcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3Ry
aW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiAgICAgcmV0dXJuIHBsYXRm
b3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggNjhkNjZjNjE1ZWJhNmU5N2IwYTNjODBk
NDM0YjFiMTE0OGIyZDA3Yy4uYWIxMzU1NTk2ZDU3MzM2NzFmZDMyMmUwNmMzMjUwMjZhOTc0OTMw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTU5LDYg
KzU5LDcgQEAKICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogI2lmIEhBVkUoVklTSUJJ
TElUWV9QUk9QQUdBVElPTl9WSUVXKQpAQCAtNDc2LDcgKzQ3Nyw3IEBAIGNsYXNzIFdlYlByb2Nl
c3NQcm94eSA6IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHB1YmxpYyBSZXNwb25zaXZl
bmVzc1RpbWVyCiAgICAgYm9vbCBwbGF0Zm9ybUlzQmVpbmdEZWJ1Z2dlZCgpIGNvbnN0OwogICAg
IGJvb2wgc2hvdWxkQWxsb3dOb25WYWxpZEluamVjdGVkQ29kZSgpIGNvbnN0OwogCi0gICAgc3Rh
dGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwog
CiAgICAgUmVzcG9uc2l2ZW5lc3NUaW1lciYgcmVzcG9uc2l2ZW5lc3NUaW1lcigpIHsgcmV0dXJu
IG1fcmVzcG9uc2l2ZW5lc3NUaW1lcjsgfQogICAgIHZvaWQgdXBkYXRlQmFja2dyb3VuZFJlc3Bv
bnNpdmVuZXNzVGltZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA0OTQ3YWZmNDA0N2U4YTFhNzA3MDk5ZWVjZjc4YzA4MmZlNzMzMTk2Li5k
NTk1MzcxZjdiNWE3NDVkNTdkNzBlZDNiM2YxZWU2MDUxZmQxOGNjIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMjEt
MDMtMzEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RG
XSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NP
Zk9wZXJhdG9yLmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdFbnN1cmUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Sb2Jpbkhvb2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvSGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpaZXJvSGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPYmplY3RXaXRo
UmVmTG9nZ2VyOjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RNb3ZpbmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92
aW5nVXNpbmdBZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVm
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6VGVzdE9i
amVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RP
YmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rv
cik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5j
cHA6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3Bw
LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdEluaXRpYWxDYXBhY2l0eSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+KToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpEZXJlZk9i
c2VydmVyOjpyZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6ZGVy
ZWYpOgorCiAyMDIxLTAzLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2VydmljZSBXb3JrZXIgc2NyaXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGluIHRoZSBu
ZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0
cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IDljNTVlNGY2
ZWFhOGU1YmFhYWRhMTIyNTY2MjA1OWVkZjYyNWNkMGUuLjNmN2NmZmRlMjkxYzJkODJkZDEyNTFi
YmVjOGM4MTMxMTI3ZmJlZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApAQCAtNzks
NiArNzksOCBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgVGVzdHMvV1RGL1JlZkNvdW50ZXIu
Y3BwCiAgICAgVGVzdHMvV1RGL1JlZkxvZ2dlci5jcHAKICAgICBUZXN0cy9XVEYvUmVmUHRyLmNw
cAorICAgIFRlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcAorICAgIFRlc3RzL1dURi9Sb2Jp
bkhvb2RIYXNoU2V0LmNwcAogICAgIFRlc3RzL1dURi9SdW5Mb29wLmNwcAogICAgIFRlc3RzL1dU
Ri9TSEExLmNwcAogICAgIFRlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmJhMDMyYzg1ODNiOWYxODc4ODE4YmE2NDk2
OTM0NmM0ZTA0YjczMy4uYTljNzQ4MTI4YTM4ODRmOTFlMGFjN2Q0MzI2OWJkMGMyZWU1ZGVmZSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMTIsNiArMTExMiw4IEBACiAJCUUzMjVDOTA3
MjNFMzg3MDIwMEJDN0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjVDOTA2MjNFMzg3MDIwMEJD
N0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSAqLzsgfTsKIAkJRTMyQjU0OTIyMjgx
MEFDNDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzJCNTQ5MTIyODEwQUMwMDA4QUQ3MDIgLyogUGFja2VkLmNwcCAq
LzsgfTsKIAkJRTM0QTZEMTkyNDEyREUzOTAwMTJBQjZFIC8qIEdyYW50QWNjZXNzVG9QcmVmZXJl
bmNlc1NlcnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzRBNkQxODI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZlcmVuY2Vz
U2VydmljZS5tbSAqLzsgfTsKKwkJRTM1NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9v
ZEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3BwICovOyB9
OworCQlFMzU1QTYzMjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1QTYzMTI2MTU3
MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgKi87IH07CiAJCUUzNUI5MDgyMjNG
NjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUI5MDgxMjNGNjBERDAwMDAwMTFGRiAv
KiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSAqLzsgfTsKIAkJRTM1RkM3QjIyMkI4MkE3MzAwRjMy
Rjk4IC8qIEpTTG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUZDN0IxMjJCODJBNkQwMEYzMkY5OCAvKiBKU0xv
Y2tUYWtlc1dlYlRocmVhZExvY2subW0gKi87IH07CiAJCUUzNzNENzkxMUYyQ0YzNTIwMEM2RkFB
RiAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzOTUzRjk1MUYyQ0YzMjEwMEE3NkEyRSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKQEAg
LTI4OTksNiArMjkwMSw4IEBACiAJCUUzMjVDOTA2MjNFMzg3MDIwMEJDN0QzQiAvKiBQaWN0dXJl
SW5QaWN0dXJlU3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBpY3R1cmVJblBpY3R1
cmVTdXBwb3J0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJCNTQ5MTIyODEw
QUMwMDA4QUQ3MDIgLyogUGFja2VkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhY2tlZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEE2RDE4MjQxMkRFMzkwMDEyQUI2RSAv
KiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gR3JhbnRBY2Nlc3NUb1ByZWZlcmVuY2VzU2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTVBNjMxMjYxNTcxOEYwMDFD
MTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJvYmluSG9vZEhhc2hNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzVCOTA4MTIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxpemVkRGV2aWNlTW9kZWwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4IC8qIEpTTG9ja1Rh
a2VzV2ViVGhyZWFkTG9jay5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEpTTG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM4ODg4NzAyMEM5MDk4MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyUG9vbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NDAyLDYgKzQ0MDYsOCBAQAogCQkJCTQ0MkJCRjY4MUM5MUNB
RDkwMDE3MDg3RiAvKiBSZWZMb2dnZXIuY3BwICovLAogCQkJCTkzQTQyN0FEMTgwREE2MEYwMENE
MjRENyAvKiBSZWZMb2dnZXIuaCAqLywKIAkJCQk5M0E0MjdBODE4MEQ5QjA3MDBDRDI0RDcgLyog
UmVmUHRyLmNwcCAqLywKKwkJCQlFMzU1QTYzMTI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29k
SGFzaE1hcC5jcHAgKi8sCisJCQkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9v
ZEhhc2hTZXQuY3BwICovLAogCQkJCUU0QzlBQkM3MUIzREIxNzEwMDQwQTk4NyAvKiBSdW5Mb29w
LmNwcCAqLywKIAkJCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCTFBMzUyNEFDMUQ2M0E0RkIwMDMxNzI5QiAvKiBT
Y29wZS5jcHAgKi8sCkBAIC01MTQ4LDYgKzUxNTQsOCBAQAogCQkJCTdDODNERjE2MUQwQTU5MEMw
MEZFQkNGMyAvKiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDRBQzhCQzYyMUQwMjQ1
QTAwQ0FGQjM0IC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYyNDFE
MEE1OTBDMDBGRUJDRjMgLyogUmV0YWluUHRyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1NUE2
MzIyNjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRTM1NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJ1bkxvb3AuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjYxRDBBNTkwQzAwRkVCQ0YzIC8qIFNhdHVyYXRl
ZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzUyNEFFMUQ2
M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgK
aW5kZXggNDVjY2ZhNDAzMGUxMmFkM2M1YTZkYzM3NGMxNWJkOWVkMzEwOTAyYS4uZmRmYWJlZWM0
YmY0ZTBkMDdjZjg1MGM0MjJjNDEyNGI0N2U0NzFiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKQEAgLTc3
LDYgKzc3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8RGVsZXRlZEFkZHJlc3NP
Zk9wZXJhdG9yPiB7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNI
YXNoSW5WYWx1ZSA9IHRydWU7IC8vIFRoaXMgaXMgbm90IGNvcnJlY3QsIGJ1dCBmb3IgZGVidWdn
aW5nIG9mIFJvYmluSG9vZEhhc2hTZXQuCiB9OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hNYXAuY3BwCmluZGV4IGFhYmU3ZGRhYzI3NzNiNmY3OTZlMjA0MGIzMjJiZTU5
ZTFmMDc4NmQuLmM4NDNlN2M1NWFiMTM0M2U4MDJhYjc4NDcwNDdmOWY4NmE1MjQ3YjggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCkBAIC02NjgsMTQgKzY2OCwx
NCBAQCBjbGFzcyBPYmplY3RXaXRoUmVmTG9nZ2VyIHsKIH07CiAKIAotdm9pZCB0ZXN0TW92aW5n
VXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0ZXN0TW92
aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7CiAgICAg
CiAgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gbWFrZVVuaXF1ZTxPYmplY3RXaXRoUmVm
TG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOyB9KTsKIH0KIAotdm9pZCB0ZXN0TW92aW5nVXNpbmdB
ZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdB
ZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgc3Rk
Ojp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKaW5kZXggZTdjZmJjY2FkMWQ0NTljZDY0Y2EyMTI4
ODhhN2E5NjJjZDVlMzAzMS4uYjBjNjQ5MjI2ZWVhM2JjZjMxZTBiMDI4NjQ4NTdlYmQ2NjRiN2Q0
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKQEAgLTcwLDEx
ICs3MCwxMSBAQCB2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHkoKQogICAgIEVYUEVDVF9HVChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSwgaW5pdGlhbENhcGFjaXR5KTsK
IH0KIAotdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVw
VG9TaXplKCk7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTww
PigpCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBh
Y2l0eVVwVG9TaXplKCk7Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFj
aXR5VXBUb1NpemU8MD4oKQogewogfQotdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9pZCBnZW5l
cmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGlu
ZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQogewogICAgIGdlbmVyYXRlVGVz
dENhcGFjaXR5VXBUb1NpemU8c2l6ZSAtIDE+KCk7CiAgICAgdGVzdEluaXRpYWxDYXBhY2l0eTxz
aXplPigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9u
bHkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmgKaW5kZXggZDlj
MjA2YzI4ZWM0OWRjY2QwY2Y5ZDQwN2FkMzcyZmFjMDI0NGJhZC4uYTEwYzVlOGY4NjUxZTdkYTY0
MmZjNGZkZjAxZDJlMGU4ZjUzNTcwNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTW92ZU9ubHkuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9N
b3ZlT25seS5oCkBAIC05NCw3ICs5NCw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PE1vdmVPbmx5PiB7CiAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQogCi0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsgLy8gVGhp
cyBpcyBub3QgY29ycmVjdCwgYnV0IGZvciBkZWJ1Z2dpbmcgb2YgUm9iaW5Ib29kSGFzaFNldC4K
IH07CiB9IC8vIG5hbWVzcGFjZSBXVEYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjA3NDc4MTRjN2RjYzEw
NzlkZGM4NTg1Mzc0NzVkNTdhZTE0M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAKQEAgLTAsMCArMSwxMjY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNvdW50
ZXJzLmgiCisjaW5jbHVkZSAiRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgiCisjaW5jbHVkZSAi
TW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBSb2Jpbkhvb2RIYXNoIDogcHVibGljIERlZmF1bHRIYXNoPFQ+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKwor
dHlwZWRlZiBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQs
IGludCwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBJbnRIYXNoTWFwOworCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBIYXNoVGFibGVJdGVyYXRvckNvbXBhcmlzb24pCit7CisgICAgSW50SGFzaE1h
cCBtYXA7CisgICAgbWFwLmFkZCgxLCAyKTsKKyAgICBBU1NFUlRfVFJVRShtYXAuYmVnaW4oKSAh
PSBtYXAuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVnaW4oKSA9PSBtYXAuZW5kKCkp
OworCisgICAgSW50SGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBtYXAuYmVnaW4oKTsK
KyAgICBBU1NFUlRfVFJVRShiZWdpbiA9PSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJUX1RSVUUo
bWFwLmJlZ2luKCkgPT0gYmVnaW4pOworICAgIEFTU0VSVF9UUlVFKGJlZ2luICE9IG1hcC5lbmQo
KSk7CisgICAgQVNTRVJUX1RSVUUobWFwLmVuZCgpICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFM
U0UoYmVnaW4gIT0gbWFwLmJlZ2luKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVnaW4oKSAh
PSBiZWdpbik7CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luID09IG1hcC5lbmQoKSk7CisgICAgQVNT
RVJUX0ZBTFNFKG1hcC5lbmQoKSA9PSBiZWdpbik7Cit9CisKK3N0cnVjdCBUZXN0RG91YmxlSGFz
aFRyYWl0cyA6IEhhc2hUcmFpdHM8ZG91YmxlPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5p
bXVtVGFibGVTaXplID0gODsKK307CisKK3R5cGVkZWYgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPGRvdWJsZSwgaW50NjRfdCwgUm9iaW5Ib29kSGFzaDxkb3VibGU+LCBU
ZXN0RG91YmxlSGFzaFRyYWl0cz4gRG91YmxlSGFzaE1hcDsKKworc3RhdGljIGludCBidWNrZXRG
b3JLZXkoZG91YmxlIGtleSkKK3sKKyAgICByZXR1cm4gRGVmYXVsdEhhc2g8ZG91YmxlPjo6aGFz
aChrZXkpICYgKFRlc3REb3VibGVIYXNoVHJhaXRzOjptaW5pbXVtVGFibGVTaXplIC0gMSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBCaWdUYWJsZUhhc2hUcmFpdHMgOiBwdWJs
aWMgSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXpl
ID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNpemU8NDA5Nj46OnZhbHVlOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFplcm9IYXNoIDogcHVibGljIEludEhhc2g8VD4gewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKSB7IHJldHVybiAwOyB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIERvdWJsZUhhc2hDb2xsaXNpb25zKQoreworICAgIC8vIFRoZSAi
Y2xvYmJlciIga2V5IGhlcmUgaXMgb25lIHRoYXQgZW5kcyB1cCBzdGVhbGluZyB0aGUgYnVja2V0
IHRoYXQgdGhlIC0wIGtleQorICAgIC8vIG9yaWdpbmFsbHkgd2FudHMgdG8gYmUgaW4uIFRoaXMg
bWFrZXMgdGhlIDAgYW5kIC0wIGtleXMgY29sbGlkZSBhbmQgdGhlIHRlc3QgdGhlbgorICAgIC8v
IGZhaWxzIHVubGVzcyB0aGUgRmxvYXRIYXNoOjplcXVhbHMoKSBpbXBsZW1lbnRhdGlvbiBjYW4g
ZGlzdGluZ3Vpc2ggdGhlbS4KKyAgICBjb25zdCBkb3VibGUgY2xvYmJlcktleSA9IDY7CisgICAg
Y29uc3QgZG91YmxlIHplcm9LZXkgPSAwOworICAgIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9L
ZXkgPSAtemVyb0tleTsKKworICAgIERvdWJsZUhhc2hNYXAgbWFwOworICAgIG1hcC5hZGQoY2xv
YmJlcktleSwgMSk7CisgICAgbWFwLmFkZCh6ZXJvS2V5LCAyKTsKKyAgICBtYXAuYWRkKG5lZ2F0
aXZlWmVyb0tleSwgMyk7CisKKyAgICBBU1NFUlRfRVEoYnVja2V0Rm9yS2V5KGNsb2JiZXJLZXkp
LCBidWNrZXRGb3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQo
Y2xvYmJlcktleSksIDEpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KHplcm9LZXkpLCAyKTsKKyAg
ICBBU1NFUlRfRVEobWFwLmdldChuZWdhdGl2ZVplcm9LZXkpLCAzKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgTW92ZU9ubHlWYWx1ZXMpCit7CisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBNb3ZlT25seSwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IG1vdmVPbmx5VmFsdWVzOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAg
IG1vdmVPbmx5VmFsdWVzLnNldChpICsgMSwgV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9
IG1vdmVPbmx5VmFsdWVzLmZpbmQoaSArIDEpOworICAgICAgICBBU1NFUlRfRkFMU0UoaXQgPT0g
bW92ZU9ubHlWYWx1ZXMuZW5kKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgNTA7ICsraSkKKyAgICAgICAgQVNTRVJUX0VRKG1vdmVPbmx5VmFsdWVzLnRha2UoaSArIDEp
LnZhbHVlKCksIGkgKyAxKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSA1MDsgaSA8IDEwMDsgKytp
KQorICAgICAgICBBU1NFUlRfVFJVRShtb3ZlT25seVZhbHVlcy5yZW1vdmUoaSArIDEpKTsKKwor
ICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5VmFsdWVzLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIE1vdmVPbmx5S2V5cykKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8TW92ZU9ubHksIHVuc2lnbmVkPiBtb3ZlT25seUtleXM7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVP
bmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgbW92ZU9ubHlLZXlzLnNldChXVEZNb3ZlKG1v
dmVPbmx5KSwgaSArIDEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAw
OyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9IG1vdmVPbmx5S2V5cy5maW5kKE1vdmVPbmx5KGkg
KyAxKSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShpdCA9PSBtb3ZlT25seUtleXMuZW5kKCkpOwor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFT
U0VSVF9GQUxTRShtb3ZlT25seUtleXMuYWRkKE1vdmVPbmx5KGkgKyAxKSwgaSArIDEpLmlzTmV3
RW50cnkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAg
QVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAg
IEFTU0VSVF9UUlVFKG1vdmVPbmx5S2V5cy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBJbml0aWFsaXplckxpc3QpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnN0cmluZywgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IG1hcCA9IHsKKyAgICAgICAgeyAxLCAib25lIiB9LAorICAgICAgICB7IDIs
ICJ0d28iIH0sCisgICAgICAgIHsgMywgInRocmVlIiB9LAorICAgICAgICB7IDQsICJmb3VyIiB9
LAorICAgIH07CisKKyAgICBFWFBFQ1RfRVEoNHUsIG1hcC5zaXplKCkpOworCisgICAgRVhQRUNU
X0VRKCJvbmUiLCBtYXAuZ2V0KDEpKTsKKyAgICBFWFBFQ1RfRVEoInR3byIsIG1hcC5nZXQoMikp
OworICAgIEVYUEVDVF9FUSgidGhyZWUiLCBtYXAuZ2V0KDMpKTsKKyAgICBFWFBFQ1RfRVEoImZv
dXIiLCBtYXAuZ2V0KDQpKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoKSwgbWFwLmdldCg1
KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVmZmljaWVudEdldHRlcikKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIENv
cHlNb3ZlQ291bnRlciwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICBtYXAuc2V0
KDEsIENvcHlNb3ZlQ291bnRlcigpKTsKKworICAgIHsKKyAgICAgICAgQ29weU1vdmVDb3VudGVy
OjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgICAgIG1hcC5nZXQoMSk7CisgICAgICAgIEVYUEVD
VF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgICAgIEVY
UEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQpOworICAgICAgICBFWFBFQ1Rf
RVEoMFUsIENvcHlNb3ZlQ291bnRlcjo6bW92ZUNvdW50KTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIENvcHlNb3ZlQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgICAgICBtYXAuZ2V0
KDIpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMFUsIENvcHlNb3ZlQ291bnRlcjo6Y29weUNvdW50
KTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6Om1vdmVDb3VudCk7Cisg
ICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXkpCit7Cisg
ICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAgIGF1
dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigp
OworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAg
IEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25D
b3VudCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9DdXN0b21EZWxldGVyKQor
eworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBjb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyU2NvcGU7CisgICAgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj46OlRlc3RpbmdTY29wZSBkZWxldGVyQ291bnRlclNjb3BlOwor
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9w
dHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4+Pj4gbWFwOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+PiB1bmlxdWVQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIo
KSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKSk7CisgICAg
bWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
KworICAgIEVYUEVDVF9FUSgwdSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj46OmRlbGV0ZXJDb3VudCgpKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0
cnVjdGlvbkNvdW50KTsKKworICAgIEVYUEVDVF9FUSgxdSwgRGVsZXRlckNvdW50ZXI8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcj46OmRlbGV0ZXJDb3VudCgpKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0
cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBtYXA7CisK
KyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGlu
dD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZN
b3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgYXV0byBpdCA9IG1hcC5maW5kKHB0cik7CisgICAg
QVNTRVJUX1RSVUUoaXQgIT0gbWFwLmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+a2V5
LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaXQtPnZhbHVlKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0NvbnRhaW5zVXNpbmdSYXdQb2ludGVyKQorewor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9w
dHI8aW50PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gbWFwOwor
CisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxp
bnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RG
TW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBtYXAuY29udGFpbnMo
cHRyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9HZXRV
c2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlx
dWVfcHRyPGludD4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRo
b3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0
KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgaW50IHZhbHVl
ID0gbWFwLmdldChwdHIpOworICAgIEVYUEVDVF9FUSgyLCB2YWx1ZSk7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0
ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAg
IGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
PigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5n
ZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworCisgICAgYm9vbCByZXN1bHQgPSBtYXAucmVtb3ZlKHB0cik7CisgICAgRVhQ
RUNUX0VRKHRydWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfVGFrZVVzaW5nUmF3UG9pbnRlcikK
K3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7
CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8
c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisg
ICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRy
LmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbWFwLnRha2UocHRyKTsKKyAgICBFWFBF
Q1RfRVEoMiwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVJlZlZhbHVlKQoreworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFVuaXF1ZVJlZjxpbnQ+LCBSb2Jpbkhvb2RI
YXNoPGludD4+IG1hcDsKKyAgICBVbmlxdWVSZWY8aW50PiBmaXZlID0gbWFrZVVuaXF1ZVJlZldp
dGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBtYXAuYWRkKDUsIFdURk1vdmUoZml2
ZSkpOworICAgIEVYUEVDVF9UUlVFKG1hcC5jb250YWlucyg1KSk7CisgICAgaW50KiBzaG91bGRC
ZUZpdmUgPSBtYXAuZ2V0KDUpOworICAgIEVYUEVDVF9FUSgqc2hvdWxkQmVGaXZlLCA1KTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiB0YWtlbkZpdmUgPSBtYXAudGFrZSg1KTsKKyAgICBFWFBF
Q1RfRVEoKnRha2VuRml2ZSwgNSk7CisgICAgbWFwLmVuc3VyZSg2LCBbXSB7CisgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDYpOworICAgIH0p
OworICAgIEVYUEVDVF9GQUxTRShtYXAuY29udGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKG1h
cC5jb250YWlucyg2KSk7CisgICAgZm9yIChVbmlxdWVSZWY8aW50PiYgYSA6IG1hcC52YWx1ZXMo
KSkKKyAgICAgICAgRVhQRUNUX0VRKGEuZ2V0KCksIDYpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxv
Z2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAg
ICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRVc2luZ1JlbGVhc2UpCit7Cisg
ICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwg
Um9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8
UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocHRyKSwgMCk7Cisg
ICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRk
VXNpbmdNb3ZlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxS
ZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChXVEZN
b3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgUmVmUHRyS2V5X0FkZFVzaW5nUmF3KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxv
Z2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAg
ICAgbWFwLmFkZChwdHIuZ2V0KCksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVm
KGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRLZXlBbHJlYWR5UHJl
c2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jp
bkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgeworICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQor
CisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7
CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmFkZChwdHIyLCAwKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAu
Y2xlYXIoKTsKKworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNf
c3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNp
bmdSZWxlYXNlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRy
PFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFw
LmFkZChwdHIsIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQo
V1RGTW92ZShwdHIyKSwgMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RS
RVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92ZUtleUFscmVhZHlQcmVzZW50KQor
eworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhh
c2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZM
b2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9CisKKyAgICBF
WFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKFdURk1vdmUocHRyMiksIDApOworICAgICAgICBF
WFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1h
cC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXQp
Cit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4s
IGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBS
ZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisgICAg
fQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
UmVmUHRyS2V5X1NldFVzaW5nUmVsZWFzZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZM
b2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZM
b2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAg
ICAgIG1hcC5zZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEo
InJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZSkKK3sKKyAgICB7Cisg
ICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhv
b2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dn
ZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ1Jh
dykKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLmdldCgpLCAw
KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZQdHJLZXlfU2V0S2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAg
ICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFz
aDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBw
dHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVR
KCJyZWYoYSkgcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbWFwLnNldChwdHIyLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChw
dHIuZ2V0KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RS
RVEoImRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nUmVsZWFzZUtleUFscmVh
ZHlQcmVzZW50KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxS
ZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIs
IDApOworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4g
cHRyMigmYSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RGTW92ZShw
dHIyKSwgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAg
IH0KKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIFJlZlB0cktleV9TZXRVc2luZ01vdmVLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7Cisg
ICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhv
b2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dn
ZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBFQ1Rf
U1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgICAg
IHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtYXAuc2V0KFdURk1vdmUocHRyMiksIDEpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USgxLCBtYXAuZ2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKwor
ICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmUpCit7CisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwg
Um9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbWFwLmVuc3VyZSgxLCBbXSB7IHJldHVybiAxOyB9KTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBh
ZGRSZXN1bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbWFwLmVuc3VyZSgxLCBbXSB7
IHJldHVybiAyOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfTW92ZU9ubHlWYWx1ZXMpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBN
b3ZlT25seSwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1vdmVPbmx5VmFsdWVzOworICAgIHsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtb3ZlT25seVZhbHVlcy5lbnN1cmUoMSwgW10geyBy
ZXR1cm4gTW92ZU9ubHkoMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0
Lml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0MiA9IG1vdmVPbmx5VmFsdWVzLmVuc3VyZSgxLCBb
XSB7IHJldHVybiBNb3ZlT25seSgyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVz
dWx0Mi5pdGVyYXRvci0+dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRk
UmVzdWx0Mi5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIu
aXNOZXdFbnRyeSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1
cmVfVW5pcXVlUG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZD4sIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+PiBtYXA7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5l
bnN1cmUoMSwgW10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8dW5z
aWduZWQ+KDEpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFwLmdldCgxKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdDIg
PSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0No
ZWNrPHVuc2lnbmVkPigyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKm1hcC5nZXQoMSkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsICphZGRSZXN1bHQyLml0ZXJhdG9yLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5KTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfUmVmUHRyKQoreworICAgIERlcml2ZWRS
ZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25l
ZD4+IG1hcDsKKworICAgIG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIFJlZlB0cjxSZWZMb2dn
ZXI+KCZhKTsgfSk7CisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNf
c3RyKCkpOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRyPFJlZkxvZ2dl
cj4oJmEpOyB9KTsKKyAgICBFWFBFQ1RfU1RSRVEoIiIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK2NsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iamVjdFdpdGhSZWZMb2dn
ZXIoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCisgICAgICAgIDogbV9sb2dnZXIoV1RGTW92ZShs
b2dnZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBSZWY8UmVmTG9nZ2VyPiBtX2xvZ2dlcjsKK307
CisKKworc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJlZjxSZWZMb2dnZXI+JiYg
bG9nZ2VyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jpbkhvb2RI
YXNoPHVuc2lnbmVkPj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gbWFr
ZVVuaXF1ZTxPYmplY3RXaXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOyB9KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dnZXI+JiYgbG9nZ2VyKQor
eworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwg
c3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPHVuc2ln
bmVkPj4gbWFwOworCisgICAgYXV0byYgc2xvdCA9IG1hcC5hZGQoMSwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOworICAgIHNsb3QgPSBtYWtlVW5pcXVlPE9iamVjdFdpdGhSZWZMb2dnZXI+KFdU
Rk1vdmUobG9nZ2VyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9M
YW1iZGFzQ2FwdHVyaW5nQnlSZWZlcmVuY2UpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVm
TG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICB0
ZXN0TW92aW5nVXNpbmdFbnN1cmUoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBFWFBFQ1RfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxv
Z2dlcj4gcmVmKGEpOworICAgICAgICB0ZXN0TW92aW5nVXNpbmdBZGQoV1RGTW92ZShyZWYpKTsK
KworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisgICAgfQorfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFZhbHVl
SXNEZXN0cnVjdGVkT25SZW1vdmUpCit7CisgICAgc3RydWN0IERlc3RydWN0b3JPYnNlcnZlciB7
CisgICAgICAgIERlc3RydWN0b3JPYnNlcnZlcigpID0gZGVmYXVsdDsKKworICAgICAgICBEZXN0
cnVjdG9yT2JzZXJ2ZXIoYm9vbCogZGVzdHJ1Y3RlZCkKKyAgICAgICAgICAgIDogZGVzdHJ1Y3Rl
ZChkZXN0cnVjdGVkKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+RGVzdHJ1Y3Rv
ck9ic2VydmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRlc3RydWN0ZWQpCisgICAg
ICAgICAgICAgICAgKmRlc3RydWN0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgRGVz
dHJ1Y3Rvck9ic2VydmVyKERlc3RydWN0b3JPYnNlcnZlciYmIG90aGVyKQorICAgICAgICAgICAg
OiBkZXN0cnVjdGVkKG90aGVyLmRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90
aGVyLmRlc3RydWN0ZWQgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgRGVzdHJ1Y3Rv
ck9ic2VydmVyJiBvcGVyYXRvcj0oRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlc3RydWN0ZWQgPSBvdGhlci5kZXN0cnVjdGVkOworICAgICAgICAg
ICAgb3RoZXIuZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICBib29sKiBkZXN0cnVjdGVkIHsgbnVsbHB0ciB9OworICAg
IH07CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBE
ZXN0cnVjdG9yT2JzZXJ2ZXIsIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgYm9vbCBk
ZXN0cnVjdGVkID0gZmFsc2U7CisgICAgbWFwLmFkZCg1LCBEZXN0cnVjdG9yT2JzZXJ2ZXIgeyAm
ZGVzdHJ1Y3RlZCB9KTsKKworICAgIEVYUEVDVF9GQUxTRShkZXN0cnVjdGVkKTsKKworICAgIGJv
b2wgcmVtb3ZlUmVzdWx0ID0gbWFwLnJlbW92ZSg1KTsKKworICAgIEVYUEVDVF9UUlVFKHJlbW92
ZVJlc3VsdCk7CisgICAgRVhQRUNUX1RSVUUoZGVzdHJ1Y3RlZCk7Cit9CisKK3N0cnVjdCBEZXJl
Zk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgTkVW
RVJfSU5MSU5FIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAg
IE5FVkVSX0lOTElORSB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0tY291bnQ7CisgICAg
ICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfQorICAgIHVu
c2lnbmVkIGNvdW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9ic2VydmVyPiogYnVj
a2V0QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2VydmVyKiBvYnNlcnZl
ZEJ1Y2tldCB7IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJl
ZlB0ck5vdFplcm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2ZXIgPSBtYWtlVW5p
cXVlPERlcmVmT2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
UHRyPERlcmVmT2JzZXJ2ZXI+Pj4gbWFwOworICAgIG1hcC5hZGQoYWRvcHRSZWYob2JzZXJ2ZXIu
Z2V0KCkpLCA1KTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXAuZmluZChvYnNlcnZlci5nZXQo
KSk7CisgICAgRVhQRUNUX1RSVUUoaXRlcmF0b3IgIT0gbWFwLmVuZCgpKTsKKworICAgIG9ic2Vy
dmVyLT5idWNrZXRBZGRyZXNzID0gJml0ZXJhdG9yLT5rZXk7CisKKyAgICBFWFBFQ1RfVFJVRShv
YnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUobWFw
LnJlbW92ZShvYnNlcnZlci5nZXQoKSkpOworCisgICAgLy8gUm9iaW5Ib29kSGFzaFNldCBkb2Vz
IG5vdCB1c2UgdG9tYnN0b25lLiBUaGUgdXNlZCBidWNrZXQgbWF5IGluY2x1ZGUgYW4gZXhpc3Rp
bmcgZW50cnksIG9yIGVtcHR5LgorICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgZGlkIG5vdCBhZGQg
dGhlIG90aGVyIERlcmVmT2JzZXJ2ZXIuIFNvIHRoaXMgbXVzdCBiZSBhbiBlbXB0eSAobnVsbHB0
cikuCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG51bGxwdHIp
OworICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgUmVmX0tleSkKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUo
cmVmKSwgMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIp
OworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8
UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisg
ICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHJl
ZiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJl
ZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAg
ICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVm
QSksIDEpOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEyKGEpOworICAgICAgICBtYXAu
c2V0KFdURk1vdmUocmVmQTIpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RI
YXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihh
KTsKKyAgICAgICAgbWFwLmVuc3VyZShXVEZNb3ZlKHJlZiksIFtdKCkgeworICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVm
TG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2Vy
Pj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5h
ZGQoV1RGTW92ZShyZWYpLCAxKTsKKworICAgICAgICBhdXRvIGl0ID0gbWFwLmZpbmQoJmEpOwor
ICAgICAgICBBU1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworCisgICAgICAgIEFTU0VSVF9F
UShpdC0+a2V5LnB0cigpLCAmYSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDEpOwor
ICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4s
IGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKwor
ICAgICAgICBtYXAucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dl
cj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAu
YWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgaW50IGkgPSBtYXAudGFrZSgmYSk7Cisg
ICAgICAgIEFTU0VSVF9FUShpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50
LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ug
UmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1ZXNzLgor
ICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZMb2dnZXIo
ImEiKSk7CisgICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOworICAgICAgICAg
ICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIGkgKyAxKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVF
KG1hcC5jb250YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgUmVmX1ZhbHVlKQoreworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAg
UmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZM
b2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2Vy
PiByZWYoYSk7CisgICAgICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWYpKTsKKyAgICB9CisKKyAg
ICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZkxvZ2dlciBi
KCJiIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWZB
KSk7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQihiKTsKKyAgICAgICAgbWFwLnNldCgx
LCBXVEZNb3ZlKHJlZkIpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYo
YikgZGVyZWYoYSkgZGVyZWYoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgewor
ICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGlu
dD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5h
ZGQoMSwgV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFHZXQgPSBtYXAuZ2V0KDEpOwor
ICAgICAgICBBU1NFUlRfRVEoYUdldCwgJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxv
Z2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIGF1dG8gZW1wdHlHZXQg
PSBtYXAuZ2V0KDEpOworICAgICAgICBBU1NFUlRfVFJVRShlbXB0eUdldCA9PSBudWxscHRyKTsK
KyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4s
IFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihh
KTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91
dCA9IG1hcC50YWtlKDEpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxib29sPihh
T3V0KSk7CisgICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQorCisgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAg
YXV0byBlbXB0eVRha2UgPSBtYXAudGFrZSgxKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKHN0YXRp
Y19jYXN0PGJvb2w+KGVtcHR5VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAg
ICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUo
cmVmKSk7CisgICAgICAgIG1hcC5yZW1vdmUoMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVR
KCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAg
ICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+
IG1hcDsKKworICAgICAgICBtYXAuZW5zdXJlKDEsIFsmXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICAgICAgcmV0dXJuIHJlZjsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxp
bnQ+PiBtYXA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFrLiBObyBi
aWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVmTG9nZ2VyPiBy
ZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAgIG1hcC5hZGQo
aSArIDEsIFdURk1vdmUocmVmKSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShtYXAuY29udGFp
bnMoaSArIDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgiZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLCBSb2Jpbkhv
b2RIYXNoPGludD4+IG1hcDE7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1hcDEudmFsdWVzKCkp
CisgICAgICAgICh2b2lkKXZhbHVlOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBS
ZWZNYXBwZWRUb05vblplcm9FbXB0eVZhbHVlKQoreworICAgIGNsYXNzIFZhbHVlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFZhbHVlKCkgPSBkZWZhdWx0OworICAgICAgICBWYWx1ZShWYWx1ZSYm
KSA9IGRlZmF1bHQ7CisgICAgICAgIFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0OworICAg
ICAgICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVlJiYpID0gZGVmYXVsdDsKKworICAgICAgICBWYWx1
ZShpbnQzMl90IGYpCisgICAgICAgICAgICA6IG1fZmllbGQoZikKKyAgICAgICAgeyB9CisKKyAg
ICAgICAgaW50MzJfdCBmaWVsZCgpIHsgcmV0dXJuIG1fZmllbGQ7IH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGludDMyX3QgbV9maWVsZCB7IDB4YmFkYmVlZiB9OworICAgIH07CisKKyAgICBj
bGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKKyAgICAgICAgS2V5KCkgPSBkZWZh
dWx0OworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgS2V5KTsgfQorICAgIH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFX
VEY6Okhhc2hUcmFpdHM8VmFsdWU+OjplbXB0eVZhbHVlSXNaZXJvLCAiIik7CisKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPEtleT4sIFZhbHVlLCBSb2Jp
bkhvb2RIYXNoPFJlZjxLZXk+Pj4gbWFwOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPEtleT4s
IGludDMyX3Q+PiB2ZWN0b3JNYXA7CisKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCAxNjA7
ICsraSkgeworICAgICAgICBSZWY8S2V5PiBrZXkgPSBLZXk6OmNyZWF0ZSgpOworICAgICAgICBt
YXAuYWRkKFJlZjxLZXk+KGtleS5nZXQoKSksIFZhbHVlIHsgaSB9KTsKKyAgICAgICAgdmVjdG9y
TWFwLmFwcGVuZCh7IFdURk1vdmUoa2V5KSwgaSB9KTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8m
IHBhaXIgOiB2ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9FUShwYWlyLnNlY29uZCwgbWFwLmdl
dChwYWlyLmZpcnN0KS5maWVsZCgpKTsKKworICAgIGZvciAoYXV0byYgcGFpciA6IHZlY3Rvck1h
cCkKKyAgICAgICAgQVNTRVJUX1RSVUUobWFwLnJlbW92ZShwYWlyLmZpcnN0KSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9FbXB0eSkKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBSb2Jpbkhv
b2RIYXNoPHVuc2lnbmVkPj4gbWFwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAucmFuZG9tKCk7
CisgICAgQVNTRVJUX0VRKHJlc3VsdCwgbWFwLmVuZCgpKTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgUmFuZG9tX1dyYXBBcm91bmQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgWmVyb0hhc2g8dW5zaWdu
ZWQ+LCBCaWdUYWJsZUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLmFkZCgxLCAx
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gbWFwLnJhbmRvbSgpOworICAgIEFTU0VSVF9FUShyZXN1
bHQsIG1hcC5iZWdpbigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmFuZG9t
X0lzRXZlbmx5RGlzdHJpYnV0ZWQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAg
bWFwLmFkZCgwLCAwKTsKKyAgICBtYXAuYWRkKDEsIDEpOworCisgICAgdW5zaWduZWQgemVyb3Mg
PSAwOworICAgIHVuc2lnbmVkIG9uZXMgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDEwMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOworICAgICAg
ICBpZiAoIWl0LT52YWx1ZSkKKyAgICAgICAgICAgICsremVyb3M7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAgICAgKytvbmVz
OworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX0VRKHplcm9zICsgb25lcywgMTAwMHUp
OworICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgQVNTRVJUX0xFKG9uZXMsIDYwMHUp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZXNlcnZlSW5pdGlhbENhcGFjaXR5
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gbWFwOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKDB1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBtYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSg5OTk5KTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgx
NjM4NHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsg
KytpKQorICAgICAgICBtYXAuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtlU3RyaW5nKCJi
YXIiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMTYzODR1LCBtYXAuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNvbnRhaW5z
KCJmb28zIl9zdHIpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhcjMiLCBtYXAuZ2V0KCJmb28zIl9z
dHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kp
CisgICAgICAgIG1hcC5hZGQobWFrZVN0cmluZygiZXhjZXNzIiwgaSksIG1ha2VTdHJpbmcoImJh
eiIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUgKyA5OTk5dSwgbWFwLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUobWFrZVN0cmlu
ZygiZm9vIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkpOworICAgIEVY
UEVDVF9FUSgzMjc2OHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhejMi
LCBtYXAuZ2V0KCJleGNlc3MzIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUobWFr
ZVN0cmluZygiZXhjZXNzIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUSg4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAyOworICAgIG1hcDIu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0UobWFwMi5yZW1v
dmUoImZvbzEiX3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAg
ICAgICBtYXAyLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSwgbWFrZVN0cmluZygiYmFyIiwgaSkp
OworICAgIEVYUEVDVF9FUSgyMDAwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4
NHUsIG1hcDIuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7ICsr
aSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwMi5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwgaSkp
KTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIG1h
cDIuY2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9J
c0V2ZW5seURpc3RyaWJ1dGVkQWZ0ZXJSZW1vdmUpCit7CisgICAgZm9yIChzaXplX3QgdGFibGVT
aXplID0gMjsgdGFibGVTaXplIDw9IDIgKiA2OyArK3RhYmxlU2l6ZSkgeyAvLyBPdXIgaGFzaCB0
YWJsZXMgc2hyaW5rIGF0IGEgbG9hZCBmYWN0b3Igb2YgMSAvIDYuCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmlu
SG9vZEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVu
c2lnbmVkPj4gbWFwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsg
KytpKQorICAgICAgICAgICAgbWFwLmFkZChpLCBpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDI7IGkgPCB0YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5yZW1vdmUoaSk7CisKKyAg
ICAgICAgdW5zaWduZWQgemVyb3MgPSAwOworICAgICAgICB1bnNpZ25lZCBvbmVzID0gMDsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgICAg
ICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOworICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUpCisg
ICAgICAgICAgICAgICAgKyt6ZXJvczsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDF1KTsKKyAgICAgICAgICAgICAgICArK29uZXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfRVEoemVyb3MgKyBvbmVz
LCAxMDAwdSk7CisgICAgICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgICAgIEFTU0VS
VF9MRShvbmVzLCA2MDB1KTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3RPYmplY3RXaXRoQ3VzdG9t
RGVzdHJ1Y3RvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKEZ1bmN0aW9uPHZvaWQoKT4mJiBydW5JbkRl
c3RydWN0b3IpCisgICAgICAgIDogbV9ydW5JbkRlc3RydWN0b3IoV1RGTW92ZShydW5JbkRlc3Ry
dWN0b3IpKQorICAgIHsgfQorCisgICAgflRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcigp
CisgICAgeworICAgICAgICBtX3J1bkluRGVzdHJ1Y3RvcigpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fcnVuSW5EZXN0cnVjdG9yOworfTsKKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgQ2xlYXJfUmVlbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxUZXN0T2Jq
ZWN0V2l0aEN1c3RvbURlc3RydWN0b3I+LCBSb2Jpbkhvb2RIYXNoPHVpbnQ2NF90Pj4gbWFwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gMTA7ICsraSkgeworICAgICAgICBtYXAuYWRk
KGksIG1ha2VVbmlxdWU8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yPihbJm1hcF0gewor
ICAgICAgICAgICAgbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMFUsIG1hcC5z
aXplKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7CisgICAgICAg
IH0pKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKDEwVSwgbWFwLnNpemUoKSk7CisgICAgbWFwLmNs
ZWFyKCk7CisgICAgRVhQRUNUX0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXAuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgQWRkQW5kSWRl
bnRpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJp
bmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLnNldChzdHJpbmcu
aW1wbCgpLCBpbmRleCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICAgICAgRVhQRUNUX0VRKHJlc3VsdC5pdGVyYXRvci0+a2V5LCBzdHJpbmcuaW1wbCgpKTsK
KyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIExhcmdlUmVtb3ZhbCkKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFN0cmlu
Z0ltcGw+LCB1bnNpZ25lZD4gbWFwOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVy
KGluZGV4KTsKKyAgICAgICAgbWFwLnNldChzdHJpbmcuaW1wbCgpLCBpbmRleCk7CisgICAgfQor
ICAgIEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAxZTQpOworICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggJiAweDEpIHsK
KyAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAg
ICAgICAgYm9vbCByZW1vdmVkID0gbWFwLnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9F
UShtYXAuc2l6ZSgpLCAxZTQgLyAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJl
cihpbmRleCk7CisgICAgICAgIGlmIChpbmRleCAmIDB4MSkKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRShtYXAuY29udGFpbnMoc3RyaW5nLmltcGwoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHZhbHVlID0gbWFwLmdldChzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUSh2YWx1ZSwgaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlm
ICghKGluZGV4ICYgMHgxKSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51
bWJlcihpbmRleCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVtb3ZlKHN0cmlu
Zy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDB1KTsKKyAgICBFWFBFQ1RfRVEobWFw
LmNhcGFjaXR5KCksIDh1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoU2V0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zYTFkODNjYThjNTA2ZGJhOThmMWQ0OTlmNTc2NjgyOGI5YjEyNDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFz
aFNldC5jcHAKQEAgLTAsMCArMSw1NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiRGVsZXRlZEFkZHJl
c3NPZk9wZXJhdG9yLmgiCisjaW5jbHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dn
ZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3
dGYvU3RvcHdhdGNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8
aW50IGluaXRpYWxDYXBhY2l0eT4KK3N0cnVjdCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0
cyA6IHB1YmxpYyBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4geworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IGluaXRpYWxDYXBhY2l0eTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUm9iaW5Ib29kSGFzaCA6IHB1YmxpYyBE
ZWZhdWx0SGFzaDxUPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVl
ID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+Cit2b2lkIHRlc3RJbml0aWFs
Q2FwYWNpdHkoKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IFdURjo6
SGFzaFRhYmxlQ2FwYWNpdHlGb3JTaXplPHNpemU+Ojp2YWx1ZTsKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8aW50LCBSb2Jpbkhvb2RIYXNoPGludD4sIEluaXRp
YWxDYXBhY2l0eVRlc3RIYXNoVHJhaXRzPGluaXRpYWxDYXBhY2l0eT4gPiB0ZXN0U2V0OworCisg
ICAgLy8gSW5pdGlhbCBjYXBhY2l0eSBpcyBudWxsLgorICAgIEFTU0VSVF9FUSgwdSwgdGVzdFNl
dC5jYXBhY2l0eSgpKTsKKworICAgIC8vIEFkZGluZyBpdGVtcyB1cCB0byBzaXplIHNob3VsZCBu
ZXZlciBjaGFuZ2UgdGhlIGNhcGFjaXR5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIHRlc3RTZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEoaW5p
dGlhbENhcGFjaXR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSk7
CisgICAgfQorCisgICAgLy8gQWRkaW5nIGl0ZW1zIHVwIHRvIGxlc3MgdGhhbiAzLzQgb2YgdGhl
IGNhcGFjaXR5IHNob3VsZCBub3QgY2hhbmdlIHRoZSBjYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBj
YXBhY2l0eUxpbWl0ID0gaW5pdGlhbENhcGFjaXR5ICogMyAvIDQgLSAxOworICAgIGZvciAoc2l6
ZV90IGkgPSBzaXplOyBpIDwgY2FwYWNpdHlMaW1pdDsgKytpKSB7CisgICAgICAgIHRlc3RTZXQu
YWRkKGkpOworICAgICAgICBBU1NFUlRfRVEoaW5pdGlhbENhcGFjaXR5LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSk7CisgICAgfQorCisgICAgLy8gQWRkaW5nIG9u
ZSBtb3JlIGl0ZW0gaW5jcmVhc2UgdGhlIGNhcGFjaXR5LgorICAgIHRlc3RTZXQuYWRkKGluaXRp
YWxDYXBhY2l0eSk7CisgICAgRVhQRUNUX0dUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0
LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2FwYWNpdHkpOworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBz
aXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCk7Cit0ZW1wbGF0
ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4oKQoreworfQor
dGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlV
cFRvU2l6ZSgpCit7CisgICAgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4o
KTsKKyAgICB0ZXN0SW5pdGlhbENhcGFjaXR5PHNpemU+KCk7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hTZXQsIEluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0
eVVwVG9TaXplPDEyOD4oKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgTW92ZU9u
bHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PE1vdmVP
bmx5PiBoYXNoU2V0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIGhhc2hTZXQuYWRkKFdU
Rk1vdmUobW92ZU9ubHkpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEw
MDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkg
KyAxKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAg
RVhQRUNUX1RSVUUoaGFzaFNldC5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShoYXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDEwMDsgKytpKQorICAgICAgICBoYXNoU2V0LmFkZChNb3ZlT25seShpICsgMSkpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFz
aFNldC50YWtlKE1vdmVPbmx5KGkgKyAxKSkgPT0gTW92ZU9ubHkoaSArIDEpKTsKKworICAgIEVY
UEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hTZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7CisKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8TW92ZU9ubHk+IHNlY29u
ZFNldDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHNl
Y29uZFNldC5hZGQoaGFzaFNldC50YWtlQW55KCkpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaFNl
dC5pc0VtcHR5KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc2Vjb25kU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkgKyAxKSkpOwor
fQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleSkKK3sKKyAgICBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVl
UHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIHNl
dC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgw
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAg
ICBzZXQuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8
aW50PiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IHNldDsKKworICAgIGF1
dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsK
KyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5p
cXVlUHRyKSk7CisKKyAgICBhdXRvIGl0ID0gc2V0LmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJV
RShpdCAhPSBzZXQuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKDUsICppdC0+Z2V0KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0
LCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBSb2Jp
bkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQ
dHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGludCog
cHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsK
KworICAgIEVYUEVDVF9FUSh0cnVlLCBzZXQuY29udGFpbnMocHRyKSk7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7CisgICAgYXV0byB1
bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Cisg
ICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOwor
ICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVD
VF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7
CisKKyAgICBib29sIHJlc3VsdCA9IHNldC5yZW1vdmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1
ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQ
dHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNl
dC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgw
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAg
ICBhdXRvIHJlc3VsdCA9IHNldC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKHB0ciwgcmVzdWx0
LmdldCgpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICByZXN1bHQgPSBudWxscHRy
OworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNl
dCwgQ29weUVtcHR5KQoreworICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vOwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgICAgICBFWFBFQ1RfRVEo
MHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgpKTsK
KyAgICB9CisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBmb28oeyAxLCA1LCA2NCwg
NDIgfSk7CisgICAgICAgIEVYUEVDVF9FUSg0dSwgZm9vLnNpemUoKSk7CisgICAgICAgIGZvby5y
ZW1vdmUoMSk7CisgICAgICAgIGZvby5yZW1vdmUoNSk7CisgICAgICAgIGZvby5yZW1vdmUoNDIp
OworICAgICAgICBmb28ucmVtb3ZlKDY0KTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFy
KGZvbyk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgwdSwgYmFyLnNpemUoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoU2V0LCBDb3B5QWxsb2NhdGVBdExlYXN0TWluaW11bUNhcGFjaXR5KQoreworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IGZvbyh7IDQyIH0pOworICAgIEVYUEVDVF9FUSgxdSwgZm9vLnNpemUo
KSk7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisKKyAgICBFWFBFQ1RfRVEoOHUs
IGJhci5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGJhci5zaXplKCkpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBDb3B5Q2FwYWNpdHlJc05vdE9uQm91bmRhcnkpCit7
CisgICAgZm9yICh1bnNpZ25lZCBzaXplID0gNDsgc2l6ZSA8IDEwMDsgKytzaXplKSB7CisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9i
aW5Ib29kSGFzaDx1bnNpZ25lZD4+IHNvdXJjZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHNpemUgKyAxOyArK2kpCisgICAgICAgICAgICBzb3VyY2UuYWRkKGkpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9i
aW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkxKHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNp
Z25lZD4+IGNvcHkyKHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkzKHNv
dXJjZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkxLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9FUShzaXplLCBjb3B5Mi5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwg
Y29weTMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemUgKyAx
OyArK2kpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkxLmNvbnRhaW5zKGkpKSA8PCBp
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29weTIuY29udGFpbnMoaSkpIDw8IGk7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5jb250YWlucyhpKSkgPDwgaTsKKyAgICAgICAgfQor
ICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTEuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKHNpemUgKyAyKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShjb3B5My5jb250YWlucyhzaXplICsgMikpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNv
cHkyLnJlbW92ZSgxKSk7CisgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpLCBjb3B5
Mi5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKDEpKTsK
KworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5hZGQoc2l6ZSArIDIpLmlzTmV3RW50cnkpOwor
ICAgICAgICBpZiAoKGNvcHkxLmNhcGFjaXR5KCkgKiAwLjk1KSA8PSBjb3B5MS5zaXplKCkpCisg
ICAgICAgICAgICBFWFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSAqIDIsIGNvcHkzLmNhcGFjaXR5
KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VR
KGNvcHkxLmNhcGFjaXR5KCksIGNvcHkzLmNhcGFjaXR5KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoY29weTMuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICB9Cit9CisK
K3N0cnVjdCBEZXJlZk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7
CisgICAgfQorICAgIE5FVkVSX0lOTElORSB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0t
Y291bnQ7CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7Cisg
ICAgfQorICAgIHVuc2lnbmVkIGNvdW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9i
c2VydmVyPiogYnVja2V0QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2Vy
dmVyKiBvYnNlcnZlZEJ1Y2tldCB7IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hTZXQsIFJlZlB0ck5vdFplcm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2
ZXIgPSBtYWtlVW5pcXVlPERlcmVmT2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBSb2Jpbkhvb2RI
YXNoPFJlZlB0cjxEZXJlZk9ic2VydmVyPj4+IHNldDsKKyAgICBzZXQuYWRkKGFkb3B0UmVmKG9i
c2VydmVyLmdldCgpKSk7CisKKyAgICBhdXRvIGl0ZXJhdG9yID0gc2V0LmZpbmQob2JzZXJ2ZXIu
Z2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGl0ZXJhdG9yICE9IHNldC5lbmQoKSk7CisKKyAgICBv
YnNlcnZlci0+YnVja2V0QWRkcmVzcyA9IGl0ZXJhdG9yLmdldCgpOworCisgICAgRVhQRUNUX1RS
VUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVF
KHNldC5yZW1vdmUob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIC8vIFJvYmluSG9vZEhhc2hTZXQg
ZG9lcyBub3QgdXNlIHRvbWJzdG9uZS4gVGhlIHVzZWQgYnVja2V0IG1heSBpbmNsdWRlIGFuIGV4
aXN0aW5nIGVudHJ5LCBvciBlbXB0eS4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRpZCBub3Qg
YWRkIHRoZSBvdGhlciBEZXJlZk9ic2VydmVyLiBTbyB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51
bGxwdHIpLgorICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxs
cHRyKTsKKyAgICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7Cit9CisKKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyTm90WmVyb2VkQmVmb3JlRGVzdHJ1Y3RvcikK
K3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9ic2VydmVyIHsKKyAgICAgICAgfkRlc3RydWN0b3JP
YnNlcnZlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9ic2VydmUoKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gb2JzZXJ2ZTsKKyAgICB9OworCisgICAgY29u
c3Qgc3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgPSBu
dWxscHRyOworICAgIGNvbnN0IERlc3RydWN0b3JPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgPSBu
dWxscHRyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+IG9ic2VydmVy
KG5ldyBEZXN0cnVjdG9yT2JzZXJ2ZXIgeyBbJl0oKSB7CisgICAgICAgIG9ic2VydmVkQnVja2V0
ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfX0pOworCisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2
ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+Pj4g
c2V0OworICAgIGF1dG8gYWRkUmVzdWx0ID0gc2V0LmFkZChXVEZNb3ZlKG9ic2VydmVyKSk7CisK
KyAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRVhQRUNUX1RSVUUo
b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisKKyAgICBidWNrZXRBZGRyZXNzID0gYWRkUmVz
dWx0Lml0ZXJhdG9yLmdldCgpOworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0g
bnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZSgqYWRkUmVzdWx0Lml0ZXJhdG9y
KSk7CisKKyAgICAvLyBSb2Jpbkhvb2RIYXNoU2V0IGRvZXMgbm90IHVzZSB0b21ic3RvbmUuIFRo
ZSB1c2VkIGJ1Y2tldCBtYXkgaW5jbHVkZSBhbiBleGlzdGluZyBlbnRyeSwgb3IgZW1wdHkuCisg
ICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBkaWQgbm90IGFkZCB0aGUgb3RoZXIgRGVzdHJ1Y3Rvck9i
c2VydmVyLiBTbyB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51bGxwdHIpLgorICAgIEVYUEVDVF9U
UlVFKG9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoU2V0LCBSZWYpCit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2Vy
PiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICB9CisK
KyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhv
b2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJl
ZihhKTsKKyAgICAgICAgc2V0LmFkZChyZWYuY29weVJlZigpKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwg
Um9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9n
Z2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgc2V0
LnJlbW92ZSgmYSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgi
YSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxS
ZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAg
ICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYp
KTsKKworICAgICAgICBhdXRvIGFPdXQgPSBzZXQudGFrZSgmYSk7CisgICAgICAgIEFTU0VSVF9U
UlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0
LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxS
ZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOwor
CisgICAgICAgIGF1dG8gYU91dCA9IHNldC50YWtlQW55KCk7CisgICAgICAgIEFTU0VSVF9UUlVF
KHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0Lmdl
dCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVm
TG9nZ2VyPj4+IHNldDsKKyAgICAgICAgYXV0byBlbXB0eVRha2UgPSBzZXQudGFrZUFueSgpOwor
ICAgICAgICBBU1NFUlRfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAg
fQorCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29k
SGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYo
YSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBBU1NFUlRfVFJV
RShzZXQuY29udGFpbnMoJmEpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2NDsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dl
ciBvYmplY3RzIGxlYWsuIE5vIGJpZyBkZWFsIGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAg
ICAgIFJlZjxSZWZMb2dnZXI+IHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOwor
ICAgICAgICAgICAgYXV0byogcG9pbnRlciA9IHJlZi5wdHIoKTsKKyAgICAgICAgICAgIHNldC5h
ZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKHNldC5jb250YWlucyhw
b2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7
CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxS
ZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBS
ZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dn
ZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0MihzZXQpOworICAgIH0KKyAg
ICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBEZWxldGVk
QWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcj4gc2V0MTsKKyAgICBzZXQxLmFkZCgx
MCk7CisKKyAgICBzZXQxLnJlbW92ZSgxMCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hT
ZXQsIFJlbW92ZVJhbmRvbSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBzZXQxIHsgMSwgMiwg
MyB9OworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIHNldDEucmVtb3ZlKHNl
dDEucmFuZG9tKCkpOworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIEFTU0VS
VF9UUlVFKHNldDEuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwg
UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQ7CisgICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIHNldC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIHNldC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSkp
OworICAgIEVYUEVDVF9FUSg5OTk5dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0
dSwgc2V0LmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucygiZm9vMyJf
c3RyKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0
LmFkZChtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1ICsgOTk5
OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIHNldC5jYXBhY2l0eSgpKTsK
KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJV
RShzZXQucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1
LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBzZXQuY2FwYWNpdHkoKSk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUo
c2V0LnJlbW92ZShtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwg
c2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQyOworICAg
IHNldDIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0
Mi5yZW1vdmUoImZvbzEiX3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytp
KQorICAgICAgICBzZXQyLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSk7CisgICAgRVhQRUNUX0VR
KDIwMDB1LCBzZXQyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0Mi5jYXBhY2l0
eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAgICBFWFBF
Q1RfVFJVRShzZXQyLnJlbW92ZShtYWtlU3RyaW5nKCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9F
USgwdSwgc2V0Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg4dSwgc2V0Mi5jYXBhY2l0eSgpKTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQWRkQW5kSWRlbnRpdHkpCit7CisgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBs
Pj4gc2V0OworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlMzsgKytpbmRl
eCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9FUSgqcmVzdWx0Lml0ZXJh
dG9yLCBzdHJpbmcuaW1wbCgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hT
ZXQsIExhcmdlUmVtb3ZhbCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3Ry
aW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAg
IH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgMWU0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgx
KSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAg
ICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBF
Q1RfRVEoc2V0LnNpemUoKSwgMWU0IC8gMik7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpu
dW1iZXIoaW5kZXgpOworICAgICAgICBpZiAoaW5kZXggJiAweDEpCisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICB9
CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsK
KyAgICAgICAgaWYgKCEoaW5kZXggJiAweDEpKSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9
IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNldC5y
ZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgMHUpOworICAgIEVY
UEVDVF9FUShzZXQuY2FwYWNpdHkoKSwgOHUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="444674"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424877</attachid>
            <date>2021-04-01 00:23:01 -0700</date>
            <delta_ts>2021-04-01 01:56:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401002300.patch</filename>
            <type>text/plain</type>
            <size>296683</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi5iOWQzMWVlYzU2NjQzMTk5
OGE0Mzg5MTFjMzNjOWExYmNkZjVhMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi45YTI4M2RlNDcwYzFiZmRlOTdhNGYxMTlmMzY4
YjZhOTNjNjRjYjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NSBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRv
bid0IHVzZSBpdCBhcyBhIGRlZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQg
cGVyZm9ybWFuY2Ugdi5zLiBtZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAg
YW5kIHRoaXMgcGF0Y2gncyBnb2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZh
dWx0LiBSYXRoZXIsIHRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8g
bm9uLXBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gc2F2ZSBtZW1vcnkuIFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29t
cHV0ZXMgaGFzaCB2YWx1ZSBjb21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGls
bCwgdGhpcyBpcyB1c2VmdWwgc2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFu
eSBzbWFsbCBIYXNoVGFibGVzIGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUg
c3VwZXIgbGFyZ2UgSGFzaFRhYmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2Ft
ZSBhbW91bnQgb2YgbWVtb3J5IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBn
b2FsIGlzIGFwcGx5aW5nIHRoaXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwg
YnV0IGEgZmV3IiBzaW5nbGV0b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSBtYWludGFpbnMgZGlzdGFuY2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBh
ZGp1c3RpbmcgZXhpc3RpbmcgZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcs
IGlmIHdlIGZvdW5kIHRoYXQgdGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJ
QiB0aGFuIHRoZSBjdXJyZW50IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVu
dHJpZXMsIGFuZCBpbnNlcnQgdGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4g
VGhpcyBpcyBnaXZpbmcKKyAgICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8g
cG9vciBlbnRyeSAodGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBh
bmQgbWFraW5nIGF2ZXJhZ2UgRElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29k
IGludmFyaWFudAorICAgICAgICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3
ZSBmb3VuZCB0aGF0IGV4aXN0aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4g
c3RvcCBzZWFyY2hpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0
aGF0CisgICAgICAgIHdlIHNob3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdo
ZW4gaW5zZXJ0aW5nLiBUaGVzZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3Jt
YW5jZSBldmVuIHVuZGVyIHNpZ25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQt
ZmFjdG9yCisgICAgICAgIGp1c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGlu
ZyBwZXJmb3JtYW5jZSwgYnV0IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMg
Y29tcGFyZWQgdG8gbm9ybWFsIG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAg
V2UgaW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRz
IG9mIHRhYmxlcyBiYXNlZCBvbiBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBU
aGlzIGhhcyA5NSUgbG9hZC1mYWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1h
cHMgd2hpY2ggaXMgbW9zdGx5LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tp
bmcgdXAgcmVwZWF0ZWRseS4gSW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1h
bnkgdGhpcyBraW5kIG9mIHRhYmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3Vz
IGtpbmRzIG9mIHRoaW5ncy4gV2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3Ig
dGFibGUgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAg
d2UgYXJlIG1haW50YWlucyBmYXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMg
aGFzIDkwJSBsb2FkLWZhY3Rvci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcg
aXQgaWYgc2V0cyBhbmQgbWFwcyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNp
dmUuCisKKyAgICAgICAgMy4gRmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAg
ICAgICAgIFRoaXMgaGFzIDc1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBh
cmVkIHRvIEhhc2hTZXQgYW5kIEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQt
ZmFjdG9yIGZvciBsYXJnZSBzaXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVy
Zm9ybWFuY2UgcmVncmVzc2VkCisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0
b3IgbGFyZ2UgSGFzaFNldCBhbmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1h
bmNlIGludGVuc2l2ZSAoZS5nLiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBl
cmZvcm1hbmNlIGludGVuc2l2ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSByZXBsYWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdp
dGggUm9iaW5Ib29kSGFzaFRhYmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0
aWFuc3lsdmFuLmNvbS9wb3N0L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZh
dWx0LWhhc2gtdGFibGUtaW1wbGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAg
ICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29u
c3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAg
ICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3Zl
SWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6
CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpY
Pjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJn
Pjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6
Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46
OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1
cmUpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtl
QW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToK
KyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFp
dHM+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92
ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpI
YXNoVGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
cmFuZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlu
cyBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFu
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29tcHV0ZVRhYmxlSGFzaCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wMy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFNlcnZpY2UgV29ya2VyIHNjcmlwdHMgdXNlIHRvbyBtdWNoIG1lbW9yeSBpbiB0
aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFkN2RlZGVlNjZiNDk2MDBiZmJkZDcw
YTU0MmRjMGVjOTQwZGFmMC4uNDAxOGI2ZDZkMDM5OTUxNjljODkzYmI1NTA1NzMwNjMyMjdlZjdj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTA0LTAxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9v
ZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAq
IGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAg
ICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZhY3RvcnlDcHBGaWxl
KToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAgICAqIGh0bWwvQXV0
b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omlz
Q2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVjdEZyb21FeHBvc3Vy
ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U1ZHVGFn
TmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc1dp
dGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAg
ICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0NvZGVjcyk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRBdWRp
b0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9rZVRhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpoYXNFZmZl
Y3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0
dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NW
R1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNh
bGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVzTWFwKToKKwogMjAy
MS0wMy0zMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
b21wdXRlZCBzdHlsZSBmb3IgYSBib3JkZXItcmFkaXVzIGNvcm5lciBzaG91bGQgbmV2ZXIgYmUg
MHB4IHdoZW4gdGhlIHByb3ZpZGVkIHdpZHRoIGlzbid0IDBweApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZGNkNTBh
MmM1MDQ4YzRjOTQ1NmY4OGMzMzFmOTQ3NDFjMDM5NzI0Li40MTBjNmU1ZmIwNTE4MTkxZGI3MTA4
NTg0YTkyMmFjZjc0NDgxNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA0LTAx
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVk
VW5hdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVkQXR0cmlidXRl
ZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYWJsZVF1ZXJpZXMpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbToKKyAgICAgICAgKFdlYktpdDo6Z2V0QXBwQm91
bmREb21haW5zVGVzdGluZyk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKwogMjAyMS0wMy0zMCAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGYWxsIGJhY2sgdG8g
Y29udGV4dCBtZW51IHByZXNlbnRhdGlvbiBhZnRlciBsb25nIHByZXNzaW5nIGltYWdlIG92ZXJs
YXkgdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcAppbmRleCAyYTA4ODdlNzNlNTcxZjAwOGU4ODRkYjM0MzA0ODZkMzQyMDA3MjIwLi43Zjhh
ZTRmMTQwZWU3NDNkMGZlNWYzOTU0Mzg3YmUzY2ZkNmQ1ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IHN0cnVjdCBDaGFyQnVmZmVyU2VhY2hlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRlTmFtZUlt
cGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JD
aGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitzdGF0aWMgUHJpdmF0ZVN5bWJvbElt
cGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBCdWlsdGluTmFtZXM6OlByaXZhdGVOYW1l
U2V0JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJCdWZmZXJT
ZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBzZXQu
ZW5kKCkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnMKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBTeW1ib2xJbXBsKiBsb29r
VXBXZWxsS25vd25TeW1ib2xJbXBsKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj4m
IG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKK3N0YXRpYyBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKGNv
bnN0IEJ1aWx0aW5OYW1lczo6V2VsbEtub3duU3ltYm9sTWFwJiBtYXAsIGNvbnN0IFdURjo6SGFz
aFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0
byBpdGVyYXRvciA9IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+Pihi
dWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggMzE5NDViZjNlMTZjZDMwNGU4
ZDg4MjliMTk5NzFkYTdjY2NlMzlhMi4uMDBkOTZkM2M3NDQ1ZWFhNmI0ODNkNDA5YWQ0Zjg3ODVk
YjM3YzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0
aW5zLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk5LDYgKzIwMSw5
IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnVpbHRp
bk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6CisgICAgdXNp
bmcgUHJpdmF0ZU5hbWVTZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPjsKKyAgICB1c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47CisKICAgICBC
dWlsdGluTmFtZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgUHJpdmF0ZVN5bWJv
bEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKQEAgLTIz
Miw4ICsyMzcsNiBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9kb2xsYXJW
TVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX3BvbHlQcm90b1ByaXZh
dGVOYW1lOwotICAgIHVzaW5nIFByaXZhdGVOYW1lU2V0ID0gSGFzaFNldDxTdHJpbmc+OwotICAg
IHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47
CiAgICAgUHJpdmF0ZU5hbWVTZXQgbV9wcml2YXRlTmFtZVNldDsKICAgICBXZWxsS25vd25TeW1i
b2xNYXAgbV93ZWxsS25vd25TeW1ib2xzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCmluZGV4
IDVjZjRmYTU1YzNlZWVkZWY0ZjhlYTkzY2Q2MWQ0NjYxZWI2N2Y4MmEuLjc4NTdkYmEwMTE1OGE3
NmY3ZTAxNmEyMzc5MzUwNWQ2ZGE1YjMwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0yMTIsNyArMjEzLDcgQEAgY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeSB7CiAKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07Ci0gICAgSGFzaE1hcDxSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNNYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRl
Y29kZUludHJpbnNpY01hcDsKIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5T
SUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBTdHJvbmc8VW5rbm93bj4gbV8jI25hbWU7CiAg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05B
TUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggNDRkMWNmZGJk
NDk0OTE2ZWRiZmZkNGYzMTRmN2NkNWZiZmI2ZjE1My4uYWU2ZGJiMGY4ZjU5MjM1MGE0Y2YyZTQx
MGRmMGJkMmRhYmM3OGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaApAQCAtMjk0LDYgKzI5NCw3IEBAIEpTVmFsdWUgaWRlbnRpZmllclRvU2FmZVB1Ymxp
Y0pTVmFsdWUoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiBzdHJ1Y3QgSWRlbnRpZmllclJlcEhh
c2ggOiBQdHJIYXNoPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHsKICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJu
IGtleS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdTeW1ib2xB
d2FyZUhhc2goKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9
IHRydWU7CiB9OwogCiBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8aW50PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAppbmRleCA0NjU1MjQ4ZjI4MDQ5MTBlNGI0ZGNjMjBlNWJiZTkxNGU1ODlmMWVhLi5j
ODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE5OSw3ICsxOTksNyBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVs
bCgpKQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6S2YpXSA9IGNhc2VGaXJzdE9wdGlvbjsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsK
ICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMs
IHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvLCBSZWxldmFudEV4dGVuc2lvbktleTo6S2YsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpLbiB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0g
cmVzb2x2ZWQubG9jYWxlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJvb2wgSW50bENvbGxhdG9yOjp1
cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3QKIH0KIAogI2lmIEFTU0VS
VF9FTkFCTEVECi12b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgbG9jYWxlcykKK3ZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lD
VUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JiBsb2NhbGVzKQogewogICAgIGZvciAo
YXV0byYgbG9jYWxlIDogbG9jYWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmlu
Z1dpdGhEVUNFVCA9IFtdKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9y
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4
IDI0ZDYxNjE2NDlhZDlmZTdkNGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLjVlNTJhMWM5MjVjMmVk
NDAzYzEzNzUzYzVjMTcyYzlmY2QzZWYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L0lDVUhlbHBlcnMu
aD4KIApAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzdGF0
aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNl
dCYpOwogI2Vsc2UKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlh
bnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpIHsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBj
aGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JikgeyB9CiAjZW5kaWYKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMwZDQzODI5YjUzYjk3NTdiOWEx
ZmMzYjkuLmY4OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3MzNmODk4NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cApAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgbG9j
YWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Okhj
KV0gPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmpl
Y3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxv
Y2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4dGVuc2lv
bktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAg
IG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDFiYmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0MGY3MGE0YTkuLmMwOTA5Yjg5
MWU5NDMwYzBkYTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSgogICAg
IC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1
ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVj
dG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggMjJhMTE1ZDEzOWY2
YzViMjQ1ZWRlYmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRi
NTA5N2M2NDIwYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBJbnRsRGlzcGxheU5h
bWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmEKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZmMGEwOTMzNzY5MTFkYjEwYjg4
ZmFhOWY0NWYzNWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2UwZWU3YTZkOTgzZmJlY2MzN2I4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yU3VwcG9ydGVkTG9j
YWxlc09mLCAoSlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWRp
c3BsYXluYW1lcy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBvcnRlZExvY2FsZXNPZgogCiAg
ICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3BsYXlOYW1lcyUuW1thdmFpbGFi
bGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAppbmRl
eCA4MTdiOWNhZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEzMDkyLi44ODBlZDI2ZTczYWZl
MWNhOTQ0Nzc0NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBJ
bnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7Cisg
ICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVj
dCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9j
YWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1ZWUyM2RiZjFlMGIwMzljM2Nh
ZjA3ODBmMWI2NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBkZjBlNjc5OGJkYTcyMjIxNWEz
YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlz
dC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAv
LyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1hdCUuW1thdmFpbGFibGVMb2Nh
bGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4g
TGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4K
ICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAwMDdj
OWQzMDI3MTVhNTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5mMDM1MGM4NDM4ZDc3ZWJlN2E1
ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0K
IAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVy
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwg
bG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2MmViYmMyNjQ0Mzc5YWY1OTMy
MTEwZjAuLmYyMWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFkNTkxZjEzOGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
LCAoSlNHCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBmODllOGZlNzRlOGRiY2YwZTU4
MzUwYWJlYzFmN2E4NWQ4YmRlNC4uOWQ1MzZkNzRjMDE5ZDE4ZGE3NTgzN2Q1OWFiNzM4Nzk2ZWVk
NjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAK
QEAgLTM1Miw3ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBj
aGFyKiBsb2NhbGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAvLyBFbnN1cmUgd2UgaGF2ZSB4
eC1aWiB3aGVuZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0aWMgdm9pZCBhZGRTY3JpcHRs
ZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJp
bmdWaWV3IGxvY2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChM
b2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQogewogICAgIGlm
IChsb2NhbGUubGVuZ3RoKCkgPCAxMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3Nyw5
IEBAIHN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluCiAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQoU3Ry
aW5nSW1wbDo6Y3JlYXRlU3RhdGljU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMo
KQorY29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7
CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNv
bnN0cnVjdCgpOwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVpbnQ4X3QgZHVjZXRXZWlnaHRz
WzEyOF0gPSB7CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwgMzcsIDAsCiB9OwogCi1jb25z
dCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3Qg
TG9jYWxlU2V0JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsK
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29u
c3RydWN0KCk7CkBAIC00NzYsMjIgKzQ3NiwyMSBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVz
OwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2Nh
bGVzKCkKK2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlZEF2YWls
YWJsZUxvY2FsZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gY2Fj
aGVkQXZhaWxhYmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZd
IHsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAg
YXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxv
Y2FsZXMtPmlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzSW1tb3J0YWwgPSB0
cnVlOwogICAgICAgICBpbnQzMl90IGNvdW50ID0gdWJya19jb3VudEF2YWlsYWJsZSgpOwogICAg
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgbG9jYWxlID0gbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRCh1YnJrX2dldEF2YWlsYWJsZShp
KSwgaXNJbW1vcnRhbCk7CiAgICAgICAgICAgICBpZiAobG9jYWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZSk7Ci0gICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxl
TG9jYWxlcywgbG9jYWxlKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMtPmFkZChsb2Nh
bGUpOworICAgICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxv
Y2FsZXMuZ2V0KCksIGxvY2FsZSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgICByZXR1cm4gYXZh
aWxhYmxlTG9jYWxlczsKQEAgLTY5OCw3ICs2OTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9j
YQogICAgIHJldHVybiBzZWVuOwogfQogCi1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxl
KQorU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKICAgICByZXR1cm4gYmVzdEF2YWlsYWJs
ZUxvY2FsZShsb2NhbGUsIFsmXShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSkgewogICAgICAgICBy
ZXR1cm4gYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpOwpAQCAtNzYzLDcgKzc2
Miw3IEBAIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bG9jYWxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBNYXRj
aGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAv
LyBMb29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAg
LTgwNCw3ICs4MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8UwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hl
clJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLWJlc3RmaXRtYXRjaGVyCkBAIC04MjUsNyArODI0LDcgQEAgY29uc3RleHByIEFTQ0lJ
TGl0ZXJhbCByZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktleSBr
ZXkpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxv
Y2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVu
c2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURh
dGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKK1Jlc29sdmVkTG9jYWxl
IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxl
U2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0
aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5
PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29u
c3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAgIC8vIFJlc29sdmVMb2Nh
bGUgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50
RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlCkBAIC04OTAsNyArODg5LDcgQEAgUmVzb2x2ZWRM
b2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4KICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5
KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewog
ICAgIC8vIExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9v
a3Vwc3VwcG9ydGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBAIHN0YXRpYyBKU0FycmF5KiBs
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBC
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0Zml0c3Vw
cG9ydGVkbG9jYWxlcwpAQCAtOTI4LDcgKzkyNyw3IEBAIHN0YXRpYyBKU0FycmF5KiBiZXN0Rml0
U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
CiAgICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBwb3J0ZWRMb2Nh
bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMs
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQorSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1Zh
bHVlKQogewogICAgIC8vIFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIG9wdGlvbnMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
NDAyLyNzZWMtc3VwcG9ydGVkbG9jYWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oCmluZGV4IGZhMmU4MjgwNzhiN2U4NTFhNzcxZGMwYTA4MGZiNmE2ODVhMTJh
ZWQuLjYxNDBjMjBkNmZkM2U4ZThiNTI4OTc1ZDYzODQ4ZmYxODNmY2FiNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb25J
dGVyYXRvcjsKIApAQCAtODEsMTUgKzgyLDE2IEBAIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiB9OwogCiBTdHJpbmcgZGVmYXVsdExvY2FsZShKU0ds
b2JhbE9iamVjdCopOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxl
cygpOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5l
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK3VzaW5nIExvY2Fs
ZVNldCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Owor
Y29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0
JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxT
ZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
RGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lu
bGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5P
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSk7CiBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlv
bmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrKTsKQEAgLTEwNywxMCArMTA5LDEwIEBAIHN0cnVjdCBSZXNvbHZlZExvY2FsZSB7
CiAgICAgUmVsZXZhbnRFeHRlbnNpb25zIGV4dGVuc2lvbnM7CiB9OwogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
TG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVj
dG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkpOwotSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKK1Jlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVy
LCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxl
dmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAo
KmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CitKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBsb2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExv
Y2FsZSk7CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4gU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgU3RyaW5n
JiByZXF1ZXN0ZWRMb2NhbGUsIFByZWRpY2F0ZSk7CiBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdT
eXN0ZW1zRm9yTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKaW5kZXggZTY1ZmIwZDcz
MjcxNTI5YjVjYWE5ZDlmYWJlYzliZWJjYjRjNTZhMi4uY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3
YWRhZGI4ZThkY2JhZjUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1
bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1CiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2Nh
bGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2Fs
ZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVz
dCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0
IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6
QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxl
c0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSBy
ZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKICAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjg4NTBiMTBhOGJmZTY1NzA0M2QyYTFl
YWQwNzExMDQxYjkyMDU5MS4uMjdiMjMxMGIzNDhhMWU0YTQ1ZGYwZWY5MTE1M2E5ZTQ1ZThmZjU3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YsIChKU0dsCiAKICAgICAvLyAxMy4zLjIgSW50bC5QbHVyYWxSdWxlcy5zdXBwb3J0
ZWRMb2NhbGVzT2YgKGxvY2FsZXMgWywgb3B0aW9ucyBdKQogICAgIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTQwMi8jc2VjLWludGwucGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29m
Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCBmN2QzOGI4MWVhYzgy
ODYzZjVhZDhiY2M4MzI0NjUyNjkyODE3NzZlLi4yYjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMx
MDk4MDViNzA3M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAg
IH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxNzRiNmZkY2UyYzg2YmZjMTFi
NWViMWVmNTM3MjA5OGVhODk4NDk0Li45YThjOGQ0Y2E2YzZjNGVkMzVmZjcwZTk3ZTdkM2VjYzRm
NTlhZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJl
bGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIGF1dG8gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHAKaW5kZXggMDRjZjE3ZDUwOTM1NjIxYzQyNDhlODQ4Yjc3NTBlZGEzN2VhODFlOC4uMmFk
NzRmOTRiYmU4Y2ExN2M3NzU4OTJhZmJjNmZlZjcxMmE2MmI1OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCBJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG8KICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFs
T2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVy
LCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNv
bHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmZmQ3M2Y3MzZhOTc0MzM3OGRm
ZGIxYTMxZDRiZjk5Zjk4ZGVhZTUyLi4wOTM5NGRjMThlZGRmMmE5MzE5NTFlN2M2ZmFhOTcyMjhm
YmY2MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPYgogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXNl
Z21lbnRlci8jc2VjLWludGwuc2VnbWVudGVyLnN1cHBvcnRlZGxvY2FsZXNvZgogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJVNlZ21lbnRlciUuW1thdmFpbGFibGVMb2NhbGVz
XV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCmluZGV4IDgyNzM3ZDhmOWM2OGRlMThlODdmNWU1
N2NlYTBhNjAyMTBlODg4ODYuLjNhNzExZmI5MDliNjkwZTBmMTlmZWE1MTc0YzY4MDU4Y2JlNGM0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNp
bmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIFJlZ0V4cENhY2hlIGZpbmFsIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFw
OworICAgIHR5cGVkZWYgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8UmVnRXhwS2V5LCBX
ZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFwOwogCiBwdWJsaWM6CiAgICAgUmVnRXhwQ2FjaGUo
Vk0qIHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKaW5kZXgg
ZTBmODgzMTAyMGQ2ZDkzNWM3MDE5MDFmYjQ5YjI4Y2I2ZGM5MzhmYy4uZDE2NjI3OWY2ZGIyZWNl
ZWIyZTNlNzBiMDdkOTYzYmVlNGFiZTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwS2V5LmgKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFJlZ0V4cEtleSB7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ0V4cEtleSYga2V5KSB7IHJldHVybiBr
ZXkucGF0dGVybi0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJl
Z0V4cEtleSYgYSwgY29uc3QgUmVnRXhwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRy
dWU7CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDI2YjQ1ZTU1M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1
NjEzN2IzYzMxZDMwZGJhYjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2
OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEz
QTIyOEJEQ0FCMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9v
ZEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
UmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1
QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9v
ZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAy
RDAwMzRBMDkyIC8qIE5ha2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRF
ODcwMDM1OURBOSAvKiBEYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2
NzAwQkY2MjVFIC8qIFJlY3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVjdXJzYWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzM4LDYgKzc0MCw3IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVl
TWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4
IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5
RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3Rl
bUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAw
MUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMw
MzE1MUE4MjVCMDA0MTIzRkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAw
OURENDQ1IC8qIFJlc291cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIz
RkYgLyogUmV0YWluUHRyLmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJv
YmluSG9vZEhhc2hNYXAuaCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9i
aW5Ib29kSGFzaFNldC5oICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jp
bkhvb2RIYXNoVGFibGUuaCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVu
TG9vcC5jcHAgKi8sCiAJCQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAq
LywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5o
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2Vi
NjViNmQyZmM5MTc4Li5lMWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hF
QURFUlMKICAgICBSZWZQdHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5o
CisgICAgUm9iaW5Ib29kSGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlLmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0
ZWRBcml0aG1ldGljLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEy
ZDY1YWM2Mzc4OWM0Li4zZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCkBAIC05Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVu
dW1UcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsK
IHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJs
ZVRyYWl0czsKK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3Ry
dWN0IEtleVZhbHVlUGFpcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1h
cHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVu
YW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFz
aFNldDsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2
NDFhMTE4NWJjZi4uODkwMWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaApAQCAtMzEsNyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5
VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAKICAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5
VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+
LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBj
bGFzcyBIYXNoTWFwS2V5c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAg
LTIzMiw5MSArMjMyLDg5IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAg
IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2
b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAg
ICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1
bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBs
LmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVn
aW4oKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0
ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVu
ZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBp
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewog
ICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJh
dG9yIAotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29u
c3QKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBh
dXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUg
bG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IE1hcHBlZFBlZWtUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5l
TG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBA
QCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMo
Y29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
VHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsm
JiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1
Myw5MSArMzUxLDkxIEBAIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtl
eSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywg
VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FM
V0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUo
SyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgYWRkPEhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVu
Y3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtl
eVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGlu
ZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5
cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBw
ZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFk
ZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2Fy
ZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92
ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lQWRkKFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBL
ZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lRW5zdXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5
cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lRW5zdXJlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3Vw
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4
ICs0NDMsOCBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUo
aXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3Zl
SWYoRnVuY3RvciYmIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJl
bW92ZUlmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlw
ZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJu
IHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwu
Y2xlYXIoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRU
YWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAt
PiBNYXBwZWRUYWtlVHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlm
IChpdCA9PSBlbmQoKSkKQEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25z
dF9pdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9y
Pjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
a2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5l
R2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5
cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlW
YWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBA
IC01MTYsMjMgKzUxNCwyMyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
bmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkUGVla1R5cGU+Ojp0eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtl
VHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewog
ICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0
MiwxNCArNTQwLDE0IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
dm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtl
eVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAg
ICBpZiAoS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NjUsMTMgKzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNp
emUoKSAhPSBiLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0g
YS5lbmQoKTsKICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQs
OCArNTgyLDggQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7
CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGExNWRjMDM3NWExNzE5
YzdhYjMyNDYyYzdhZGY3OWVkNjBiNGVmLi5hNDAyY2UyNzM3NWFjZWIwY2ViMDRmOWViNWExZTQx
YWQyYzY5ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCi1zdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTQxLDcgKzM5LDcgQEAgY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRy
YWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxl
PFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVl
VHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1
ZVRyYWl0cz47CiAKIHB1YmxpYzoKICAgICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBm
b2xsb3dpbmcgc3RydWN0dXJlOgpAQCAtMTg2LDEwOSArMTg0LDEwOSBAQCBzdHJ1Y3QgSGFzaFNl
dEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
RW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0
dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZh
bHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250
YWlucyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3Qg
VCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkg
Y29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Citpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0
b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojph
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2lt
cGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBl
JiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1
ZVR5cGUmJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3Vs
dAoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCkBAIC0yOTYsOSArMjk0LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICBy
ZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CkBAIC0zMDYsOCArMzA0LDggQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdl
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYg
KGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
NiwyNyArMzE0LDI3IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVy
YXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92
ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkK
IHsKICAgICBtX2ltcGwuY2xlYXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0
ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7CkBAIC0zNDYsNDggKzM0NCw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVy
biB0YWtlKGJlZ2luKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRh
a2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUK
IHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDAzLDkgKzQwMSw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXpl
KCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDE2LDIyICs0MTQsMjIgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9
PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25z
dCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlckNvbGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4g
bGlzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+Cit2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAg
IGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBs
LmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4Zjcy
YjJlMDM2YzE2MDAxMGMwYTYyOTU4N2M1ZWRmMGE4Li5kMzk5NzlhNDFlYWM4ZGVhYTM3ZTQ1Nzk4
YzI0ZTJiYzA3OGU0ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBjbGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhj
b25zdCBIYXNoVGFibGVUeXBlKik7CiAKICNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBp
bmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAg
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKikgeyB9CiAKICNl
bmRpZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtu
b3duR29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgog
ICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZh
bHVlKiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcg
SGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJl
ZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlw
ZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xh
c3MgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAg
ICAgICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkK
ICAgICAgICAgewpAQCAtMjQzLDE4ICsyNDUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
ciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVl
LCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVl
VHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBI
YXNoVGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRh
YmxlLCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5
cGUqIHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93
bkdvb2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAt
MzQ3LDggKzM0OSw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwog
ICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTQwNyw3ICs0MTAsNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBI
YXNoVGFibGUoKTsKICAgICAgICAgfkhhc2hUYWJsZSgpIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7IAorICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsgCiAgICAgICAgICAgICBpZiAobV90YWJsZSkKICAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlVGFibGUobV90YWJsZSk7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgpAQCAtNTU5LDEyICs1NjIsNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CiAjZW5kaWYKIAotI2lmIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAg
ICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgogICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNp
emVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwpAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAKQEAgLTkzMiw3ICs5MjksNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAg
Y2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlm
ICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsKQEAgLTEwMTcsNyArMTAx
NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0x
MTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAg
ICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJs
ZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleCht
YWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAg
ICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwog
CkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsK
LSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4
dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFi
bGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVy
YXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAg
IHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5z
ZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4K
ICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAg
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAg
IEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHkt
bGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBA
IC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1f
bmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9
CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEyNzM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9y
LgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA3NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3Vz
aW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RS
b2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
YTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
OTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZh
Y3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVl
QXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hT
ZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1YmM5YThjOGZlZTJl
NzFmNWY0ODgwZDdiNDBmMjUyZTgwN2IzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsODgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUlIGxvYWQgZmFjdG9yLiBU
aGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBz
IGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5j
ZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9
IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8v
IDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBh
IGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3
b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0
YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gNzUlIGxv
YWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFi
bGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChIYXNoVGFibGUgdXNlcyA3
NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IEZhc3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUgLSA5NSUpIQorLy8KKy8v
IFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxl
dGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIE5haXZlIFJvYmluSG9vZEhhc2hUYWJs
ZSBoYXMgc29tZSBjYXNlcyB3aGljaCBjYXVzZSBPKE5eMikgd2hlbiBpdGVyYXRpbmcgaXQgYW5k
IGluc2VydGluZyBpdCB0byBzb21lIG5ldyBSb2Jpbkhvb2RIYXNoVGFibGUKKy8vIHdpdGhvdXQg
cmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB0aGlzIGlzIGJlY2F1c2Ugb2YgaGlnaCBsb2FkLWZhY3Rv
ciBhbmQgZXhwb3NlZCBoYXNoLW9yZGVyaW5nIGF0IGl0ZXJhdGlvblszXS4gVG8gbWl0aWdhdGUg
aXQsCisvLyB3ZSBjYWxjdWxhdGUgaGFzaCBmb3IgZWFjaCB0YWJsZSwgYW5kIGRvIFhPUiB3aXRo
IHRoZSBoYXNoIHZhbHVlIHRvIG1ha2UgaGFzaC1vcmRlcmluZyBkaWZmZXJlbnQgZm9yIGVhY2gg
dGFibGUuCisvLworLy8gWzFdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3Jv
YmluLWhvb2QtaGFzaGluZy8KKy8vIFsyXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisvLyBbM106
IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0NTU5
ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5Owor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRv
clR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25z
PjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlVGhyZXNob2xkID0g
MTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1Zh
bHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0aW9uczo6aGFzSGFzaElu
VmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJv
YmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUm
Jik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4g
dGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBt
b3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5
IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJs
ZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJs
ZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxl
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9y
IHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNr
ZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAg
ICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKwor
ICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5k
b20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
OyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAg
ICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsK
KworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVt
VGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5p
bXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVT
aXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAgbV90
YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgICAgICBtX3dpbGxFeHBh
bmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAg
ICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2
YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBh
ZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RG
TW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0
IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBz
b21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0
aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRS
ZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
S2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyBy
ZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2
b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZv
aWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7Cisg
ICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0
cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlC
dWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkg
eyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29r
dXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vs
c2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5k
aWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsgfQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxzZQor
ICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFu
ZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExv
YWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFs
bG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRh
YmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdXNpbmcgTG9va3Vw
VHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsK
KworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1bnNp
Z25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNp
emVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpOworCisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlk
YXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJl
bW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBl
Kik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVRhYmxlSGFzaChWYWx1ZVR5cGUqIHRh
YmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxWYWx1ZVR5cGUqPjo6aGFzaCh0YWJsZSk7IH0KKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWdu
ZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+a2V5Q291bnQoKTsKKyAgICAgICAgdW5zaWdu
ZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgIGlmIChzaG91bGRFeHBh
bmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCwgYW5k
IDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRhYmxlLgorICAgICAgICByZXR1cm4gbV93aWxs
RXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJsZVNpemU7CisgICAgfQorICAgIGJvb2wgc2hv
dWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNp
emUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQorICAg
IHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAv
IDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICB2b2lkIHJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYpOwor
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNo
LCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1h
c2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNl
KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBz
aXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpdGVyYXRvciBt
YWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlz
LCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25H
b29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3Qg
eyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCks
IEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxzZQorICAgICAg
ICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisjZW5k
aWYKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNp
emVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhMb2FkRGVub21pbmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9h
ZDsKKworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
OyB9CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVT
aXplIC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlD
b3VudDsgfQorICAgIHVuc2lnbmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVI
YXNoOyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX3RhYmxlSGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZh
bHNlIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8g
QWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXgu
CisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07Cisg
ICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1v
dmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9t
dXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5
KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlw
ZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7
CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRh
YmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJs
ZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBe
IHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXpl
TWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhh
dCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBw
cm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50
cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhh
c2g7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtl
eSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAg
IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRl
bXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5
IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5n
IGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0
YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJp
bmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90
YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhp
cy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAg
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIGlmIChlbnRyeUhhc2gg
PT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtleSkpCisgICAgICAg
ICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNl
KTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVu
dHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNl
VGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAg
ICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1k
aXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9
IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUo
KmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkp
OworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3Rp
bmdFbnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1f
a2V5Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisK
KyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorQUxXQVlTX0lOTElORSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRk
KFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVu
c2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpCit7Cisg
ICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgc2l6ZU1hc2s7CisgICAgKytkaXN0YW5jZTsKKworICAgIHdoaWxlICgxKSB7CisgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0Vt
cHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0Vt
cHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAg
IHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgs
IHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkg
eworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisg
ICAgICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHN3YXAodmFs
dWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBj
aGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CisKKyAgICAvLyBXZSBzaG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNl
cnRpbmcgYW4gZW50cnkuIElmIHdlIGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBl
bnRyeSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUg
c2luY2UgdGhlIGluc2VydGVkIGVudHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJl
aGFzaW5nLgorICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUp
OworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9IHRoaXMtPnRh
YmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
IF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNp
emVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUg
KyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRv
clR5cGU6Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9
IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFu
Y2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBh
bmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkg
dG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50LgorICAgICAgICAgICAgVmFsdWVU
eXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAgICBIYXNoVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9y
d2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIG1haW50YWluUHJvYmVEaXN0
YW5jZUZvckFkZChXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZW50cnlEaXN0YW5jZSwg
c2l6ZSwgc2l6ZU1hc2ssIHRhYmxlSGFzaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytk
aXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVpbnNlcnQo
VmFsdWVUeXBlJiYgdmFsdWUpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFE
TC4KKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFi
bGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhh
c2goRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQg
aW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3Rh
bmNlID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBt
X3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
ZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2Ug
PSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgc3dhcCh2YWx1
ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAg
KytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7
CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxv
b2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1
cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9v
ZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFs
dWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1v
dmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9z
KQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUo
VmFsdWVUeXBlKiBwb3MpCit7CisgICAgLy8gVGhpcyBpcyByZW1vdmFsIHZpYSAiYmFja3dhcmQt
c2hpZnQtZGVsZXRpb24iLiBUaGlzIGJhc2ljYWxseSBzaGlmdCBleGlzdGluZyBlbnRyaWVzIHRv
IHJlbW92ZWQgZW1wdHkgZW50cnkgcGxhY2Ugc28gdGhhdCB3ZSBtYWtlCisgICAgLy8gdGhlIHRh
YmxlIGFzIGlmIG5vIHJlbW92YWwgaGFwcGVuZWQgc28gZmFyLiBUaGlzIGRlY3JlYXNlcyBkaXN0
YW5jZS10by1pbml0aWFsLWJ1Y2tldCAoRElCKSBvZiB0aGUgc3Vic2VxdWVudCBlbnRyaWVzIGJ5
IDEuIFRoaXMgbWFpbnRhaW5zCisgICAgLy8gRElCIG9mIHRoZSB0YWJsZSBsb3cgYW5kIHJlbGF0
aXZlbHkgY29uc3RhbnQgZXZlbiBpZiB3ZSBoYXZlIG1hbnkgcmVtb3ZhbHMsIGNvbXBhcmVkIHRv
IHVzaW5nIHRvbWJzdG9uZXMuCisgICAgLy8gaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisgICAgcG9z
LT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNv
dW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0g
dGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1f
dGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1h
c2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1f
dGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsg
aW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBBU1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOwor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFz
aCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRy
eSkpOworICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVj
a2V0KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNo
cmluaygpKQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAg
ICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFs
aWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhp
dGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0
X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0
b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3Zl
KGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAv
LyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVj
aWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8
Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVU
eXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNp
emUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJs
ZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhw
YW5kKCkKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0
YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFp
dHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6
ZSAqIDI7CisKKyAgICByZWhhc2gobmV3U2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Citjb25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKwor
ICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBi
ZXN0VGFibGVTaXplICo9IDI7CisKKyAgICBhdXRvIGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBh
bnNpb24gPSBbXShkb3VibGUgbG9hZEZhY3RvciwgdW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVk
IHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhp
bmQgdGhpcyBjYWxjdWxhdGlvbiwgdXNpbmcgMy80IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBX
aXRoIG1heExvYWQgYXQgMy80IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBp
cyAxMS8yNC4KKyAgICAgICAgLy8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAx
MS8yNCBhbmQgMy80LCB3ZSBkb3VibGUgdGhlIHNpemUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVp
bmcgdG9vIGNsb3NlIHRvIGxvYWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8y
NC4gVGhpcworICAgICAgICAvLyBnaXZlIHVzIGEgbG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAx
NS8yNCkuCisgICAgICAgIGRvdWJsZSBtYXhMb2FkUmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAg
ICBkb3VibGUgbWluTG9hZFJhdGlvID0gMS4wIC8gbWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2
ZXJhZ2VMb2FkUmF0aW8gPSAobWF4TG9hZFJhdGlvICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAg
ICAgIGRvdWJsZSBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFn
ZUxvYWRSYXRpbyArIG1heExvYWRSYXRpbykgLyAyOworICAgICAgICByZXR1cm4ga2V5Q291bnQg
Pj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAg
IH07CisKKyAgICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgIGlmIChhYm92
ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFi
bGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmlt
dW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnNo
cmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJs
ZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KCkpKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5z
aWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRh
YmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAg
bV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxl
SGFzaChtX3RhYmxlKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRF
bnRyeSA9IG9sZFRhYmxlW2ldOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob2xkRW50cnkp
KQorICAgICAgICAgICAgcmVpbnNlcnQoV1RGTW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRF
bnRyeS5+VmFsdWVUeXBlKCk7CisgICAgfQorCisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2xl
YXIoKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV90
YWJsZUhhc2ggPSAwOworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworICAgIGRlYWxsb2NhdGVU
YWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIpLCBvbGRUYWJsZVNpemUpOworICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIGlmICghb3RoZXIu
bV90YWJsZVNpemUgfHwgIW90aGVyLm1fa2V5Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBtX3RhYmxl
U2l6ZSA9IG90aGVyLm1fdGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvdGhlci5tX2tleUNv
dW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxlSGFzaChtX3RhYmxlKTsKKyAgICBt
X3dpbGxFeHBhbmQgPSBvdGhlci5tX3dpbGxFeHBhbmQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICBW
YWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAgaWYg
KCFpc0VtcHR5QnVja2V0KG90aGVyRW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVR5cGUgZW50
cnkob3RoZXJFbnRyeSk7CisgICAgICAgICAgICByZWluc2VydChXVEZNb3ZlKGVudHJ5KSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNpbmcg
c3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMp
OworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAobV90YWJsZSwg
b3RoZXIubV90YWJsZSk7CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUp
OworICAgIHN3YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7CisgICAgc3dhcChtX3Rh
YmxlSGFzaCwgb3RoZXIubV90YWJsZUhhc2gpOworICAgIHN3YXAobV93aWxsRXhwYW5kLCBvdGhl
ci5tX3dpbGxFeHBhbmQpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
KyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RI
YXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dh
cCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKCZvdGhlcik7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxl
LCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJs
ZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291
bnQsIDApOworICAgIG1fdGFibGVIYXNoID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlSGFz
aCwgMCk7CisgICAgbV93aWxsRXhwYW5kID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dpbGxFeHBh
bmQsIGZhbHNlKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAg
b3RoZXIuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNo
VGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAoV1RGTW92ZShvdGhlcikpOwor
ICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCisKKyNpZiBBU1NFUlRfRU5B
QkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0Cit7CisgICAgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHRhYmxl
U2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWJsZVNpemU7ICsraSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGk7
CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBhdXRvJiBrZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAg
ICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CisgICAgICAgIEFTU0VSVChlbnRy
eSA9PSBpdC5tX3Bvc2l0aW9uKTsKKyAgICAgICAgKytjb3VudDsKKworICAgICAgICBWYWx1ZUNo
ZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koa2V5KTsKKyAgICB9CisKKyAgICBBU1NFUlQoY291
bnQgPT0ga2V5Q291bnQoKSk7CisgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID49IEtleVRy
YWl0czo6bWluaW11bVRhYmxlU2l6ZSk7CisgICAgQVNTRVJUKHRhYmxlU2l6ZU1hc2soKSk7Cisg
ICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID09IHRhYmxlU2l6ZU1hc2soKSArIDEpOworfQor
CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKworc3RydWN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxl
VHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IE1lbW9yeUNvbXBhY3RSb2Jpbkhv
b2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5
PjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBGYXN0Um9iaW5Ib29k
SGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ0hhc2guaAppbmRleCA5MmQyMDhkMzVlMmFhZDViODgyNzNlMzQxODZj
MjdiNWQwN2NlMWZkLi5iYWQyY2FiMGQ1YWY2OTg2M2JkMDhhMjg5MGI1NDNkYTg4MzdlNTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8V1RGOjpBdG9tU3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxXVEY6OkF0b21TdHJpbmc+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5j
cHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVmYS4uYTE4YjNj
YmQ4ODAwMmQzOWRmY2IyZWMxNzQzYTk3NWQ0ZWY0Y2RiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgQXRvbVN0cmluZ1RhYmxl
TG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBTdHJpbmdUYWJs
ZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47Cit1c2luZyBTdHJpbmdUYWJs
ZUltcGwgPSBBdG9tU3RyaW5nVGFibGU6OlN0cmluZ1RhYmxlSW1wbDsKIAogc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXggZTBjMGFmYmFlYTQzNjg2MWI4YjhlNDFlZTA3
NmFlMmM3NDIyNGJjZi4uODZlZDI1ZjI4ZWMwODY2OGVmNWU0YTU2YTI0OTc1ZDIwMWZhOGU0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcApAQCAtMjksNyArMjksNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKCkK
IHsKLSAgICBmb3IgKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgc3RyaW5nIDogbV90YWJs
ZSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1fdGFibGUpCiAgICAgICAgIHN0cmlu
Zy0+c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmgKaW5kZXggMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZS4uZmZhZjgz
NjQyMmM1MjllMzllNmQxNzBkYmNiODRmOTliNjc5NGZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21TdHJpbmdUYWJsZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTMzLDEyICszNCwxNSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmlu
Z1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2lu
ZyBTdHJpbmdFbnRyeSA9IFBhY2tlZFB0cjxTdHJpbmdJbXBsPjsKKyAgICB1c2luZyBTdHJpbmdU
YWJsZUltcGwgPSBIYXNoU2V0PFN0cmluZ0VudHJ5PjsKKwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxlSW1wbCYgdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1fdGFibGU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDVhODM4NWUwNGE5NTkwNGUwNmJh
MTI4ZDZlYWExM2Q5MWViOTBmYjkuLmYwMzJmMWJkZjIxYjU4ZGJmNmNlNjI1NDU0NDZjNDg3NjVm
YWM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC05MCw2ICs5MCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAgIHN0cnVjdCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRl
eCA3NDkwNzMzODgwN2VhOTc1ZTA3MjI4ZDA0YTI1NjQzNmU3NzE1Y2M2Li4wOTQzZDdiODVhM2Iz
M2M5YzE2Njk5MDhlZjgzMzIzZmNlMjJkMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNw
cApAQCAtMzksMzEgKzM5LDMxIEBACiAjaW5jbHVkZSAiTWVkaWFFbmNvZGluZ0NvbmZpZ3VyYXRp
b24uaCIKICNpbmNsdWRlICJNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVU
eXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVUeXBlcygpCiB7CiAgICAgLy8gQSAiYnVja2V0IiBNSU1F
IHR5cGVzIGlzIG9uZSB3aG9zZSBjb250YWluZXIgdHlwZSBkb2VzIG5vdCB1bmlxdWVseSBzcGVj
aWZ5IGEgY29kZWMuCiAgICAgLy8gU2VlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZj
NjM4MQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGJ1Y2tldE1J
TUVUeXBlcyA9IEhhc2hTZXQ8U3RyaW5nPih7Ci0gICAgICAgICJhdWRpby8zZ3BwIiwKLSAgICAg
ICAgInZpZGVvLzNncHAiLAotICAgICAgICAiYXVkaW8vM2dwcDIiLAotICAgICAgICAidmlkZW8v
M2dwcDIiLAotICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgInZpZGVvL21wNCIsCi0gICAg
ICAgICJhcHBsaWNhdGlvbi9tcDQiLAotICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiwKLSAgICAg
ICAgImFwcGxpY2F0aW9uL21wMjEiLAotICAgICAgICAiYXVkaW8vdm5kLmFwcGxlLm1wZWd1cmwi
LAotICAgICAgICAidmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiLAotICAgICAgICAiYXVkaW8vb2dn
IiwKLSAgICAgICAgInZpZGVvL29nZyIsCi0gICAgICAgICJ2aWRlby93ZWJtIiwKLSAgICAgICAg
ImF1ZGlvL3dlYm0iLAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAgICAgICAgImF1ZGlvLzNncHAiX3MsCisgICAgICAg
ICJ2aWRlby8zZ3BwIl9zLAorICAgICAgICAiYXVkaW8vM2dwcDIiX3MsCisgICAgICAgICJ2aWRl
by8zZ3BwMiJfcywKKyAgICAgICAgImF1ZGlvL21wNCJfcywKKyAgICAgICAgInZpZGVvL21wNCJf
cywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wNCJfcywKKyAgICAgICAgInZpZGVvL3F1aWNrdGlt
ZSJfcywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wMjEiX3MsCisgICAgICAgICJhdWRpby92bmQu
YXBwbGUubXBlZ3VybCJfcywKKyAgICAgICAgInZpZGVvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAor
ICAgICAgICAiYXVkaW8vb2dnIl9zLAorICAgICAgICAidmlkZW8vb2dnIl9zLAorICAgICAgICAi
dmlkZW8vd2VibSJfcywKKyAgICAgICAgImF1ZGlvL3dlYm0iX3MsCiAgICAgfSk7CiAgICAgcmV0
dXJuIGJ1Y2tldE1JTUVUeXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDkwNDM1NGQ2MjhhYjU0Zjc3YmFj
OGUxZjA2NjVlZmNlN2FkNTU4NDguLjg0MzEwMWVkZWY0NTJhZDA5NGYwMzViZjg0MjQyNWJiZjY2
NjkwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcApAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIlVzZXJHZXN0dXJl
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KQEAgLTI2MDcsOCArMjYwOCw4
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0CiAK
IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3B1cFZhbHVlKCkgY29uc3QKIHsKLSAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhbGxvd2VkUG9wdXBW
YWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4gewotICAgICAgICAibWVudSIsICJs
aXN0Ym94IiwgInRyZWUiLCAiZ3JpZCIsICJkaWFsb2ciCisgICAgc3RhdGljIGNvbnN0IE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
PiBhbGxvd2VkUG9wdXBWYWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAg
ICAgICAibWVudSJfcywgImxpc3Rib3giX3MsICJ0cmVlIl9zLCAiZ3JpZCJfcywgImRpYWxvZyJf
cywKICAgICB9KTsKIAogICAgIGF1dG8gaGFzUG9wdXAgPSBnZXRBdHRyaWJ1dGUoYXJpYV9oYXNw
b3B1cEF0dHIpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNmU3NjcyNzRhNTllMGZiYjAxNjc3ZTA5ZDlhNzkyZTM5OWM5ZDIwNy4uNDZiYmY5ZWU5
NjJhZTRlOWNjMTM3YmNhYjdkMjdkYjA0MDY0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjM4OSw3ICsyMzg5LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFkb3dSb290KCkKIAog
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0
YWdOYW1lcyA9IFtdIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7
CiAgICAgICAgICAgICAmYXJ0aWNsZVRhZy5nZXQoKSwKICAgICAgICAgICAgICZhc2lkZVRhZy5n
ZXQoKSwKQEAgLTI0MTAsNyArMjQxMCw4IEBAIHN0YXRpYyBib29sIGNhbkF0dGFjaEF1dGhvclNo
YWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZzZWN0aW9uVGFn
LmdldCgpLAogICAgICAgICAgICAgJnNwYW5UYWcuZ2V0KCkKICAgICAgICAgfTsKLSAgICAgICAg
SGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIHNldC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemVvZih0YWdMaXN0KSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6
IHRhZ0xpc3QpCiAgICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWRO
YW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4IDI2NGM0Nzkx
NTBjY2JmN2EwNjVkZWE1NWFjZWJhNDRlZGQzOTJmNGYuLjQyOWZjNTU5NjQzNTFmMTI0OWJjMWM4
ZjI4OWUzNzdhNGRkM2UzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZp
ZWROYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaApAQCAtMTM3
LDcgKzEzNyw4IEBAIHN0cnVjdCBRdWFsaWZpZWROYW1lSGFzaCB7CiAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwqIGEsIGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiBiKSB7IHJldHVybiBhID09IGI7IH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIGlubGluZSBTdHJp
bmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTljZTI1MmM2YzY2YWNiNzkzZjViLi40Mjg1NDI4
OGVhODFlMjg2MzA0OTMwZWJlMzBiZWEyYzhhN2Q4ZTg1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbApAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRGKTsKICAg
ICBwcmludEhlYWRlckhlYWQoJEYsICJDU1MiLCAkZmFtaWx5TmFtZXNGaWxlQmFzZSwgPDxFTkQs
ICIiKTsKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nLmg+CiBFTkQKQEAgLTcwOSw2ICs3MTAsNyBAQCBzdWIgcHJpbnROYW1l
c0hlYWRlckZpbGUKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVy
SGVhZCgkRiwgIkRPTSIsICRwYXJhbWV0ZXJze25hbWVzcGFjZX0sIDw8RU5ELCAiY2xhc3MgJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfVF1YWxpZmllZE5hbWUgOiBwdWJsaWMgUXVhbGlmaWVkTmFtZSB7
IH07XG5cbiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgog
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKIEVORApAQCAtOTU2LDcgKzk1OCw3IEBAIEVORAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OTYsNyArOTk4LDcgQEAgRU5ECiAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSogcXVhbGlmaWVkTmFtZTsgLy8gVXNlIHBvaW50ZXIgaW5zdGVh
ZCBvZiByZWZlcmVuY2Ugc28gdGhhdCBlbXB0eVZhbHVlKCkgaW4gSGFzaE1hcCBpcyBjaGVhcCB0
byBjcmVhdGUuCiB9OwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBj
cmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCitzdGF0aWMgTkVWRVJfSU5M
SU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCAk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBjcmVhdGUk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50
cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lOwpAQCAtMTAxMiwxNiArMTAx
NCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRv
bVN0cmluZ0ltcGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1h
cEVudHJ5PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnk+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAgIG1hcC5h
ZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1D
b25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCAkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5KGVudHJ5LmZ1bmN0aW9uLCBlbnRyeS5u
YW1lKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogc3RhdGljICRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkgZmluZCRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50Q29uc3RydWN0b3JGdW5jdGlvbihjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRw
YXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkpOwotICAgIHJldHVybiBtYXAuZ2V0KCku
Z2V0KGxvY2FsTmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtYXAuZ2V0KCkuZ2V0KGxvY2FsTmFt
ZSk7CiB9CiAKIFJlZlB0cjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudD4gJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUVsZW1lbnRGYWN0b3J5OjpjcmVhdGVLbm93bkVsZW1lbnQoY29uc3QgQXRv
bVN0cmluZyYgbG9jYWxOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQkZm9ybUVsZW1lbnRBcmd1bWVu
dEZvckRlZmluaXRpb24sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtMTIyNiw2ICsxMjI4LDcg
QEAgc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlCiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiBFTkQKIDsKQEAgLTEyNDcsNyArMTI1MCw3IEBAIEVORAog
CiBwcmludCBGIDw8RU5ECiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCitzdGF0aWMgTkVWRVJf
SU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5n
LCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gY3Jl
YXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKQogewogICAgIHN0cnVjdCBUYWJs
ZUVudHJ5IHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZTsKQEAgLTEyODUsMTYg
KzEyODgsMTYgQEAgRU5ECiAgICAgcHJpbnQgRiA8PEVORAogICAgIH07CiAKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8QXRvbVN0cmluZywgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAg
IG1hcC5hZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksIGVudHJ5LmZ1bmN0aW9uKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCBlbnRyeS5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogSlNET01PYmplY3QqIGNyZWF0ZUpTJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPCRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGF1dG8gZnVuY3Rpb25zID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1XcmFwcGVyTWFwKCkpOwotICAgIGlmIChhdXRvIGZ1bmN0aW9uID0gZnVuY3Rp
b25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpKQorICAgIGlmIChhdXRv
IGZ1bmN0aW9uID0gZnVuY3Rpb25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKSkpCiAg
ICAgICAgIHJldHVybiBmdW5jdGlvbihnbG9iYWxPYmplY3QsIFdURk1vdmUoZWxlbWVudCkpOwog
RU5ECiA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
aW5kZXggYzc4ZDFlYmY4NmViMGI0OTBkYTM5YzYzMGJiMmZhMWI0ZGViYjNkMC4uYjgyZTJlNmM5
NWU1NjM2YjVhMzI4ZTg4MWJmMWU3YTU3ZjQzMDk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTE4LDcgKzExOSw3IEBAIEVsZW1lbnQqIEZvcm1hdEJs
b2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxT
aW1wbGVSCiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1
dG8gYmxvY2tUYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIGFkZHJlc3NUYWcsCiAg
ICAgICAgIGFydGljbGVUYWcsCiAgICAgICAgIGFzaWRlVGFnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKaW5kZXggNGVjMGI0ZTU1YzNlYWY2NDA4
ZjI1MDU5OTZjYTFkY2RhYTVmMjM1My4uNjYxNDA3ZTE0NTI0Y2YyYTEzZmVhMzY1NTEzZDc5YWJl
NTNlNjlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1h
bmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00Niw3ICs0Nyw3IEBAIFJlbW92ZUZvcm1hdENvbW1hbmQ6OlJlbW92ZUZvcm1hdENvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBzdGF0aWMgYm9vbCBpc0VsZW1lbnRGb3JSZW1vdmVG
b3JtYXRDb21tYW5kKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIGNvbnN0
IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1l
PiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsK
ICAgICAgICAgYWNyb255bVRhZywKICAgICAgICAgYlRhZywKICAgICAgICAgYmRvVGFnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApp
bmRleCAwMTkxOWViMzVjNzljNTQ5OGViNmMyZTAwOGZmODNmYWRhM2E3ZGFmLi5jYzMzZGY3MmEy
YzdhOGJmZjExZjg2NjE3NDI0NjU0MWVlN2NlMzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNjcsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03MzksNyArNzQwLDcgQEAgc3RhdGljIGJvb2wgaXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQo
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSkKICAgICAgICAgICAgICZ1bFRhZy5nZXQoKSwKICAgICAg
ICAgICAgICZ4bXBUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0
cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8mIHRhZyA6IHRhZ3MpCiAgICAg
ICAgICAgICBzZXQuYWRkKHRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0F1dG9maWxsLmNwcAppbmRleCA2NzM1ZTI2OWYyNWFlZjdiYzA5MTI3NTUzOTIx
NDgxY2RlM2U4ZWI1Li44ZjcxMmY3MWQyMjFkYzI3ZTk0MjI4MmYxNGY5MDMyZTlhODkxMTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaD4KIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgQXV0b2ZpbGxJbmZvIHsKICAgICBBdXRv
ZmlsbENhdGVnb3J5IGNhdGVnb3J5OwogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0
cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZv
PiYgZmllbGROYW1lTWFwKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkgewpAQCAtMTEzLDcgKzEx
NCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4mIGZp
ZWxkTmFtZU1hcCgpCiAgICAgICAgICAgICB7ICJlbWFpbCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6
OkVtYWlsLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0IH0gfSwKICAgICAgICAgICAgIHsgImlt
cHAiLCB7IEF1dG9maWxsRmllbGROYW1lOjpJbXBwLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0
IH0gfSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbElu
Zm8+IG1hcDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZW50cmllcykKICAgICAgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZSwgZW50cnkudmFsdWUp
OwogICAgICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmlu
ZGV4IDhkZjYyYzZiYjQ5MWY4NDhlZWNlMjkwOTQ0YTRiN2NmYWVkZDhkNzUuLjAwYmY2N2FlZDU2
NWFjOTBmNDZkOGZhNzM4ZGY3YTUyOTM3NjBkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyNSw3ICsyMjYsNyBA
QCBib29sIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICAmdmFsdWV0eXBlQXR0ci5nZXQo
KSwKICAgICAgICAgICAgICZ2bGlua0F0dHIuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhh
c2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8qIG5hbWUg
OiBuYW1lcykKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAg
ICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApp
bmRleCBkYzFmMTBjYjJjZjA4NDIxODgzMjRiOGEwM2U2YjE3MTYyMGQ2Y2JlLi5hNmYzYzBmMTJk
MjcxNTY5NTkxOGI3NjNkOTI0NjI2NWZlMmYyYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgpAQCAtMzYxLDcg
KzM2Miw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCgp
CiBzdGF0aWMgaW5saW5lIGJvb2wgcHJldmVudHNQYXJlbnRPYmplY3RGcm9tRXhwb3N1cmUoY29u
c3QgRWxlbWVudCYgY2hpbGQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbW9zdEtub3duVGFn
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4gc2V0OwogICAgICAgICBhdXRvKiB0YWdzID0gSFRNTE5hbWVzOjpnZXRI
VE1MVGFncygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxOYW1lczo6SFRN
TFRhZ3NDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBhdXRvJiB0YWcgPSAqdGFnc1tpXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGIx
OTMwZTQ2M2RhNDRkOTdkYjc0NTQ1Y2U2OTRlOTljYmUzOTE2OGYuLjkyZjI3NmYzOGI3NDRkNTFl
YzUxYzhmY2Y5YWI0NmZlNzJkMmVkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlhNTE5T
TmFtZXMuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ3OCw5ICs0NzksOSBAQCB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQwogICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+
IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0ZUNhc2VNYXAo
Y29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25lZCBsZW5ndGgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
IGNyZWF0ZUNhc2VNYXAoY29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1l
PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1l
c1tpXTsKICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS5sb2NhbE5h
bWUoKTsKQEAgLTQ5MywxNCArNDk0LDE0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxp
ZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+CiAKIHN0
YXRpYyB2b2lkIGFkanVzdFNWR1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoU1ZHTmFtZXM6OmdldFNWR1RhZ3MoKSwgU1ZHTmFt
ZXM6OlNWR1RhZ3NDb3VudCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4g
bWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZH
VGFnc0NvdW50KTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0
KCkuZ2V0KHRva2VuLm5hbWUoKSk7CiAgICAgaWYgKGNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHRva2VuLnNldE5hbWUoY2FzZWROYW1lLmxvY2Fs
TmFtZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQorc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBt
YXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUg
OiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2Fz
ZWROYW1lID0gbWFwLmdldChhdHRyaWJ1dGUubG9jYWxOYW1lKCkpOwpAQCAtNTExLDcgKzUxMiw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvCiAKIHRlbXBsYXRlPGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmlidXRlc1RhYmxlTGVu
Z3RoPiBzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoYXR0cmlidXRlc1RhYmxlKCksIGF0dHJpYnV0
ZXNUYWJsZUxlbmd0aCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFw
ID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3Ro
KTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwogfQogCkBAIC01MjUsMTggKzUy
NiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGFkanVzdEF0dHJpYnV0ZXM8TWF0aE1MTmFtZXM6OmdldE1h
dGhNTEF0dHJzLCBNYXRoTUxOYW1lczo6TWF0aE1MQXR0cnNDb3VudD4odG9rZW4pOwogfQogCi1z
dGF0aWMgdm9pZCBhZGROYW1lc1dpdGhQcmVmaXgoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZp
ZWROYW1lPiYgbWFwLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3Jl
YXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5h
bWVzW2ldOwotICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2Fs
TmFtZSgpOwotICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlm
aWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOwotICAgIH0K
LX0KKyAgICBhdXRvIGFkZE5hbWVzV2l0aFByZWZpeCA9IFtdKE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBjb25z
dCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10s
IHVuc2lnbmVkIGxlbmd0aCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFt
ZXNbaV07CisgICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxv
Y2FsTmFtZSgpOworICAgICAgICAgICAgbWFwLmFkZChwcmVmaXggKyAnOicgKyBsb2NhbE5hbWUs
IFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG5hbWUubmFtZXNwYWNlVVJJKCkpKTsK
KyAgICAgICAgfQorICAgIH07CiAKLXN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKLXsKLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogCiAgICAgQXRv
bVN0cmluZyB4bGlua05hbWUoInhsaW5rIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGFkZE5hbWVzV2l0aFByZWZpeChtYXAsIHhsaW5rTmFtZSwgWExpbmtOYW1lczo6
Z2V0WExpbmtBdHRycygpLCBYTGlua05hbWVzOjpYTGlua0F0dHJzQ291bnQpOwpAQCAtNTUwLDcg
KzU1MCw3IEBAIHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0
ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKIAogc3RhdGljIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlRm9yZWln
bkF0dHJpYnV0ZXNNYXAoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBt
YXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMo
bWFwLCB0b2tlbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQ
YWdlT3ZlcmxheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5j
cHAKaW5kZXggZmEzZTJmYWE0OGI5NmFkYmM5ZDhlMjYzNTJkNWY2MjBkN2I1NWFhMS4uYjU5NjVm
NTZhNDlhOTVlMDJjOGYwNzk1ZGVjY2U4ZmFmMTFiYTZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0xNDksMTAgKzE1MCwxMCBAQCBib29sIE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uT3ZlcmxheTo6dXBkYXRlUmVnaW9uKCkKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0K
IAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4mIHRvdWNoRXZl
bnRSZWdpb25Db2xvcnMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcmVnaW9uQ29sb3JzID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKLSAgICAgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50
OF90Pj4geyB7CisgICAgICAgIHJldHVybiBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4geyB7CiAgICAgICAgICAgICB7ICJ0b3Vj
aHN0YXJ0Il9zLCB7IDE5MSwgMTkxLCA2MywgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2ht
b3ZlIl9zLCB7IDgwLCAyMDQsIDI0NSwgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2hlbmQi
X3MsIHsgMTkxLCA2MywgMTI3LCA1MCB9IH0sCkBAIC0xOTQsNDkgKzE5NSw0OSBAQCB2b2lkIE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5LCBHcmFwaGljcwogICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOwogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJ0b3VjaHN0YXJ0IikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiX3MpKTsKICAgICBjb250ZXh0
LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0
YXJ0IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgidG91Y2hzdGFydCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5s
b2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIikpOwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRv
dWNobW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJh
d1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3Qu
bG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSJfcywgY29u
dGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92
ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgidG91Y2hlbmQiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hlbmQiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGVuZCIsIGNvbnRl
eHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRl
eHQoInRvdWNoZW5kIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwog
CiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGZvcmNlY2hhbmdlIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9y
Y2VjaGFuZ2UiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIiwgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hmb3Jj
ZWNoYW5nZSJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAg
IGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9jb2xv
cik7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgicGFzc2l2ZSBsaXN0ZW5lcnMiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyJf
cywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJl
Y3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgibW91c2Vkb3duIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNlZG93biJfcykpOwogICAgIGNvbnRleHQu
ZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlZG93
biIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoIm1vdXNlZG93biJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIikpOworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNl
bW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1Jp
Z2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9j
YXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSJfcywgY29udGV4
dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgw
LCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgibW91c2V1cCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdl
bmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCIsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1v
dXNldXAiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZWxzZQog
ICAgIC8vIE9uIGRlc2t0b3AgcGxhdGZvcm1zLCB0aGUgIndoZWVsIiByZWdpb24gaW5jbHVkZXMg
dGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uLgotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIikpOworICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIl9zKSk7CiAgICAg
Y29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgi
bm9uLWZhc3QgcmVnaW9uIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibm9uLWZhc3QgcmVnaW9uIl9zLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2ZW50
U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCmluZGV4IGVkOGRkOTIzOGQzMzczYzAxODJi
MmYzMDhlZGEwMDI3ZTRhZmI5MDIuLjQwMTUyNzdlMDdjNDNkOWY5ODlhMTdlYWJhZTE1MjBiOWVj
OGExOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGlt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rp
b24gPSB1bnNpZ25lZCBsb25nIGxvbmcgKFBlcmZvcm1hbmNlVGltaW5nOjoqKSgpIGNvbnN0Owot
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+JiBy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXAoKQorc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5h
dmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25U
aW1pbmdGdW5jdGlvbk1hcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgTmF2
aWdhdGlvblRpbWluZ0Z1bmN0aW9uPj4oeworICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CiAgICAgICAgIHsgImNvbm5lY3RFbmQiX3Ms
ICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdEVuZCB9LAogICAgICAgICB7ICJjb25uZWN0U3Rh
cnQiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdFN0YXJ0IH0sCiAgICAgICAgIHsgImRv
bUNvbXBsZXRlIl9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmRvbUNvbXBsZXRlIH0sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0KaW5kZXggOWM0NWEyMjk0ZmJmYWNmMTk3NzBkNDgxZTZiZWU0ZmVkYWVhNjRmYy4uYTU1ZDVh
MDVlNGRkY2JmNWM4MWM3MTkxYjRkY2I5ZDJjMzQxZWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQpAQCAtMjks
MTcgKzI5LDE5IEBACiAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVNlcnZpY2VzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TVVJMRmlsZVR5cGVNYXBwaW5nc1NQSS5oPgorI2lt
cG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVu
c2lvbnNGb3JNSU1FVHlwZU1hcCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4+JiBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQogewogICAgIHN0YXRpYyBh
dXRvIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0g
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4+IG1hcDsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IG1hcDsKIAogICAgICAgICBhdXRv
IGFkZEV4dGVuc2lvbiA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSB7Ci0gICAgICAgICAgICBtYXAuYWRkKHR5cGUsIEhhc2hTZXQ8U3RyaW5nPigpKS5p
dGVyYXRvci0+dmFsdWUuYWRkKGV4dGVuc2lvbik7CisgICAgICAgICAgICBtYXAuYWRkKHR5cGUs
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIGFk
ZEV4dGVuc2lvbnMgPSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlLCBOU0FycmF5PE5TU3RyaW5nICo+
ICpleHRlbnNpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5N2I3OWZkOGY3
M2Q3ZC4uZjVhNjc1ODMzNTEzMTlmNDBmMTI4N2UyYTcyOWNjNDcxYmJkMWU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01MCw3ICs1MSw3
IEBAIHN0YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzZXQgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
W10gewotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKICAgICAgICAg
YXV0byBhZGQgPSBbJnNldF0gKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVQ2hhcj4gdW5pY29kZU5hbWUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG5hbWVMZW5ndGgg
PSBzdHJsZW4obmFtZSk7CiAgICAgICAgICAgICBzZXQuYWRkKEF0b21TdHJpbmcgeyBuYW1lLCBu
YW1lTGVuZ3RoLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCB9KTsKQEAgLTM4Miw3
ICszODMsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCBh
dXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PEF0b21TdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHsKICAgICAgICAgIkFtZXJpY2Fu
IFR5cGV3cml0ZXIiLAogICAgICAgICAiQXJpYWwgSGVicmV3IiwKICAgICAgICAgIkNoYWxrYm9h
cmQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggNGY0
MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MC4uMTQyNGQxYmVlZTZlM2MzMmM2
NmI0OWEyZjZmMjRiNDhiMmFjMmUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIEhBVkUoQVZDT05URU5US0VZU0VTU0lPTikKQEAgLTIw
NSw5ICsyMDYsOSBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2
YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTawogICAgIHJldHVybiBrZXlJRHM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlw
ZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyA9IEhhc2hTZXQ8QXRvbVN0
cmluZz4oeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHZhbGlkVHlwZXMoc3RkOjppbml0aWFsaXpl
cl9saXN0PEF0b21TdHJpbmc+IHsKICAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5n
OjpzaW5mTmFtZSgpLAogICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNrZE5h
bWUoKSwKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKaW5k
ZXggM2MxYjZmNjU3MmViMzhhOTM4MTA1Zjc0NzU4YjE3ODJmY2Q5NzkxNy4uYTQ3MDI0NDBlZGZi
MDMyMmZlYWY3Y2Q5MWI2ZWFkNDA3YjNjOTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcApAQCAtMzEsMTMgKzMxLDE0IEBA
CiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKIAorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGF1dG8gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10g
ewogICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSB7
CkBAIC02OCwxMSArNjksMTIgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9y
dGVkSW1hZ2VUeXBlcygpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIYXNoU2V0PFN0cmluZz4q
Pihjb250ZXh0KS0+YWRkKGltYWdlVHlwZSk7CiAgICAgICAgIH0sICZzeXN0ZW1TdXBwb3J0ZWRJ
bWFnZVR5cGVzKTsKIAotICAgICAgICBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcy5yZW1vdmVJ
ZihbJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXNdKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMuY29udGFpbnMo
aW1hZ2VUeXBlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0
ZWRJbWFnZVR5cGVzOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8U3RyaW5nPiBmaWx0ZXJlZDsKKyAgICAgICAgZm9yIChhdXRvJiBpbWFnZVR5cGUgOiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcykgeworICAgICAgICAgICAgaWYgKHN5c3RlbVN1cHBv
cnRlZEltYWdlVHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkKKyAgICAgICAgICAgICAgICBmaWx0
ZXJlZC5hZGQoaW1hZ2VUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsdGVyZWQ7
CiAgICAgfSgpKTsKIAogICAgIHJldHVybiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmlu
ZGV4IDViOGZlMjE3ZTg3M2QwYjBjODU2Njg2NzQwMGQ3NmVlM2M2NjU3NWUuLjRiMDE1YWZjOTVj
YWYyMzA4NmExY2JiNjFlM2U1NjRmNzdkMGI5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApAQCAtMjUsMTIgKzI1LDEyIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBv
cnRlZEltYWdlVHlwZXMoKTsKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogSGFzaFNldDxT
dHJpbmc+JiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
c0ZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KaW5kZXgg
ZjExMWYyODc3Yjk4ZjljODM3ZDM1NGNjODFkYmEwMjhiM2VlOTIzMy4uNjI2YzUyZGUwMjMyYjMy
NmNlMmI0YmY4MzJmZjA5ZjkwYTc4Yjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbQpAQCAt
MzIsOCArMzIsOSBAQAogI2ltcG9ydCAiSEVWQ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiTWVkaWFD
YXBhYmlsaXRpZXNJbmZvLmgiCiAKLSNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0
TGluay5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZv
dW5kYXRpb25Tb2Z0TGluay5oPgogCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgog
CkBAIC0xMjYsMTEgKzEyNywxMSBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1Bh
cmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJgogCiBzdGF0aWMg
T3B0aW9uYWw8Q01WaWRlb0NvZGVjVHlwZT4gY29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiB7Ci0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewotICAgICAg
ICB7ICJhdmMxIiwga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJhdmMzIiwg
a0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJodmMxIiwga0NNVmlkZW9Db2Rl
Y1R5cGVfSEVWQyB9LAotICAgICAgICB7ICJoZXYxIiwga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9
LAorICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewor
ICAgICAgICB7ICJhdmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCisgICAgICAgIHsg
ImF2YzMiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiaHZjMSJfcywg
a0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAorICAgICAgICB7ICJoZXYxIl9zLCBrQ01WaWRlb0Nv
ZGVjVHlwZV9IRVZDIH0sCiAgICAgfSk7CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBtYXAuZ2V0
KCkuZmluZChjb2RlY1N0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmlu
ZGV4IGQxZmNmZDBkY2JhMzI2YWQzYzU0YjBjYWNkNjdkZmJiOTVjMTJkOTkuLmU1MWI1ZDY5YzQ2
ZjQxNzdkYTRjOTlmNDczN2M4MmYwMzBmNDI5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uY3BwCkBAIC0xMzcxLDE1ICsxMzcxLDE1IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soQ2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
CiAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwog
fQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBv
cnRlZFZpZGVvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0Nv
ZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiLCAiVl9WUDkiIH0pOworICAgIHN0YXRpYyBhdXRvIGNv
ZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiX3MsICJWX1ZQOSJfcyB9KTsKICAgICByZXR1cm4g
Y29kZWNzOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0
ZWRBdWRpb0NvZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMiLCAiQV9PUFVTIiB9KTsKKyAgICBz
dGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+KHsgIkFfVk9SQklTIl9zLCAiQV9PUFVTIl9z
IH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
aAppbmRleCBmMGQ2YTVmZDZmMGY2YzJiMzg0ZjkyZjc0OGY0YzliYTVkOTFiOGQ0Li42NDFlNDcx
ODZlYWYzMjc2MGUxODI3NWFkM2Q4ZDUwNDZkNWM3MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTIzNSw4
ICsyMzYsOCBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDog
cHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZQogCiAgICAgVHJhY2tEYXRhKiB0cmFj
a0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBzdXBwb3J0ZWRWaWRlb0NvZGVjcygpOwotICAgIHN0YXRpYyBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIHN1cHBvcnRlZEF1ZGlvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRW
aWRlb0NvZGVjcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKIAogICAgIC8v
IHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9uRWxlbWVudEJlZ2luKGNvbnN0IHdl
Ym06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiopIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IDg4MGNiYmEwNGM4ZWQw
YjdiZjNiOGQyOTUzNTE0MmM1Mjc3Y2JhYWYuLmZlMGVkMzE0NDExNDhlZTE1M2IzNDZlNDUzNTQ1
NTU5MjZjM2E3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDMsOSArNDQsOSBAQCBTVkdSZXNv
dXJjZXM6OlNWR1Jlc291cmNlcygpCiB7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+
JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVyTWFza2Vy
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gImNvbnRhaW5lciBlbGVtZW50
cyI6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUNvbnRhaW5lckVs
ZW1lbnQKICAgICAgICAgLy8gImdyYXBoaWNzIGVsZW1lbnRzIiA6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUdyYXBoaWNzRWxlbWVudApAQCAtOTIsOSArOTMsOSBA
QCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQog
ICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmxpbmVUYWctPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6cGF0aFRhZy0+bG9jYWxO
YW1lKCkpOwpAQCAtMTA1LDkgKzEwNiw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxB
dG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRh
Z3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBz
X3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3Rh
Z0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZH
TmFtZXM6OmFsdEdseXBoVGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQo
KS5hZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy0+bG9jYWxOYW1lKCkpOwpAQCAtMTI2LDkgKzEyNyw5
IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiAgICAg
cmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWlu
YWJsZVJlc291cmNlVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6Omxp
bmVhckdyYWRpZW50VGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy0+bG9jYWxOYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUFkanVzdGVyLmNwcAppbmRleCA5NzU4YTI3ODM5YTJiODE4NjQ0YWNlYzJmYzg4YWMxN2Ux
ODMwZmRmLi5lNmFhMWI1Y2QxYmM4OTgzMzQwMTI3NmU1MzZmYWY0MDBjMmQ2Zjg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKQEAgLTQ5Nyw3ICs0OTgsNyBAQCB2b2lkIEFk
anVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNl
ckFnZW50QXBwZWFyYW5jZQogc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JE
aXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEhU
TUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7CiAgICAgICAgICAgICAmYnJUYWcu
Z2V0KCksCiAgICAgICAgICAgICAmd2JyVGFnLmdldCgpLApAQCAtNTE3LDcgKzUxOCw4IEBAIHN0
YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCiAgICAg
ICAgICAgICAmc2VsZWN0VGFnLmdldCgpLAogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0
b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkK
ICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4g
c2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCmluZGV4IGU0
YWFhYzA0Njg2YThjMjU4MzgyNTY5NGYyNDI4Zjk5ZTI4YTE3ODcuLjcxMjY4MGE1MGM5ODJkMWMy
MjkwM2VkNDU4YWRkNDNkMTc1NWVjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0xMjcsNyArMTI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKFN0cmluZ1ZpZXcgc3RyaW5nKQogYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1
dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRy
aWJ1dGVzKHNldCk7CiAgICAgICAgIHNldC5hZGQoewogICAgICAgICAgICAgU1ZHTmFtZXM6OnZh
bHVlc0F0dHIuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNGYyNzA0ZTQx
MDU2ZWNmNDEzZmQzNWZhMWY5M2ExY2U4ODE3ZWI1NC4uOWMxNDBjYzFkNGUwMzhhNDM2MzhjYjZk
YjJjNmIwY2FhMzQyY2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTUsMTMg
KzU1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChTVkdF
bGVtZW50KTsKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwg
Q1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpCitz
dGF0aWMgTkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxBdG9tU3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9w
ZXJ0eUlETWFwKCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIHVzaW5n
IG5hbWVzcGFjZSBTVkdOYW1lczsKQEAgLTE0MSwxNiArMTQyLDE2IEBAIHN0YXRpYyBORVZFUl9J
TkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJp
YnV0ZU5hbWVUCiAgICAgICAgICZ5QXR0ci5nZXQoKSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ1NTUHJvcGVydHlJRD4gbWFwOwog
CiAgICAgZm9yIChhdXRvJiBuYW1lIDogYXR0cmlidXRlTmFtZXMpIHsKICAgICAgICAgY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5h
ZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsKKyAgICAgICAg
bWFwLmFkZChsb2NhbE5hbWUsIGNzc1Byb3BlcnR5SUQobG9jYWxOYW1lKSk7CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IFdoZW4gQ1NTIHN1cHBvcnRzICJ0cmFuc2Zvcm0tb3JpZ2luIiB0aGlzIHNw
ZWNpYWwgY2FzZSBjYW4gYmUgcmVtb3ZlZCwKICAgICAvLyBhbmQgd2UgY2FuIGFkZCB0cmFuc2Zv
cm1fb3JpZ2luQXR0ciB0byB0aGUgdGFibGUgYWJvdmUgaW5zdGVhZC4KLSAgICBtYXAuYWRkKHRy
YW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUoKS5pbXBsKCksIENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luKTsKKyAgICBtYXAuYWRkKHRyYW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUo
KSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOwogCiAgICAgcmV0dXJuIG1hcDsKIH0KQEAg
LTcyNCw3ICs3MjUsNyBAQCBRdWFsaWZpZWROYW1lIFNWR0VsZW1lbnQ6OmFuaW1hdGFibGVBdHRy
aWJ1dGVGb3JOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZQogICAgICAgICAgICAgJlNW
R05hbWVzOjp6QXR0ci5nZXQoKSwKICAgICAgICAgICAgICZTVkdOYW1lczo6aHJlZkF0dHIuZ2V0
KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFt
ZT4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUg
OiBuYW1lcykgewogICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKG5hbWUtPmxv
Y2FsTmFtZSgpLCAqbmFtZSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNzgwLDcgKzc4MSw3IEBAIENTU1Byb3BlcnR5SUQg
U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYKICAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKIAogICAgIHN0YXRp
YyBjb25zdCBhdXRvIHByb3BlcnRpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlQXR0cmli
dXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpKTsKLSAgICByZXR1cm4gcHJvcGVydGllcy5nZXQo
KS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydGll
cy5nZXQoKS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkpOwogfQogCiBib29sIFNWR0VsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAppbmRleCAxZDJjZDk3OGVkMTMyMzZkNmFlNmE3OGFkNmI3
NGM2MDI4NzExNzJmLi5jNTgyMzEwYWZhZGNlNWYyYjY1NzA5OTZhNWZhNDQ1NTYxZThlZjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNWR1Rlc3Rz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IG1fY29udGV4dEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgp
OwogfQogCi12b2lkIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit2b2lkIFNWR1Rlc3RzOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKIHsKICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChyZXF1aXJlZEZlYXR1cmVzQXR0cik7CiAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQocmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGVzdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCmluZGV4IGE5
YzJhY2UwYTMwYzQ1MGU5ZDlkMjgxOTExNTI5NzZjNTIyYThjNWIuLjBjMjUyMTY2YWFkYTI2YWIx
Zjk2YjhhNDExZTJhYjBiMzlkOTk1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCkBAIC0yMyw2ICsy
Myw3IEBACiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU1ZHU3RyaW5n
TGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBTVkdUZXN0cyB7CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaGFzRmVhdHVyZUZvckxlZ2FjeUJpbmRpbmdzKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IGUwNWZiNTNjMDE5OTcxNmIzNDU2Zjc3MmRlYjk4NWZl
YjBmMGM3MTEuLmZhNzUzOTI4NzgyYTNjNDNkM2EyNDIyMmI4ZjRmYjM3NzExMTExMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzcsMTQgKzE3OCwxNCBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQo
KQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCiB7CiAgICAgLy8gU3BlYzogIkFueSAnc3Zn
JywgJ3N5bWJvbCcsICdnJywgZ3JhcGhpY3MgZWxlbWVudCBvciBvdGhlciAndXNlJyBpcyBwb3Rl
bnRpYWxseSBhIHRlbXBsYXRlIG9iamVjdCB0aGF0IGNhbiBiZSByZS11c2VkCiAgICAgLy8gKGku
ZS4sICJpbnN0YW5jZWQiKSBpbiB0aGUgU1ZHIGRvY3VtZW50IHZpYSBhICd1c2UnIGVsZW1lbnQu
IgogICAgIC8vICJHcmFwaGljcyBFbGVtZW50IiBpcyBkZWZpbmVkIGFzICdjaXJjbGUnLCAnZWxs
aXBzZScsICdpbWFnZScsICdsaW5lJywgJ3BhdGgnLCAncG9seWdvbicsICdwb2x5bGluZScsICdy
ZWN0JywgJ3RleHQnCiAgICAgLy8gRXhjbHVkZWQgYXJlIGFueXRoaW5nIHRoYXQgaXMgdXNlZCBi
eSByZWZlcmVuY2Ugb3IgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgdG8gYXBwZWFyIG9uY2UgaW4gYSBk
b2N1bWVudC4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0gICAgSGFzaFNldDxBdG9t
U3RyaW5nPiBzZXQ7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PEF0b21TdHJpbmc+IHNldDsKICAgICBmb3IgKGF1dG8mIHRhZyA6IHsgYVRhZy5nZXQoKSwgY2ly
Y2xlVGFnLmdldCgpLCBkZXNjVGFnLmdldCgpLCBlbGxpcHNlVGFnLmdldCgpLCBnVGFnLmdldCgp
LCBpbWFnZVRhZy5nZXQoKSwgbGluZVRhZy5nZXQoKSwgbWV0YWRhdGFUYWcuZ2V0KCksIHBhdGhU
YWcuZ2V0KCksIHBvbHlnb25UYWcuZ2V0KCksIHBvbHlsaW5lVGFnLmdldCgpLCByZWN0VGFnLmdl
dCgpLCBzdmdUYWcuZ2V0KCksIHN3aXRjaFRhZy5nZXQoKSwgc3ltYm9sVGFnLmdldCgpLCB0ZXh0
VGFnLmdldCgpLCB0ZXh0UGF0aFRhZy5nZXQoKSwgdGl0bGVUYWcuZ2V0KCksIHRyZWZUYWcuZ2V0
KCksIHRzcGFuVGFnLmdldCgpLCB1c2VUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0YWcu
bG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBzZXQ7CkBAIC0xOTIsNyArMTkzLDcgQEAgc3RhdGlj
IEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNEaXNhbGxvd2VkRWxlbWVudChjb25zdCBTVkdFbGVtZW50JiBlbGVtZW50
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzZXQg
PSBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9
IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CiAgICAgcmV0dXJuICFzZXQuZ2V0KCkuY29udGFp
bnMoZWxlbWVudC5sb2NhbE5hbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggNjgxOTFiOTRhNDAwMTA1ZmIyNmExNjky
ZTZmMDJkYjU3OGNiYWVjZC4uZTM0YTFhZTc2ZGE0YWZkNjA0OWRiY2E2MGI5MGZjY2Y5MjdlZWY5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYyLDcgKzQ2Myw3IEBAIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5n
LCBCZWdpbk9yRW5kIGJlZ2luCiAKIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIHN0YXRpYyBjb25z
dCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRl
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBTVkdOYW1lczo6YmVnaW5BdHRyLAogICAg
ICAgICBTVkdOYW1lczo6ZW5kQXR0ciwKICAgICAgICAgU1ZHTmFtZXM6OmR1ckF0dHIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCA5ZmRmYmE4YjEwMjNhZTY1Y2IyZmY4
YzJmYWY0MjMwNDBhMDM4YTA2Li4xMGYwYzIyZDRiNjdjZTVmZmEzYjgzMDY5Y2JmNDA2MDUxMjFl
ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02NjgsNDQgKzY2OSw0NCBAQCBzdHJ1Y3QgRnVuY3Rpb25NYXBWYWx1
ZSB7CiAgICAgSW50ZXJ2YWwgYXJndW1lbnRDb3VudEludGVydmFsOwogfTsKIAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCitzdGF0
aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgRnVuY3Rp
b25NYXBWYWx1ZT4gY3JlYXRlRnVuY3Rpb25NYXAoKQogewogICAgIHN0cnVjdCBGdW5jdGlvbk1h
cHBpbmcgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBBU0NJSUxpdGVyYWwg
bmFtZTsKICAgICAgICAgRnVuY3Rpb25NYXBWYWx1ZSBmdW5jdGlvbjsKICAgICB9OwogCiAgICAg
c3RhdGljIGNvbnN0IEZ1bmN0aW9uTWFwcGluZyBmdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAi
Ym9vbGVhbiIsIHsgY3JlYXRlRnVuY3Rpb25Cb29sZWFuLCAxIH0gfSwKLSAgICAgICAgeyAiY2Vp
bGluZyIsIHsgY3JlYXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKLSAgICAgICAgeyAiY29uY2F0
IiwgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwgSW50ZXJ2YWw6OkluZikgfSB9
LAotICAgICAgICB7ICJjb250YWlucyIsIHsgY3JlYXRlRnVuY3Rpb25Db250YWlucywgMiB9IH0s
Ci0gICAgICAgIHsgImNvdW50IiwgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKLSAgICAg
ICAgeyAiZmFsc2UiLCB7IGNyZWF0ZUZ1bmN0aW9uRmFsc2UsIDAgfSB9LAotICAgICAgICB7ICJm
bG9vciIsIHsgY3JlYXRlRnVuY3Rpb25GbG9vciwgMSB9IH0sCi0gICAgICAgIHsgImlkIiwgeyBj
cmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKLSAgICAgICAgeyAibGFuZyIsIHsgY3JlYXRlRnVuY3Rp
b25MYW5nLCAxIH0gfSwKLSAgICAgICAgeyAibGFzdCIsIHsgY3JlYXRlRnVuY3Rpb25MYXN0LCAw
IH0gfSwKLSAgICAgICAgeyAibG9jYWwtbmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUs
IEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25O
YW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5hbWVzcGFjZS11cmkiLCB7IGNy
ZWF0ZUZ1bmN0aW9uTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsg
Im5vcm1hbGl6ZS1zcGFjZSIsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2
YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJub3QiLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0g
fSwKLSAgICAgICAgeyAibnVtYmVyIiwgeyBjcmVhdGVGdW5jdGlvbk51bWJlciwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAotICAgICAgICB7ICJwb3NpdGlvbiIsIHsgY3JlYXRlRnVuY3Rpb25Qb3NpdGlv
biwgMCB9IH0sCi0gICAgICAgIHsgInJvdW5kIiwgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0g
fSwKLSAgICAgICAgeyAic3RhcnRzLXdpdGgiLCB7IGNyZWF0ZUZ1bmN0aW9uU3RhcnRzV2l0aCwg
MiB9IH0sCi0gICAgICAgIHsgInN0cmluZyIsIHsgY3JlYXRlRnVuY3Rpb25TdHJpbmcsIEludGVy
dmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgY3JlYXRlRnVuY3Rp
b25TdHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3Vic3RyaW5n
IiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZywgSW50ZXJ2YWwoMiwgMykgfSB9LAotICAgICAg
ICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIg
fSB9LAotICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0
cmluZ0JlZm9yZSwgMiB9IH0sCi0gICAgICAgIHsgInN1bSIsIHsgY3JlYXRlRnVuY3Rpb25TdW0s
IDEgfSB9LAotICAgICAgICB7ICJ0cmFuc2xhdGUiLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRl
LCAzIH0gfSwKLSAgICAgICAgeyAidHJ1ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcnVlLCAwIH0gfSwK
KyAgICAgICAgeyAiYm9vbGVhbiJfcywgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9LAor
ICAgICAgICB7ICJjZWlsaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ2VpbGluZywgMSB9IH0sCisg
ICAgICAgIHsgImNvbmNhdCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwg
SW50ZXJ2YWw6OkluZikgfSB9LAorICAgICAgICB7ICJjb250YWlucyJfcywgeyBjcmVhdGVGdW5j
dGlvbkNvbnRhaW5zLCAyIH0gfSwKKyAgICAgICAgeyAiY291bnQiX3MsIHsgY3JlYXRlRnVuY3Rp
b25Db3VudCwgMSB9IH0sCisgICAgICAgIHsgImZhbHNlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmFs
c2UsIDAgfSB9LAorICAgICAgICB7ICJmbG9vciJfcywgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAx
IH0gfSwKKyAgICAgICAgeyAiaWQiX3MsIHsgY3JlYXRlRnVuY3Rpb25JZCwgMSB9IH0sCisgICAg
ICAgIHsgImxhbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25MYW5nLCAxIH0gfSwKKyAgICAgICAgeyAi
bGFzdCJfcywgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAorICAgICAgICB7ICJsb2NhbC1u
YW1lIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgIm5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgICAgIHsgIm5hbWVzcGFjZS11cmkiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3Bh
Y2VVUkksIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uTm9ybWFsaXplU3BhY2UsIEludGVydmFsKDAsIDEpIH0gfSwKKyAg
ICAgICAgeyAibm90Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0gfSwKKyAgICAgICAgeyAi
bnVtYmVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgInBvc2l0aW9uIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUG9zaXRpb24sIDAgfSB9LAor
ICAgICAgICB7ICJyb3VuZCJfcywgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0gfSwKKyAgICAg
ICAgeyAic3RhcnRzLXdpdGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwK
KyAgICAgICAgeyAic3RyaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nLCBJbnRlcnZhbCgw
LCAxKSB9IH0sCisgICAgICAgIHsgInN0cmluZy1sZW5ndGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25T
dHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0sCisgICAgICAg
IHsgInN1YnN0cmluZy1hZnRlciJfcywgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZ0FmdGVyLCAy
IH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWJlZm9yZSJfcywgeyBjcmVhdGVGdW5jdGlvblN1
YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisgICAgICAgIHsgInN1bSJfcywgeyBjcmVhdGVGdW5jdGlv
blN1bSwgMSB9IH0sCisgICAgICAgIHsgInRyYW5zbGF0ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRy
YW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIHsgInRydWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25UcnVl
LCAwIH0gfSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+
IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBGdW5jdGlvbk1hcFZhbHVlPiBtYXA7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0
aW9ucykKICAgICAgICAgbWFwLmFkZChmdW5jdGlvbi5uYW1lLCBmdW5jdGlvbi5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4IGRmYjQ5
ZjhiMmZlMjUzZTNhZGViZDZiNjE2NTRkMGM3OTBkNTg5NTAuLjg5ZjdlZDlkNzIyZjJhOWZjMTU5
YzlkZDViZWZmZDAzYzEzN2ZhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlhQYXRoUGF0aC5oIgogI2luY2x1ZGUgIlhQYXRoU3Rl
cC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzYsMjggKzc3LDI4IEBAIHN0YXRpYyBYTUxD
YXQgY2hhckNhdChVQ2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIE5vdFBhcnRPZk5hbWU7CiB9
CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gY3JlYXRlQXhpc05hbWVzTWFw
KCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQogewogICAgIHN0cnVjdCBBeGlzTmFt
ZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1l
OwogICAgICAgICBTdGVwOjpBeGlzIGF4aXM7CiAgICAgfTsKICAgICBjb25zdCBBeGlzTmFtZSBh
eGlzTmFtZUxpc3RbXSA9IHsKLSAgICAgICAgeyAiYW5jZXN0b3IiLCBTdGVwOjpBbmNlc3RvckF4
aXMgfSwKLSAgICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiIsIFN0ZXA6OkFuY2VzdG9yT3JTZWxm
QXhpcyB9LAotICAgICAgICB7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCi0g
ICAgICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCi0gICAgICAgIHsgImRlc2NlbmRh
bnQiLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAotICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNl
bGYiLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAotICAgICAgICB7ICJmb2xsb3dpbmci
LCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIiwg
U3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMgfSwKLSAgICAgICAgeyAibmFtZXNwYWNlIiwgU3Rl
cDo6TmFtZXNwYWNlQXhpcyB9LAotICAgICAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlz
IH0sCi0gICAgICAgIHsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKLSAgICAg
ICAgeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5nQXhpcyB9LAot
ICAgICAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMgfQorICAgICAgICB7ICJhbmNlc3RvciJf
cywgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAgICAgIHsgImFuY2VzdG9yLW9yLXNlbGYiX3Ms
IFN0ZXA6OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorICAgICAgICB7ICJhdHRyaWJ1dGUiX3MsIFN0
ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKKyAgICAgICAgeyAiY2hpbGQiX3MsIFN0ZXA6OkNoaWxkQXhp
cyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50Il9zLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAor
ICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNlbGYiX3MsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZB
eGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZyJfcywgU3RlcDo6Rm9sbG93aW5nQXhpcyB9LAor
ICAgICAgICB7ICJmb2xsb3dpbmctc2libGluZyJfcywgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4
aXMgfSwKKyAgICAgICAgeyAibmFtZXNwYWNlIl9zLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisg
ICAgICAgIHsgInBhcmVudCJfcywgU3RlcDo6UGFyZW50QXhpcyB9LAorICAgICAgICB7ICJwcmVj
ZWRpbmciX3MsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKKyAgICAgICAgeyAicHJlY2VkaW5nLXNp
YmxpbmciX3MsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCisgICAgICAgIHsgInNlbGYi
X3MsIFN0ZXA6OlNlbGZBeGlzIH0KICAgICB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpB
eGlzPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0
cmluZywgU3RlcDo6QXhpcz4gbWFwOwogICAgIGZvciAoYXV0byYgYXhpc05hbWUgOiBheGlzTmFt
ZUxpc3QpCiAgICAgICAgIG1hcC5hZGQoYXhpc05hbWUubmFtZSwgYXhpc05hbWUuYXhpcyk7CiAg
ICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg3YmQyOGViNDhhZTI0MDA2NTU4ZThmZjhlYWFmN2U2
N2YxODQ0MTEuLjZkYzYzMWI3ODkzNDgzMjY0ZTBjNWEwOWM3ZWJiZTNkY2RjZTdlMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtNDksOCArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0yNzQsMTgg
KzI3NCwxOCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1h
VjEoKQogCiBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFB
bHRlcm5hdGUoKQogewotICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5z
XCIgKGRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQg
Tk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEws
IGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEws
IGlzUHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5P
VCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxM
LGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCki
OworICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5zXCIgKGRvbWFpbklE
IElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9UIE5VTEwgVU5J
UVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsIGhhZFVzZXJJbnRl
cmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBS
RUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsIGlzUHJldmFsZW50
IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRh
UmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMLGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7CiB9CiAKIHN0
YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1ucygp
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChW
ZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWluSUQiLCAiZGVzdGluYXRpb25TaXRlRG9t
YWluSUQiLCAic291cmNlSUQiLCAidGltZU9mQWRDbGljayIsICJ0b2tlbiIsICJzaWduYXR1cmUi
LCAia2V5SUQiIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJ0
b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZEF0dHJp
YnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJkZXN0
aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
IiwgInByaW9yaXR5IiwgInRpbWVPZkFkQ2xpY2siLCAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2UiLCAidG9rZW4iLCAic2lnbmF0dXJlIiwgImtleUlEIiwgImVhcmxpZXN0VGltZVRvU2VuZFRv
RGVzdGluYXRpb24iIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgImF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEiX3MsICJwcmlvcml0eSJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MsICJl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCkBAIC0yOTQsOSArMjk0LDkgQEAgc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVh
dGVUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHNjaGVtYSkKICAgICByZXR1cm4gc2NoZW1hLmNv
bnRhaW5zKCJSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwogfQogCi1zdGF0aWMgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNyZWF0ZVRhYmxlUXVlcmllcygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgY3JlYXRlVGFibGVRdWVyaWVzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjcmVhdGVUYWJsZVF1
ZXJpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geworICAg
IHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKICAg
ICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBjcmVhdGVPYnNlcnZlZERvbWFpbn0sCiAgICAg
ICAgIHsgIlRvcExldmVsRG9tYWlucyJfcywgY3JlYXRlVG9wTGV2ZWxEb21haW5zfSwKICAgICAg
ICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBjcmVhdGVTdG9yYWdl
QWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnN9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZTQ4ZTgzMjZhMmE3MzVlZjkyNGY4NzM3MmRjNzg2Mzlk
ODIzOTMzMC4uYmIyYjNjNDYwMWMwZTM4NzJhY2MxYWUzM2M5NTg3YzQ4MjNiZmQzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00OTcsOCArNDk3
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pj4gOiBWZWN0b3JBcmd1bWVudENvZGVyPHN0ZDo6
aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUsIFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5PiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2hUYWJsZVRy
YWl0cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hNYXBUeXBlOwogCiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBl
JiBoYXNoTWFwKQogICAgIHsKQEAgLTUxNCw2ICs1MTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFw
VHlwZSBoYXNoTWFwOworICAgICAgICBoYXNoTWFwLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaGFz
aE1hcFNpemUpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaGFzaE1hcFNpemU7
ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7CiAgICAgICAgICAgICBk
ZWNvZGVyID4+IGtleTsKQEAgLTU1MSw4ICs1NTIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aQogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtl
eUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4gewotICAgIHR5cGVkZWYgSGFzaFNldDxLZXlB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaFNldFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtleUFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CisgICAgdHlwZWRlZiBI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhh
c2hTZXRUeXBlOwogCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsKQEAgLTU3OSw2ICs1ODAsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZz4gc3RydWN0IEFyZ3VtZQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgICAgICBIYXNoU2V0VHlwZSBoYXNoU2V0OworICAgICAgICBoYXNoU2V0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaGFzaFNldFNpemUpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBp
IDwgaGFzaFNldFNpemU7ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7
CiAgICAgICAgICAgICBkZWNvZGVyID4+IGtleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KaW5kZXggNDkyYjljNjQ0MmJl
MTU0ZDUxZGRmNzY5ZjU5M2U4MDg0ZWIxYmQ2ZC4uOWE0ZDc4MDllNjNlNDg1MjQyNWYyMDU3Yzg2
MDEzMmE1OGE1YTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVm
YXVsdFdlYkJyb3dzZXJDaGVja3MubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2Ev
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvVmVyc2lvbkNoZWNrcy5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNp
bXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTU4LDcgKzU5LDcgQEAgT3B0aW9uYWw8VmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gZ2V0QXBwQm91bmREb21haW5zVGVzdGluZyhj
b25zdCBTdHIKICAgICBpZiAoYnVuZGxlSUQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4+IHsKKyAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gewogICAgICAgICB7ImluQXBwQnJv
d3NlclByaXZhY3lUZXN0SWRlbnRpZmllciJfcywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiB7IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoIjEyNy4wLjAuMSIpIH19LAogICAgIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IGJiY2VlNDE2
OTljMGQ1Zjg0ZGM2Yzc5MmFiNjQ0YzZmZGQ4MWQwZDcuLmNlNTZmOWNkNDYyODYwOTRjNmU0MTQx
MGVlYmI0Zjk0OWQ3ZWZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuY3BwCkBAIC01MiwxMyArNTIsMTMgQEAgdm9pZCBXZWJQcmVmZXJlbmNlc1N0b3Jl
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiBib29sIFdlYlByZWZlcmVu
Y2VzU3RvcmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYlByZWZlcmVuY2VzU3Rv
cmUmIHJlc3VsdCkKIHsKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmluZywgVmFsdWU+PiB2YWx1
ZXM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IHZhbHVlczsKICAgICBkZWNvZGVyID4+IHZhbHVl
czsKICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5t
X3ZhbHVlcyA9IFdURk1vdmUoKnZhbHVlcyk7CiAKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmlu
ZywgVmFsdWU+PiBvdmVycmlkZGVuRGVmYXVsdHM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IG92
ZXJyaWRkZW5EZWZhdWx0czsKICAgICBkZWNvZGVyID4+IG92ZXJyaWRkZW5EZWZhdWx0czsKICAg
ICBpZiAoIW92ZXJyaWRkZW5EZWZhdWx0cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IGM1ZmUzZmIzZmJiNjIx
NmRlYmUwMDA5ZGY1NTBjNWNhNmQ2ZjM2MDguLjRhM2Q4ZjJhNGU0Y2YwYzc4MWU5NzIyZjc3OTdk
ZjM2MTA2YzgxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJF
bmNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgV2ViUHJl
ZmVyZW5jZXNTdG9yZSB7CiAKICAgICB1c2luZyBWYWx1ZSA9IFZhcmlhbnQ8U3RyaW5nLCBib29s
LCB1aW50MzJfdCwgZG91YmxlPjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZhbHVl
PiBWYWx1ZU1hcDsKKyAgICB1c2luZyBWYWx1ZU1hcCA9IE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgVmFsdWU+OwogICAgIFZhbHVlTWFwIG1fdmFsdWVzOwogICAgIFZhbHVl
TWFwIG1fb3ZlcnJpZGRlbkRlZmF1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDJmMGFhYjVhOWI3ODI0
M2U5NzQ5NGI3NTQxNDQxY2E0ZTEzZjNiODcuLjA0MTc0OGI5MDQ0YWQyNTM2ODhlYWFjZWJhZjlh
OGZlNmU3ZjAwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC02NSw5ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdGF0aWMgY29uc3QgU2Vjb25kcyB1bmV4cGVjdGVkQWN0aXZpdHlEdXJhdGlvbiA9
IDEwX3M7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9y
bVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0
aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Moc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CiAg
ICAgICAgIFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3Jl
Il0ucmVzb3VyY2VQYXRoLnN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGgsCiAgICAgICAgIFtOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXS5yZXNvdXJjZVBh
dGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aAogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggNWE2NjIwMjI5MTMwNGJiZDczN2UxMTZi
ODg3YWM0Zjk5NjNhZjE0Yy4uNTlkODAwYWZiNDNiNzQ1MDM5YjBiNDgzMzUxZTQ4NDIzYzUzYTM2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0x
NjI0LDkgKzE2MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlQmFja2dyb3VuZFJl
c3BvbnNpdmVuZXNzVGltZXIoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJl
YWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxh
dGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IHBsYXRm
b3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiAgICAgcmV0dXJuIHBsYXRmb3JtUGF0aHNX
aXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggNjhkNjZjNjE1ZWJhNmU5N2IwYTNjODBkNDM0YjFiMTE0
OGIyZDA3Yy4uYWIxMzU1NTk2ZDU3MzM2NzFmZDMyMmUwNmMzMjUwMjZhOTc0OTMwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTU5LDYgKzU5LDcgQEAK
ICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogI2lmIEhBVkUoVklTSUJJTElUWV9QUk9Q
QUdBVElPTl9WSUVXKQpAQCAtNDc2LDcgKzQ3Nyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NQcm94eSA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHB1YmxpYyBSZXNwb25zaXZlbmVzc1RpbWVy
CiAgICAgYm9vbCBwbGF0Zm9ybUlzQmVpbmdEZWJ1Z2dlZCgpIGNvbnN0OwogICAgIGJvb2wgc2hv
dWxkQWxsb3dOb25WYWxpZEluamVjdGVkQ29kZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwor
ICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwogCiAgICAgUmVz
cG9uc2l2ZW5lc3NUaW1lciYgcmVzcG9uc2l2ZW5lc3NUaW1lcigpIHsgcmV0dXJuIG1fcmVzcG9u
c2l2ZW5lc3NUaW1lcjsgfQogICAgIHZvaWQgdXBkYXRlQmFja2dyb3VuZFJlc3BvbnNpdmVuZXNz
VGltZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA0OTQ3YWZmNDA0N2U4YTFhNzA3MDk5ZWVjZjc4YzA4MmZlNzMzMTk2Li5jYzJkYjNhY2Fj
OTAwN2Q5YzZmM2Y5ZWFjMmY5NDFiZmYyMTQxMjg4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMjEtMDQtMDEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1
Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9y
Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdFbnN1cmUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRl
VGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJh
dGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhv
b2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
SGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpaZXJv
SGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPYmplY3RXaXRoUmVmTG9nZ2Vy
OjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RNb3Zp
bmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdB
ZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6VGVzdE9iamVjdFdpdGhD
dXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRo
Q3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHA6IENvcGll
ZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6dGVzdEluaXRpYWxDYXBhY2l0eSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpEZXJlZk9ic2VydmVyOjpy
ZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6ZGVyZWYpOgorCiAy
MDIxLTAzLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU2Vy
dmljZSBXb3JrZXIgc2NyaXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGluIHRoZSBuZXR3b3JrIHBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgYi9U
b29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IDljNTVlNGY2ZWFhOGU1YmFh
YWRhMTIyNTY2MjA1OWVkZjYyNWNkMGUuLjNmN2NmZmRlMjkxYzJkODJkZDEyNTFiYmVjOGM4MTMx
MTI3ZmJlZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApAQCAtNzksNiArNzksOCBA
QCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgVGVzdHMvV1RGL1JlZkNvdW50ZXIuY3BwCiAgICAg
VGVzdHMvV1RGL1JlZkxvZ2dlci5jcHAKICAgICBUZXN0cy9XVEYvUmVmUHRyLmNwcAorICAgIFRl
c3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcAorICAgIFRlc3RzL1dURi9Sb2Jpbkhvb2RIYXNo
U2V0LmNwcAogICAgIFRlc3RzL1dURi9SdW5Mb29wLmNwcAogICAgIFRlc3RzL1dURi9TSEExLmNw
cAogICAgIFRlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZmJhMDMyYzg1ODNiOWYxODc4ODE4YmE2NDk2OTM0NmM0ZTA0
YjczMy4uYTljNzQ4MTI4YTM4ODRmOTFlMGFjN2Q0MzI2OWJkMGMyZWU1ZGVmZSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTExMTIsNiArMTExMiw4IEBACiAJCUUzMjVDOTA3MjNFMzg3MDIw
MEJDN0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjVDOTA2MjNFMzg3MDIwMEJDN0QzQiAvKiBQ
aWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSAqLzsgfTsKIAkJRTMyQjU0OTIyMjgxMEFDNDAwOEFE
NzAyIC8qIFBhY2tlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzJCNTQ5MTIyODEwQUMwMDA4QUQ3MDIgLyogUGFja2VkLmNwcCAqLzsgfTsKIAkJ
RTM0QTZEMTkyNDEyREUzOTAwMTJBQjZFIC8qIEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZp
Y2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRB
NkQxODI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZlcmVuY2VzU2VydmljZS5t
bSAqLzsgfTsKKwkJRTM1NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUE2
MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3BwICovOyB9OworCQlFMzU1
QTYzMjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1QTYzMTI2MTU3MThGMDAxQzEx
MjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgKi87IH07CiAJCUUzNUI5MDgyMjNGNjBERDAwMDAw
MTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUI5MDgxMjNGNjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6
ZWREZXZpY2VNb2RlbC5tbSAqLzsgfTsKIAkJRTM1RkM3QjIyMkI4MkE3MzAwRjMyRjk4IC8qIEpT
TG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNUZDN0IxMjJCODJBNkQwMEYzMkY5OCAvKiBKU0xvY2tUYWtlc1dl
YlRocmVhZExvY2subW0gKi87IH07CiAJCUUzNzNENzkxMUYyQ0YzNTIwMEM2RkFBRiAvKiBTaWdu
YWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
OTUzRjk1MUYyQ0YzMjEwMEE3NkEyRSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKQEAgLTI4OTksNiAr
MjkwMSw4IEBACiAJCUUzMjVDOTA2MjNFMzg3MDIwMEJDN0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJl
U3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJCNTQ5MTIyODEwQUMwMDA4QUQ3
MDIgLyogUGFja2VkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhY2tlZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEE2RDE4MjQxMkRFMzkwMDEyQUI2RSAvKiBHcmFudEFj
Y2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhbnRB
Y2Nlc3NUb1ByZWZlcmVuY2VzU2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTVBNjMxMjYxNTcxOEYwMDFDMTEyOSAvKiBS
b2Jpbkhvb2RIYXNoTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJvYmluSG9vZEhhc2hNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVC
OTA4MTIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxpemVkRGV2aWNlTW9kZWwubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4IC8qIEpTTG9ja1Rha2VzV2ViVGhy
ZWFkTG9jay5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTTG9j
a1Rha2VzV2ViVGhyZWFkTG9jay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4
ODg4NzAyMEM5MDk4MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NDAyLDYgKzQ0MDYsOCBAQAogCQkJCTQ0MkJCRjY4MUM5MUNBRDkwMDE3MDg3
RiAvKiBSZWZMb2dnZXIuY3BwICovLAogCQkJCTkzQTQyN0FEMTgwREE2MEYwMENEMjRENyAvKiBS
ZWZMb2dnZXIuaCAqLywKIAkJCQk5M0E0MjdBODE4MEQ5QjA3MDBDRDI0RDcgLyogUmVmUHRyLmNw
cCAqLywKKwkJCQlFMzU1QTYzMTI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5j
cHAgKi8sCisJCQkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQu
Y3BwICovLAogCQkJCUU0QzlBQkM3MUIzREIxNzEwMDQwQTk4NyAvKiBSdW5Mb29wLmNwcCAqLywK
IAkJCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJh
dGlvbnMuY3BwICovLAogCQkJCTFBMzUyNEFDMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAg
Ki8sCkBAIC01MTQ4LDYgKzUxNTQsOCBAQAogCQkJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDRBQzhCQzYyMUQwMjQ1QTAwQ0FGQjM0
IC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYyNDFEMEE1OTBDMDBG
RUJDRjMgLyogUmV0YWluUHRyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1NUE2MzIyNjE1NzE4
RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTM1
NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RGMDUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0M4M0RGMjYxRDBBNTkwQzAwRkVCQ0YzIC8qIFNhdHVyYXRlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzUyNEFFMUQ2M0E0RkIwMDMx
NzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKaW5kZXggNDVj
Y2ZhNDAzMGUxMmFkM2M1YTZkYzM3NGMxNWJkOWVkMzEwOTAyYS4uZmRmYWJlZWM0YmY0ZTBkMDdj
Zjg1MGM0MjJjNDEyNGI0N2U0NzFiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKQEAgLTc3LDYgKzc3LDcg
QEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8RGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9y
PiB7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1
ZSA9IHRydWU7IC8vIFRoaXMgaXMgbm90IGNvcnJlY3QsIGJ1dCBmb3IgZGVidWdnaW5nIG9mIFJv
YmluSG9vZEhhc2hTZXQuCiB9OwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hh
c2hNYXAuY3BwCmluZGV4IGFhYmU3ZGRhYzI3NzNiNmY3OTZlMjA0MGIzMjJiZTU5ZTFmMDc4NmQu
LmM4NDNlN2M1NWFiMTM0M2U4MDJhYjc4NDcwNDdmOWY4NmE1MjQ3YjggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCkBAIC02NjgsMTQgKzY2OCwxNCBAQCBjbGFz
cyBPYmplY3RXaXRoUmVmTG9nZ2VyIHsKIH07CiAKIAotdm9pZCB0ZXN0TW92aW5nVXNpbmdFbnN1
cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdF
bnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
c3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7CiAgICAgCiAgICAgbWFw
LmVuc3VyZSgxLCBbJl0geyByZXR1cm4gbWFrZVVuaXF1ZTxPYmplY3RXaXRoUmVmTG9nZ2VyPihX
VEZNb3ZlKGxvZ2dlcikpOyB9KTsKIH0KIAotdm9pZCB0ZXN0TW92aW5nVXNpbmdBZGQoUmVmPFJl
ZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdBZGQoUmVmPFJl
ZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVf
cHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaFNldC5jcHAKaW5kZXggZTdjZmJjY2FkMWQ0NTljZDY0Y2EyMTI4ODhhN2E5NjJj
ZDVlMzAzMS4uYjBjNjQ5MjI2ZWVhM2JjZjMxZTBiMDI4NjQ4NTdlYmQ2NjRiN2Q0OSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKQEAgLTcwLDExICs3MCwxMSBA
QCB2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHkoKQogICAgIEVYUEVDVF9HVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSwgaW5pdGlhbENhcGFjaXR5KTsKIH0KIAotdGVt
cGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCk7
Ci10ZW1wbGF0ZTw+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPigpCit0ZW1w
bGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9T
aXplKCk7Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1Np
emU8MD4oKQogewogfQotdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9pZCBnZW5lcmF0ZVRlc3RD
YXBhY2l0eVVwVG9TaXplKCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdl
bmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQogewogICAgIGdlbmVyYXRlVGVzdENhcGFjaXR5
VXBUb1NpemU8c2l6ZSAtIDE+KCk7CiAgICAgdGVzdEluaXRpYWxDYXBhY2l0eTxzaXplPigpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmgKaW5kZXggZDljMjA2YzI4ZWM0
OWRjY2QwY2Y5ZDQwN2FkMzcyZmFjMDI0NGJhZC4uYTEwYzVlOGY4NjUxZTdkYTY0MmZjNGZkZjAx
ZDJlMGU4ZjUzNTcwNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TW92ZU9ubHkuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5o
CkBAIC05NCw3ICs5NCw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPE1vdmVPbmx5
PiB7CiAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsgLy8gVGhpcyBpcyBub3Qg
Y29ycmVjdCwgYnV0IGZvciBkZWJ1Z2dpbmcgb2YgUm9iaW5Ib29kSGFzaFNldC4KIH07CiB9IC8v
IG5hbWVzcGFjZSBXVEYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9S
b2Jpbkhvb2RIYXNoTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjA3NDc4MTRjN2RjYzEwNzlkZGM4NTg1
Mzc0NzVkNTdhZTE0M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAKQEAgLTAsMCArMSwxMjY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNvdW50ZXJzLmgiCisj
aW5jbHVkZSAiRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgiCisjaW5jbHVkZSAiTW92ZU9ubHku
aCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBSb2Jpbkhvb2RIYXNoIDogcHVibGljIERlZmF1bHRIYXNoPFQ+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKwordHlwZWRlZiBX
VEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIGludCwgUm9i
aW5Ib29kSGFzaDxpbnQ+PiBJbnRIYXNoTWFwOworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBIYXNoVGFibGVJdGVyYXRvckNvbXBhcmlzb24pCit7CisgICAgSW50SGFzaE1hcCBtYXA7Cisg
ICAgbWFwLmFkZCgxLCAyKTsKKyAgICBBU1NFUlRfVFJVRShtYXAuYmVnaW4oKSAhPSBtYXAuZW5k
KCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVnaW4oKSA9PSBtYXAuZW5kKCkpOworCisgICAg
SW50SGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBtYXAuYmVnaW4oKTsKKyAgICBBU1NF
UlRfVFJVRShiZWdpbiA9PSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJUX1RSVUUobWFwLmJlZ2lu
KCkgPT0gYmVnaW4pOworICAgIEFTU0VSVF9UUlVFKGJlZ2luICE9IG1hcC5lbmQoKSk7CisgICAg
QVNTRVJUX1RSVUUobWFwLmVuZCgpICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4g
IT0gbWFwLmJlZ2luKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVnaW4oKSAhPSBiZWdpbik7
CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luID09IG1hcC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNF
KG1hcC5lbmQoKSA9PSBiZWdpbik7Cit9CisKK3N0cnVjdCBUZXN0RG91YmxlSGFzaFRyYWl0cyA6
IEhhc2hUcmFpdHM8ZG91YmxlPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVT
aXplID0gODsKK307CisKK3R5cGVkZWYgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPGRvdWJsZSwgaW50NjRfdCwgUm9iaW5Ib29kSGFzaDxkb3VibGU+LCBUZXN0RG91Ymxl
SGFzaFRyYWl0cz4gRG91YmxlSGFzaE1hcDsKKworc3RhdGljIGludCBidWNrZXRGb3JLZXkoZG91
YmxlIGtleSkKK3sKKyAgICByZXR1cm4gRGVmYXVsdEhhc2g8ZG91YmxlPjo6aGFzaChrZXkpICYg
KFRlc3REb3VibGVIYXNoVHJhaXRzOjptaW5pbXVtVGFibGVTaXplIC0gMSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBCaWdUYWJsZUhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRy
YWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gV1RGOjpI
YXNoVGFibGVDYXBhY2l0eUZvclNpemU8NDA5Nj46OnZhbHVlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IFplcm9IYXNoIDogcHVibGljIEludEhhc2g8VD4geworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIERvdWJsZUhhc2hDb2xsaXNpb25zKQoreworICAgIC8vIFRoZSAiY2xvYmJlciIg
a2V5IGhlcmUgaXMgb25lIHRoYXQgZW5kcyB1cCBzdGVhbGluZyB0aGUgYnVja2V0IHRoYXQgdGhl
IC0wIGtleQorICAgIC8vIG9yaWdpbmFsbHkgd2FudHMgdG8gYmUgaW4uIFRoaXMgbWFrZXMgdGhl
IDAgYW5kIC0wIGtleXMgY29sbGlkZSBhbmQgdGhlIHRlc3QgdGhlbgorICAgIC8vIGZhaWxzIHVu
bGVzcyB0aGUgRmxvYXRIYXNoOjplcXVhbHMoKSBpbXBsZW1lbnRhdGlvbiBjYW4gZGlzdGluZ3Vp
c2ggdGhlbS4KKyAgICBjb25zdCBkb3VibGUgY2xvYmJlcktleSA9IDY7CisgICAgY29uc3QgZG91
YmxlIHplcm9LZXkgPSAwOworICAgIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9LZXkgPSAtemVy
b0tleTsKKworICAgIERvdWJsZUhhc2hNYXAgbWFwOworICAgIG1hcC5hZGQoY2xvYmJlcktleSwg
MSk7CisgICAgbWFwLmFkZCh6ZXJvS2V5LCAyKTsKKyAgICBtYXAuYWRkKG5lZ2F0aXZlWmVyb0tl
eSwgMyk7CisKKyAgICBBU1NFUlRfRVEoYnVja2V0Rm9yS2V5KGNsb2JiZXJLZXkpLCBidWNrZXRG
b3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQoY2xvYmJlcktl
eSksIDEpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KHplcm9LZXkpLCAyKTsKKyAgICBBU1NFUlRf
RVEobWFwLmdldChuZWdhdGl2ZVplcm9LZXkpLCAzKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgTW92ZU9ubHlWYWx1ZXMpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBNb3ZlT25seSwgUm9iaW5Ib29kSGFzaDx1bnNpZ25l
ZD4+IG1vdmVPbmx5VmFsdWVzOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIG1vdmVPbmx5
VmFsdWVzLnNldChpICsgMSwgV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9IG1vdmVPbmx5
VmFsdWVzLmZpbmQoaSArIDEpOworICAgICAgICBBU1NFUlRfRkFMU0UoaXQgPT0gbW92ZU9ubHlW
YWx1ZXMuZW5kKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNTA7ICsr
aSkKKyAgICAgICAgQVNTRVJUX0VRKG1vdmVPbmx5VmFsdWVzLnRha2UoaSArIDEpLnZhbHVlKCks
IGkgKyAxKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSA1MDsgaSA8IDEwMDsgKytpKQorICAgICAg
ICBBU1NFUlRfVFJVRShtb3ZlT25seVZhbHVlcy5yZW1vdmUoaSArIDEpKTsKKworICAgIEFTU0VS
VF9UUlVFKG1vdmVPbmx5VmFsdWVzLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIE1vdmVPbmx5S2V5cykKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8TW92ZU9ubHksIHVuc2lnbmVkPiBtb3ZlT25seUtleXM7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVP
bmx5KGkgKyAxKTsKKyAgICAgICAgbW92ZU9ubHlLZXlzLnNldChXVEZNb3ZlKG1vdmVPbmx5KSwg
aSArIDEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgYXV0byBpdCA9IG1vdmVPbmx5S2V5cy5maW5kKE1vdmVPbmx5KGkgKyAxKSk7Cisg
ICAgICAgIEFTU0VSVF9GQUxTRShpdCA9PSBtb3ZlT25seUtleXMuZW5kKCkpOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9GQUxT
RShtb3ZlT25seUtleXMuYWRkKE1vdmVPbmx5KGkgKyAxKSwgaSArIDEpLmlzTmV3RW50cnkpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJUX1RS
VUUobW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAgIEFTU0VSVF9U
UlVFKG1vdmVPbmx5S2V5cy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBJbml0aWFsaXplckxpc3QpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnN0cmluZywgUm9iaW5Ib29kSGFzaDx1bnNpZ25l
ZD4+IG1hcCA9IHsKKyAgICAgICAgeyAxLCAib25lIiB9LAorICAgICAgICB7IDIsICJ0d28iIH0s
CisgICAgICAgIHsgMywgInRocmVlIiB9LAorICAgICAgICB7IDQsICJmb3VyIiB9LAorICAgIH07
CisKKyAgICBFWFBFQ1RfRVEoNHUsIG1hcC5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKCJvbmUi
LCBtYXAuZ2V0KDEpKTsKKyAgICBFWFBFQ1RfRVEoInR3byIsIG1hcC5nZXQoMikpOworICAgIEVY
UEVDVF9FUSgidGhyZWUiLCBtYXAuZ2V0KDMpKTsKKyAgICBFWFBFQ1RfRVEoImZvdXIiLCBtYXAu
Z2V0KDQpKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoKSwgbWFwLmdldCg1KSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVmZmljaWVudEdldHRlcikKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIENvcHlNb3ZlQ291
bnRlciwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICBtYXAuc2V0KDEsIENvcHlN
b3ZlQ291bnRlcigpKTsKKworICAgIHsKKyAgICAgICAgQ29weU1vdmVDb3VudGVyOjpUZXN0aW5n
U2NvcGUgc2NvcGU7CisgICAgICAgIG1hcC5nZXQoMSk7CisgICAgICAgIEVYUEVDVF9FUSgwVSwg
Q29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgx
VSwgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMFUsIENv
cHlNb3ZlQ291bnRlcjo6bW92ZUNvdW50KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENvcHlN
b3ZlQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgICAgICBtYXAuZ2V0KDIpOworICAg
ICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgICAgICBFWFBFQ1RfRVEoMFUsIENvcHlNb3ZlQ291bnRlcjo6Y29weUNvdW50KTsKKyAgICAg
ICAgRVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6Om1vdmVDb3VudCk7CisgICAgfQorfQor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXkpCit7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVl
UHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIG1h
cC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9F
USgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisK
KyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9DdXN0b21EZWxldGVyKQoreworICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBjb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyU2NvcGU7CisgICAgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj46OlRlc3RpbmdTY29wZSBkZWxldGVyQ291bnRlclNjb3BlOworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4+Pj4gbWFwOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+PiB1bmlxdWVQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIoKSwgRGVsZXRl
ckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKSk7CisgICAgbWFwLmFkZChX
VEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIEVY
UEVDVF9FUSgwdSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj46
OmRlbGV0ZXJDb3VudCgpKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIEVYUEVDVF9FUSgxdSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj46OmRlbGV0ZXJDb3VudCgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBp
bnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBtYXA7CisKKyAgICBhdXRv
IHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNSk7Cisg
ICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1
ZVB0ciksIDIpOworCisgICAgYXV0byBpdCA9IG1hcC5maW5kKHB0cik7CisgICAgQVNTRVJUX1RS
VUUoaXQgIT0gbWFwLmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+a2V5LmdldCgpKTsK
KyAgICBFWFBFQ1RfRVEoMiwgaXQtPnZhbHVlKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgVW5pcXVlUHRyS2V5X0NvbnRhaW5zVXNpbmdSYXdQb2ludGVyKQoreworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8aW50Piwg
aW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gbWFwOworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOwor
ICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlx
dWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBtYXAuY29udGFpbnMocHRyKSk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9HZXRVc2luZ1Jhd1Bv
aW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0
ZDo6dW5pcXVlX3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGlu
dD4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1h
bGxvY0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAg
bWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgaW50IHZhbHVlID0gbWFwLmdl
dChwdHIpOworICAgIEVYUEVDVF9FUSgyLCB2YWx1ZSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAgIGF1dG8gdW5p
cXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAg
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAg
ICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQp
OworCisgICAgYm9vbCByZXN1bHQgPSBtYXAucmVtb3ZlKHB0cik7CisgICAgRVhQRUNUX0VRKHRy
dWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfVGFrZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisgICAgYXV0byB1
bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Cisg
ICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOwor
ICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVY
UEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbWFwLnRha2UocHRyKTsKKyAgICBFWFBFQ1RfRVEoMiwg
cmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFVuaXF1ZVJlZlZhbHVlKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFVuaXF1ZVJlZjxpbnQ+LCBSb2Jpbkhvb2RIYXNoPGludD4+
IG1hcDsKKyAgICBVbmlxdWVSZWY8aW50PiBmaXZlID0gbWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0
TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBtYXAuYWRkKDUsIFdURk1vdmUoZml2ZSkpOworICAg
IEVYUEVDVF9UUlVFKG1hcC5jb250YWlucyg1KSk7CisgICAgaW50KiBzaG91bGRCZUZpdmUgPSBt
YXAuZ2V0KDUpOworICAgIEVYUEVDVF9FUSgqc2hvdWxkQmVGaXZlLCA1KTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8aW50PiB0YWtlbkZpdmUgPSBtYXAudGFrZSg1KTsKKyAgICBFWFBFQ1RfRVEoKnRh
a2VuRml2ZSwgNSk7CisgICAgbWFwLmVuc3VyZSg2LCBbXSB7CisgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDYpOworICAgIH0pOworICAgIEVY
UEVDVF9GQUxTRShtYXAuY29udGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKG1hcC5jb250YWlu
cyg2KSk7CisgICAgZm9yIChVbmlxdWVSZWY8aW50PiYgYSA6IG1hcC52YWx1ZXMoKSkKKyAgICAg
ICAgRVhQRUNUX0VRKGEuZ2V0KCksIDYpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSZWZQdHJLZXlfQWRkKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFk
ZChwdHIsIDApOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRVc2luZ1JlbGVhc2UpCit7CisgICAgeworICAg
ICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29k
SGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocHRyKSwgMCk7CisgICAgfQorCisg
ICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdNb3Zl
KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+
LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAg
UmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHB0ciks
IDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRy
S2V5X0FkZFVzaW5nUmF3KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFk
ZChwdHIuZ2V0KCksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRLZXlBbHJlYWR5UHJlc2VudCkKK3sK
KyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNo
PFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9n
Z2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQ
RUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbWFwLmFkZChwdHIyLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsK
KworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdSZWxlYXNl
S2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dl
cj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgIHsK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChwdHIs
IDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dn
ZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQoV1RGTW92ZShw
dHIyKSwgMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92ZUtleUFscmVhZHlQcmVzZW50KQoreworICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRy
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0
cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RS
RVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtYXAuYWRkKFdURk1vdmUocHRyMiksIDApOworICAgICAgICBFWFBFQ1RfRkFM
U0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1hcC5jbGVhcigp
OworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXQpCit7CisgICAg
eworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9i
aW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVm
TG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisgICAgfQorCisgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5
X1NldFVzaW5nUmVsZWFzZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgi
YSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxS
ZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4g
bWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5z
ZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZSkKK3sKKyAgICB7CisgICAgICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJl
ZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigm
YSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisKKyAgICBFWFBF
Q1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ1JhdykKK3sKKyAg
ICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxS
ZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLmdldCgpLCAwKTsKKyAgICB9
CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBS
ZWZQdHJLZXlfU2V0S2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVk
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8
UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOwor
ICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbWFwLnNldChwdHIyLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChwdHIuZ2V0KCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nUmVsZWFzZUtleUFscmVhZHlQcmVzZW50
KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+
LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAg
UmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworCisg
ICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7
CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RGTW92ZShwdHIyKSwgMSk7
CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICAgICAgRVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAgIH0KKworICAg
ICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0
cktleV9TZXRVc2luZ01vdmVLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7CisgICAgICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJl
ZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigm
YSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJl
ZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtYXAuc2V0KFdURk1vdmUocHRyMiksIDEpOworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtYXAu
Z2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIEVYUEVD
VF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmUpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFw
LmVuc3VyZSgxLCBbXSB7IHJldHVybiAxOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQu
aXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbWFwLmVuc3VyZSgxLCBbXSB7IHJldHVybiAy
OyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT52YWx1ZSk7
CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5KTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfTW92ZU9ubHlWYWx1ZXMpCit7CisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBNb3ZlT25seSwg
Um9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1vdmVPbmx5VmFsdWVzOworICAgIHsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtb3ZlT25seVZhbHVlcy5lbnN1cmUoMSwgW10geyByZXR1cm4gTW92
ZU9ubHkoMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9y
LT5rZXkpOworICAgICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0MiA9IG1vdmVPbmx5VmFsdWVzLmVuc3VyZSgxLCBbXSB7IHJldHVy
biBNb3ZlT25seSgyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVy
YXRvci0+dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5p
dGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRy
eSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfVW5pcXVl
UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZD4sIFJvYmluSG9vZEhhc2g8dW5zaWdu
ZWQ+PiBtYXA7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1cmUoMSwg
W10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8dW5zaWduZWQ+KDEp
OyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFwLmdldCgxKSk7CisgICAgICAgIEVYUEVD
VF9FUSgxdSwgKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAgICAgICBFWFBF
Q1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdDIgPSBtYXAuZW5z
dXJlKDEsIFtdIHsgcmV0dXJuIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPHVuc2ln
bmVkPigyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKm1hcC5nZXQoMSkpOworICAgICAg
ICBFWFBFQ1RfRVEoMXUsICphZGRSZXN1bHQyLml0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfUmVmUHRyKQoreworICAgIERlcml2ZWRSZWZMb2dnZXIg
YSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVu
c2lnbmVkLCBSZWZQdHI8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsK
KworICAgIG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIFJlZlB0cjxSZWZMb2dnZXI+KCZhKTsg
fSk7CisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRyPFJlZkxvZ2dlcj4oJmEpOyB9
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIiIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1h
cC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK2NsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iamVjdFdpdGhSZWZMb2dnZXIoUmVmPFJl
ZkxvZ2dlcj4mJiBsb2dnZXIpCisgICAgICAgIDogbV9sb2dnZXIoV1RGTW92ZShsb2dnZXIpKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWY8UmVmTG9nZ2VyPiBtX2xvZ2dlcjsKK307CisKKworc3Rh
dGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJlZjxSZWZMb2dnZXI+JiYgbG9nZ2VyKQor
eworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwg
c3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPHVuc2ln
bmVkPj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gbWFrZVVuaXF1ZTxP
YmplY3RXaXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOyB9KTsKK30KKworc3RhdGljIHZv
aWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dnZXI+JiYgbG9nZ2VyKQoreworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlx
dWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFw
OworCisgICAgYXV0byYgc2xvdCA9IG1hcC5hZGQoMSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OworICAgIHNsb3QgPSBtYWtlVW5pcXVlPE9iamVjdFdpdGhSZWZMb2dnZXI+KFdURk1vdmUobG9n
Z2VyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9MYW1iZGFzQ2Fw
dHVyaW5nQnlSZWZlcmVuY2UpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEo
ImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICB0ZXN0TW92aW5n
VXNpbmdFbnN1cmUoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVm
KGEpOworICAgICAgICB0ZXN0TW92aW5nVXNpbmdBZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAg
ICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
CisgICAgfQorfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFZhbHVlSXNEZXN0cnVj
dGVkT25SZW1vdmUpCit7CisgICAgc3RydWN0IERlc3RydWN0b3JPYnNlcnZlciB7CisgICAgICAg
IERlc3RydWN0b3JPYnNlcnZlcigpID0gZGVmYXVsdDsKKworICAgICAgICBEZXN0cnVjdG9yT2Jz
ZXJ2ZXIoYm9vbCogZGVzdHJ1Y3RlZCkKKyAgICAgICAgICAgIDogZGVzdHJ1Y3RlZChkZXN0cnVj
dGVkKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+RGVzdHJ1Y3Rvck9ic2VydmVy
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRlc3RydWN0ZWQpCisgICAgICAgICAgICAg
ICAgKmRlc3RydWN0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgRGVzdHJ1Y3Rvck9i
c2VydmVyKERlc3RydWN0b3JPYnNlcnZlciYmIG90aGVyKQorICAgICAgICAgICAgOiBkZXN0cnVj
dGVkKG90aGVyLmRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG90aGVyLmRlc3Ry
dWN0ZWQgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVy
JiBvcGVyYXRvcj0oRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlc3RydWN0ZWQgPSBvdGhlci5kZXN0cnVjdGVkOworICAgICAgICAgICAgb3RoZXIu
ZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sKiBkZXN0cnVjdGVkIHsgbnVsbHB0ciB9OworICAgIH07CisKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBEZXN0cnVjdG9y
T2JzZXJ2ZXIsIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgYm9vbCBkZXN0cnVjdGVk
ID0gZmFsc2U7CisgICAgbWFwLmFkZCg1LCBEZXN0cnVjdG9yT2JzZXJ2ZXIgeyAmZGVzdHJ1Y3Rl
ZCB9KTsKKworICAgIEVYUEVDVF9GQUxTRShkZXN0cnVjdGVkKTsKKworICAgIGJvb2wgcmVtb3Zl
UmVzdWx0ID0gbWFwLnJlbW92ZSg1KTsKKworICAgIEVYUEVDVF9UUlVFKHJlbW92ZVJlc3VsdCk7
CisgICAgRVhQRUNUX1RSVUUoZGVzdHJ1Y3RlZCk7Cit9CisKK3N0cnVjdCBEZXJlZk9ic2VydmVy
IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgTkVWRVJfSU5MSU5F
IHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAgIE5FVkVSX0lO
TElORSB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0tY291bnQ7CisgICAgICAgIG9ic2Vy
dmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfQorICAgIHVuc2lnbmVkIGNv
dW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9ic2VydmVyPiogYnVja2V0QWRkcmVz
cyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2VydmVyKiBvYnNlcnZlZEJ1Y2tldCB7
IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0ck5vdFpl
cm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPERlcmVm
T2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPERlcmVm
T2JzZXJ2ZXI+Pj4gbWFwOworICAgIG1hcC5hZGQoYWRvcHRSZWYob2JzZXJ2ZXIuZ2V0KCkpLCA1
KTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXAuZmluZChvYnNlcnZlci5nZXQoKSk7CisgICAg
RVhQRUNUX1RSVUUoaXRlcmF0b3IgIT0gbWFwLmVuZCgpKTsKKworICAgIG9ic2VydmVyLT5idWNr
ZXRBZGRyZXNzID0gJml0ZXJhdG9yLT5rZXk7CisKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+
b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUobWFwLnJlbW92ZShv
YnNlcnZlci5nZXQoKSkpOworCisgICAgLy8gUm9iaW5Ib29kSGFzaFNldCBkb2VzIG5vdCB1c2Ug
dG9tYnN0b25lLiBUaGUgdXNlZCBidWNrZXQgbWF5IGluY2x1ZGUgYW4gZXhpc3RpbmcgZW50cnks
IG9yIGVtcHR5LgorICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgZGlkIG5vdCBhZGQgdGhlIG90aGVy
IERlcmVmT2JzZXJ2ZXIuIFNvIHRoaXMgbXVzdCBiZSBhbiBlbXB0eSAobnVsbHB0cikuCisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVY
UEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmX0tleSkKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dn
ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAg
UmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJl
ZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHJlZiksIDEpOwor
ICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4s
IGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWZBKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmQSksIDEpOwor
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEyKGEpOworICAgICAgICBtYXAuc2V0KFdURk1v
dmUocmVmQTIpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAg
ICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxS
ZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgbWFwLmVuc3VyZShXVEZNb3ZlKHJlZiksIFtdKCkgeworICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92
ZShyZWYpLCAxKTsKKworICAgICAgICBhdXRvIGl0ID0gbWFwLmZpbmQoJmEpOworICAgICAgICBB
U1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworCisgICAgICAgIEFTU0VSVF9FUShpdC0+a2V5
LnB0cigpLCAmYSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDEpOworICAgIH0KKwor
ICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9i
aW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2Vy
PiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKworICAgICAgICBt
YXAucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBh
KCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7
CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1v
dmUocmVmKSwgMSk7CisKKyAgICAgICAgaW50IGkgPSBtYXAudGFrZSgmYSk7CisgICAgICAgIEFT
U0VSVF9FUShpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhv
b2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2UgUmVmTG9nZ2Vy
IG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1ZXNzLgorICAgICAgICAg
ICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZMb2dnZXIoImEiKSk7Cisg
ICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOworICAgICAgICAgICAgbWFwLmFk
ZChXVEZNb3ZlKHJlZiksIGkgKyAxKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKG1hcC5jb250
YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoImRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmX1ZhbHVlKQoreworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8
UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxv
Z2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBS
b2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7
CisgICAgICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWYpKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZkxvZ2dlciBiKCJiIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVm
PFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZM
b2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWZBKSk7CisKKyAg
ICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQihiKTsKKyAgICAgICAgbWFwLnNldCgxLCBXVEZNb3Zl
KHJlZkIpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYikgZGVyZWYo
YSkgZGVyZWYoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBS
ZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsK
KworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RG
TW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFHZXQgPSBtYXAuZ2V0KDEpOworICAgICAgICBB
U1NFUlRfRVEoYUdldCwgJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIGF1dG8gZW1wdHlHZXQgPSBtYXAuZ2V0
KDEpOworICAgICAgICBBU1NFUlRfVFJVRShlbXB0eUdldCA9PSBudWxscHRyKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9v
ZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91dCA9IG1hcC50
YWtlKDEpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxib29sPihhT3V0KSk7Cisg
ICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgewor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8
UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgYXV0byBlbXB0
eVRha2UgPSBtYXAudGFrZSgxKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKHN0YXRpY19jYXN0PGJv
b2w+KGVtcHR5VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEi
KTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50
LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVm
PFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7Cisg
ICAgICAgIG1hcC5yZW1vdmUoMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKwor
ICAgICAgICBtYXAuZW5zdXJlKDEsIFsmXSgpIG11dGFibGUgeworICAgICAgICAgICAgUmVmPFJl
ZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICAgICAgcmV0dXJuIHJlZjsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICAgICAgLy8g
RklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFrLiBObyBiaWcgZGVhbCBm
b3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYgPSBhZG9w
dFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAgIG1hcC5hZGQoaSArIDEsIFdU
Rk1vdmUocmVmKSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShtYXAuY29udGFpbnMoaSArIDEp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBEZWxldGVk
QWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPGludCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLCBSb2Jpbkhvb2RIYXNoPGlu
dD4+IG1hcDE7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1hcDEudmFsdWVzKCkpCisgICAgICAg
ICh2b2lkKXZhbHVlOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZNYXBwZWRU
b05vblplcm9FbXB0eVZhbHVlKQoreworICAgIGNsYXNzIFZhbHVlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFZhbHVlKCkgPSBkZWZhdWx0OworICAgICAgICBWYWx1ZShWYWx1ZSYmKSA9IGRlZmF1
bHQ7CisgICAgICAgIFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0OworICAgICAgICBWYWx1
ZSYgb3BlcmF0b3I9KFZhbHVlJiYpID0gZGVmYXVsdDsKKworICAgICAgICBWYWx1ZShpbnQzMl90
IGYpCisgICAgICAgICAgICA6IG1fZmllbGQoZikKKyAgICAgICAgeyB9CisKKyAgICAgICAgaW50
MzJfdCBmaWVsZCgpIHsgcmV0dXJuIG1fZmllbGQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGludDMyX3QgbV9maWVsZCB7IDB4YmFkYmVlZiB9OworICAgIH07CisKKyAgICBjbGFzcyBLZXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKKyAgICAgICAgS2V5KCkgPSBkZWZhdWx0OworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgS2V5KTsgfQorICAgIH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFXVEY6Okhhc2hU
cmFpdHM8VmFsdWU+OjplbXB0eVZhbHVlSXNaZXJvLCAiIik7CisKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPEtleT4sIFZhbHVlLCBSb2Jpbkhvb2RIYXNo
PFJlZjxLZXk+Pj4gbWFwOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPEtleT4sIGludDMyX3Q+
PiB2ZWN0b3JNYXA7CisKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCAxNjA7ICsraSkgewor
ICAgICAgICBSZWY8S2V5PiBrZXkgPSBLZXk6OmNyZWF0ZSgpOworICAgICAgICBtYXAuYWRkKFJl
ZjxLZXk+KGtleS5nZXQoKSksIFZhbHVlIHsgaSB9KTsKKyAgICAgICAgdmVjdG9yTWFwLmFwcGVu
ZCh7IFdURk1vdmUoa2V5KSwgaSB9KTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiB2
ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9FUShwYWlyLnNlY29uZCwgbWFwLmdldChwYWlyLmZp
cnN0KS5maWVsZCgpKTsKKworICAgIGZvciAoYXV0byYgcGFpciA6IHZlY3Rvck1hcCkKKyAgICAg
ICAgQVNTRVJUX1RSVUUobWFwLnJlbW92ZShwYWlyLmZpcnN0KSk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hNYXAsIFJhbmRvbV9FbXB0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVu
c2lnbmVkPj4gbWFwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAucmFuZG9tKCk7CisgICAgQVNT
RVJUX0VRKHJlc3VsdCwgbWFwLmVuZCgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgUmFuZG9tX1dyYXBBcm91bmQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgWmVyb0hhc2g8dW5zaWduZWQ+LCBCaWdU
YWJsZUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLmFkZCgxLCAxKTsKKworICAg
IGF1dG8gcmVzdWx0ID0gbWFwLnJhbmRvbSgpOworICAgIEFTU0VSVF9FUShyZXN1bHQsIG1hcC5i
ZWdpbigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX0lzRXZlbmx5
RGlzdHJpYnV0ZWQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLmFkZCgw
LCAwKTsKKyAgICBtYXAuYWRkKDEsIDEpOworCisgICAgdW5zaWduZWQgemVyb3MgPSAwOworICAg
IHVuc2lnbmVkIG9uZXMgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDA7
ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOworICAgICAgICBpZiAoIWl0
LT52YWx1ZSkKKyAgICAgICAgICAgICsremVyb3M7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAgICAgKytvbmVzOworICAgICAg
ICB9CisgICAgfQorCisgICAgQVNTRVJUX0VRKHplcm9zICsgb25lcywgMTAwMHUpOworICAgIEFT
U0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgQVNTRVJUX0xFKG9uZXMsIDYwMHUpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZXNlcnZlSW5pdGlhbENhcGFjaXR5KQoreworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
bWFwOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBt
YXAuY2FwYWNpdHkoKSk7CisKKyAgICBtYXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUsIG1h
cC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAg
ICAgICBtYXAuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtlU3RyaW5nKCJiYXIiLCBpKSk7
CisgICAgRVhQRUNUX0VRKDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1
LCBtYXAuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNvbnRhaW5zKCJmb28zIl9z
dHIpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhcjMiLCBtYXAuZ2V0KCJmb28zIl9zdHIpLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAg
IG1hcC5hZGQobWFrZVN0cmluZygiZXhjZXNzIiwgaSksIG1ha2VTdHJpbmcoImJheiIsIGkpKTsK
KyAgICBFWFBFQ1RfRVEoOTk5OXUgKyA5OTk5dSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5
OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwg
aSkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgz
Mjc2OHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhejMiLCBtYXAuZ2V0
KCJleGNlc3MzIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUobWFrZVN0cmluZygi
ZXhjZXNzIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVYUEVD
VF9FUSg4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAyOworICAgIG1hcDIucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0UobWFwMi5yZW1vdmUoImZvbzEi
X3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAgICBtYXAy
LmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSwgbWFrZVN0cmluZygiYmFyIiwgaSkpOworICAgIEVY
UEVDVF9FUSgyMDAwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUsIG1hcDIu
Y2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICAg
ICAgRVhQRUNUX1RSVUUobWFwMi5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwgaSkpKTsKKyAgICBF
WFBFQ1RfRVEoMHUsIG1hcDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIG1hcDIuY2FwYWNp
dHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9Jc0V2ZW5seURp
c3RyaWJ1dGVkQWZ0ZXJSZW1vdmUpCit7CisgICAgZm9yIChzaXplX3QgdGFibGVTaXplID0gMjsg
dGFibGVTaXplIDw9IDIgKiA2OyArK3RhYmxlU2l6ZSkgeyAvLyBPdXIgaGFzaCB0YWJsZXMgc2hy
aW5rIGF0IGEgbG9hZCBmYWN0b3Igb2YgMSAvIDYuCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmluSG9vZEhhc2g8
dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4g
bWFwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKQorICAg
ICAgICAgICAgbWFwLmFkZChpLCBpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDI7IGkgPCB0
YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5yZW1vdmUoaSk7CisKKyAgICAgICAgdW5z
aWduZWQgemVyb3MgPSAwOworICAgICAgICB1bnNpZ25lZCBvbmVzID0gMDsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGl0
ID0gbWFwLnJhbmRvbSgpOworICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUpCisgICAgICAgICAg
ICAgICAgKyt6ZXJvczsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VF9FUShpdC0+dmFsdWUsIDF1KTsKKyAgICAgICAgICAgICAgICArK29uZXM7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfRVEoemVyb3MgKyBvbmVzLCAxMDAwdSk7
CisgICAgICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgICAgIEFTU0VSVF9MRShvbmVz
LCA2MDB1KTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rv
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGVzdE9iamVj
dFdpdGhDdXN0b21EZXN0cnVjdG9yKEZ1bmN0aW9uPHZvaWQoKT4mJiBydW5JbkRlc3RydWN0b3Ip
CisgICAgICAgIDogbV9ydW5JbkRlc3RydWN0b3IoV1RGTW92ZShydW5JbkRlc3RydWN0b3IpKQor
ICAgIHsgfQorCisgICAgflRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3RvcigpCisgICAgewor
ICAgICAgICBtX3J1bkluRGVzdHJ1Y3RvcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fcnVuSW5EZXN0cnVjdG9yOworfTsKKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgQ2xlYXJfUmVlbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxUZXN0T2JqZWN0V2l0aEN1
c3RvbURlc3RydWN0b3I+LCBSb2Jpbkhvb2RIYXNoPHVpbnQ2NF90Pj4gbWFwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPD0gMTA7ICsraSkgeworICAgICAgICBtYXAuYWRkKGksIG1ha2VV
bmlxdWU8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yPihbJm1hcF0geworICAgICAgICAg
ICAgbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMFUsIG1hcC5zaXplKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7CisgICAgICAgIH0pKTsKKyAg
ICB9CisgICAgRVhQRUNUX0VRKDEwVSwgbWFwLnNpemUoKSk7CisgICAgbWFwLmNsZWFyKCk7Cisg
ICAgRVhQRUNUX0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAuaXNFbXB0
eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgQWRkQW5kSWRlbnRpdHkpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxTdHJp
bmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJl
cihpbmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLnNldChzdHJpbmcuaW1wbCgpLCBp
bmRleCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
RVhQRUNUX0VRKHJlc3VsdC5pdGVyYXRvci0+a2V5LCBzdHJpbmcuaW1wbCgpKTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIExhcmdlUmVtb3ZhbCkKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCB1
bnNpZ25lZD4gbWFwOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsg
KytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsK
KyAgICAgICAgbWFwLnNldChzdHJpbmcuaW1wbCgpLCBpbmRleCk7CisgICAgfQorICAgIEVYUEVD
VF9FUShtYXAuc2l6ZSgpLCAxZTQpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggJiAweDEpIHsKKyAgICAgICAg
ICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9v
bCByZW1vdmVkID0gbWFwLnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUShtYXAuc2l6
ZSgpLCAxZTQgLyAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7
ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7
CisgICAgICAgIGlmIChpbmRleCAmIDB4MSkKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShtYXAu
Y29udGFpbnMoc3RyaW5nLmltcGwoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHZhbHVlID0gbWFwLmdldChzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUSh2YWx1ZSwgaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlmICghKGluZGV4
ICYgMHgxKSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRl
eCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVtb3ZlKHN0cmluZy5pbXBsKCkp
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDB1KTsKKyAgICBFWFBFQ1RfRVEobWFwLmNhcGFjaXR5
KCksIDh1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoU2V0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYTFkODNjYThjNTA2ZGJhOThmMWQ0OTlmNTc2NjgyOGI5YjEyNDVmCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAK
QEAgLTAsMCArMSw1NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiRGVsZXRlZEFkZHJlc3NPZk9wZXJh
dG9yLmgiCisjaW5jbHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNp
bmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RvcHdh
dGNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8aW50IGluaXRp
YWxDYXBhY2l0eT4KK3N0cnVjdCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0cyA6IHB1Ymxp
YyBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4geworICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IGluaXRpYWxDYXBhY2l0eTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUm9iaW5Ib29kSGFzaCA6IHB1YmxpYyBEZWZhdWx0SGFz
aDxUPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsK
K307CisKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+Cit2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHko
KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IFdURjo6SGFzaFRhYmxl
Q2FwYWNpdHlGb3JTaXplPHNpemU+Ojp2YWx1ZTsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8aW50LCBSb2Jpbkhvb2RIYXNoPGludD4sIEluaXRpYWxDYXBhY2l0
eVRlc3RIYXNoVHJhaXRzPGluaXRpYWxDYXBhY2l0eT4gPiB0ZXN0U2V0OworCisgICAgLy8gSW5p
dGlhbCBjYXBhY2l0eSBpcyBudWxsLgorICAgIEFTU0VSVF9FUSgwdSwgdGVzdFNldC5jYXBhY2l0
eSgpKTsKKworICAgIC8vIEFkZGluZyBpdGVtcyB1cCB0byBzaXplIHNob3VsZCBuZXZlciBjaGFu
Z2UgdGhlIGNhcGFjaXR5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgIHRlc3RTZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEoaW5pdGlhbENhcGFj
aXR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSk7CisgICAgfQor
CisgICAgLy8gQWRkaW5nIGl0ZW1zIHVwIHRvIGxlc3MgdGhhbiAzLzQgb2YgdGhlIGNhcGFjaXR5
IHNob3VsZCBub3QgY2hhbmdlIHRoZSBjYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBjYXBhY2l0eUxp
bWl0ID0gaW5pdGlhbENhcGFjaXR5ICogMyAvIDQgLSAxOworICAgIGZvciAoc2l6ZV90IGkgPSBz
aXplOyBpIDwgY2FwYWNpdHlMaW1pdDsgKytpKSB7CisgICAgICAgIHRlc3RTZXQuYWRkKGkpOwor
ICAgICAgICBBU1NFUlRfRVEoaW5pdGlhbENhcGFjaXR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dGVzdFNldC5jYXBhY2l0eSgpKSk7CisgICAgfQorCisgICAgLy8gQWRkaW5nIG9uZSBtb3JlIGl0
ZW0gaW5jcmVhc2UgdGhlIGNhcGFjaXR5LgorICAgIHRlc3RTZXQuYWRkKGluaXRpYWxDYXBhY2l0
eSk7CisgICAgRVhQRUNUX0dUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5
KCkpLCBpbml0aWFsQ2FwYWNpdHkpOworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxp
bmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCk7Cit0ZW1wbGF0ZTw+IGlubGlu
ZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4oKQoreworfQordGVtcGxhdGU8
dW5zaWduZWQgc2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgp
Cit7CisgICAgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4oKTsKKyAgICB0
ZXN0SW5pdGlhbENhcGFjaXR5PHNpemU+KCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hT
ZXQsIEluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXpl
PDEyOD4oKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgTW92ZU9ubHkpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PE1vdmVPbmx5PiBoYXNo
U2V0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBN
b3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIGhhc2hTZXQuYWRkKFdURk1vdmUobW92
ZU9ubHkpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkgKyAxKSkpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RS
VUUoaGFzaFNldC5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBFWFBFQ1RfVFJVRSho
YXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICBoYXNoU2V0LmFkZChNb3ZlT25seShpICsgMSkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzaFNldC50YWtl
KE1vdmVPbmx5KGkgKyAxKSkgPT0gTW92ZU9ubHkoaSArIDEpKTsKKworICAgIEVYUEVDVF9UUlVF
KGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyAr
K2kpCisgICAgICAgIGhhc2hTZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7CisKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8TW92ZU9ubHk+IHNlY29uZFNldDsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHNlY29uZFNldC5h
ZGQoaGFzaFNldC50YWtlQW55KCkpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5
KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQ
RUNUX1RSVUUoc2Vjb25kU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkgKyAxKSkpOworfQorCisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleSkKK3sKKyAgICBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFr
ZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIHNldC5hZGQoV1RG
TW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBzZXQuY2xl
YXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgUm9i
aW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVl
UHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQq
IHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7
CisKKyAgICBhdXRvIGl0ID0gc2V0LmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBz
ZXQuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5nZXQoKSk7CisgICAgRVhQRUNUX0VR
KDUsICppdC0+Z2V0KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQ
dHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBSb2Jpbkhvb2RIYXNo
PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtl
VW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5p
cXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVY
UEVDVF9FUSh0cnVlLCBzZXQuY29udGFpbnMocHRyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7CisgICAgYXV0byB1bmlxdWVQdHIg
PSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5h
ZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBi
b29sIHJlc3VsdCA9IHNldC5yZW1vdmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0
KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hT
ZXQsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtl
VW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RG
TW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBhdXRvIHJl
c3VsdCA9IHNldC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKHB0ciwgcmVzdWx0LmdldCgpKTsK
KworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICByZXN1bHQgPSBudWxscHRyOworCisgICAg
RVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25D
b3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpk
ZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQ29weUVt
cHR5KQoreworICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vOworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9v
ZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5j
YXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgpKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5z
aWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBmb28oeyAxLCA1LCA2NCwgNDIgfSk7Cisg
ICAgICAgIEVYUEVDVF9FUSg0dSwgZm9vLnNpemUoKSk7CisgICAgICAgIGZvby5yZW1vdmUoMSk7
CisgICAgICAgIGZvby5yZW1vdmUoNSk7CisgICAgICAgIGZvby5yZW1vdmUoNDIpOworICAgICAg
ICBmb28ucmVtb3ZlKDY0KTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisK
KyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgICAgIEVYUEVDVF9F
USgwdSwgYmFyLnNpemUoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0
LCBDb3B5QWxsb2NhdGVBdExlYXN0TWluaW11bUNhcGFjaXR5KQoreworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNp
Z25lZD4+IGZvbyh7IDQyIH0pOworICAgIEVYUEVDVF9FUSgxdSwgZm9vLnNpemUoKSk7CisgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhv
b2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisKKyAgICBFWFBFQ1RfRVEoOHUsIGJhci5jYXBh
Y2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGJhci5zaXplKCkpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoU2V0LCBDb3B5Q2FwYWNpdHlJc05vdE9uQm91bmRhcnkpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBzaXplID0gNDsgc2l6ZSA8IDEwMDsgKytzaXplKSB7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IHNvdXJjZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNp
emUgKyAxOyArK2kpCisgICAgICAgICAgICBzb3VyY2UuYWRkKGkpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IGNvcHkxKHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNv
cHkyKHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkzKHNvdXJjZSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkxLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
UShzaXplLCBjb3B5Mi5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwgY29weTMuc2l6
ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemUgKyAxOyArK2kpIHsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkxLmNvbnRhaW5zKGkpKSA8PCBpOworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoY29weTIuY29udGFpbnMoaSkpIDw8IGk7CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRShjb3B5My5jb250YWlucyhpKSkgPDwgaTsKKyAgICAgICAgfQorICAgICAgICBF
WFBFQ1RfRkFMU0UoY29weTEuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKGNvcHkyLmNvbnRhaW5zKHNpemUgKyAyKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5
My5jb250YWlucyhzaXplICsgMikpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkyLnJlbW92
ZSgxKSk7CisgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpLCBjb3B5Mi5jYXBhY2l0
eSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKDEpKTsKKworICAgICAg
ICBFWFBFQ1RfVFJVRShjb3B5My5hZGQoc2l6ZSArIDIpLmlzTmV3RW50cnkpOworICAgICAgICBp
ZiAoKGNvcHkxLmNhcGFjaXR5KCkgKiAwLjk1KSA8PSBjb3B5MS5zaXplKCkpCisgICAgICAgICAg
ICBFWFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSAqIDIsIGNvcHkzLmNhcGFjaXR5KCkpIDw8IGNv
cHkxLnNpemUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKGNvcHkxLmNh
cGFjaXR5KCksIGNvcHkzLmNhcGFjaXR5KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoY29weTMuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICB9Cit9CisKK3N0cnVjdCBE
ZXJlZk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAg
TkVWRVJfSU5MSU5FIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7CisgICAgfQor
ICAgIE5FVkVSX0lOTElORSB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0tY291bnQ7Cisg
ICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfQorICAg
IHVuc2lnbmVkIGNvdW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9ic2VydmVyPiog
YnVja2V0QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2VydmVyKiBvYnNl
cnZlZEJ1Y2tldCB7IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQs
IFJlZlB0ck5vdFplcm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2ZXIgPSBtYWtl
VW5pcXVlPERlcmVmT2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZlB0
cjxEZXJlZk9ic2VydmVyPj4+IHNldDsKKyAgICBzZXQuYWRkKGFkb3B0UmVmKG9ic2VydmVyLmdl
dCgpKSk7CisKKyAgICBhdXRvIGl0ZXJhdG9yID0gc2V0LmZpbmQob2JzZXJ2ZXIuZ2V0KCkpOwor
ICAgIEVYUEVDVF9UUlVFKGl0ZXJhdG9yICE9IHNldC5lbmQoKSk7CisKKyAgICBvYnNlcnZlci0+
YnVja2V0QWRkcmVzcyA9IGl0ZXJhdG9yLmdldCgpOworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2
ZXItPm9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHNldC5yZW1v
dmUob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIC8vIFJvYmluSG9vZEhhc2hTZXQgZG9lcyBub3Qg
dXNlIHRvbWJzdG9uZS4gVGhlIHVzZWQgYnVja2V0IG1heSBpbmNsdWRlIGFuIGV4aXN0aW5nIGVu
dHJ5LCBvciBlbXB0eS4KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRpZCBub3QgYWRkIHRoZSBv
dGhlciBEZXJlZk9ic2VydmVyLiBTbyB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51bGxwdHIpLgor
ICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAg
ICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaFNldCwgVW5pcXVlUHRyTm90WmVyb2VkQmVmb3JlRGVzdHJ1Y3RvcikKK3sKKyAgICBz
dHJ1Y3QgRGVzdHJ1Y3Rvck9ic2VydmVyIHsKKyAgICAgICAgfkRlc3RydWN0b3JPYnNlcnZlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG9ic2VydmUoKTsKKyAgICAgICAgfQorICAgICAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gb2JzZXJ2ZTsKKyAgICB9OworCisgICAgY29uc3Qgc3RkOjp1
bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgPSBudWxscHRyOwor
ICAgIGNvbnN0IERlc3RydWN0b3JPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgPSBudWxscHRyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+IG9ic2VydmVyKG5ldyBEZXN0
cnVjdG9yT2JzZXJ2ZXIgeyBbJl0oKSB7CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0
QWRkcmVzcy0+Z2V0KCk7CisgICAgfX0pOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+LCBSb2Jp
bkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+Pj4gc2V0OworICAg
IGF1dG8gYWRkUmVzdWx0ID0gc2V0LmFkZChXVEZNb3ZlKG9ic2VydmVyKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRC
dWNrZXQgPT0gbnVsbHB0cik7CisKKyAgICBidWNrZXRBZGRyZXNzID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLmdldCgpOworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7
CisgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZSgqYWRkUmVzdWx0Lml0ZXJhdG9yKSk7CisKKyAg
ICAvLyBSb2Jpbkhvb2RIYXNoU2V0IGRvZXMgbm90IHVzZSB0b21ic3RvbmUuIFRoZSB1c2VkIGJ1
Y2tldCBtYXkgaW5jbHVkZSBhbiBleGlzdGluZyBlbnRyeSwgb3IgZW1wdHkuCisgICAgLy8gSW4g
dGhpcyBjYXNlLCB3ZSBkaWQgbm90IGFkZCB0aGUgb3RoZXIgRGVzdHJ1Y3Rvck9ic2VydmVyLiBT
byB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51bGxwdHIpLgorICAgIEVYUEVDVF9UUlVFKG9ic2Vy
dmVkQnVja2V0ID09IG51bGxwdHIpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBS
ZWYpCit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiBy
ZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJl
ZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAg
ICAgICAgc2V0LmFkZChyZWYuY29weVJlZigpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29k
SGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYo
YSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgc2V0LnJlbW92ZSgm
YSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9n
Z2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAg
ICAgICBhdXRvIGFPdXQgPSBzZXQudGFrZSgmYSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRp
Y19jYXN0PGJvb2w+KGFPdXQpKTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsK
KyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+
LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZM
b2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworCisgICAgICAg
IGF1dG8gYU91dCA9IHNldC50YWtlQW55KCk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19j
YXN0PGJvb2w+KGFPdXQpKTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+
IHNldDsKKyAgICAgICAgYXV0byBlbXB0eVRha2UgPSBzZXQudGFrZUFueSgpOworICAgICAgICBB
U1NFUlRfRkFMU0Uoc3RhdGljX2Nhc3Q8Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAgfQorCisgICAg
eworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8
UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBBU1NFUlRfVFJVRShzZXQuY29u
dGFpbnMoJmEpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxS
ZWY8UmVmTG9nZ2VyPj4+IHNldDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3Rz
IGxlYWsuIE5vIGJpZyBkZWFsIGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxS
ZWZMb2dnZXI+IHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAg
ICAgYXV0byogcG9pbnRlciA9IHJlZi5wdHIoKTsKKyAgICAgICAgICAgIHNldC5hZGQoV1RGTW92
ZShyZWYpKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKHNldC5jb250YWlucyhwb2ludGVyKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+
LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBSZWY8UmVmTG9n
Z2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jp
bkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0MihzZXQpOworICAgIH0KKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNf
c3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBEZWxldGVkQWRkcmVzc09m
T3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcj4gc2V0MTsKKyAgICBzZXQxLmFkZCgxMCk7CisKKyAg
ICBzZXQxLnJlbW92ZSgxMCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlbW92
ZVJhbmRvbSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBzZXQxIHsgMSwgMiwgMyB9OworICAg
IHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9t
KCkpOworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIEFTU0VSVF9UUlVFKHNl
dDEuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgUmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8U3RyaW5nPiBzZXQ7CisgICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIHNldC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNU
X0VRKDE2Mzg0dSwgc2V0LmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5
OTk5OyArK2kpCisgICAgICAgIHNldC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSkpOworICAgIEVY
UEVDVF9FUSg5OTk5dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNh
cGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucygiZm9vMyJfc3RyKSk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0LmFkZChtYWtl
U3RyaW5nKCJleGNlc3MiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1ICsgOTk5OXUsIHNldC5z
aXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZXQucmVt
b3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBzZXQuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92
ZShtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQyOworICAgIHNldDIucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5yZW1vdmUo
ImZvbzEiX3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAg
ICBzZXQyLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSk7CisgICAgRVhQRUNUX0VRKDIwMDB1LCBz
ZXQyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0Mi5jYXBhY2l0eSgpKTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShz
ZXQyLnJlbW92ZShtYWtlU3RyaW5nKCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0
Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg4dSwgc2V0Mi5jYXBhY2l0eSgpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQWRkQW5kSWRlbnRpdHkpCit7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gc2V0Owor
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlMzsgKytpbmRleCkgeworICAg
ICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9FUSgqcmVzdWx0Lml0ZXJhdG9yLCBzdHJp
bmcuaW1wbCgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIExhcmdl
UmVtb3ZhbCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UmVmUHRyPFN0cmluZ0ltcGw+PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoaW5kZXgpOworICAgICAgICBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgIH0KKyAgICBF
WFBFQ1RfRVEoc2V0LnNpemUoKSwgMWU0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKSB7CisgICAg
ICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAg
IGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0
LnNpemUoKSwgMWU0IC8gMik7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
MWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5k
ZXgpOworICAgICAgICBpZiAoaW5kZXggJiAweDEpCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
c2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
RVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAg
aWYgKCEoaW5kZXggJiAweDEpKSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6
bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3Ry
aW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgMHUpOworICAgIEVYUEVDVF9FUShz
ZXQuY2FwYWNpdHkoKSwgOHUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424882</attachid>
            <date>2021-04-01 01:56:49 -0700</date>
            <delta_ts>2021-04-01 05:41:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401015648.patch</filename>
            <type>text/plain</type>
            <size>296950</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi5iOWQzMWVlYzU2NjQzMTk5
OGE0Mzg5MTFjMzNjOWExYmNkZjVhMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi45YTI4M2RlNDcwYzFiZmRlOTdhNGYxMTlmMzY4
YjZhOTNjNjRjYjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NSBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRv
bid0IHVzZSBpdCBhcyBhIGRlZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQg
cGVyZm9ybWFuY2Ugdi5zLiBtZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAg
YW5kIHRoaXMgcGF0Y2gncyBnb2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZh
dWx0LiBSYXRoZXIsIHRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8g
bm9uLXBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gc2F2ZSBtZW1vcnkuIFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29t
cHV0ZXMgaGFzaCB2YWx1ZSBjb21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGls
bCwgdGhpcyBpcyB1c2VmdWwgc2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFu
eSBzbWFsbCBIYXNoVGFibGVzIGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUg
c3VwZXIgbGFyZ2UgSGFzaFRhYmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2Ft
ZSBhbW91bnQgb2YgbWVtb3J5IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBn
b2FsIGlzIGFwcGx5aW5nIHRoaXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwg
YnV0IGEgZmV3IiBzaW5nbGV0b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSBtYWludGFpbnMgZGlzdGFuY2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBh
ZGp1c3RpbmcgZXhpc3RpbmcgZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcs
IGlmIHdlIGZvdW5kIHRoYXQgdGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJ
QiB0aGFuIHRoZSBjdXJyZW50IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVu
dHJpZXMsIGFuZCBpbnNlcnQgdGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4g
VGhpcyBpcyBnaXZpbmcKKyAgICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8g
cG9vciBlbnRyeSAodGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBh
bmQgbWFraW5nIGF2ZXJhZ2UgRElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29k
IGludmFyaWFudAorICAgICAgICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3
ZSBmb3VuZCB0aGF0IGV4aXN0aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4g
c3RvcCBzZWFyY2hpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0
aGF0CisgICAgICAgIHdlIHNob3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdo
ZW4gaW5zZXJ0aW5nLiBUaGVzZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3Jt
YW5jZSBldmVuIHVuZGVyIHNpZ25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQt
ZmFjdG9yCisgICAgICAgIGp1c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGlu
ZyBwZXJmb3JtYW5jZSwgYnV0IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMg
Y29tcGFyZWQgdG8gbm9ybWFsIG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAg
V2UgaW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRz
IG9mIHRhYmxlcyBiYXNlZCBvbiBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBU
aGlzIGhhcyA5NSUgbG9hZC1mYWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1h
cHMgd2hpY2ggaXMgbW9zdGx5LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tp
bmcgdXAgcmVwZWF0ZWRseS4gSW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1h
bnkgdGhpcyBraW5kIG9mIHRhYmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3Vz
IGtpbmRzIG9mIHRoaW5ncy4gV2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3Ig
dGFibGUgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAg
d2UgYXJlIG1haW50YWlucyBmYXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMg
aGFzIDkwJSBsb2FkLWZhY3Rvci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcg
aXQgaWYgc2V0cyBhbmQgbWFwcyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNp
dmUuCisKKyAgICAgICAgMy4gRmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAg
ICAgICAgIFRoaXMgaGFzIDc1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBh
cmVkIHRvIEhhc2hTZXQgYW5kIEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQt
ZmFjdG9yIGZvciBsYXJnZSBzaXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVy
Zm9ybWFuY2UgcmVncmVzc2VkCisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0
b3IgbGFyZ2UgSGFzaFNldCBhbmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1h
bmNlIGludGVuc2l2ZSAoZS5nLiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBl
cmZvcm1hbmNlIGludGVuc2l2ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSByZXBsYWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdp
dGggUm9iaW5Ib29kSGFzaFRhYmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0
aWFuc3lsdmFuLmNvbS9wb3N0L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZh
dWx0LWhhc2gtdGFibGUtaW1wbGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAg
ICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29u
c3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAg
ICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3Zl
SWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6
CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpY
Pjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJn
Pjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6
Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46
OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1
cmUpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtl
QW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToK
KyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFp
dHM+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92
ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpI
YXNoVGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
cmFuZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlu
cyBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFu
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29tcHV0ZVRhYmxlSGFzaCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wMy0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFNlcnZpY2UgV29ya2VyIHNjcmlwdHMgdXNlIHRvbyBtdWNoIG1lbW9yeSBpbiB0
aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFkN2RlZGVlNjZiNDk2MDBiZmJkZDcw
YTU0MmRjMGVjOTQwZGFmMC4uNDAxOGI2ZDZkMDM5OTUxNjljODkzYmI1NTA1NzMwNjMyMjdlZjdj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDIxLTA0LTAxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9v
ZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QpOgorICAgICAgICAq
IGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAg
ICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZhY3RvcnlDcHBGaWxl
KToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VsZW1lbnRG
b3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAgICAqIGh0bWwvQXV0
b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToKKyAgICAgICAgKiBo
dG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Omlz
Q2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVjdEZyb21FeHBvc3Vy
ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U1ZHVGFn
TmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphZGROYW1lc1dp
dGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAg
ICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlQmFja3NsYXNoQXNZ
ZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpoYXNWYWxp
ZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0NvZGVjcyk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRBdWRp
b0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9rZVRhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpoYXNFZmZl
Y3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVu
dDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0
dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICogc3ZnL1NW
R1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNh
bGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVzTWFwKToKKwogMjAy
MS0wMy0zMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
b21wdXRlZCBzdHlsZSBmb3IgYSBib3JkZXItcmFkaXVzIGNvcm5lciBzaG91bGQgbmV2ZXIgYmUg
MHB4IHdoZW4gdGhlIHByb3ZpZGVkIHdpZHRoIGlzbid0IDBweApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZGNkNTBh
MmM1MDQ4YzRjOTQ1NmY4OGMzMzFmOTQ3NDFjMDM5NzI0Li40MTBjNmU1ZmIwNTE4MTkxZGI3MTA4
NTg0YTkyMmFjZjc0NDgxNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTA0LTAx
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50
cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVk
VW5hdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6OmV4cGVjdGVkQXR0cmlidXRl
ZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYWJsZVF1ZXJpZXMpOgorICAgICAg
ICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbToKKyAgICAgICAgKFdlYktpdDo6Z2V0QXBwQm91
bmREb21haW5zVGVzdGluZyk6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKwogMjAyMS0wMy0zMCAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBGYWxsIGJhY2sgdG8g
Y29udGV4dCBtZW51IHByZXNlbnRhdGlvbiBhZnRlciBsb25nIHByZXNzaW5nIGltYWdlIG92ZXJs
YXkgdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcAppbmRleCAyYTA4ODdlNzNlNTcxZjAwOGU4ODRkYjM0MzA0ODZkMzQyMDA3MjIwLi43Zjhh
ZTRmMTQwZWU3NDNkMGZlNWYzOTU0Mzg3YmUzY2ZkNmQ1ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IHN0cnVjdCBDaGFyQnVmZmVyU2VhY2hlciB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQcml2YXRlTmFtZUlt
cGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JD
aGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitzdGF0aWMgUHJpdmF0ZVN5bWJvbElt
cGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBCdWlsdGluTmFtZXM6OlByaXZhdGVOYW1l
U2V0JiBzZXQsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5
cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IHNldC5maW5kPENoYXJCdWZmZXJT
ZWFjaGVyPENoYXJhY3RlclR5cGU+PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBzZXQu
ZW5kKCkpCkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZUltcGwoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBzZXQsIGNvbnMKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBTeW1ib2xJbXBsKiBsb29r
VXBXZWxsS25vd25TeW1ib2xJbXBsKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj4m
IG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4m
IGJ1ZmZlcikKK3N0YXRpYyBTeW1ib2xJbXBsKiBsb29rVXBXZWxsS25vd25TeW1ib2xJbXBsKGNv
bnN0IEJ1aWx0aW5OYW1lczo6V2VsbEtub3duU3ltYm9sTWFwJiBtYXAsIGNvbnN0IFdURjo6SGFz
aFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCiB7CiAgICAgYXV0
byBpdGVyYXRvciA9IG1hcC5maW5kPENoYXJCdWZmZXJTZWFjaGVyPENoYXJhY3RlclR5cGU+Pihi
dWZmZXIpOwogICAgIGlmIChpdGVyYXRvciA9PSBtYXAuZW5kKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggMzE5NDViZjNlMTZjZDMwNGU4
ZDg4MjliMTk5NzFkYTdjY2NlMzlhMi4uMDBkOTZkM2M3NDQ1ZWFhNmI0ODNkNDA5YWQ0Zjg3ODVk
YjM3YzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkpTQ0J1aWx0
aW5zLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTk5LDYgKzIwMSw5
IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnVpbHRp
bk5hbWVzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6CisgICAgdXNp
bmcgUHJpdmF0ZU5hbWVTZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8U3RyaW5nPjsKKyAgICB1c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47CisKICAgICBC
dWlsdGluTmFtZXMoVk0mLCBDb21tb25JZGVudGlmaWVycyopOwogCiAgICAgUHJpdmF0ZVN5bWJv
bEltcGwqIGxvb2tVcFByaXZhdGVOYW1lKGNvbnN0IElkZW50aWZpZXImKSBjb25zdDsKQEAgLTIz
Miw4ICsyMzcsNiBAQCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciBtX2RvbGxhclZNTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9kb2xsYXJW
TVByaXZhdGVOYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX3BvbHlQcm90b1ByaXZh
dGVOYW1lOwotICAgIHVzaW5nIFByaXZhdGVOYW1lU2V0ID0gSGFzaFNldDxTdHJpbmc+OwotICAg
IHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJbXBsKj47
CiAgICAgUHJpdmF0ZU5hbWVTZXQgbV9wcml2YXRlTmFtZVNldDsKICAgICBXZWxsS25vd25TeW1i
b2xNYXAgbV93ZWxsS25vd25TeW1ib2xzTWFwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCmluZGV4
IDVjZjRmYTU1YzNlZWVkZWY0ZjhlYTkzY2Q2MWQ0NjYxZWI2N2Y4MmEuLjc4NTdkYmEwMTE1OGE3
NmY3ZTAxNmEyMzc5MzUwNWQ2ZGE1YjMwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC0yMTIsNyArMjEzLDcgQEAgY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeSB7CiAKIHByaXZhdGU6CiAgICAgVk0mIG1fdm07Ci0gICAgSGFzaE1hcDxSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNNYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRl
Y29kZUludHJpbnNpY01hcDsKIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5T
SUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBTdHJvbmc8VW5rbm93bj4gbV8jI25hbWU7CiAg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05B
TUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKaW5kZXggNDRkMWNmZGJk
NDk0OTE2ZWRiZmZkNGYzMTRmN2NkNWZiZmI2ZjE1My4uYWU2ZGJiMGY4ZjU5MjM1MGE0Y2YyZTQx
MGRmMGJkMmRhYmM3OGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaApAQCAtMjk0LDYgKzI5NCw3IEBAIEpTVmFsdWUgaWRlbnRpZmllclRvU2FmZVB1Ymxp
Y0pTVmFsdWUoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CiBzdHJ1Y3QgSWRlbnRpZmllclJlcEhh
c2ggOiBQdHJIYXNoPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IHsKICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJu
IGtleS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhhc2goKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+ZXhpc3RpbmdTeW1ib2xB
d2FyZUhhc2goKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9
IHRydWU7CiB9OwogCiBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8aW50PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yLmNwcAppbmRleCA0NjU1MjQ4ZjI4MDQ5MTBlNGI0ZGNjMjBlNWJiZTkxNGU1ODlmMWVhLi5j
ODJmYTYwZWIwYzI2N2RhZTcwMTgzY2NjYWVjOGU5OWJmOTU0YTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE5OSw3ICsxOTksNyBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG9jYQogICAgIGlmICghY2FzZUZpcnN0T3B0aW9uLmlzTnVs
bCgpKQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6S2YpXSA9IGNhc2VGaXJzdE9wdGlvbjsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsK
ICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMs
IHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNvLCBSZWxldmFudEV4dGVuc2lvbktleTo6S2YsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5OjpLbiB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0g
cmVzb2x2ZWQubG9jYWxlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGJvb2wgSW50bENvbGxhdG9yOjp1
cGRhdGVDYW5Eb0FTQ0lJVUNBRFVDRVRDb21wYXJpc29uKCkgY29uc3QKIH0KIAogI2lmIEFTU0VS
VF9FTkFCTEVECi12b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgbG9jYWxlcykKK3ZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lD
VUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JiBsb2NhbGVzKQogewogICAgIGZvciAo
YXV0byYgbG9jYWxlIDogbG9jYWxlcykgewogICAgICAgICBhdXRvIGNoZWNrQVNDSUlPcmRlcmlu
Z1dpdGhEVUNFVCA9IFtdKGNvbnN0IFN0cmluZyYgbG9jYWxlLCBVQ29sbGF0b3ImIGNvbGxhdG9y
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCmluZGV4
IDI0ZDYxNjE2NDlhZDlmZTdkNGY3MGFlNmMyOWM4MmE3ZTJmOTZmMjMuLjVlNTJhMWM5MjVjMmVk
NDAzYzEzNzUzYzVjMTcyYzlmY2QzZWYwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8dW5pY29kZS91Y29sLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L0lDVUhlbHBlcnMu
aD4KIApAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBJbnRsQ29sbGF0b3IgZmluYWwgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzdGF0
aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNl
dCYpOwogI2Vsc2UKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlh
bnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpIHsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBj
aGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0JikgeyB9CiAjZW5kaWYKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY1MmViYjIyMmIzNGJkNmMwZDQzODI5YjUzYjk3NTdiOWEx
ZmMzYjkuLmY4OTgwNmM1NmIyNjA1MjJmYzdjN2I5OGFmODUyY2Y3MzNmODk4NWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNw
cApAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICAgICAgbG9j
YWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Okhj
KV0gPSBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAg
Y29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmpl
Y3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxv
Y2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkNhLCBSZWxldmFudEV4dGVuc2lv
bktleTo6SGMsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAg
IG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IDFiYmExYjA1YzJlMzJhYzBkMThkZDE0MzZjMzQ4ODY0MGY3MGE0YTkuLmMwOTA5Yjg5
MWU5NDMwYzBkYTQzOGExMDQ4M2IwZjMyYTBmMTI5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAoSgogICAg
IC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1
ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVj
dG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggMjJhMTE1ZDEzOWY2
YzViMjQ1ZWRlYmE4MDllMjhlOTg2NzY4MGI4My4uMGRlNTc0MjkzNDVhZDgxZGFlNDE2MGVhZGRi
NTA5N2M2NDIwYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERpc3BsYXlOYW1lcy5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBJbnRsRGlzcGxheU5h
bWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmEKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3Qg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAppbmRleCBkMWYwNjZmMGEwOTMzNzY5MTFkYjEwYjg4
ZmFhOWY0NWYzNWI1NjhjLi4xN2UwNzlmZTc3ZGEwYTA3YzQzN2UwZWU3YTZkOTgzZmJlY2MzN2I4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yU3VwcG9ydGVkTG9j
YWxlc09mLCAoSlNHbG9iYQogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWRp
c3BsYXluYW1lcy8jc2VjLUludGwuRGlzcGxheU5hbWVzLnN1cHBvcnRlZExvY2FsZXNPZgogCiAg
ICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURpc3BsYXlOYW1lcyUuW1thdmFpbGFi
bGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAog
ICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAppbmRl
eCA4MTdiOWNhZTU5MzRhZjc2NTU0NjMyZGU5OTU3Njg1ZTA5MGEzMDkyLi44ODBlZDI2ZTczYWZl
MWNhOTQ0Nzc0NWJlZWZhZjliNWQzNmY0MTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBJ
bnRsTGlzdEZvcm1hdDo6aW5pdGlhbGl6ZUxpc3RGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7Cisg
ICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVj
dCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9j
YWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQu
bG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExp
c3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCA0N2U1ZWUyM2RiZjFlMGIwMzljM2Nh
ZjA3ODBmMWI2NDNkNWMxMmM5Li4wMDhlOTNkOGNiYWNiMjY3ZTBkZjBlNjc5OGJkYTcyMjIxNWEz
YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlz
dC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAv
LyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlzdEZvcm1hdCUuW1thdmFpbGFibGVMb2Nh
bGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4g
TGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4K
ICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAwMDdj
OWQzMDI3MTVhNTgzMjg1NzYwZGNjNzBiMmQ0ZWY5ZjA1OGNiLi5mMDM1MGM4NDM4ZDc3ZWJlN2E1
ZjkyNzQ5MDdlM2NiNDJhMzdlNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAgIH0K
IAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVy
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwg
bG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNWIyOTNhZmNkYWUyZWI2MmViYmMyNjQ0Mzc5YWY1OTMy
MTEwZjAuLmYyMWE2OTI2ZjMxZWQ3YWFmMjVlOGZkNDlkOTk3YzFkNTkxZjEzOGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
LCAoSlNHCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggNDBmODllOGZlNzRlOGRiY2YwZTU4
MzUwYWJlYzFmN2E4NWQ4YmRlNC4uOWQ1MzZkNzRjMDE5ZDE4ZGE3NTgzN2Q1OWFiNzM4Nzk2ZWVk
NjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAK
QEAgLTM1Miw3ICszNTIsNyBAQCBTdHJpbmcgbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRChjb25zdCBj
aGFyKiBsb2NhbGVJRCwgYm9vbCBpc0ltbW9ydGFsKQogfQogCiAvLyBFbnN1cmUgd2UgaGF2ZSB4
eC1aWiB3aGVuZXZlciB3ZSBoYXZlIHh4LVl5eXktWlouCi1zdGF0aWMgdm9pZCBhZGRTY3JpcHRs
ZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJp
bmdWaWV3IGxvY2FsZSkKK3N0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChM
b2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQogewogICAgIGlm
IChsb2NhbGUubGVuZ3RoKCkgPCAxMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3Nyw5
IEBAIHN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluCiAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQoU3Ry
aW5nSW1wbDo6Y3JlYXRlU3RhdGljU3RyaW5nSW1wbChidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKSk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMo
KQorY29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7Cisg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7
CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNv
bnN0cnVjdCgpOwpAQCAtNDU1LDkgKzQ1NSw5IEBAIGNvbnN0IHVpbnQ4X3QgZHVjZXRXZWlnaHRz
WzEyOF0gPSB7CiAgICAgOTUsIDk3LCA5OSwgMjEsIDM2LCAyMiwgMzcsIDAsCiB9OwogCi1jb25z
dCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3Qg
TG9jYWxlU2V0JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsK
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29u
c3RydWN0KCk7CkBAIC00NzYsMjIgKzQ3NiwyMSBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVz
OwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2Nh
bGVzKCkKK2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQog
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGNhY2hlZEF2YWls
YWJsZUxvY2FsZXM7Ci0gICAgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gY2Fj
aGVkQXZhaWxhYmxlTG9jYWxlcy5nZXQoKTsKLQorICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZd
IHsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKTsKKyAgICAgICAg
YXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKKyAgICAgICAgQVNTRVJUKGF2YWlsYWJsZUxv
Y2FsZXMtPmlzRW1wdHkoKSk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzSW1tb3J0YWwgPSB0
cnVlOwogICAgICAgICBpbnQzMl90IGNvdW50ID0gdWJya19jb3VudEF2YWlsYWJsZSgpOwogICAg
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgbG9jYWxlID0gbGFuZ3VhZ2VUYWdGb3JMb2NhbGVJRCh1YnJrX2dldEF2YWlsYWJsZShp
KSwgaXNJbW1vcnRhbCk7CiAgICAgICAgICAgICBpZiAobG9jYWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZSk7Ci0gICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxl
TG9jYWxlcywgbG9jYWxlKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMtPmFkZChsb2Nh
bGUpOworICAgICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxv
Y2FsZXMuZ2V0KCksIGxvY2FsZSk7CiAgICAgICAgIH0KICAgICB9KTsKICAgICByZXR1cm4gYXZh
aWxhYmxlTG9jYWxlczsKQEAgLTY5OCw3ICs2OTcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbG9j
YQogICAgIHJldHVybiBzZWVuOwogfQogCi1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxl
KQorU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkKIHsKICAgICByZXR1cm4gYmVzdEF2YWlsYWJs
ZUxvY2FsZShsb2NhbGUsIFsmXShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZSkgewogICAgICAgICBy
ZXR1cm4gYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpOwpAQCAtNzYzLDcgKzc2
Miw3IEBAIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bG9jYWxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBNYXRj
aGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVM
b2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAv
LyBMb29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAg
LTgwNCw3ICs4MDMsNyBAQCBzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8UwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hl
clJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLWJlc3RmaXRtYXRjaGVyCkBAIC04MjUsNyArODI0LDcgQEAgY29uc3RleHByIEFTQ0lJ
TGl0ZXJhbCByZWxldmFudEV4dGVuc2lvbktleVN0cmluZyhSZWxldmFudEV4dGVuc2lvbktleSBr
ZXkpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxv
Y2FsZU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVu
c2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURh
dGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKK1Jlc29sdmVkTG9jYWxl
IHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxl
U2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0
aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5
PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29u
c3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQogewogICAgIC8vIFJlc29sdmVMb2Nh
bGUgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50
RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlCkBAIC04OTAsNyArODg5LDcgQEAgUmVzb2x2ZWRM
b2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4KICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5
KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewog
ICAgIC8vIExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9v
a3Vwc3VwcG9ydGVkbG9jYWxlcwpAQCAtOTE5LDcgKzkxOCw3IEBAIHN0YXRpYyBKU0FycmF5KiBs
b29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBC
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0Zml0c3Vw
cG9ydGVkbG9jYWxlcwpAQCAtOTI4LDcgKzkyNyw3IEBAIHN0YXRpYyBKU0FycmF5KiBiZXN0Rml0
U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
CiAgICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBwb3J0ZWRMb2Nh
bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMs
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQorSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1Zh
bHVlKQogewogICAgIC8vIFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIG9wdGlvbnMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
NDAyLyNzZWMtc3VwcG9ydGVkbG9jYWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oCmluZGV4IGZhMmU4MjgwNzhiN2U4NTFhNzcxZGMwYTA4MGZiNmE2ODVhMTJh
ZWQuLjYxNDBjMjBkNmZkM2U4ZThiNTI4OTc1ZDYzODQ4ZmYxODNmY2FiNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb25J
dGVyYXRvcjsKIApAQCAtODEsMTUgKzgyLDE2IEBAIGNsYXNzIEludGxPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiB9OwogCiBTdHJpbmcgZGVmYXVsdExvY2FsZShKU0ds
b2JhbE9iamVjdCopOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxl
cygpOwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5l
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMo
KSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGlu
dGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK3VzaW5nIExvY2Fs
ZVNldCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Owor
Y29uc3QgTG9jYWxlU2V0JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0
JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxT
ZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
RGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUg
Y29uc3QgTG9jYWxlU2V0JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9j
YWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lu
bGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5P
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSk7CiBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlv
bmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrKTsKQEAgLTEwNywxMCArMTA5LDEwIEBAIHN0cnVjdCBSZXNvbHZlZExvY2FsZSB7
CiAgICAgUmVsZXZhbnRFeHRlbnNpb25zIGV4dGVuc2lvbnM7CiB9OwogCi1SZXNvbHZlZExvY2Fs
ZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
TG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVj
dG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lv
bktleSkpOwotSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKK1Jlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVy
LCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxl
dmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAo
KmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7CitKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBMb2NhbGVTZXQmIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnMpOwogU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBsb2NhbGUpOwotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExv
Y2FsZSk7CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4gU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgU3RyaW5n
JiByZXF1ZXN0ZWRMb2NhbGUsIFByZWRpY2F0ZSk7CiBWZWN0b3I8U3RyaW5nPiBudW1iZXJpbmdT
eXN0ZW1zRm9yTG9jYWxlKGNvbnN0IFN0cmluZyYgbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKaW5kZXggZTY1ZmIwZDcz
MjcxNTI5YjVjYWE5ZDlmYWJlYzliZWJjYjRjNTZhMi4uY2NjZjQ5NzE1ODE4ZGZkMzAyNjhhMzE3
YWRhZGI4ZThkY2JhZjUzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFBsdXJhbFJ1bGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUGx1cmFsUnVsZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1
bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1CiAgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyID0gaW50bE9wdGlvbjxMb2Nh
bGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2Fs
ZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVyOjpMb29rdXAgfSwgeyAiYmVz
dCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAibG9jYWxlTWF0Y2hlciBtdXN0
IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJfcywgTG9jYWxlTWF0Y2hlcjo6
QmVzdEZpdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxl
c0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSBy
ZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKICAg
ICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjg4NTBiMTBhOGJmZTY1NzA0M2QyYTFl
YWQwNzExMDQxYjkyMDU5MS4uMjdiMjMxMGIzNDhhMWU0YTQ1ZGYwZWY5MTE1M2E5ZTQ1ZThmZjU3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRM
b2NhbGVzT2YsIChKU0dsCiAKICAgICAvLyAxMy4zLjIgSW50bC5QbHVyYWxSdWxlcy5zdXBwb3J0
ZWRMb2NhbGVzT2YgKGxvY2FsZXMgWywgb3B0aW9ucyBdKQogICAgIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTQwMi8jc2VjLWludGwucGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29m
Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAppbmRleCBmN2QzOGI4MWVhYzgy
ODYzZjVhZDhiY2M4MzI0NjUyNjkyODE3NzZlLi4yYjVkMjhlZmQ4Y2U4ZjI3ZDY1NzU4NTAyYTMx
MDk4MDViNzA3M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcApAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
SW50bFJlbGF0aXZlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSldID0gbnVtYmVyaW5nU3lzdGVtOwogICAg
IH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxS
ZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKICAgICBtX2xvY2Fs
ZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxNzRiNmZkY2UyYzg2YmZjMTFi
NWViMWVmNTM3MjA5OGVhODk4NDk0Li45YThjOGQ0Y2E2YzZjNGVkMzVmZjcwZTk3ZTdkM2VjYzRm
NTlhZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3
ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJl
bGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIGF1dG8gcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxT
ZWdtZW50ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHAKaW5kZXggMDRjZjE3ZDUwOTM1NjIxYzQyNDhlODQ4Yjc3NTBlZGEzN2VhODFlOC4uMmFk
NzRmOTRiYmU4Y2ExN2M3NzU4OTJhZmJjNmZlZjcxMmE2MmI1OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAg
dm9pZCBJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbG8KICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFs
T2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVy
LCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNv
bHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmZmQ3M2Y3MzZhOTc0MzM3OGRm
ZGIxYTMxZDRiZjk5Zjk4ZGVhZTUyLi4wOTM5NGRjMThlZGRmMmE5MzE5NTFlN2M2ZmFhOTcyMjhm
YmY2MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxl
c09mLCAoSlNHbG9iYWxPYgogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXNl
Z21lbnRlci8jc2VjLWludGwuc2VnbWVudGVyLnN1cHBvcnRlZGxvY2FsZXNvZgogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJVNlZ21lbnRlciUuW1thdmFpbGFibGVMb2NhbGVz
XV0uCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCmluZGV4IDgyNzM3ZDhmOWM2OGRlMThlODdmNWU1
N2NlYTBhNjAyMTBlODg4ODYuLjNhNzExZmI5MDliNjkwZTBmMTlmZWE1MTc0YzY4MDU4Y2JlNGM0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaApAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIldlYWsuaCIKICNp
bmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIFJlZ0V4cENhY2hlIGZpbmFsIDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cDsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVnRXhwS2V5LCBXZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFw
OworICAgIHR5cGVkZWYgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8UmVnRXhwS2V5LCBX
ZWFrPFJlZ0V4cD4+IFJlZ0V4cENhY2hlTWFwOwogCiBwdWJsaWM6CiAgICAgUmVnRXhwQ2FjaGUo
Vk0qIHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cEtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKaW5kZXgg
ZTBmODgzMTAyMGQ2ZDkzNWM3MDE5MDFmYjQ5YjI4Y2I2ZGM5MzhmYy4uZDE2NjI3OWY2ZGIyZWNl
ZWIyZTNlNzBiMDdkOTYzYmVlNGFiZTI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwS2V5LmgKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IFJlZ0V4cEtleSB7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZ0V4cEtleSYga2V5KSB7IHJldHVybiBr
ZXkucGF0dGVybi0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJl
Z0V4cEtleSYgYSwgY29uc3QgUmVnRXhwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRy
dWU7CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDI2YjQ1ZTU1M2IwNjdlMjQwMzI3Y2M4ODY3ZWM3YzhjODE0NjdlNWYuLjVmMzBjOWE1
NjEzN2IzYzMxZDMwZGJhYjUzMTkzOWViM2M4OThhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzE3LDcgKzcxNyw5IEBACiAJCUUzMTFGQjE2MUYwQTU2
OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUaHJlYWRHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzE0OUEz
QTIyOEJEQ0FCMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25jdXJyZW50QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMxQkRFMjgyMkU5MTNDQzAwMjlCMTA1IC8qIE1hY2hWTVNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoVk1TUEkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9v
ZEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoVGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRm
b3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
UmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjU2MTEyMjYxMUI1
QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9v
ZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAy
RDAwMzRBMDkyIC8qIE5ha2VkUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRF
ODcwMDM1OURBOSAvKiBEYXRhUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2
NzAwQkY2MjVFIC8qIFJlY3Vyc2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVjdXJzYWJsZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzM4LDYgKzc0MCw3IEBACiAJCUUzQTMyQkMzMUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVl
TWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVNYWxsb2Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNCOEU0MUMyNEU3Q0U5MjAwMzY1NUQ4
IC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFM0JFMDlBNjI0QTU4NTQ1MDA5REYyQjQgLyogSUNVSGVscGVycy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJQ1VIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJvYmluSG9vZEhhc2hNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFM0NGNzY5MDIxMTVENkJBMDA5MURFNDggLyogQ29tcGFjdFBvaW50ZXJUdXBs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0UG9pbnRlclR1cGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTE1ODI1MUVBREE1M0MwMDRBMDc5
RCAvKiBTeXN0ZW1GcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3Rl
bUZyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFNjRGMEIyMjgxMzQyODAw
MUU1NUI0IC8qIE5vbm1vdmFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9ubW92YWJsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMSw2ICsxMjE0LDkgQEAKIAkJCQlBOEE0NzMw
MzE1MUE4MjVCMDA0MTIzRkYgLyogUmVmUHRyLmggKi8sCiAJCQkJRkUzODQyMzQyMzI1Q0M4MDAw
OURENDQ1IC8qIFJlc291cmNlVXNhZ2UuaCAqLywKIAkJCQlBOEE0NzMwNTE1MUE4MjVCMDA0MTIz
RkYgLyogUmV0YWluUHRyLmggKi8sCisJCQkJRTNDNTgzQzgyNjEyN0FERDAwQzU3NTY4IC8qIFJv
YmluSG9vZEhhc2hNYXAuaCAqLywKKwkJCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUgLyogUm9i
aW5Ib29kSGFzaFNldC5oICovLAorCQkJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jp
bkhvb2RIYXNoVGFibGUuaCAqLywKIAkJCQkyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVu
TG9vcC5jcHAgKi8sCiAJCQkJMkNERUQwRjIxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuaCAq
LywKIAkJCQkxNEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5o
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBiMzVjNzUyZDJjMDBlMWE1MjJkMTU0MmRhN2Vi
NjViNmQyZmM5MTc4Li5lMWZhNTQ1YTQwMTc4ZWEzMjM3MDg5Mzk2M2JiNGRhOGVmNTg4ZTFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMjE0LDYgKzIxNCw5IEBAIHNldChXVEZfUFVCTElDX0hF
QURFUlMKICAgICBSZWZQdHIuaAogICAgIFJlc291cmNlVXNhZ2UuaAogICAgIFJldGFpblB0ci5o
CisgICAgUm9iaW5Ib29kSGFzaE1hcC5oCisgICAgUm9iaW5Ib29kSGFzaFNldC5oCisgICAgUm9i
aW5Ib29kSGFzaFRhYmxlLmgKICAgICBSdW5Mb29wLmgKICAgICBTSEExLmgKICAgICBTYXR1cmF0
ZWRBcml0aG1ldGljLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCA0MTk4ZTg2ODg5NWM3Y2RkMTQ1NTcwYTIxOTEy
ZDY1YWM2Mzc4OWM0Li4zZDllYjc4YjM1OGU3MzVhY2JhNTBhNDA2NTMxODc2OGE3MzJmNWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysrIGIvU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCkBAIC05Myw5ICs5MywxNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEVu
dW1UcmFpdHM7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFLCBFLi4uPiBzdHJ1Y3QgRW51bVZhbHVlczsK
IHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKIAorc3RydWN0IEhhc2hUYWJs
ZVRyYWl0czsKK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4gc3RydWN0IEtleVZhbHVlUGFpclRyYWl0czsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcsIHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4gc3Ry
dWN0IEtleVZhbHVlUGFpcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+IGNsYXNzIEhhc2hUYWJsZTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+
LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1h
cHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4sIHR5cGVu
YW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoTWFwOwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhh
c2hUcmFpdHM8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFz
aFNldDsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgKaW5kZXggYmY2YjhiYWM0ZWRiMmRmYTFmNmNjMDBmM2JlMWY2
NDFhMTE4NWJjZi4uODkwMWI1ZjNmMjc5YjhiZTAzNjUwYzdjMmFkZWI2MWIwYWVmYTllNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaApAQCAtMzEsNyArMzEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yIHsKICAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5
VHlwZSYgZXh0cmFjdChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAKICAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKIAotICAgIHVzaW5n
IEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5VHlwZSwgS2V5VmFsdWVQYWlyVHlwZSwgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+LCBIYXNoRnVuY3Rpb25zLCBL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8S2V5VHlwZSwgS2V5
VmFsdWVQYWlyVHlwZSwgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yPEtleVZhbHVlUGFpclR5cGU+
LCBIYXNoRnVuY3Rpb25zLCBLZXlWYWx1ZVBhaXJUcmFpdHMsIEtleVRyYWl0cz47CiAKICAgICBj
bGFzcyBIYXNoTWFwS2V5c1Byb3h5OwogICAgIGNsYXNzIEhhc2hNYXBWYWx1ZXNQcm94eTsKQEAg
LTIzMiw5MSArMjMyLDg5IEBAIHN0cnVjdCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIgewogICAg
IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2
b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCiB7CiAg
ICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1
bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgs
IHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBs
LmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVn
aW4oKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIC0+IGl0
ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYLCBZPjo6ZW5kKCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVu
ZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSBjb25z
dCAtPiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBp
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBpdGVyYXRvcgogewog
ICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlu
cyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnMoa2V5KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJh
dG9yIAotSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29u
c3QKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgVFlQ
RSYgdmFsdWUpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
WVBFPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBh
dXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUg
bG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMjQsOSArMzIyLDkgQEAg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpnZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
IC0+IE1hcHBlZFBlZWtUeXBlCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBhdXRvKiBl
bnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5l
TG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogICAgIGlmICghZW50cnkpCkBAIC0zMzQsMTYgKzMzMiwxNiBA
QCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cAogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVl
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnMo
Y29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNo
VHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsm
JiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0
c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBpbmxpbmVBZGQoc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6
Zm9yd2FyZDxWPih2YWx1ZSkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTM1
Myw5MSArMzUxLDkxIEBAIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtl
eSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywg
VGFibGVUcmFpdHNBcmc+OjppbmxpbmVBZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoTWFwVHJhbnNsYXRvcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBGPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK0FM
V0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUo
SyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgYWRkPEhhc2hNYXBFbnN1cmVUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywg
SGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Rj4oZnVu
Y3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtl
eVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGlu
ZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KEtleVR5
cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7
CiAgICAgcmV0dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBw
ZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFk
ZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjphZGQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoTWFwVHJhbnNsYXRv
ckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2Fy
ZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5
QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBU
YWJsZVRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92
ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywg
S2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChL
ZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5s
aW5lQWRkKFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBL
ZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1
cm4gaW5saW5lRW5zdXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1h
dXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFw
cGVkVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKEtleVR5
cGUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
aW5saW5lRW5zdXJlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOwogfQogICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotaW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlw
ZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4K
K2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldChjb25zdCBLZXlUeXBl
JiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgcmV0dXJuIGdldDxJZGVudGl0
eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3Vw
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTQ0NSw4
ICs0NDMsOCBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHM+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYgawogICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1vdmUo
aXRlcmF0b3IgaXQpCiB7CiAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1NSwyNyArNDUzLDI3IEBAIGlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3Zl
SWYoRnVuY3RvciYmIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICByZXR1cm4gbV9pbXBsLnJl
bW92ZUlmKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoY29uc3QgS2V5VHlw
ZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgcmV0dXJu
IHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNsZWFyKCkKIHsKICAgICBtX2ltcGwu
Y2xlYXIoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRU
YWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzLCB0eXBlbmFtZSBZPgorYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAt
PiBNYXBwZWRUYWtlVHlwZQogewogICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlm
IChpdCA9PSBlbmQoKSkKQEAgLTQ4NSwzMCArNDgzLDMwIEBAIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNv
bnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25z
dF9pdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9y
Pjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRy
VHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46
OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
a2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5l
R2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5
cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNoTWFwVHJhbnNsYXRvcjxLZXlW
YWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogICAgIGlmICghZW50cnkpCkBA
IC01MTYsMjMgKzUxNCwyMyBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
bmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlCiAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1hdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkUGVla1R5cGU+Ojp0eXBlCithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIGlubGluZUdldChrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpyZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHJlbW92ZShmaW5kKGtleSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtl
VHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQogewog
ICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBlbmQoKSkKQEAgLTU0
MiwxNCArNTQwLDE0IEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2Uo
dHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
dm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtl
eVR5cGUmIGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAg
ICBpZiAoS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC01NjUsMTMgKzU2MywxMyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIGlmIChhLnNp
emUoKSAhPSBiLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdHlwZWRlZiB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0g
YS5lbmQoKTsKICAgICBjb25zdF9pdGVyYXRvciBub3RGb3VuZCA9IGIuZW5kKCk7CkBAIC01ODQs
OCArNTgyLDggQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7
CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGExNWRjMDM3NWExNzE5
YzdhYjMyNDYyYzdhZGY3OWVkNjBiNGVmLi5hNDAyY2UyNzM3NWFjZWIwY2ViMDRmOWViNWExZTQx
YWQyYzY5ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291
cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0yNyw5ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXVEYg
ewogCi1zdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hTZXQgZmluYWwgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKQEAgLTQxLDcgKzM5LDcgQEAgY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRy
YWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxl
PFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxWYWx1ZVR5cGUsIFZhbHVl
VHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1
ZVRyYWl0cz47CiAKIHB1YmxpYzoKICAgICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBm
b2xsb3dpbmcgc3RydWN0dXJlOgpAQCAtMTg2LDEwOSArMTg0LDEwOSBAQCBzdHJ1Y3QgSGFzaFNl
dEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6c3dhcChIYXNoU2V0JiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQogewogICAgIG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9p
bXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25z
dAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Omlz
RW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0
dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZW5kKCkgY29u
c3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0
b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjpmaW5kKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKHZh
bHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250
YWlucyh2YWx1ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3Qg
VCYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkg
Y29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Citpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0
b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojph
ZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICBtX2lt
cGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBl
JiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChWYWx1
ZVR5cGUmJiB2YWx1ZSkKIHsKICAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3Vs
dAoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clR5cGU+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJl
Z2luLCBJdGVyYXRvclR5cGUgZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCkBAIC0yOTYsOSArMjk0LDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICBy
ZXR1cm4gY2hhbmdlZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Ci1pbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKEl0ZXJhdG9yVHlw
ZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKIHsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsK
ICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CkBAIC0zMDYsOCArMzA0LDggQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKICAgICByZXR1cm4gY2hhbmdl
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiB7CiAgICAgaWYg
KGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
NiwyNyArMzE0LDI3IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVy
YXRvciBpdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92
ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6Y2xlYXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNsZWFyKCkK
IHsKICAgICBtX2ltcGwuY2xlYXIoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0
ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46
OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiB7CiAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUo
KSk7CkBAIC0zNDYsNDggKzM0NCw0OCBAQCBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0
YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQogewogICAgIHJldHVy
biB0YWtlKGJlZ2luKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQogewogICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2
YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZh
bHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUg
Vj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRh
a2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUK
IHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFYsIFc+Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDAzLDkgKzQwMSw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHJldHVybiB0cnVl
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIGlmIChzaXpl
KCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NDE2LDIyICs0MTQsMjIgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9
PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KSBjb25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3IhPShjb25z
dCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlckNvbGxlY3Rpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4g
bGlzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+Cit2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQogewogICAg
IGZvciAoYXV0byYgdmFsdWUgOiBsaXN0KQogICAgICAgICBhZGQodmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWLCBXPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9pbXBs
LmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2ZDRiMmM4Zjcy
YjJlMDM2YzE2MDAxMGMwYTYyOTU4N2M1ZWRmMGE4Li5kMzk5NzlhNDFlYWM4ZGVhYTM3ZTQ1Nzk4
YzI0ZTJiYzA3OGU0ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtNzksNDYgKzc5LDQ4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBjbGFzcyBIYXNoVGFibGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhj
b25zdCBIYXNoVGFibGVUeXBlKik7CiAKICNpZiAhQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNo
VGFibGVUeXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+KikgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBp
bmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJs
ZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+KikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAg
IHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKikgeyB9CiAKICNl
bmRpZgogCiAgICAgdHlwZWRlZiBlbnVtIHsgSGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtu
b3duR29vZFRhZzsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgog
ICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZh
bHVlKiwgY29uc3QgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcg
SGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJl
ZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlw
ZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OwotICAgICAgICBmcmllbmQgY2xh
c3MgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBIYXNoVGFibGVUeXBlOworICAg
ICAgICBmcmllbmQgaXRlcmF0b3I7CiAKICAgICAgICAgdm9pZCBza2lwRW1wdHlCdWNrZXRzKCkK
ICAgICAgICAgewpAQCAtMjQzLDE4ICsyNDUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRv
ciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVl
LCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFz
aFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVl
VHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFBvaW50ZXJU
eXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIGZyaWVuZCBI
YXNoVGFibGVUeXBlOwogCiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRh
YmxlLCBwb3MsIGVuZCkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5
cGUqIHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93
bkdvb2RUYWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQpAQCAt
MzQ3LDggKzM0OSw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2lu
ZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0
ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5
cGVkZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwogICAgICAgICB0eXBlZGVmIEtleSBLZXlUeXBlOwog
ICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKQEAgLTQwNyw3ICs0MTAsNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBI
YXNoVGFibGUoKTsKICAgICAgICAgfkhhc2hUYWJsZSgpIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7IAorICAgICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsgCiAgICAgICAgICAgICBpZiAobV90YWJsZSkKICAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlVGFibGUobV90YWJsZSk7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgpAQCAtNTU5LDEyICs1NjIsNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CiAjZW5kaWYKIAotI2lmIENIRUNLX0hBU0hUQUJMRV9J
VEVSQVRPUlMKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAg
ICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgogICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNp
emVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwpAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAKQEAgLTkzMiw3ICs5MjksNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAg
Y2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlm
ICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsKQEAgLTEwMTcsNyArMTAx
NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0x
MTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAg
ICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJs
ZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleCht
YWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAg
ICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwog
CkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsK
LSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4
dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFi
bGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVy
YXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAg
IHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5z
ZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4K
ICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAg
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAg
IEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHkt
bGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBA
IC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1f
bmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9
CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEyNzM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9y
LgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA3NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3Vz
aW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RS
b2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
YTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
OTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZh
Y3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVl
QXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hT
ZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1YmM5YThjOGZlZTJl
NzFmNWY0ODgwZDdiNDBmMjUyZTgwN2IzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsODgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUlIGxvYWQgZmFjdG9yLiBU
aGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBz
IGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5j
ZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9
IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8v
IDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBh
IGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3
b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0
YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gNzUlIGxv
YWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFi
bGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChIYXNoVGFibGUgdXNlcyA3
NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IEZhc3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUgLSA5NSUpIQorLy8KKy8v
IFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxl
dGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIE5haXZlIFJvYmluSG9vZEhhc2hUYWJs
ZSBoYXMgc29tZSBjYXNlcyB3aGljaCBjYXVzZSBPKE5eMikgd2hlbiBpdGVyYXRpbmcgaXQgYW5k
IGluc2VydGluZyBpdCB0byBzb21lIG5ldyBSb2Jpbkhvb2RIYXNoVGFibGUKKy8vIHdpdGhvdXQg
cmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB0aGlzIGlzIGJlY2F1c2Ugb2YgaGlnaCBsb2FkLWZhY3Rv
ciBhbmQgZXhwb3NlZCBoYXNoLW9yZGVyaW5nIGF0IGl0ZXJhdGlvblszXS4gVG8gbWl0aWdhdGUg
aXQsCisvLyB3ZSBjYWxjdWxhdGUgaGFzaCBmb3IgZWFjaCB0YWJsZSwgYW5kIGRvIFhPUiB3aXRo
IHRoZSBoYXNoIHZhbHVlIHRvIG1ha2UgaGFzaC1vcmRlcmluZyBkaWZmZXJlbnQgZm9yIGVhY2gg
dGFibGUuCisvLworLy8gWzFdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3Jv
YmluLWhvb2QtaGFzaGluZy8KKy8vIFsyXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisvLyBbM106
IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0NTU5
ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5Owor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRv
clR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25z
PjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlVGhyZXNob2xkID0g
MTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1Zh
bHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0aW9uczo6aGFzSGFzaElu
VmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJv
YmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUm
Jik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4g
dGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBt
b3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5
IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJs
ZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJs
ZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxl
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9y
IHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBhdXRvJiBidWNr
ZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07CisgICAg
ICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0KKwor
ICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5k
b20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgp
OyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAg
ICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsK
KworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVt
VGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5p
bXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVT
aXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAgbV90
YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgICAgICBtX3dpbGxFeHBh
bmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAg
ICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJu
IGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2
YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBh
ZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RG
TW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0
IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBz
b21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0
aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRS
ZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
S2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyBy
ZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5
VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2
b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZv
aWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7Cisg
ICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBW
YWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0
cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5
T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlC
dWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkg
eyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29r
dXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBl
bmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vs
c2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5k
aWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsgfQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6
ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxzZQor
ICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFu
ZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExv
YWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFs
bG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRh
YmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdXNpbmcgTG9va3Vw
VHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsK
KworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1bnNp
Z25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNp
emVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpOworCisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlk
YXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJl
bW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBl
Kik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVRhYmxlSGFzaChWYWx1ZVR5cGUqIHRh
YmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxWYWx1ZVR5cGUqPjo6aGFzaCh0YWJsZSk7IH0KKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWdu
ZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+a2V5Q291bnQoKTsKKyAgICAgICAgdW5zaWdu
ZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgIGlmIChzaG91bGRFeHBh
bmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCwgYW5k
IDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRhYmxlLgorICAgICAgICByZXR1cm4gbV93aWxs
RXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJsZVNpemU7CisgICAgfQorICAgIGJvb2wgc2hv
dWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNp
emUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQorICAg
IHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAv
IDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICB2b2lkIHJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYpOwor
CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNo
LCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1h
c2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNl
KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBz
aXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0gZGVzaXJlZElu
ZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpdGVyYXRvciBt
YWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlz
LCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25H
b29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywg
bV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3Qg
eyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCks
IEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgdm9p
ZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxzZQorICAgICAg
ICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisjZW5k
aWYKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNp
emVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhMb2FkRGVub21pbmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9h
ZDsKKworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
OyB9CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVT
aXplIC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlD
b3VudDsgfQorICAgIHVuc2lnbmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVI
YXNoOyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX3RhYmxlSGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZh
bHNlIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8g
QWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXgu
CisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07Cisg
ICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1v
dmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9t
dXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5
KGNvbnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlw
ZSoKK3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7
CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRh
YmxlID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJs
ZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBe
IHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXpl
TWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhh
dCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBw
cm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50
cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhh
c2g7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtl
eSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAg
IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRl
bXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5
IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5n
IGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0
YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJp
bmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90
YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhp
cy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAg
ICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIGlmIChlbnRyeUhhc2gg
PT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoZW50cnlLZXksIGtleSkpCisgICAgICAg
ICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNl
KTsKKworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVu
dHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNl
VGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAg
ICAgICAvLyBTdGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1k
aXN0YW5jZSBpbnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9
IFdURk1vdmUoKmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUo
KmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkp
OworICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3Rp
bmdFbnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1f
a2V5Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisK
KyAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorQUxXQVlTX0lOTElORSB2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRk
KFZhbHVlVHlwZSYmIHZhbHVlLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVu
c2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpCit7Cisg
ICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgc2l6ZU1hc2s7CisgICAgKytkaXN0YW5jZTsKKworICAgIHdoaWxlICgxKSB7CisgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0Vt
cHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0Vt
cHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlw
ZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAg
IHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgs
IHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkg
eworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisg
ICAgICAgICAgICAgICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHN3YXAodmFs
dWUsICplbnRyeSk7CisgICAgICAgICAgICBkaXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0
cmE+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFkZFBhc3Np
bmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBj
aGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7CisKKyAgICAvLyBXZSBzaG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNl
cnRpbmcgYW4gZW50cnkuIElmIHdlIGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBl
bnRyeSwKKyAgICAvLyB3ZSBuZWVkIHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUg
c2luY2UgdGhlIGluc2VydGVkIGVudHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJl
aGFzaW5nLgorICAgIGlmIChzaG91bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUp
OworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9IHRoaXMtPnRh
YmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
IF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNp
emVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUg
KyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRv
clR5cGU6Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoZW50cnlIYXNo
ID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9
IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFu
Y2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBh
bmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkg
dG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50LgorICAgICAgICAgICAgVmFsdWVU
eXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAgICBIYXNoVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9y
d2FyZDxFeHRyYT4oZXh0cmEpLCBoYXNoKTsKKyAgICAgICAgICAgIG1haW50YWluUHJvYmVEaXN0
YW5jZUZvckFkZChXVEZNb3ZlKGV4aXN0aW5nRW50cnkpLCBpbmRleCwgZW50cnlEaXN0YW5jZSwg
c2l6ZSwgc2l6ZU1hc2ssIHRhYmxlSGFzaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytk
aXN0YW5jZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVpbnNlcnQo
VmFsdWVUeXBlJiYgdmFsdWUpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOyAvLyBGb3IgQysrIEFE
TC4KKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFi
bGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhh
c2goRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQg
aW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3Rh
bmNlID0gMDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBt
X3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAg
ICAgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCplbnRyeSwgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
ZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2Ug
PSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAg
ICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgc3dhcCh2YWx1
ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAg
KytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIC0+IGl0ZXJhdG9yCit7
CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkp
CisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYXV0byBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmZpbmQoY29uc3QgVCYga2V5KSBjb25zdCAtPiBjb25zdF9pdGVyYXRv
cgoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxv
b2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1
cm4gZW5kKCk7CisKKyAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IoZW50cnkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgorYm9vbCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdGFibGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb25zdF9jYXN0PFJvYmluSG9v
ZEhhc2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9s
aWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFs
dWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICByZW1v
dmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9z
KQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKKyAgICByZW1vdmUocG9zKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUo
VmFsdWVUeXBlKiBwb3MpCit7CisgICAgLy8gVGhpcyBpcyByZW1vdmFsIHZpYSAiYmFja3dhcmQt
c2hpZnQtZGVsZXRpb24iLiBUaGlzIGJhc2ljYWxseSBzaGlmdCBleGlzdGluZyBlbnRyaWVzIHRv
IHJlbW92ZWQgZW1wdHkgZW50cnkgcGxhY2Ugc28gdGhhdCB3ZSBtYWtlCisgICAgLy8gdGhlIHRh
YmxlIGFzIGlmIG5vIHJlbW92YWwgaGFwcGVuZWQgc28gZmFyLiBUaGlzIGRlY3JlYXNlcyBkaXN0
YW5jZS10by1pbml0aWFsLWJ1Y2tldCAoRElCKSBvZiB0aGUgc3Vic2VxdWVudCBlbnRyaWVzIGJ5
IDEuIFRoaXMgbWFpbnRhaW5zCisgICAgLy8gRElCIG9mIHRoZSB0YWJsZSBsb3cgYW5kIHJlbGF0
aXZlbHkgY29uc3RhbnQgZXZlbiBpZiB3ZSBoYXZlIG1hbnkgcmVtb3ZhbHMsIGNvbXBhcmVkIHRv
IHVzaW5nIHRvbWJzdG9uZXMuCisgICAgLy8gaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisgICAgcG9z
LT5+VmFsdWVUeXBlKCk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqcG9zKTsKKyAgICBtX2tleUNv
dW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0g
dGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaW5kZXhQcmV2aW91cyA9IHBvcyAtIG1f
dGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2aW91cyArIDEpICYgc2l6ZU1h
c2s7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZSogcHJldmlvdXNFbnRyeSA9IG1f
dGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1ZSogZW50cnkgPSBtX3RhYmxlICsg
aW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBBU1NFUlQoaXNFbXB0eUJ1Y2tldCgqcHJldmlvdXNFbnRyeSkpOwor
ICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAg
ICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVu
dHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKCFwcm9iZURpc3RhbmNlKGVudHJ5SGFz
aCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91c0VudHJ5LCBXVEZNb3ZlKCplbnRy
eSkpOworICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICBpbml0aWFsaXplQnVj
a2V0KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91cyA9IGluZGV4OworICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNo
cmluaygpKQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAg
ICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFs
aWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24pKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhp
dGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0
X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0
b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9jYXN0
PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3Zl
KGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICAv
LyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVj
aWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8
Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVU
eXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKHNp
emUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJs
ZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CisgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZXhw
YW5kKCkKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAgIHVuc2lnbmVkIG9sZFNpemUgPSB0
YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAgICAgIG5ld1NpemUgPSBLZXlUcmFp
dHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZQorICAgICAgICBuZXdTaXplID0gb2xkU2l6
ZSAqIDI7CisKKyAgICByZWhhc2gobmV3U2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Citjb25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGtleUNvdW50KTsKKwor
ICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBi
ZXN0VGFibGVTaXplICo9IDI7CisKKyAgICBhdXRvIGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBh
bnNpb24gPSBbXShkb3VibGUgbG9hZEZhY3RvciwgdW5zaWduZWQga2V5Q291bnQsIHVuc2lnbmVk
IHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUgaXMgdGhlIHJhdGlvbmFsZSBiZWhp
bmQgdGhpcyBjYWxjdWxhdGlvbiwgdXNpbmcgMy80IGxvYWQtZmFjdG9yLgorICAgICAgICAvLyBX
aXRoIG1heExvYWQgYXQgMy80IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBp
cyAxMS8yNC4KKyAgICAgICAgLy8gSWYgd2UgYXJlIGdldHRpbmcgaGFsZi13YXkgYmV0d2VlbiAx
MS8yNCBhbmQgMy80LCB3ZSBkb3VibGUgdGhlIHNpemUKKyAgICAgICAgLy8gdG8gYXZvaWQgYmVp
bmcgdG9vIGNsb3NlIHRvIGxvYWRNYXggYW5kIGJyaW5nIHRoZSByYXRpbyBjbG9zZSB0byAxMS8y
NC4gVGhpcworICAgICAgICAvLyBnaXZlIHVzIGEgbG9hZCBpbiB0aGUgYm91bmRzIFs5LzI0LCAx
NS8yNCkuCisgICAgICAgIGRvdWJsZSBtYXhMb2FkUmF0aW8gPSBsb2FkRmFjdG9yOworICAgICAg
ICBkb3VibGUgbWluTG9hZFJhdGlvID0gMS4wIC8gbWluTG9hZDsKKyAgICAgICAgZG91YmxlIGF2
ZXJhZ2VMb2FkUmF0aW8gPSAobWF4TG9hZFJhdGlvICsgbWluTG9hZFJhdGlvKSAvIDI7CisgICAg
ICAgIGRvdWJsZSBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW8gPSAoYXZlcmFn
ZUxvYWRSYXRpbyArIG1heExvYWRSYXRpbykgLyAyOworICAgICAgICByZXR1cm4ga2V5Q291bnQg
Pj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOworICAg
IH07CisKKyAgICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgIGlmIChhYm92
ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFi
bGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOworICAgIHVuc2lnbmVkIG1pbmlt
dW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnNo
cmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNoKHN0ZDo6bWF4KG1pbmltdW1UYWJs
ZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KCkpKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkKK3sKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRh
YmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOworCisgICAgdW5z
aWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOworICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRh
YmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgbV90YWJsZVNpemUgPSBuZXdUYWJsZVNpemU7CisgICAg
bV9rZXlDb3VudCA9IG9sZEtleUNvdW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxl
SGFzaChtX3RhYmxlKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBvbGRF
bnRyeSA9IG9sZFRhYmxlW2ldOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob2xkRW50cnkp
KQorICAgICAgICAgICAgcmVpbnNlcnQoV1RGTW92ZShvbGRFbnRyeSkpOworICAgICAgICBvbGRF
bnRyeS5+VmFsdWVUeXBlKCk7CisgICAgfQorCisgICAgaWYgKG9sZFRhYmxlKQorICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2xl
YXIoKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaWYgKCFtX3RhYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNp
emUoKTsKKyAgICBtX3RhYmxlU2l6ZSA9IDA7CisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV90
YWJsZUhhc2ggPSAwOworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOworICAgIGRlYWxsb2NhdGVU
YWJsZShzdGQ6OmV4Y2hhbmdlKG1fdGFibGUsIG51bGxwdHIpLCBvbGRUYWJsZVNpemUpOworICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNp
emVQb2xpY3k+CitSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKQoreworICAgIGlmICghb3RoZXIu
bV90YWJsZVNpemUgfHwgIW90aGVyLm1fa2V5Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG90aGVyLm1fdGFibGVTaXplKTsKKyAgICBtX3RhYmxl
U2l6ZSA9IG90aGVyLm1fdGFibGVTaXplOworICAgIG1fa2V5Q291bnQgPSBvdGhlci5tX2tleUNv
dW50OworICAgIG1fdGFibGVIYXNoID0gY29tcHV0ZVRhYmxlSGFzaChtX3RhYmxlKTsKKyAgICBt
X3dpbGxFeHBhbmQgPSBvdGhlci5tX3dpbGxFeHBhbmQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBvdGhlci5tX3RhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICBW
YWx1ZVR5cGUmIG90aGVyRW50cnkgPSBvdGhlci5tX3RhYmxlW2luZGV4XTsKKyAgICAgICAgaWYg
KCFpc0VtcHR5QnVja2V0KG90aGVyRW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVR5cGUgZW50
cnkob3RoZXJFbnRyeSk7CisgICAgICAgICAgICByZWluc2VydChXVEZNb3ZlKGVudHJ5KSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+Ojpzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAgdXNpbmcg
c3RkOjpzd2FwOyAvLyBGb3IgQysrIEFETC4KKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMp
OworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIHN3YXAobV90YWJsZSwg
b3RoZXIubV90YWJsZSk7CisgICAgc3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUp
OworICAgIHN3YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7CisgICAgc3dhcChtX3Rh
YmxlSGFzaCwgb3RoZXIubV90YWJsZUhhc2gpOworICAgIHN3YXAobV93aWxsRXhwYW5kLCBvdGhl
ci5tX3dpbGxFeHBhbmQpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
KyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46
Om9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmIG90aGVyKSAtPiBSb2Jpbkhvb2RI
YXNoVGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRtcChvdGhlcik7CisgICAgc3dh
cCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGlj
eT4KK2lubGluZSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hU
YWJsZShSb2Jpbkhvb2RIYXNoVGFibGUmJiBvdGhlcikKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0
b3JzKCZvdGhlcik7CisKKyAgICBtX3RhYmxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxl
LCBudWxscHRyKTsKKyAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJs
ZVNpemUsIDApOworICAgIG1fa2V5Q291bnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fa2V5Q291
bnQsIDApOworICAgIG1fdGFibGVIYXNoID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlSGFz
aCwgMCk7CisgICAgbV93aWxsRXhwYW5kID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dpbGxFeHBh
bmQsIGZhbHNlKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAg
b3RoZXIuaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKSAtPiBSb2Jpbkhvb2RIYXNo
VGFibGUmCit7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlIHRlbXAoV1RGTW92ZShvdGhlcikpOwor
ICAgIHN3YXAodGVtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCisKKyNpZiBBU1NFUlRfRU5B
QkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0Cit7CisgICAgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXpl
UG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIHVuc2lnbmVkIHRhYmxl
U2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
YWJsZVNpemU7ICsraSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGk7
CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBhdXRvJiBrZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAg
ICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CisgICAgICAgIEFTU0VSVChlbnRy
eSA9PSBpdC5tX3Bvc2l0aW9uKTsKKyAgICAgICAgKytjb3VudDsKKworICAgICAgICBWYWx1ZUNo
ZWNrPEtleT46OmNoZWNrQ29uc2lzdGVuY3koa2V5KTsKKyAgICB9CisKKyAgICBBU1NFUlQoY291
bnQgPT0ga2V5Q291bnQoKSk7CisgICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID49IEtleVRy
YWl0czo6bWluaW11bVRhYmxlU2l6ZSk7CisgICAgQVNTRVJUKHRhYmxlU2l6ZU1hc2soKSk7Cisg
ICAgQVNTRVJUKHRoaXMtPnRhYmxlU2l6ZSgpID09IHRhYmxlU2l6ZU1hc2soKSArIDEpOworfQor
CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKworc3RydWN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHVzaW5nIFRhYmxl
VHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IE1lbW9yeUNvbXBhY3RSb2Jpbkhv
b2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5
PjsKK307CisKK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgorICAgIHVzaW5nIFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBGYXN0Um9iaW5Ib29k
SGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ0hhc2guaAppbmRleCA5MmQyMDhkMzVlMmFhZDViODgyNzNlMzQxODZj
MjdiNWQwN2NlMWZkLi5iYWQyY2FiMGQ1YWY2OTg2M2JkMDhhMjg5MGI1NDNkYTg4MzdlNTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAgIHRlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8V1RGOjpBdG9tU3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxXVEY6OkF0b21TdHJpbmc+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5j
cHAKaW5kZXggMmY3NjcwYjQ4MTJkZjBiY2ZlZjE0NmMzYjJlZTg5ZmU3MTE3ZjVmYS4uYTE4YjNj
YmQ4ODAwMmQzOWRmY2IyZWMxNzQzYTk3NWQ0ZWY0Y2RiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgQXRvbVN0cmluZ1RhYmxl
TG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBTdHJpbmdUYWJs
ZUltcGwgPSBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj47Cit1c2luZyBTdHJpbmdUYWJs
ZUltcGwgPSBBdG9tU3RyaW5nVGFibGU6OlN0cmluZ1RhYmxlSW1wbDsKIAogc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXggZTBjMGFmYmFlYTQzNjg2MWI4YjhlNDFlZTA3
NmFlMmM3NDIyNGJjZi4uODZlZDI1ZjI4ZWMwODY2OGVmNWU0YTU2YTI0OTc1ZDIwMWZhOGU0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcApAQCAtMjksNyArMjksNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKCkK
IHsKLSAgICBmb3IgKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgc3RyaW5nIDogbV90YWJs
ZSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IG1fdGFibGUpCiAgICAgICAgIHN0cmlu
Zy0+c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmgKaW5kZXggMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZS4uZmZhZjgz
NjQyMmM1MjllMzllNmQxNzBkYmNiODRmOTliNjc5NGZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21TdHJpbmdUYWJsZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTMzLDEyICszNCwxNSBAQCBjbGFzcyBTdHJpbmdJbXBsOwogY2xhc3MgQXRvbVN0cmlu
Z1RhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICB1c2lu
ZyBTdHJpbmdFbnRyeSA9IFBhY2tlZFB0cjxTdHJpbmdJbXBsPjsKKyAgICB1c2luZyBTdHJpbmdU
YWJsZUltcGwgPSBIYXNoU2V0PFN0cmluZ0VudHJ5PjsKKwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBs
Pj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIFN0cmluZ1RhYmxlSW1wbCYgdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4+IG1fdGFibGU7CisgICAgU3RyaW5nVGFibGVJbXBsIG1fdGFibGU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCmluZGV4IDVhODM4NWUwNGE5NTkwNGUwNmJh
MTI4ZDZlYWExM2Q5MWViOTBmYjkuLmYwMzJmMWJkZjIxYjU4ZGJmNmNlNjI1NDU0NDZjNDg3NjVm
YWM0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCkBAIC05MCw2ICs5MCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7CiAgICAgfTsKIAogICAgIHN0cnVjdCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2ggewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRl
eCA3NDkwNzMzODgwN2VhOTc1ZTA3MjI4ZDA0YTI1NjQzNmU3NzE1Y2M2Li4wOTQzZDdiODVhM2Iz
M2M5YzE2Njk5MDhlZjgzMzIzZmNlMjJkMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNw
cApAQCAtMzksMzEgKzM5LDMxIEBACiAjaW5jbHVkZSAiTWVkaWFFbmNvZGluZ0NvbmZpZ3VyYXRp
b24uaCIKICNpbmNsdWRlICJNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVU
eXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4mIGJ1Y2tldE1JTUVUeXBlcygpCiB7CiAgICAgLy8gQSAiYnVja2V0IiBNSU1F
IHR5cGVzIGlzIG9uZSB3aG9zZSBjb250YWluZXIgdHlwZSBkb2VzIG5vdCB1bmlxdWVseSBzcGVj
aWZ5IGEgY29kZWMuCiAgICAgLy8gU2VlOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZj
NjM4MQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGJ1Y2tldE1J
TUVUeXBlcyA9IEhhc2hTZXQ8U3RyaW5nPih7Ci0gICAgICAgICJhdWRpby8zZ3BwIiwKLSAgICAg
ICAgInZpZGVvLzNncHAiLAotICAgICAgICAiYXVkaW8vM2dwcDIiLAotICAgICAgICAidmlkZW8v
M2dwcDIiLAotICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgInZpZGVvL21wNCIsCi0gICAg
ICAgICJhcHBsaWNhdGlvbi9tcDQiLAotICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiwKLSAgICAg
ICAgImFwcGxpY2F0aW9uL21wMjEiLAotICAgICAgICAiYXVkaW8vdm5kLmFwcGxlLm1wZWd1cmwi
LAotICAgICAgICAidmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiLAotICAgICAgICAiYXVkaW8vb2dn
IiwKLSAgICAgICAgInZpZGVvL29nZyIsCi0gICAgICAgICJ2aWRlby93ZWJtIiwKLSAgICAgICAg
ImF1ZGlvL3dlYm0iLAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKKyAgICAgICAgImF1ZGlvLzNncHAiX3MsCisgICAgICAg
ICJ2aWRlby8zZ3BwIl9zLAorICAgICAgICAiYXVkaW8vM2dwcDIiX3MsCisgICAgICAgICJ2aWRl
by8zZ3BwMiJfcywKKyAgICAgICAgImF1ZGlvL21wNCJfcywKKyAgICAgICAgInZpZGVvL21wNCJf
cywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wNCJfcywKKyAgICAgICAgInZpZGVvL3F1aWNrdGlt
ZSJfcywKKyAgICAgICAgImFwcGxpY2F0aW9uL21wMjEiX3MsCisgICAgICAgICJhdWRpby92bmQu
YXBwbGUubXBlZ3VybCJfcywKKyAgICAgICAgInZpZGVvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAor
ICAgICAgICAiYXVkaW8vb2dnIl9zLAorICAgICAgICAidmlkZW8vb2dnIl9zLAorICAgICAgICAi
dmlkZW8vd2VibSJfcywKKyAgICAgICAgImF1ZGlvL3dlYm0iX3MsCiAgICAgfSk7CiAgICAgcmV0
dXJuIGJ1Y2tldE1JTUVUeXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDkwNDM1NGQ2MjhhYjU0Zjc3YmFj
OGUxZjA2NjVlZmNlN2FkNTU4NDguLjg0MzEwMWVkZWY0NTJhZDA5NGYwMzViZjg0MjQyNWJiZjY2
NjkwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcApAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIlVzZXJHZXN0dXJl
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KQEAgLTI2MDcsOCArMjYwOCw4
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNIYXNQb3B1cCgpIGNvbnN0CiAK
IFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3B1cFZhbHVlKCkgY29uc3QKIHsKLSAgICBz
dGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhbGxvd2VkUG9wdXBW
YWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4gewotICAgICAgICAibWVudSIsICJs
aXN0Ym94IiwgInRyZWUiLCAiZ3JpZCIsICJkaWFsb2ciCisgICAgc3RhdGljIGNvbnN0IE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
PiBhbGxvd2VkUG9wdXBWYWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAg
ICAgICAibWVudSJfcywgImxpc3Rib3giX3MsICJ0cmVlIl9zLCAiZ3JpZCJfcywgImRpYWxvZyJf
cywKICAgICB9KTsKIAogICAgIGF1dG8gaGFzUG9wdXAgPSBnZXRBdHRyaWJ1dGUoYXJpYV9oYXNw
b3B1cEF0dHIpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNmU3NjcyNzRhNTllMGZiYjAxNjc3ZTA5ZDlhNzkyZTM5OWM5ZDIwNy4uNDZiYmY5ZWU5
NjJhZTRlOWNjMTM3YmNhYjdkMjdkYjA0MDY0NWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjM4OSw3ICsyMzg5LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFkb3dSb290KCkKIAog
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0
YWdOYW1lcyA9IFtdIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7
CiAgICAgICAgICAgICAmYXJ0aWNsZVRhZy5nZXQoKSwKICAgICAgICAgICAgICZhc2lkZVRhZy5n
ZXQoKSwKQEAgLTI0MTAsNyArMjQxMCw4IEBAIHN0YXRpYyBib29sIGNhbkF0dGFjaEF1dGhvclNo
YWRvd1Jvb3QoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZzZWN0aW9uVGFn
LmdldCgpLAogICAgICAgICAgICAgJnNwYW5UYWcuZ2V0KCkKICAgICAgICAgfTsKLSAgICAgICAg
SGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIHNldC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemVvZih0YWdMaXN0KSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6
IHRhZ0xpc3QpCiAgICAgICAgICAgICBzZXQuYWRkKG5hbWUtPmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgcmV0dXJuIHNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWRO
YW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4IDI2NGM0Nzkx
NTBjY2JmN2EwNjVkZWE1NWFjZWJhNDRlZGQzOTJmNGYuLjQyOWZjNTU5NjQzNTFmMTI0OWJjMWM4
ZjI4OWUzNzdhNGRkM2UzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZp
ZWROYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaApAQCAtMTM3
LDcgKzEzNyw4IEBAIHN0cnVjdCBRdWFsaWZpZWROYW1lSGFzaCB7CiAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwqIGEsIGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiBiKSB7IHJldHVybiBhID09IGI7IH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIGlubGluZSBTdHJp
bmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5w
bAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTljZTI1MmM2YzY2YWNiNzkzZjViLi40Mjg1NDI4
OGVhODFlMjg2MzA0OTMwZWJlMzBiZWEyYzhhN2Q4ZTg1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1l
cy5wbApAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRGKTsKICAg
ICBwcmludEhlYWRlckhlYWQoJEYsICJDU1MiLCAkZmFtaWx5TmFtZXNGaWxlQmFzZSwgPDxFTkQs
ICIiKTsKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nLmg+CiBFTkQKQEAgLTcwOSw2ICs3MTAsNyBAQCBzdWIgcHJpbnROYW1l
c0hlYWRlckZpbGUKICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVy
SGVhZCgkRiwgIkRPTSIsICRwYXJhbWV0ZXJze25hbWVzcGFjZX0sIDw8RU5ELCAiY2xhc3MgJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfVF1YWxpZmllZE5hbWUgOiBwdWJsaWMgUXVhbGlmaWVkTmFtZSB7
IH07XG5cbiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgog
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKIEVORApAQCAtOTU2LDcgKzk1OCw3IEBAIEVORAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OTYsNyArOTk4LDcgQEAgRU5ECiAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSogcXVhbGlmaWVkTmFtZTsgLy8gVXNlIHBvaW50ZXIgaW5zdGVh
ZCBvZiByZWZlcmVuY2Ugc28gdGhhdCBlbXB0eVZhbHVlKCkgaW4gSGFzaE1hcCBpcyBjaGVhcCB0
byBjcmVhdGUuCiB9OwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0cmluZ0lt
cGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBj
cmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCitzdGF0aWMgTkVWRVJfSU5M
SU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCAk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5PiBjcmVhdGUk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9RmFjdG9yeU1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50
cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lOwpAQCAtMTAxMiwxNiArMTAx
NCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRv
bVN0cmluZ0ltcGwqLCAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1h
cEVudHJ5PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnk+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAgIG1hcC5h
ZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1D
b25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCAkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9Q29uc3RydWN0b3JGdW5jdGlvbk1hcEVudHJ5KGVudHJ5LmZ1bmN0aW9uLCBlbnRyeS5u
YW1lKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogc3RhdGljICRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkgZmluZCRwYXJhbWV0ZXJze25hbWVzcGFjZX1F
bGVtZW50Q29uc3RydWN0b3JGdW5jdGlvbihjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRw
YXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkpOwotICAgIHJldHVybiBtYXAuZ2V0KCku
Z2V0KGxvY2FsTmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtYXAuZ2V0KCkuZ2V0KGxvY2FsTmFt
ZSk7CiB9CiAKIFJlZlB0cjwkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudD4gJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUVsZW1lbnRGYWN0b3J5OjpjcmVhdGVLbm93bkVsZW1lbnQoY29uc3QgQXRv
bVN0cmluZyYgbG9jYWxOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQkZm9ybUVsZW1lbnRBcmd1bWVu
dEZvckRlZmluaXRpb24sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpAQCAtMTIyNiw2ICsxMjI4LDcg
QEAgc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlCiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiBFTkQKIDsKQEAgLTEyNDcsNyArMTI1MCw3IEBAIEVORAog
CiBwcmludCBGIDw8RU5ECiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCitzdGF0aWMgTkVWRVJf
SU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5n
LCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gY3Jl
YXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKQogewogICAgIHN0cnVjdCBUYWJs
ZUVudHJ5IHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZTsKQEAgLTEyODUsMTYg
KzEyODgsMTYgQEAgRU5ECiAgICAgcHJpbnQgRiA8PEVORAogICAgIH07CiAKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8QXRvbVN0cmluZywgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IG1hcDsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCi0gICAgICAg
IG1hcC5hZGQoZW50cnkubmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksIGVudHJ5LmZ1bmN0aW9uKTsK
KyAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLCBlbnRyeS5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKIH0KIAogSlNET01PYmplY3QqIGNyZWF0ZUpTJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPCRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50PiYmIGVsZW1lbnQpCiB7CiAgICAgc3RhdGljIGNv
bnN0IGF1dG8gZnVuY3Rpb25zID0gbWFrZU5ldmVyRGVzdHJveWVkKGNyZWF0ZSRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1XcmFwcGVyTWFwKCkpOwotICAgIGlmIChhdXRvIGZ1bmN0aW9uID0gZnVuY3Rp
b25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpKQorICAgIGlmIChhdXRv
IGZ1bmN0aW9uID0gZnVuY3Rpb25zLmdldCgpLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKSkpCiAg
ICAgICAgIHJldHVybiBmdW5jdGlvbihnbG9iYWxPYmplY3QsIFdURk1vdmUoZWxlbWVudCkpOwog
RU5ECiA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
aW5kZXggYzc4ZDFlYmY4NmViMGI0OTBkYTM5YzYzMGJiMmZhMWI0ZGViYjNkMC4uYjgyZTJlNmM5
NWU1NjM2YjVhMzI4ZTg4MWJmMWU3YTU3ZjQzMDk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTE4LDcgKzExOSw3IEBAIEVsZW1lbnQqIEZvcm1hdEJs
b2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjb25zdCBPcHRpb25hbDxT
aW1wbGVSCiAKIGJvb2wgaXNFbGVtZW50Rm9yRm9ybWF0QmxvY2soY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1
dG8gYmxvY2tUYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIGFkZHJlc3NUYWcsCiAg
ICAgICAgIGFydGljbGVUYWcsCiAgICAgICAgIGFzaWRlVGFnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKaW5kZXggNGVjMGI0ZTU1YzNlYWY2NDA4
ZjI1MDU5OTZjYTFkY2RhYTVmMjM1My4uNjYxNDA3ZTE0NTI0Y2YyYTEzZmVhMzY1NTEzZDc5YWJl
NTNlNjlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1h
bmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00Niw3ICs0Nyw3IEBAIFJlbW92ZUZvcm1hdENvbW1hbmQ6OlJlbW92ZUZvcm1hdENvbW1h
bmQoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBzdGF0aWMgYm9vbCBpc0VsZW1lbnRGb3JSZW1vdmVG
b3JtYXRDb21tYW5kKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIGNvbnN0
IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxRdWFsaWZpZWROYW1l
PiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZWxlbWVudHMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsK
ICAgICAgICAgYWNyb255bVRhZywKICAgICAgICAgYlRhZywKICAgICAgICAgYmRvVGFnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApp
bmRleCAwMTkxOWViMzVjNzljNTQ5OGViNmMyZTAwOGZmODNmYWRhM2E3ZGFmLi5jYzMzZGY3MmEy
YzdhOGJmZjExZjg2NjE3NDI0NjU0MWVlN2NlMzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNjcsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03MzksNyArNzQwLDcgQEAgc3RhdGljIGJvb2wgaXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQo
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSkKICAgICAgICAgICAgICZ1bFRhZy5nZXQoKSwKICAgICAg
ICAgICAgICZ4bXBUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0
cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8mIHRhZyA6IHRhZ3MpCiAgICAg
ICAgICAgICBzZXQuYWRkKHRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9BdXRvZmlsbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0F1dG9maWxsLmNwcAppbmRleCA2NzM1ZTI2OWYyNWFlZjdiYzA5MTI3NTUzOTIx
NDgxY2RlM2U4ZWI1Li44ZjcxMmY3MWQyMjFkYzI3ZTk0MjI4MmYxNGY5MDMyZTlhODkxMTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaD4KIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgQXV0b2ZpbGxJbmZvIHsKICAgICBBdXRv
ZmlsbENhdGVnb3J5IGNhdGVnb3J5OwogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0
cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZv
PiYgZmllbGROYW1lTWFwKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkgewpAQCAtMTEzLDcgKzEx
NCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4mIGZp
ZWxkTmFtZU1hcCgpCiAgICAgICAgICAgICB7ICJlbWFpbCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6
OkVtYWlsLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0IH0gfSwKICAgICAgICAgICAgIHsgImlt
cHAiLCB7IEF1dG9maWxsRmllbGROYW1lOjpJbXBwLCBBdXRvZmlsbENhdGVnb3J5OjpDb250YWN0
IH0gfSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbElu
Zm8+IG1hcDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZW50cmllcykKICAgICAgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZSwgZW50cnkudmFsdWUp
OwogICAgICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmlu
ZGV4IDhkZjYyYzZiYjQ5MWY4NDhlZWNlMjkwOTQ0YTRiN2NmYWVkZDhkNzUuLjAwYmY2N2FlZDU2
NWFjOTBmNDZkOGZhNzM4ZGY3YTUyOTM3NjBkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyNSw3ICsyMjYsNyBA
QCBib29sIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICAmdmFsdWV0eXBlQXR0ci5nZXQo
KSwKICAgICAgICAgICAgICZ2bGlua0F0dHIuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhh
c2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBmb3IgKGF1dG8qIG5hbWUg
OiBuYW1lcykKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAg
ICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApp
bmRleCBkYzFmMTBjYjJjZjA4NDIxODgzMjRiOGEwM2U2YjE3MTYyMGQ2Y2JlLi5hNmYzYzBmMTJk
MjcxNTY5NTkxOGI3NjNkOTI0NjI2NWZlMmYyYzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgpAQCAtMzYxLDcg
KzM2Miw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ29udGVudCgp
CiBzdGF0aWMgaW5saW5lIGJvb2wgcHJldmVudHNQYXJlbnRPYmplY3RGcm9tRXhwb3N1cmUoY29u
c3QgRWxlbWVudCYgY2hpbGQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gbW9zdEtub3duVGFn
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UXVhbGlmaWVkTmFtZT4gc2V0OwogICAgICAgICBhdXRvKiB0YWdzID0gSFRNTE5hbWVzOjpnZXRI
VE1MVGFncygpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxOYW1lczo6SFRN
TFRhZ3NDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBhdXRvJiB0YWcgPSAqdGFnc1tpXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGIx
OTMwZTQ2M2RhNDRkOTdkYjc0NTQ1Y2U2OTRlOTljYmUzOTE2OGYuLjkyZjI3NmYzOGI3NDRkNTFl
YzUxYzhmY2Y5YWI0NmZlNzJkMmVkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlhNTE5T
TmFtZXMuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ3OCw5ICs0NzksOSBAQCB0
ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQwogICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+
IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0ZUNhc2VNYXAo
Y29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1bnNpZ25lZCBsZW5ndGgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFibGVRdWFsaWZpZWROYW1lPiBzdGF0aWMgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
IGNyZWF0ZUNhc2VNYXAoY29uc3QgVGFibGVRdWFsaWZpZWROYW1lKiBjb25zdCBuYW1lc1tdLCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1l
PiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1l
c1tpXTsKICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS5sb2NhbE5h
bWUoKTsKQEAgLTQ5MywxNCArNDk0LDE0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxp
ZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+CiAKIHN0
YXRpYyB2b2lkIGFkanVzdFNWR1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoU1ZHTmFtZXM6OmdldFNWR1RhZ3MoKSwgU1ZHTmFt
ZXM6OlNWR1RhZ3NDb3VudCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4g
bWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZH
VGFnc0NvdW50KTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0
KCkuZ2V0KHRva2VuLm5hbWUoKSk7CiAgICAgaWYgKGNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHRva2VuLnNldE5hbWUoY2FzZWROYW1lLmxvY2Fs
TmFtZSgpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQorc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBt
YXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUg
OiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2Fz
ZWROYW1lID0gbWFwLmdldChhdHRyaWJ1dGUubG9jYWxOYW1lKCkpOwpAQCAtNTExLDcgKzUxMiw3
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvCiAKIHRlbXBsYXRlPGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0KiBhdHRyaWJ1dGVzVGFibGUoKSwgdW5zaWduZWQgYXR0cmlidXRlc1RhYmxlTGVu
Z3RoPiBzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUNhc2VNYXAoYXR0cmlidXRlc1RhYmxlKCksIGF0dHJpYnV0
ZXNUYWJsZUxlbmd0aCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFw
ID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3Ro
KTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9rZW4pOwogfQogCkBAIC01MjUsMTggKzUy
NiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGFkanVzdEF0dHJpYnV0ZXM8TWF0aE1MTmFtZXM6OmdldE1h
dGhNTEF0dHJzLCBNYXRoTUxOYW1lczo6TWF0aE1MQXR0cnNDb3VudD4odG9rZW4pOwogfQogCi1z
dGF0aWMgdm9pZCBhZGROYW1lc1dpdGhQcmVmaXgoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZp
ZWROYW1lPiYgbWFwLCBjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5h
bWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3Jl
YXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5h
bWVzW2ldOwotICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2Fs
TmFtZSgpOwotICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlm
aWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOwotICAgIH0K
LX0KKyAgICBhdXRvIGFkZE5hbWVzV2l0aFByZWZpeCA9IFtdKE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBjb25z
dCBBdG9tU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10s
IHVuc2lnbmVkIGxlbmd0aCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFt
ZXNbaV07CisgICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxv
Y2FsTmFtZSgpOworICAgICAgICAgICAgbWFwLmFkZChwcmVmaXggKyAnOicgKyBsb2NhbE5hbWUs
IFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG5hbWUubmFtZXNwYWNlVVJJKCkpKTsK
KyAgICAgICAgfQorICAgIH07CiAKLXN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKLXsKLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogCiAgICAgQXRv
bVN0cmluZyB4bGlua05hbWUoInhsaW5rIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGFkZE5hbWVzV2l0aFByZWZpeChtYXAsIHhsaW5rTmFtZSwgWExpbmtOYW1lczo6
Z2V0WExpbmtBdHRycygpLCBYTGlua05hbWVzOjpYTGlua0F0dHJzQ291bnQpOwpAQCAtNTUwLDcg
KzU1MCw3IEBAIHN0YXRpYyBIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IGNyZWF0
ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCkKIAogc3RhdGljIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlRm9yZWln
bkF0dHJpYnV0ZXNNYXAoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBt
YXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMo
bWFwLCB0b2tlbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQ
YWdlT3ZlcmxheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5j
cHAKaW5kZXggZmEzZTJmYWE0OGI5NmFkYmM5ZDhlMjYzNTJkNWY2MjBkN2I1NWFhMS4uYjU5NjVm
NTZhNDlhOTVlMDJjOGYwNzk1ZGVjY2U4ZmFmMTFiYTZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0xNDksMTAgKzE1MCwxMCBAQCBib29sIE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uT3ZlcmxheTo6dXBkYXRlUmVnaW9uKCkKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0K
IAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4mIHRvdWNoRXZl
bnRSZWdpb25Db2xvcnMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcmVnaW9uQ29sb3JzID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKLSAgICAgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50
OF90Pj4geyB7CisgICAgICAgIHJldHVybiBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBTUkdCQTx1aW50OF90Pj4geyB7CiAgICAgICAgICAgICB7ICJ0b3Vj
aHN0YXJ0Il9zLCB7IDE5MSwgMTkxLCA2MywgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2ht
b3ZlIl9zLCB7IDgwLCAyMDQsIDI0NSwgNTAgfSB9LAogICAgICAgICAgICAgeyAidG91Y2hlbmQi
X3MsIHsgMTkxLCA2MywgMTI3LCA1MCB9IH0sCkBAIC0xOTQsNDkgKzE5NSw0OSBAQCB2b2lkIE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5LCBHcmFwaGljcwogICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOwogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJ0b3VjaHN0YXJ0IikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiX3MpKTsKICAgICBjb250ZXh0
LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0
YXJ0IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgidG91Y2hzdGFydCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5s
b2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIikpOwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRv
dWNobW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJh
d1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3Qu
bG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNobW92ZSJfcywgY29u
dGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92
ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgidG91Y2hlbmQiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hlbmQiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGVuZCIsIGNvbnRl
eHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRl
eHQoInRvdWNoZW5kIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwog
CiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGZvcmNlY2hhbmdlIikpOworICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9y
Y2VjaGFuZ2UiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIiwgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hmb3Jj
ZWNoYW5nZSJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAg
IGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9jb2xv
cik7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgicGFzc2l2ZSBsaXN0ZW5lcnMiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyJf
cywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJl
Y3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lv
bkNvbG9ycygpLmdldCgibW91c2Vkb3duIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNlZG93biJfcykpOwogICAgIGNvbnRleHQu
ZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlZG93
biIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoIm1vdXNlZG93biJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2Nh
dGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgwLCAzMCk7Ci0gICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIikpOworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNl
bW92ZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1Jp
Z2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSIsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9j
YXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1vdXNlbW92ZSJfcywgY29udGV4
dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGxlZ2VuZFJlY3QubW92ZSgw
LCAzMCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgibW91c2V1cCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdl
bmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCIsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoIm1v
dXNldXAiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZWxzZQog
ICAgIC8vIE9uIGRlc2t0b3AgcGxhdGZvcm1zLCB0aGUgIndoZWVsIiByZWdpb24gaW5jbHVkZXMg
dGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uLgotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIikpOworICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIndoZWVsIl9zKSk7CiAgICAg
Y29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgi
bm9uLWZhc3QgcmVnaW9uIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibm9uLWZhc3QgcmVnaW9uIl9zLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2ZW50
U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCmluZGV4IGVkOGRkOTIzOGQzMzczYzAxODJi
MmYzMDhlZGEwMDI3ZTRhZmI5MDIuLjQwMTUyNzdlMDdjNDNkOWY5ODlhMTdlYWJhZTE1MjBiOWVj
OGExOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGlt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKQEAgLTM1LDE1ICszNSwxNiBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rp
b24gPSB1bnNpZ25lZCBsb25nIGxvbmcgKFBlcmZvcm1hbmNlVGltaW5nOjoqKSgpIGNvbnN0Owot
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+JiBy
ZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXAoKQorc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5h
dmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25U
aW1pbmdGdW5jdGlvbk1hcCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgTmF2
aWdhdGlvblRpbWluZ0Z1bmN0aW9uPj4oeworICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CiAgICAgICAgIHsgImNvbm5lY3RFbmQiX3Ms
ICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdEVuZCB9LAogICAgICAgICB7ICJjb25uZWN0U3Rh
cnQiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6Y29ubmVjdFN0YXJ0IH0sCiAgICAgICAgIHsgImRv
bUNvbXBsZXRlIl9zLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmRvbUNvbXBsZXRlIH0sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0KaW5kZXggOWM0NWEyMjk0ZmJmYWNmMTk3NzBkNDgxZTZiZWU0ZmVkYWVhNjRmYy4uYTU1ZDVh
MDVlNGRkY2JmNWM4MWM3MTkxYjRkY2I5ZDJjMzQxZWI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQpAQCAtMjks
MTcgKzI5LDE5IEBACiAKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVNlcnZpY2VzU1BJLmg+
CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TVVJMRmlsZVR5cGVNYXBwaW5nc1NQSS5oPgorI2lt
cG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbXBvcnQgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVu
c2lvbnNGb3JNSU1FVHlwZU1hcCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4+JiBleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQogewogICAgIHN0YXRpYyBh
dXRvIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0g
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4+IG1hcDsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IG1hcDsKIAogICAgICAgICBhdXRv
IGFkZEV4dGVuc2lvbiA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSB7Ci0gICAgICAgICAgICBtYXAuYWRkKHR5cGUsIEhhc2hTZXQ8U3RyaW5nPigpKS5p
dGVyYXRvci0+dmFsdWUuYWRkKGV4dGVuc2lvbik7CisgICAgICAgICAgICBtYXAuYWRkKHR5cGUs
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJh
dG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIGFk
ZEV4dGVuc2lvbnMgPSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlLCBOU0FycmF5PE5TU3RyaW5nICo+
ICpleHRlbnNpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5N2I3OWZkOGY3
M2Q3ZC4uZjVhNjc1ODMzNTEzMTlmNDBmMTI4N2UyYTcyOWNjNDcxYmJkMWU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC01MCw3ICs1MSw3
IEBAIHN0YXRpYyBib29sIHVzZUJhY2tzbGFzaEFzWWVuU2lnbkZvckZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzZXQgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
W10gewotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKICAgICAgICAg
YXV0byBhZGQgPSBbJnNldF0gKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVQ2hhcj4gdW5pY29kZU5hbWUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG5hbWVMZW5ndGgg
PSBzdHJsZW4obmFtZSk7CiAgICAgICAgICAgICBzZXQuYWRkKEF0b21TdHJpbmcgeyBuYW1lLCBu
YW1lTGVuZ3RoLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCB9KTsKQEAgLTM4Miw3
ICszODMsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGgoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdCBh
dXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PEF0b21TdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHsKICAgICAgICAgIkFtZXJpY2Fu
IFR5cGV3cml0ZXIiLAogICAgICAgICAiQXJpYWwgSGVicmV3IiwKICAgICAgICAgIkNoYWxrYm9h
cmQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggNGY0
MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MC4uMTQyNGQxYmVlZTZlM2MzMmM2
NmI0OWEyZjZmMjRiNDhiMmFjMmUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIEhBVkUoQVZDT05URU5US0VZU0VTU0lPTikKQEAgLTIw
NSw5ICsyMDYsOSBAQCBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2
YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTawogICAgIHJldHVybiBrZXlJRHM7
CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlw
ZXMoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyA9IEhhc2hTZXQ8QXRvbVN0
cmluZz4oeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHZhbGlkVHlwZXMoc3RkOjppbml0aWFsaXpl
cl9saXN0PEF0b21TdHJpbmc+IHsKICAgICAgICAgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5n
OjpzaW5mTmFtZSgpLAogICAgICAgICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNrZE5h
bWUoKSwKICNpZiBIQVZFKEZBSVJQTEFZU1RSRUFNSU5HX0NFTkNfSU5JVERBVEEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKaW5k
ZXggM2MxYjZmNjU3MmViMzhhOTM4MTA1Zjc0NzU4YjE3ODJmY2Q5NzkxNy4uYTQ3MDI0NDBlZGZi
MDMyMmZlYWY3Y2Q5MWI2ZWFkNDA3YjNjOTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcApAQCAtMzEsMTMgKzMxLDE0IEBA
CiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKIAorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGF1dG8gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10g
ewogICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMgPSB7
CkBAIC02OCwxMSArNjksMTIgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9y
dGVkSW1hZ2VUeXBlcygpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIYXNoU2V0PFN0cmluZz4q
Pihjb250ZXh0KS0+YWRkKGltYWdlVHlwZSk7CiAgICAgICAgIH0sICZzeXN0ZW1TdXBwb3J0ZWRJ
bWFnZVR5cGVzKTsKIAotICAgICAgICBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcy5yZW1vdmVJ
ZihbJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXNdKGNvbnN0IFN0cmluZyYgaW1hZ2VUeXBlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gIXN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMuY29udGFpbnMo
aW1hZ2VUeXBlKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0
ZWRJbWFnZVR5cGVzOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8U3RyaW5nPiBmaWx0ZXJlZDsKKyAgICAgICAgZm9yIChhdXRvJiBpbWFnZVR5cGUgOiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcykgeworICAgICAgICAgICAgaWYgKHN5c3RlbVN1cHBv
cnRlZEltYWdlVHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkKKyAgICAgICAgICAgICAgICBmaWx0
ZXJlZC5hZGQoaW1hZ2VUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlsdGVyZWQ7
CiAgICAgfSgpKTsKIAogICAgIHJldHVybiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmlu
ZGV4IDViOGZlMjE3ZTg3M2QwYjBjODU2Njg2NzQwMGQ3NmVlM2M2NjU3NWUuLjRiMDE1YWZjOTVj
YWYyMzA4NmExY2JiNjFlM2U1NjRmNzdkMGI5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApAQCAtMjUsMTIgKzI1LDEyIEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1cHBv
cnRlZEltYWdlVHlwZXMoKTsKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogSGFzaFNldDxT
dHJpbmc+JiBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpOwogV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
c0ZvclRlc3RpbmcoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KaW5kZXgg
ZjExMWYyODc3Yjk4ZjljODM3ZDM1NGNjODFkYmEwMjhiM2VlOTIzMy4uNjI2YzUyZGUwMjMyYjMy
NmNlMmI0YmY4MzJmZjA5ZjkwYTc4Yjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbQpAQCAt
MzIsOCArMzIsOSBAQAogI2ltcG9ydCAiSEVWQ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiTWVkaWFD
YXBhYmlsaXRpZXNJbmZvLmgiCiAKLSNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0
TGluay5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZv
dW5kYXRpb25Tb2Z0TGluay5oPgogCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgog
CkBAIC0xMjYsMTEgKzEyNywxMSBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1Bh
cmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJgogCiBzdGF0aWMg
T3B0aW9uYWw8Q01WaWRlb0NvZGVjVHlwZT4gY29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiB7Ci0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewotICAgICAg
ICB7ICJhdmMxIiwga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJhdmMzIiwg
a0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJodmMxIiwga0NNVmlkZW9Db2Rl
Y1R5cGVfSEVWQyB9LAotICAgICAgICB7ICJoZXYxIiwga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9
LAorICAgIHN0YXRpYyBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBDTVZpZGVvQ29kZWNUeXBlPj4oewor
ICAgICAgICB7ICJhdmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCisgICAgICAgIHsg
ImF2YzMiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiaHZjMSJfcywg
a0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAorICAgICAgICB7ICJoZXYxIl9zLCBrQ01WaWRlb0Nv
ZGVjVHlwZV9IRVZDIH0sCiAgICAgfSk7CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBtYXAuZ2V0
KCkuZmluZChjb2RlY1N0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmlu
ZGV4IGQxZmNmZDBkY2JhMzI2YWQzYzU0YjBjYWNkNjdkZmJiOTVjMTJkOTkuLmU1MWI1ZDY5YzQ2
ZjQxNzdkYTRjOTlmNDczN2M4MmYwMzBmNDI5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uY3BwCkBAIC0xMzcxLDE1ICsxMzcxLDE1IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soQ2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
CiAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwog
fQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBv
cnRlZFZpZGVvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0Nv
ZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiLCAiVl9WUDkiIH0pOworICAgIHN0YXRpYyBhdXRvIGNv
ZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPj4oeyAiVl9WUDgiX3MsICJWX1ZQOSJfcyB9KTsKICAgICByZXR1cm4g
Y29kZWNzOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0
ZWRBdWRpb0NvZGVjcygpCiB7Ci0gICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMiLCAiQV9PUFVTIiB9KTsKKyAgICBz
dGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+KHsgIkFfVk9SQklTIl9zLCAiQV9PUFVTIl9z
IH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
aAppbmRleCBmMGQ2YTVmZDZmMGY2YzJiMzg0ZjkyZjc0OGY0YzliYTVkOTFiOGQ0Li42NDFlNDcx
ODZlYWYzMjc2MGUxODI3NWFkM2Q4ZDUwNDZkNWM3MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNp
bmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTIzNSw4
ICsyMzYsOCBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDog
cHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZQogCiAgICAgVHJhY2tEYXRhKiB0cmFj
a0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBzdXBwb3J0ZWRWaWRlb0NvZGVjcygpOwotICAgIHN0YXRpYyBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIHN1cHBvcnRlZEF1ZGlvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRW
aWRlb0NvZGVjcygpOworICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKIAogICAgIC8v
IHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9uRWxlbWVudEJlZ2luKGNvbnN0IHdl
Ym06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiopIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IDg4MGNiYmEwNGM4ZWQw
YjdiZjNiOGQyOTUzNTE0MmM1Mjc3Y2JhYWYuLmZlMGVkMzE0NDExNDhlZTE1M2IzNDZlNDUzNTQ1
NTU5MjZjM2E3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVzb3VyY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdQYXR0ZXJuRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDMsOSArNDQsOSBAQCBTVkdSZXNv
dXJjZXM6OlNWR1Jlc291cmNlcygpCiB7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+
JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVyTWFza2Vy
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gImNvbnRhaW5lciBlbGVtZW50
cyI6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUNvbnRhaW5lckVs
ZW1lbnQKICAgICAgICAgLy8gImdyYXBoaWNzIGVsZW1lbnRzIiA6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ludHJvLmh0bWwjVGVybUdyYXBoaWNzRWxlbWVudApAQCAtOTIsOSArOTMsOSBA
QCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2xpcHBlckZpbHRlck1hc2tlclRhZ3MoKQog
ICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6OmxpbmVUYWctPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6cGF0aFRhZy0+bG9jYWxO
YW1lKCkpOwpAQCAtMTA1LDkgKzEwNiw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBt
YXJrZXJUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxB
dG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgZmlsbEFuZFN0cm9rZVRh
Z3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBz
X3RhZ0xpc3Q7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3Rh
Z0xpc3QuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZH
TmFtZXM6OmFsdEdseXBoVGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQo
KS5hZGQoU1ZHTmFtZXM6OmNpcmNsZVRhZy0+bG9jYWxOYW1lKCkpOwpAQCAtMTI2LDkgKzEyNyw5
IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiAgICAg
cmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWlu
YWJsZVJlc291cmNlVGFncygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBjaGFpbmFibGVSZXNvdXJjZVRhZ3MoKQogewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OwogICAgIGlmIChzX3RhZ0xpc3QuZ2V0
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5hZGQoU1ZHTmFtZXM6Omxp
bmVhckdyYWRpZW50VGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHNfdGFnTGlzdC5nZXQoKS5h
ZGQoU1ZHTmFtZXM6OmZpbHRlclRhZy0+bG9jYWxOYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUFkanVzdGVyLmNwcAppbmRleCA5NzU4YTI3ODM5YTJiODE4NjQ0YWNlYzJmYzg4YWMxN2Ux
ODMwZmRmLi5lNmFhMWI1Y2QxYmM4OTgzMzQwMTI3NmU1MzZmYWY0MDBjMmQ2Zjg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKQEAgLTQ5Nyw3ICs0OTgsNyBAQCB2b2lkIEFk
anVzdGVyOjphZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdXNl
ckFnZW50QXBwZWFyYW5jZQogc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JE
aXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbAotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+PiB0YWdOYW1lcyA9IFtdIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEhU
TUxRdWFsaWZpZWROYW1lKiBjb25zdCB0YWdMaXN0W10gPSB7CiAgICAgICAgICAgICAmYnJUYWcu
Z2V0KCksCiAgICAgICAgICAgICAmd2JyVGFnLmdldCgpLApAQCAtNTE3LDcgKzUxOCw4IEBAIHN0
YXRpYyBib29sIGhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgICAgICAmdGV4dGFyZWFUYWcuZ2V0KCksCiAgICAg
ICAgICAgICAmc2VsZWN0VGFnLmdldCgpLAogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0
b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkK
ICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4g
c2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCmluZGV4IGU0
YWFhYzA0Njg2YThjMjU4MzgyNTY5NGYyNDI4Zjk5ZTI4YTE3ODcuLjcxMjY4MGE1MGM5ODJkMWMy
MjkwM2VkNDU4YWRkNDNkMTc1NWVjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdQYXJzaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0xMjcsNyArMTI4LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKFN0cmluZ1ZpZXcgc3RyaW5nKQogYm9vbCBT
VkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1
dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRy
aWJ1dGVzKHNldCk7CiAgICAgICAgIHNldC5hZGQoewogICAgICAgICAgICAgU1ZHTmFtZXM6OnZh
bHVlc0F0dHIuZ2V0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggNGYyNzA0ZTQx
MDU2ZWNmNDEzZmQzNWZhMWY5M2ExY2U4ODE3ZWI1NC4uOWMxNDBjYzFkNGUwMzhhNDM2MzhjYjZk
YjJjNmIwY2FhMzQyY2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNTUsMTMg
KzU1LDE0IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChTVkdF
bGVtZW50KTsKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwg
Q1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpCitz
dGF0aWMgTkVWRVJfSU5MSU5FIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxBdG9tU3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9w
ZXJ0eUlETWFwKCkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIHVzaW5n
IG5hbWVzcGFjZSBTVkdOYW1lczsKQEAgLTE0MSwxNiArMTQyLDE2IEBAIHN0YXRpYyBORVZFUl9J
TkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJp
YnV0ZU5hbWVUCiAgICAgICAgICZ5QXR0ci5nZXQoKSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nSW1wbCosIENTU1Byb3BlcnR5SUQ+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQ1NTUHJvcGVydHlJRD4gbWFwOwog
CiAgICAgZm9yIChhdXRvJiBuYW1lIDogYXR0cmlidXRlTmFtZXMpIHsKICAgICAgICAgY29uc3Qg
QXRvbVN0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5h
ZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsKKyAgICAgICAg
bWFwLmFkZChsb2NhbE5hbWUsIGNzc1Byb3BlcnR5SUQobG9jYWxOYW1lKSk7CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IFdoZW4gQ1NTIHN1cHBvcnRzICJ0cmFuc2Zvcm0tb3JpZ2luIiB0aGlzIHNw
ZWNpYWwgY2FzZSBjYW4gYmUgcmVtb3ZlZCwKICAgICAvLyBhbmQgd2UgY2FuIGFkZCB0cmFuc2Zv
cm1fb3JpZ2luQXR0ciB0byB0aGUgdGFibGUgYWJvdmUgaW5zdGVhZC4KLSAgICBtYXAuYWRkKHRy
YW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUoKS5pbXBsKCksIENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luKTsKKyAgICBtYXAuYWRkKHRyYW5zZm9ybV9vcmlnaW5BdHRyLT5sb2NhbE5hbWUo
KSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOwogCiAgICAgcmV0dXJuIG1hcDsKIH0KQEAg
LTcyNCw3ICs3MjUsNyBAQCBRdWFsaWZpZWROYW1lIFNWR0VsZW1lbnQ6OmFuaW1hdGFibGVBdHRy
aWJ1dGVGb3JOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZQogICAgICAgICAgICAgJlNW
R05hbWVzOjp6QXR0ci5nZXQoKSwKICAgICAgICAgICAgICZTVkdOYW1lczo6aHJlZkF0dHIuZ2V0
KCksCiAgICAgICAgIH07Ci0gICAgICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFt
ZT4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUg
OiBuYW1lcykgewogICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKG5hbWUtPmxv
Y2FsTmFtZSgpLCAqbmFtZSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtNzgwLDcgKzc4MSw3IEBAIENTU1Byb3BlcnR5SUQg
U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYKICAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKIAogICAgIHN0YXRp
YyBjb25zdCBhdXRvIHByb3BlcnRpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlQXR0cmli
dXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCgpKTsKLSAgICByZXR1cm4gcHJvcGVydGllcy5nZXQo
KS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydGll
cy5nZXQoKS5nZXQoYXR0ck5hbWUubG9jYWxOYW1lKCkpOwogfQogCiBib29sIFNWR0VsZW1lbnQ6
OmlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcAppbmRleCAxZDJjZDk3OGVkMTMyMzZkNmFlNmE3OGFkNmI3
NGM2MDI4NzExNzJmLi5jNTgyMzEwYWZhZGNlNWYyYjY1NzA5OTZhNWZhNDQ1NTYxZThlZjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNWR1Rlc3Rz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IG1fY29udGV4dEVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgp
OwogfQogCi12b2lkIFNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4mIHN1cHBvcnRlZEF0dHJpYnV0ZXMpCit2b2lkIFNWR1Rlc3RzOjphZGRTdXBw
b3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKIHsKICAgICBzdXBwb3J0ZWRBdHRy
aWJ1dGVzLmFkZChyZXF1aXJlZEZlYXR1cmVzQXR0cik7CiAgICAgc3VwcG9ydGVkQXR0cmlidXRl
cy5hZGQocmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGVzdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCmluZGV4IGE5
YzJhY2UwYTMwYzQ1MGU5ZDlkMjgxOTExNTI5NzZjNTIyYThjNWIuLjBjMjUyMTY2YWFkYTI2YWIx
Zjk2YjhhNDExZTJhYjBiMzlkOTk1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oCkBAIC0yMyw2ICsy
Myw3IEBACiAKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiU1ZHU3RyaW5n
TGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDMsNyArNDQsNyBAQCBjbGFzcyBTVkdUZXN0cyB7CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaGFzRmVhdHVyZUZvckxlZ2FjeUJpbmRpbmdzKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IGUwNWZiNTNjMDE5OTcxNmIzNDU2Zjc3MmRlYjk4NWZl
YjBmMGM3MTEuLmZhNzUzOTI4NzgyYTNjNDNkM2EyNDIyMmI4ZjRmYjM3NzExMTExMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNzcsMTQgKzE3OCwxNCBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQo
KQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCiB7CiAgICAgLy8gU3BlYzogIkFueSAnc3Zn
JywgJ3N5bWJvbCcsICdnJywgZ3JhcGhpY3MgZWxlbWVudCBvciBvdGhlciAndXNlJyBpcyBwb3Rl
bnRpYWxseSBhIHRlbXBsYXRlIG9iamVjdCB0aGF0IGNhbiBiZSByZS11c2VkCiAgICAgLy8gKGku
ZS4sICJpbnN0YW5jZWQiKSBpbiB0aGUgU1ZHIGRvY3VtZW50IHZpYSBhICd1c2UnIGVsZW1lbnQu
IgogICAgIC8vICJHcmFwaGljcyBFbGVtZW50IiBpcyBkZWZpbmVkIGFzICdjaXJjbGUnLCAnZWxs
aXBzZScsICdpbWFnZScsICdsaW5lJywgJ3BhdGgnLCAncG9seWdvbicsICdwb2x5bGluZScsICdy
ZWN0JywgJ3RleHQnCiAgICAgLy8gRXhjbHVkZWQgYXJlIGFueXRoaW5nIHRoYXQgaXMgdXNlZCBi
eSByZWZlcmVuY2Ugb3IgdGhhdCBvbmx5IG1ha2Ugc2Vuc2UgdG8gYXBwZWFyIG9uY2UgaW4gYSBk
b2N1bWVudC4KICAgICB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0gICAgSGFzaFNldDxBdG9t
U3RyaW5nPiBzZXQ7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PEF0b21TdHJpbmc+IHNldDsKICAgICBmb3IgKGF1dG8mIHRhZyA6IHsgYVRhZy5nZXQoKSwgY2ly
Y2xlVGFnLmdldCgpLCBkZXNjVGFnLmdldCgpLCBlbGxpcHNlVGFnLmdldCgpLCBnVGFnLmdldCgp
LCBpbWFnZVRhZy5nZXQoKSwgbGluZVRhZy5nZXQoKSwgbWV0YWRhdGFUYWcuZ2V0KCksIHBhdGhU
YWcuZ2V0KCksIHBvbHlnb25UYWcuZ2V0KCksIHBvbHlsaW5lVGFnLmdldCgpLCByZWN0VGFnLmdl
dCgpLCBzdmdUYWcuZ2V0KCksIHN3aXRjaFRhZy5nZXQoKSwgc3ltYm9sVGFnLmdldCgpLCB0ZXh0
VGFnLmdldCgpLCB0ZXh0UGF0aFRhZy5nZXQoKSwgdGl0bGVUYWcuZ2V0KCksIHRyZWZUYWcuZ2V0
KCksIHRzcGFuVGFnLmdldCgpLCB1c2VUYWcuZ2V0KCkgfSkKICAgICAgICAgc2V0LmFkZCh0YWcu
bG9jYWxOYW1lKCkpOwogICAgIHJldHVybiBzZXQ7CkBAIC0xOTIsNyArMTkzLDcgQEAgc3RhdGlj
IEhhc2hTZXQ8QXRvbVN0cmluZz4gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNEaXNhbGxvd2VkRWxlbWVudChjb25zdCBTVkdFbGVtZW50JiBlbGVtZW50
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiBzZXQg
PSBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9
IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CiAgICAgcmV0dXJuICFzZXQuZ2V0KCkuY29udGFp
bnMoZWxlbWVudC5sb2NhbE5hbWUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggNjgxOTFiOTRhNDAwMTA1ZmIyNmExNjky
ZTZmMDJkYjU3OGNiYWVjZC4uZTM0YTFhZTc2ZGE0YWZkNjA0OWRiY2E2MGI5MGZjY2Y5MjdlZWY5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYyLDcgKzQ2Myw3IEBAIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQmVnaW5PckVuZChjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5n
LCBCZWdpbk9yRW5kIGJlZ2luCiAKIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIHN0YXRpYyBjb25z
dCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiB7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRl
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBTVkdOYW1lczo6YmVnaW5BdHRyLAogICAg
ICAgICBTVkdOYW1lczo6ZW5kQXR0ciwKICAgICAgICAgU1ZHTmFtZXM6OmR1ckF0dHIsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCA5ZmRmYmE4YjEwMjNhZTY1Y2IyZmY4
YzJmYWY0MjMwNDBhMDM4YTA2Li4xMGYwYzIyZDRiNjdjZTVmZmEzYjgzMDY5Y2JmNDA2MDUxMjFl
ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02NjgsNDQgKzY2OSw0NCBAQCBzdHJ1Y3QgRnVuY3Rpb25NYXBWYWx1
ZSB7CiAgICAgSW50ZXJ2YWwgYXJndW1lbnRDb3VudEludGVydmFsOwogfTsKIAotc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCitzdGF0
aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgRnVuY3Rp
b25NYXBWYWx1ZT4gY3JlYXRlRnVuY3Rpb25NYXAoKQogewogICAgIHN0cnVjdCBGdW5jdGlvbk1h
cHBpbmcgewotICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBBU0NJSUxpdGVyYWwg
bmFtZTsKICAgICAgICAgRnVuY3Rpb25NYXBWYWx1ZSBmdW5jdGlvbjsKICAgICB9OwogCiAgICAg
c3RhdGljIGNvbnN0IEZ1bmN0aW9uTWFwcGluZyBmdW5jdGlvbnNbXSA9IHsKLSAgICAgICAgeyAi
Ym9vbGVhbiIsIHsgY3JlYXRlRnVuY3Rpb25Cb29sZWFuLCAxIH0gfSwKLSAgICAgICAgeyAiY2Vp
bGluZyIsIHsgY3JlYXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKLSAgICAgICAgeyAiY29uY2F0
IiwgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwgSW50ZXJ2YWw6OkluZikgfSB9
LAotICAgICAgICB7ICJjb250YWlucyIsIHsgY3JlYXRlRnVuY3Rpb25Db250YWlucywgMiB9IH0s
Ci0gICAgICAgIHsgImNvdW50IiwgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKLSAgICAg
ICAgeyAiZmFsc2UiLCB7IGNyZWF0ZUZ1bmN0aW9uRmFsc2UsIDAgfSB9LAotICAgICAgICB7ICJm
bG9vciIsIHsgY3JlYXRlRnVuY3Rpb25GbG9vciwgMSB9IH0sCi0gICAgICAgIHsgImlkIiwgeyBj
cmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKLSAgICAgICAgeyAibGFuZyIsIHsgY3JlYXRlRnVuY3Rp
b25MYW5nLCAxIH0gfSwKLSAgICAgICAgeyAibGFzdCIsIHsgY3JlYXRlRnVuY3Rpb25MYXN0LCAw
IH0gfSwKLSAgICAgICAgeyAibG9jYWwtbmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUs
IEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZSIsIHsgY3JlYXRlRnVuY3Rpb25O
YW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5hbWVzcGFjZS11cmkiLCB7IGNy
ZWF0ZUZ1bmN0aW9uTmFtZXNwYWNlVVJJLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsg
Im5vcm1hbGl6ZS1zcGFjZSIsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2
YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJub3QiLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0g
fSwKLSAgICAgICAgeyAibnVtYmVyIiwgeyBjcmVhdGVGdW5jdGlvbk51bWJlciwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAotICAgICAgICB7ICJwb3NpdGlvbiIsIHsgY3JlYXRlRnVuY3Rpb25Qb3NpdGlv
biwgMCB9IH0sCi0gICAgICAgIHsgInJvdW5kIiwgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0g
fSwKLSAgICAgICAgeyAic3RhcnRzLXdpdGgiLCB7IGNyZWF0ZUZ1bmN0aW9uU3RhcnRzV2l0aCwg
MiB9IH0sCi0gICAgICAgIHsgInN0cmluZyIsIHsgY3JlYXRlRnVuY3Rpb25TdHJpbmcsIEludGVy
dmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3RyaW5nLWxlbmd0aCIsIHsgY3JlYXRlRnVuY3Rp
b25TdHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAic3Vic3RyaW5n
IiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZywgSW50ZXJ2YWwoMiwgMykgfSB9LAotICAgICAg
ICB7ICJzdWJzdHJpbmctYWZ0ZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIg
fSB9LAotICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIiwgeyBjcmVhdGVGdW5jdGlvblN1YnN0
cmluZ0JlZm9yZSwgMiB9IH0sCi0gICAgICAgIHsgInN1bSIsIHsgY3JlYXRlRnVuY3Rpb25TdW0s
IDEgfSB9LAotICAgICAgICB7ICJ0cmFuc2xhdGUiLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRl
LCAzIH0gfSwKLSAgICAgICAgeyAidHJ1ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcnVlLCAwIH0gfSwK
KyAgICAgICAgeyAiYm9vbGVhbiJfcywgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9LAor
ICAgICAgICB7ICJjZWlsaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ2VpbGluZywgMSB9IH0sCisg
ICAgICAgIHsgImNvbmNhdCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvbmNhdCwgSW50ZXJ2YWwoMiwg
SW50ZXJ2YWw6OkluZikgfSB9LAorICAgICAgICB7ICJjb250YWlucyJfcywgeyBjcmVhdGVGdW5j
dGlvbkNvbnRhaW5zLCAyIH0gfSwKKyAgICAgICAgeyAiY291bnQiX3MsIHsgY3JlYXRlRnVuY3Rp
b25Db3VudCwgMSB9IH0sCisgICAgICAgIHsgImZhbHNlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmFs
c2UsIDAgfSB9LAorICAgICAgICB7ICJmbG9vciJfcywgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAx
IH0gfSwKKyAgICAgICAgeyAiaWQiX3MsIHsgY3JlYXRlRnVuY3Rpb25JZCwgMSB9IH0sCisgICAg
ICAgIHsgImxhbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25MYW5nLCAxIH0gfSwKKyAgICAgICAgeyAi
bGFzdCJfcywgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAorICAgICAgICB7ICJsb2NhbC1u
YW1lIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTG9jYWxOYW1lLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgIm5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lLCBJbnRlcnZhbCgwLCAxKSB9
IH0sCisgICAgICAgIHsgIm5hbWVzcGFjZS11cmkiX3MsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3Bh
Y2VVUkksIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uTm9ybWFsaXplU3BhY2UsIEludGVydmFsKDAsIDEpIH0gfSwKKyAg
ICAgICAgeyAibm90Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTm90LCAxIH0gfSwKKyAgICAgICAgeyAi
bnVtYmVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCisg
ICAgICAgIHsgInBvc2l0aW9uIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUG9zaXRpb24sIDAgfSB9LAor
ICAgICAgICB7ICJyb3VuZCJfcywgeyBjcmVhdGVGdW5jdGlvblJvdW5kLCAxIH0gfSwKKyAgICAg
ICAgeyAic3RhcnRzLXdpdGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwK
KyAgICAgICAgeyAic3RyaW5nIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3RyaW5nLCBJbnRlcnZhbCgw
LCAxKSB9IH0sCisgICAgICAgIHsgInN0cmluZy1sZW5ndGgiX3MsIHsgY3JlYXRlRnVuY3Rpb25T
dHJpbmdMZW5ndGgsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9IH0sCisgICAgICAg
IHsgInN1YnN0cmluZy1hZnRlciJfcywgeyBjcmVhdGVGdW5jdGlvblN1YnN0cmluZ0FmdGVyLCAy
IH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWJlZm9yZSJfcywgeyBjcmVhdGVGdW5jdGlvblN1
YnN0cmluZ0JlZm9yZSwgMiB9IH0sCisgICAgICAgIHsgInN1bSJfcywgeyBjcmVhdGVGdW5jdGlv
blN1bSwgMSB9IH0sCisgICAgICAgIHsgInRyYW5zbGF0ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRy
YW5zbGF0ZSwgMyB9IH0sCisgICAgICAgIHsgInRydWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25UcnVl
LCAwIH0gfSwKICAgICB9OwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+
IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBGdW5jdGlvbk1hcFZhbHVlPiBtYXA7CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0
aW9ucykKICAgICAgICAgbWFwLmFkZChmdW5jdGlvbi5uYW1lLCBmdW5jdGlvbi5mdW5jdGlvbik7
CiAgICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCmluZGV4IGRmYjQ5
ZjhiMmZlMjUzZTNhZGViZDZiNjE2NTRkMGM3OTBkNTg5NTAuLjg5ZjdlZDlkNzIyZjJhOWZjMTU5
YzlkZDViZWZmZDAzYzEzN2ZhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlhQYXRoUGF0aC5oIgogI2luY2x1ZGUgIlhQYXRoU3Rl
cC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtNzYsMjggKzc3LDI4IEBAIHN0YXRpYyBYTUxD
YXQgY2hhckNhdChVQ2hhciBjaGFyYWN0ZXIpCiAgICAgcmV0dXJuIE5vdFBhcnRPZk5hbWU7CiB9
CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RlcDo6QXhpcz4gY3JlYXRlQXhpc05hbWVzTWFw
KCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBTdGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQogewogICAgIHN0cnVjdCBBeGlzTmFt
ZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1l
OwogICAgICAgICBTdGVwOjpBeGlzIGF4aXM7CiAgICAgfTsKICAgICBjb25zdCBBeGlzTmFtZSBh
eGlzTmFtZUxpc3RbXSA9IHsKLSAgICAgICAgeyAiYW5jZXN0b3IiLCBTdGVwOjpBbmNlc3RvckF4
aXMgfSwKLSAgICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiIsIFN0ZXA6OkFuY2VzdG9yT3JTZWxm
QXhpcyB9LAotICAgICAgICB7ICJhdHRyaWJ1dGUiLCBTdGVwOjpBdHRyaWJ1dGVBeGlzIH0sCi0g
ICAgICAgIHsgImNoaWxkIiwgU3RlcDo6Q2hpbGRBeGlzIH0sCi0gICAgICAgIHsgImRlc2NlbmRh
bnQiLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAotICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNl
bGYiLCBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcyB9LAotICAgICAgICB7ICJmb2xsb3dpbmci
LCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIiwg
U3RlcDo6Rm9sbG93aW5nU2libGluZ0F4aXMgfSwKLSAgICAgICAgeyAibmFtZXNwYWNlIiwgU3Rl
cDo6TmFtZXNwYWNlQXhpcyB9LAotICAgICAgICB7ICJwYXJlbnQiLCBTdGVwOjpQYXJlbnRBeGlz
IH0sCi0gICAgICAgIHsgInByZWNlZGluZyIsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKLSAgICAg
ICAgeyAicHJlY2VkaW5nLXNpYmxpbmciLCBTdGVwOjpQcmVjZWRpbmdTaWJsaW5nQXhpcyB9LAot
ICAgICAgICB7ICJzZWxmIiwgU3RlcDo6U2VsZkF4aXMgfQorICAgICAgICB7ICJhbmNlc3RvciJf
cywgU3RlcDo6QW5jZXN0b3JBeGlzIH0sCisgICAgICAgIHsgImFuY2VzdG9yLW9yLXNlbGYiX3Ms
IFN0ZXA6OkFuY2VzdG9yT3JTZWxmQXhpcyB9LAorICAgICAgICB7ICJhdHRyaWJ1dGUiX3MsIFN0
ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKKyAgICAgICAgeyAiY2hpbGQiX3MsIFN0ZXA6OkNoaWxkQXhp
cyB9LAorICAgICAgICB7ICJkZXNjZW5kYW50Il9zLCBTdGVwOjpEZXNjZW5kYW50QXhpcyB9LAor
ICAgICAgICB7ICJkZXNjZW5kYW50LW9yLXNlbGYiX3MsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZB
eGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZyJfcywgU3RlcDo6Rm9sbG93aW5nQXhpcyB9LAor
ICAgICAgICB7ICJmb2xsb3dpbmctc2libGluZyJfcywgU3RlcDo6Rm9sbG93aW5nU2libGluZ0F4
aXMgfSwKKyAgICAgICAgeyAibmFtZXNwYWNlIl9zLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCisg
ICAgICAgIHsgInBhcmVudCJfcywgU3RlcDo6UGFyZW50QXhpcyB9LAorICAgICAgICB7ICJwcmVj
ZWRpbmciX3MsIFN0ZXA6OlByZWNlZGluZ0F4aXMgfSwKKyAgICAgICAgeyAicHJlY2VkaW5nLXNp
YmxpbmciX3MsIFN0ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCisgICAgICAgIHsgInNlbGYi
X3MsIFN0ZXA6OlNlbGZBeGlzIH0KICAgICB9OwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpB
eGlzPiBtYXA7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0
cmluZywgU3RlcDo6QXhpcz4gbWFwOwogICAgIGZvciAoYXV0byYgYXhpc05hbWUgOiBheGlzTmFt
ZUxpc3QpCiAgICAgICAgIG1hcC5hZGQoYXhpc05hbWUubmFtZSwgYXhpc05hbWUuYXhpcyk7CiAg
ICAgcmV0dXJuIG1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg3YmQyOGViNDhhZTI0MDA2NTU4ZThmZjhlYWFmN2U2
N2YxODQ0MTEuLjZkYzYzMWI3ODkzNDgzMjY0ZTBjNWEwOWM3ZWJiZTNkY2RjZTdlMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApAQCAtNDksOCArNDksOCBAQAogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0yNzQsMTgg
KzI3NCwxOCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1h
VjEoKQogCiBzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFB
bHRlcm5hdGUoKQogewotICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5z
XCIgKGRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQg
Tk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEws
IGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEws
IGlzUHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5P
VCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxM
LGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCki
OworICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFIFwiT2JzZXJ2ZWREb21haW5zXCIgKGRvbWFpbklE
IElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9UIE5VTEwgVU5J
UVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsIGhhZFVzZXJJbnRl
cmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBS
RUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsIGlzUHJldmFsZW50
IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRh
UmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCx0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMLGlzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7CiB9CiAKIHN0
YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1ucygp
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChW
ZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWluSUQiLCAiZGVzdGluYXRpb25TaXRlRG9t
YWluSUQiLCAic291cmNlSUQiLCAidGltZU9mQWRDbGljayIsICJ0b2tlbiIsICJzaWduYXR1cmUi
LCAia2V5SUQiIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJ0
b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCiBzdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZEF0dHJp
YnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJkZXN0
aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
IiwgInByaW9yaXR5IiwgInRpbWVPZkFkQ2xpY2siLCAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3Vy
Y2UiLCAidG9rZW4iLCAic2lnbmF0dXJlIiwgImtleUlEIiwgImVhcmxpZXN0VGltZVRvU2VuZFRv
RGVzdGluYXRpb24iIH0pOworICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgImF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEiX3MsICJwcmlvcml0eSJfcywgInRpbWVPZkFkQ2xpY2siX3MsICJlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MsICJl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIl9zIH0pOwogICAgIHJldHVybiBjb2x1bW5z
LmdldCgpOwogfQogCkBAIC0yOTQsOSArMjk0LDkgQEAgc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVh
dGVUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHNjaGVtYSkKICAgICByZXR1cm4gc2NoZW1hLmNv
bnRhaW5zKCJSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwogfQogCi1zdGF0aWMgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGNyZWF0ZVRhYmxlUXVlcmllcygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgY3JlYXRlVGFibGVRdWVyaWVzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjcmVhdGVUYWJsZVF1
ZXJpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geworICAg
IHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKICAg
ICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBjcmVhdGVPYnNlcnZlZERvbWFpbn0sCiAgICAg
ICAgIHsgIlRvcExldmVsRG9tYWlucyJfcywgY3JlYXRlVG9wTGV2ZWxEb21haW5zfSwKICAgICAg
ICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBjcmVhdGVTdG9yYWdl
QWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnN9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZTQ4ZTgzMjZhMmE3MzVlZjkyNGY4NzM3MmRjNzg2Mzlk
ODIzOTMzMC4uYmIyYjNjNDYwMWMwZTM4NzJhY2MxYWUzM2M5NTg3YzQ4MjNiZmQzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00OTcsOCArNDk3
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4gc3RydWN0IEFyZ3VtZW50Q29kZXI8VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pj4gOiBWZWN0b3JBcmd1bWVudENvZGVyPHN0ZDo6
aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUsIFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5PiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIEhhc2hUYWJsZVRy
YWl0cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhhc2hNYXBUeXBlOwogCiAg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBl
JiBoYXNoTWFwKQogICAgIHsKQEAgLTUxNCw2ICs1MTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBIYXNoTWFw
VHlwZSBoYXNoTWFwOworICAgICAgICBoYXNoTWFwLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaGFz
aE1hcFNpemUpOwogICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaGFzaE1hcFNpemU7
ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7CiAgICAgICAgICAgICBk
ZWNvZGVyID4+IGtleTsKQEAgLTU1MSw4ICs1NTIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aQogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtl
eUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4gewotICAgIHR5cGVkZWYgSGFzaFNldDxLZXlB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaFNldFR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoU2V0PEtleUFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+PiB7CisgICAgdHlwZWRlZiBI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBIYXNoVGFibGVUcmFpdHM+IEhh
c2hTZXRUeXBlOwogCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IEhhc2hTZXRUeXBlJiBoYXNoU2V0KQogICAgIHsKQEAgLTU3OSw2ICs1ODAsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZz4gc3RydWN0IEFyZ3VtZQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgICAgICBIYXNoU2V0VHlwZSBoYXNoU2V0OworICAgICAgICBoYXNoU2V0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaGFzaFNldFNpemUpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBp
IDwgaGFzaFNldFNpemU7ICsraSkgewogICAgICAgICAgICAgT3B0aW9uYWw8S2V5QXJnPiBrZXk7
CiAgICAgICAgICAgICBkZWNvZGVyID4+IGtleTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KaW5kZXggNDkyYjljNjQ0MmJl
MTU0ZDUxZGRmNzY5ZjU5M2U4MDg0ZWIxYmQ2ZC4uOWE0ZDc4MDllNjNlNDg1MjQyNWYyMDU3Yzg2
MDEzMmE1OGE1YTU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVm
YXVsdFdlYkJyb3dzZXJDaGVja3MubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2Ev
RGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvVmVyc2lvbkNoZWNrcy5oPgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNp
bXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KQEAgLTU4LDcgKzU5LDcgQEAgT3B0aW9uYWw8VmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gZ2V0QXBwQm91bmREb21haW5zVGVzdGluZyhj
b25zdCBTdHIKICAgICBpZiAoYnVuZGxlSUQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4+IHsKKyAgICBzdGF0aWMgYXV0byBhcHBCb3VuZERvbWFpbkxpc3QgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4gewogICAgICAgICB7ImluQXBwQnJv
d3NlclByaXZhY3lUZXN0SWRlbnRpZmllciJfcywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiB7IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoIjEyNy4wLjAuMSIpIH19LAogICAgIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwCmluZGV4IGJiY2VlNDE2
OTljMGQ1Zjg0ZGM2Yzc5MmFiNjQ0YzZmZGQ4MWQwZDcuLmNlNTZmOWNkNDYyODYwOTRjNmU0MTQx
MGVlYmI0Zjk0OWQ3ZWZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuY3BwCkBAIC01MiwxMyArNTIsMTMgQEAgdm9pZCBXZWJQcmVmZXJlbmNlc1N0b3Jl
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiBib29sIFdlYlByZWZlcmVu
Y2VzU3RvcmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYlByZWZlcmVuY2VzU3Rv
cmUmIHJlc3VsdCkKIHsKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmluZywgVmFsdWU+PiB2YWx1
ZXM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IHZhbHVlczsKICAgICBkZWNvZGVyID4+IHZhbHVl
czsKICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5t
X3ZhbHVlcyA9IFdURk1vdmUoKnZhbHVlcyk7CiAKLSAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmlu
ZywgVmFsdWU+PiBvdmVycmlkZGVuRGVmYXVsdHM7CisgICAgT3B0aW9uYWw8VmFsdWVNYXA+IG92
ZXJyaWRkZW5EZWZhdWx0czsKICAgICBkZWNvZGVyID4+IG92ZXJyaWRkZW5EZWZhdWx0czsKICAg
ICBpZiAoIW92ZXJyaWRkZW5EZWZhdWx0cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IGM1ZmUzZmIzZmJiNjIx
NmRlYmUwMDA5ZGY1NTBjNWNhNmQ2ZjM2MDguLjRhM2Q4ZjJhNGU0Y2YwYzc4MWU5NzIyZjc3OTdk
ZjM2MTA2YzgxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJF
bmNvZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgV2ViUHJl
ZmVyZW5jZXNTdG9yZSB7CiAKICAgICB1c2luZyBWYWx1ZSA9IFZhcmlhbnQ8U3RyaW5nLCBib29s
LCB1aW50MzJfdCwgZG91YmxlPjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZhbHVl
PiBWYWx1ZU1hcDsKKyAgICB1c2luZyBWYWx1ZU1hcCA9IE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgVmFsdWU+OwogICAgIFZhbHVlTWFwIG1fdmFsdWVzOwogICAgIFZhbHVl
TWFwIG1fb3ZlcnJpZGRlbkRlZmF1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDJmMGFhYjVhOWI3ODI0
M2U5NzQ5NGI3NTQxNDQxY2E0ZTEzZjNiODcuLjA0MTc0OGI5MDQ0YWQyNTM2ODhlYWFjZWJhZjlh
OGZlNmU3ZjAwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC02NSw5ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdGF0aWMgY29uc3QgU2Vjb25kcyB1bmV4cGVjdGVkQWN0aXZpdHlEdXJhdGlvbiA9
IDEwX3M7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9y
bVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKK2NvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0
aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFN0cmluZz4+IHBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Moc3RkOjpp
bml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CiAg
ICAgICAgIFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3Jl
Il0ucmVzb3VyY2VQYXRoLnN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGgsCiAgICAgICAgIFtOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXS5yZXNvdXJjZVBh
dGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aAogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggNWE2NjIwMjI5MTMwNGJiZDczN2UxMTZi
ODg3YWM0Zjk5NjNhZjE0Yy4uNTlkODAwYWZiNDNiNzQ1MDM5YjBiNDgzMzUxZTQ4NDIzYzUzYTM2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC0x
NjI0LDkgKzE2MjQsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlQmFja2dyb3VuZFJl
c3BvbnNpdmVuZXNzVGltZXIoKQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJl
YWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxh
dGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IHBsYXRm
b3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiAgICAgcmV0dXJuIHBsYXRmb3JtUGF0aHNX
aXRoQXNzdW1lZFJlYWRBY2Nlc3M7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggNjhkNjZjNjE1ZWJhNmU5N2IwYTNjODBkNDM0YjFiMTE0
OGIyZDA3Yy4uYWIxMzU1NTk2ZDU3MzM2NzFmZDMyMmUwNmMzMjUwMjZhOTc0OTMwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTU5LDYgKzU5LDcgQEAK
ICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogI2lmIEhBVkUoVklTSUJJTElUWV9QUk9Q
QUdBVElPTl9WSUVXKQpAQCAtNDc2LDcgKzQ3Nyw3IEBAIGNsYXNzIFdlYlByb2Nlc3NQcm94eSA6
IHB1YmxpYyBBdXhpbGlhcnlQcm9jZXNzUHJveHksIHB1YmxpYyBSZXNwb25zaXZlbmVzc1RpbWVy
CiAgICAgYm9vbCBwbGF0Zm9ybUlzQmVpbmdEZWJ1Z2dlZCgpIGNvbnN0OwogICAgIGJvb2wgc2hv
dWxkQWxsb3dOb25WYWxpZEluamVjdGVkQ29kZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwor
ICAgIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPiYgcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpOwogCiAgICAgUmVz
cG9uc2l2ZW5lc3NUaW1lciYgcmVzcG9uc2l2ZW5lc3NUaW1lcigpIHsgcmV0dXJuIG1fcmVzcG9u
c2l2ZW5lc3NUaW1lcjsgfQogICAgIHZvaWQgdXBkYXRlQmFja2dyb3VuZFJlc3BvbnNpdmVuZXNz
VGltZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA0OTQ3YWZmNDA0N2U4YTFhNzA3MDk5ZWVjZjc4YzA4MmZlNzMzMTk2Li5hN2UwN2ZhMTc0
OWViMGYzNjEzMDg3YTMxZWQwZmNmYmJhZjE5Njg2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMDEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1
Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9y
Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdFbnN1cmUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRl
VGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJh
dGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhv
b2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
SGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpaZXJv
SGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPYmplY3RXaXRoUmVmTG9nZ2Vy
OjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RNb3Zp
bmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdB
ZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6VGVzdE9iamVjdFdpdGhD
dXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRo
Q3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHA6IENvcGll
ZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Y2FwYWNpdHlGb3JTaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnRlc3RJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJh
dGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5l
cmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKwogMjAyMS0wMy0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFNlcnZpY2UgV29ya2VyIHNj
cmlwdHMgdXNlIHRvbyBtdWNoIG1lbW9yeSBpbiB0aGUgbmV0d29yayBwcm9jZXNzCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCA5YzU1ZTRmNmVhYThlNWJhYWFkYTEyMjU2NjIwNTll
ZGY2MjVjZDBlLi4zZjdjZmZkZTI5MWMyZDgyZGQxMjUxYmJlYzhjODEzMTEyN2ZiZWZlIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTc5LDYgKzc5LDggQEAgc2V0KFRlc3RXVEZf
U09VUkNFUwogICAgIFRlc3RzL1dURi9SZWZDb3VudGVyLmNwcAogICAgIFRlc3RzL1dURi9SZWZM
b2dnZXIuY3BwCiAgICAgVGVzdHMvV1RGL1JlZlB0ci5jcHAKKyAgICBUZXN0cy9XVEYvUm9iaW5I
b29kSGFzaE1hcC5jcHAKKyAgICBUZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAKICAgICBU
ZXN0cy9XVEYvUnVuTG9vcC5jcHAKICAgICBUZXN0cy9XVEYvU0hBMS5jcHAKICAgICBUZXN0cy9X
VEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGZiYTAzMmM4NTgzYjlmMTg3ODgxOGJhNjQ5NjkzNDZjNGUwNGI3MzMuLmE5Yzc0ODEy
OGEzODg0ZjkxZTBhYzdkNDMyNjliZDBjMmVlNWRlZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMTEyLDYgKzExMTIsOCBAQAogCQlFMzI1QzkwNzIzRTM4NzAyMDBCQzdEM0IgLyogUGlj
dHVyZUluUGljdHVyZVN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMzI1QzkwNjIzRTM4NzAyMDBCQzdEM0IgLyogUGljdHVyZUluUGljdHVy
ZVN1cHBvcnQubW0gKi87IH07CiAJCUUzMkI1NDkyMjI4MTBBQzQwMDhBRDcwMiAvKiBQYWNrZWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyQjU0
OTEyMjgxMEFDMDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgKi87IH07CiAJCUUzNEE2RDE5MjQxMkRF
MzkwMDEyQUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0QTZEMTgyNDEyREUzOTAw
MTJBQjZFIC8qIEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZpY2UubW0gKi87IH07CisJCUUz
NTVBNjMwMjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVBNjJGMjYxNTcxNzQwMDFD
MTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAqLzsgfTsKKwkJRTM1NUE2MzIyNjE1NzE4RjAw
MUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUE2MzEyNjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9v
ZEhhc2hNYXAuY3BwICovOyB9OwogCQlFMzVCOTA4MjIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxp
emVkRGV2aWNlTW9kZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzVCOTA4MTIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxpemVkRGV2aWNlTW9kZWwu
bW0gKi87IH07CiAJCUUzNUZDN0IyMjJCODJBNzMwMEYzMkY5OCAvKiBKU0xvY2tUYWtlc1dlYlRo
cmVhZExvY2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzVGQzdCMTIyQjgyQTZEMDBGMzJGOTggLyogSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1t
ICovOyB9OwogCQlFMzczRDc5MTFGMkNGMzUyMDBDNkZBQUYgLyogU2lnbmFscy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzk1M0Y5NTFGMkNGMzIx
MDBBNzZBMkUgLyogU2lnbmFscy5jcHAgKi87IH07CkBAIC0yODk5LDYgKzI5MDEsOCBAQAogCQlF
MzI1QzkwNjIzRTM4NzAyMDBCQzdEM0IgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQjU0OTEyMjgxMEFDMDAwOEFENzAyIC8qIFBhY2tlZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWNrZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzRBNkQxODI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZlcmVu
Y2VzU2VydmljZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyYW50QWNjZXNzVG9QcmVmZXJl
bmNlc1NlcnZpY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTVBNjJGMjYx
NTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMzU1QTYzMTI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1h
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSb2Jpbkhvb2RIYXNo
TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1QjkwODEyM0Y2MEREMDAw
MDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
TG9jYWxpemVkRGV2aWNlTW9kZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NUZDN0IxMjJCODJBNkQwMEYzMkY5OCAvKiBKU0xvY2tUYWtlc1dlYlRocmVhZExvY2subW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0xvY2tUYWtlc1dlYlRocmVh
ZExvY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODg4ODcwMjBDOTA5ODEw
MEU2MzJCQyAvKiBXb3JrZXJQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdvcmtlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQw
Miw2ICs0NDA2LDggQEAKIAkJCQk0NDJCQkY2ODFDOTFDQUQ5MDAxNzA4N0YgLyogUmVmTG9nZ2Vy
LmNwcCAqLywKIAkJCQk5M0E0MjdBRDE4MERBNjBGMDBDRDI0RDcgLyogUmVmTG9nZ2VyLmggKi8s
CiAJCQkJOTNBNDI3QTgxODBEOUIwNzAwQ0QyNEQ3IC8qIFJlZlB0ci5jcHAgKi8sCisJCQkJRTM1
NUE2MzEyNjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwICovLAorCQkJCUUz
NTVBNjJGMjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAqLywKIAkJCQlF
NEM5QUJDNzFCM0RCMTcxMDA0MEE5ODcgLyogUnVuTG9vcC5jcHAgKi8sCiAJCQkJMTRGM0IxMTIx
NUU0NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywK
IAkJCQkxQTM1MjRBQzFENjNBNEZCMDAzMTcyOUIgLyogU2NvcGUuY3BwICovLApAQCAtNTE0OCw2
ICs1MTU0LDggQEAKIAkJCQk3QzgzREYxNjFEMEE1OTBDMDBGRUJDRjMgLyogUmVmUHRyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQ0QUM4QkM2MjFEMDI0NUEwMENBRkIzNCAvKiBSZXRhaW5QdHIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJldGFp
blB0ci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUzNTVBNjMyMjYxNTcxOEYwMDFDMTEyOSAvKiBS
b2Jpbkhvb2RIYXNoTWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNTVBNjMwMjYxNTcxNzQw
MDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RjA1MUQwQTU5MEMwMEZFQkNGMyAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
ODNERjI2MUQwQTU5MEMwMEZFQkNGMyAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM1MjRBRTFENjNBNEZCMDAzMTcyOUIgLyogU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCmluZGV4IDQ1Y2NmYTQwMzBlMTJhZDNj
NWE2ZGMzNzRjMTViZDllZDMxMDkwMmEuLmZkZmFiZWVjNGJmNGUwZDA3Y2Y4NTBjNDIyYzQxMjRi
NDdlNDcxYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0RlbGV0
ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCkBAIC03Nyw2ICs3Nyw3IEBAIHRlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcj4gewogICAgIH0KIAog
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOyAvLyBU
aGlzIGlzIG5vdCBjb3JyZWN0LCBidXQgZm9yIGRlYnVnZ2luZyBvZiBSb2Jpbkhvb2RIYXNoU2V0
LgogfTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aE1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAppbmRl
eCBhYWJlN2RkYWMyNzczYjZmNzk2ZTIwNDBiMzIyYmU1OWUxZjA3ODZkLi5jODQzZTdjNTVhYjEz
NDNlODAyYWI3ODQ3MDQ3ZjlmODZhNTI0N2I4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9IYXNoTWFwLmNwcApAQCAtNjY4LDE0ICs2NjgsMTQgQEAgY2xhc3MgT2JqZWN0V2l0aFJl
ZkxvZ2dlciB7CiB9OwogCiAKLXZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJlZjxSZWZMb2dn
ZXI+JiYgbG9nZ2VyKQorc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJlZjxSZWZM
b2dnZXI+JiYgbG9nZ2VyKQogewogICAgIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0
cjxPYmplY3RXaXRoUmVmTG9nZ2VyPj4gbWFwOwogICAgIAogICAgIG1hcC5lbnN1cmUoMSwgWyZd
IHsgcmV0dXJuIG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxvZ2dlcj4oV1RGTW92ZShsb2dnZXIp
KTsgfSk7CiB9CiAKLXZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dnZXI+JiYgbG9n
Z2VyKQorc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dnZXI+JiYgbG9n
Z2VyKQogewogICAgIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RXaXRo
UmVmTG9nZ2VyPj4gbWFwOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9IYXNoU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQu
Y3BwCmluZGV4IGU3Y2ZiY2NhZDFkNDU5Y2Q2NGNhMjEyODg4YTdhOTYyY2Q1ZTMwMzEuLmIwYzY0
OTIyNmVlYTNiY2YzMWUwYjAyODY0ODU3ZWJkNjY0YjdkNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCkBAIC03MCwxMSArNzAsMTEgQEAgdm9pZCB0ZXN0SW5p
dGlhbENhcGFjaXR5KCkKICAgICBFWFBFQ1RfR1Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRlc3RT
ZXQuY2FwYWNpdHkoKSksIGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVk
IHNpemU+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpOwotdGVtcGxhdGU8PiB2
b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4oKQordGVtcGxhdGU8dW5zaWduZWQg
c2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpOwordGVtcGxh
dGU8PiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+KCkKIHsKIH0K
LXRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6
ZSgpCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBh
Y2l0eVVwVG9TaXplKCkKIHsKICAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPHNpemUg
LSAxPigpOwogICAgIHRlc3RJbml0aWFsQ2FwYWNpdHk8c2l6ZT4oKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5oCmluZGV4IGQ5YzIwNmMyOGVjNDlkY2NkMGNmOWQ0MDdh
ZDM3MmZhYzAyNDRiYWQuLmExMGM1ZThmODY1MWU3ZGE2NDJmYzRmZGYwMWQyZTBlOGY1MzU3MDQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmgKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaApAQCAtOTQsNyArOTQs
OCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxNb3ZlT25seT4gewogICAgICAgICBy
ZXR1cm4gYSA9PSBiOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7IC8vIFRoaXMgaXMgbm90IGNvcnJlY3QsIGJ1dCBm
b3IgZGVidWdnaW5nIG9mIFJvYmluSG9vZEhhc2hTZXQuCiB9OwogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhh
c2hNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1h
cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTYwNzQ3ODE0YzdkY2MxMDc5ZGRjODU4NTM3NDc1ZDU3YWUxNDNj
NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmlu
SG9vZEhhc2hNYXAuY3BwCkBAIC0wLDAgKzEsMTI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1ZGUgIkRlbGV0
ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIgorI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisjaW5jbHVkZSAi
UmVmTG9nZ2VyLmgiCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUm9iaW5I
b29kSGFzaCA6IHB1YmxpYyBEZWZhdWx0SGFzaDxUPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK3R5cGVkZWYgV1RGOjpNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBpbnQsIFJvYmluSG9vZEhhc2g8aW50
Pj4gSW50SGFzaE1hcDsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgSGFzaFRhYmxlSXRl
cmF0b3JDb21wYXJpc29uKQoreworICAgIEludEhhc2hNYXAgbWFwOworICAgIG1hcC5hZGQoMSwg
Mik7CisgICAgQVNTRVJUX1RSVUUobWFwLmJlZ2luKCkgIT0gbWFwLmVuZCgpKTsKKyAgICBBU1NF
UlRfRkFMU0UobWFwLmJlZ2luKCkgPT0gbWFwLmVuZCgpKTsKKworICAgIEludEhhc2hNYXA6OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luID0gbWFwLmJlZ2luKCk7CisgICAgQVNTRVJUX1RSVUUoYmVnaW4g
PT0gbWFwLmJlZ2luKCkpOworICAgIEFTU0VSVF9UUlVFKG1hcC5iZWdpbigpID09IGJlZ2luKTsK
KyAgICBBU1NFUlRfVFJVRShiZWdpbiAhPSBtYXAuZW5kKCkpOworICAgIEFTU0VSVF9UUlVFKG1h
cC5lbmQoKSAhPSBiZWdpbik7CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luICE9IG1hcC5iZWdpbigp
KTsKKyAgICBBU1NFUlRfRkFMU0UobWFwLmJlZ2luKCkgIT0gYmVnaW4pOworICAgIEFTU0VSVF9G
QUxTRShiZWdpbiA9PSBtYXAuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuZW5kKCkgPT0g
YmVnaW4pOworfQorCitzdHJ1Y3QgVGVzdERvdWJsZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPGRv
dWJsZT4geworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDg7Cit9Owor
Cit0eXBlZGVmIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxkb3VibGUs
IGludDY0X3QsIFJvYmluSG9vZEhhc2g8ZG91YmxlPiwgVGVzdERvdWJsZUhhc2hUcmFpdHM+IERv
dWJsZUhhc2hNYXA7CisKK3N0YXRpYyBpbnQgYnVja2V0Rm9yS2V5KGRvdWJsZSBrZXkpCit7Cisg
ICAgcmV0dXJuIERlZmF1bHRIYXNoPGRvdWJsZT46Omhhc2goa2V5KSAmIChUZXN0RG91YmxlSGFz
aFRyYWl0czo6bWluaW11bVRhYmxlU2l6ZSAtIDEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQmlnVGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUcmFpdHM8VD4geworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxlQ2FwYWNp
dHlGb3JTaXplPDQwOTY+Ojp2YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBaZXJvSGFzaCA6IHB1YmxpYyBJbnRIYXNoPFQ+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBUJikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNI
YXNoSW5WYWx1ZSA9IHRydWU7Cit9OworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBEb3Vi
bGVIYXNoQ29sbGlzaW9ucykKK3sKKyAgICAvLyBUaGUgImNsb2JiZXIiIGtleSBoZXJlIGlzIG9u
ZSB0aGF0IGVuZHMgdXAgc3RlYWxpbmcgdGhlIGJ1Y2tldCB0aGF0IHRoZSAtMCBrZXkKKyAgICAv
LyBvcmlnaW5hbGx5IHdhbnRzIHRvIGJlIGluLiBUaGlzIG1ha2VzIHRoZSAwIGFuZCAtMCBrZXlz
IGNvbGxpZGUgYW5kIHRoZSB0ZXN0IHRoZW4KKyAgICAvLyBmYWlscyB1bmxlc3MgdGhlIEZsb2F0
SGFzaDo6ZXF1YWxzKCkgaW1wbGVtZW50YXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCisgICAg
Y29uc3QgZG91YmxlIGNsb2JiZXJLZXkgPSA2OworICAgIGNvbnN0IGRvdWJsZSB6ZXJvS2V5ID0g
MDsKKyAgICBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvS2V5ID0gLXplcm9LZXk7CisKKyAgICBE
b3VibGVIYXNoTWFwIG1hcDsKKyAgICBtYXAuYWRkKGNsb2JiZXJLZXksIDEpOworICAgIG1hcC5h
ZGQoemVyb0tleSwgMik7CisgICAgbWFwLmFkZChuZWdhdGl2ZVplcm9LZXksIDMpOworCisgICAg
QVNTRVJUX0VRKGJ1Y2tldEZvcktleShjbG9iYmVyS2V5KSwgYnVja2V0Rm9yS2V5KG5lZ2F0aXZl
WmVyb0tleSkpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KGNsb2JiZXJLZXkpLCAxKTsKKyAgICBB
U1NFUlRfRVEobWFwLmdldCh6ZXJvS2V5KSwgMik7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQobmVn
YXRpdmVaZXJvS2V5KSwgMyk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIE1vdmVP
bmx5VmFsdWVzKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDx1bnNpZ25lZCwgTW92ZU9ubHksIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtb3ZlT25seVZh
bHVlczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAg
TW92ZU9ubHkgbW92ZU9ubHkoaSArIDEpOworICAgICAgICBtb3ZlT25seVZhbHVlcy5zZXQoaSAr
IDEsIFdURk1vdmUobW92ZU9ubHkpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtb3ZlT25seVZhbHVlcy5maW5kKGkg
KyAxKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5VmFsdWVzLmVuZCgpKTsK
KyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDUwOyArK2kpCisgICAgICAgIEFT
U0VSVF9FUShtb3ZlT25seVZhbHVlcy50YWtlKGkgKyAxKS52YWx1ZSgpLCBpICsgMSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gNTA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJUX1RSVUUo
bW92ZU9ubHlWYWx1ZXMucmVtb3ZlKGkgKyAxKSk7CisKKyAgICBBU1NFUlRfVFJVRShtb3ZlT25s
eVZhbHVlcy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBNb3Zl
T25seUtleXMpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PE1vdmVPbmx5LCB1bnNpZ25lZD4gbW92ZU9ubHlLZXlzOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7Cisg
ICAgICAgIG1vdmVPbmx5S2V5cy5zZXQoV1RGTW92ZShtb3ZlT25seSksIGkgKyAxKTsKKyAgICB9
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8g
aXQgPSBtb3ZlT25seUtleXMuZmluZChNb3ZlT25seShpICsgMSkpOworICAgICAgICBBU1NFUlRf
RkFMU0UoaXQgPT0gbW92ZU9ubHlLZXlzLmVuZCgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfRkFMU0UobW92ZU9ubHlLZXlz
LmFkZChNb3ZlT25seShpICsgMSksIGkgKyAxKS5pc05ld0VudHJ5KTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5S2V5
cy5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBBU1NFUlRfVFJVRShtb3ZlT25seUtl
eXMuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgSW5pdGlhbGl6
ZXJMaXN0KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjpzdHJpbmcsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXAgPSB7Cisg
ICAgICAgIHsgMSwgIm9uZSIgfSwKKyAgICAgICAgeyAyLCAidHdvIiB9LAorICAgICAgICB7IDMs
ICJ0aHJlZSIgfSwKKyAgICAgICAgeyA0LCAiZm91ciIgfSwKKyAgICB9OworCisgICAgRVhQRUNU
X0VRKDR1LCBtYXAuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgib25lIiwgbWFwLmdldCgxKSk7
CisgICAgRVhQRUNUX0VRKCJ0d28iLCBtYXAuZ2V0KDIpKTsKKyAgICBFWFBFQ1RfRVEoInRocmVl
IiwgbWFwLmdldCgzKSk7CisgICAgRVhQRUNUX0VRKCJmb3VyIiwgbWFwLmdldCg0KSk7CisgICAg
RVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCksIG1hcC5nZXQoNSkpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBFZmZpY2llbnRHZXR0ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBDb3B5TW92ZUNvdW50ZXIsIFJvYmluSG9v
ZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLnNldCgxLCBDb3B5TW92ZUNvdW50ZXIoKSk7
CisKKyAgICB7CisgICAgICAgIENvcHlNb3ZlQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
ICAgICAgICBtYXAuZ2V0KDEpOworICAgICAgICBFWFBFQ1RfRVEoMFUsIENvcHlNb3ZlQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291
bnRlcjo6Y29weUNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6
Om1vdmVDb3VudCk7CisgICAgfQorCisgICAgeworICAgICAgICBDb3B5TW92ZUNvdW50ZXI6OlRl
c3RpbmdTY29wZSBzY29wZTsKKyAgICAgICAgbWFwLmdldCgyKTsKKyAgICAgICAgRVhQRUNUX0VR
KDFVLCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICAgICAgRVhQRUNU
X0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgx
VSwgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQpOworICAgIH0KK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlx
dWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBtYXAuYWRkKFdURk1vdmUo
dW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgbWFwLmNsZWFy
KCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNv
bnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBVbmlxdWVQdHJLZXlfQ3VzdG9tRGVsZXRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgY29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlclNj
b3BlOworICAgIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+OjpU
ZXN0aW5nU2NvcGUgZGVsZXRlckNvdW50ZXJTY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+
LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4+
IG1hcDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gdW5pcXVlUHRy
KG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKCksIERlbGV0ZXJDb3VudGVyPENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCkpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQ
dHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBFWFBFQ1RfRVEoMHUsIERl
bGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+OjpkZWxldGVyQ291bnQo
KSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBF
WFBFQ1RfRVEoMXUsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
OjpkZWxldGVyQ291bnQoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1
ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgaW50LCBSb2Jpbkhvb2RI
YXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gbWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBt
YWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0g
dW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKwor
ICAgIGF1dG8gaXQgPSBtYXAuZmluZChwdHIpOworICAgIEFTU0VSVF9UUlVFKGl0ICE9IG1hcC5l
bmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmtleS5nZXQoKSk7CisgICAgRVhQRUNUX0VR
KDIsIGl0LT52YWx1ZSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0
cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludCwgUm9iaW5Ib29k
SGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0g
bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9
IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisK
KyAgICBFWFBFQ1RfRVEodHJ1ZSwgbWFwLmNvbnRhaW5zKHB0cikpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfR2V0VXNpbmdSYXdQb2ludGVyKQoreworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8
aW50PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gbWFwOworCisg
ICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+
KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92
ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIGludCB2YWx1ZSA9IG1hcC5nZXQocHRyKTsKKyAgICBF
WFBFQ1RfRVEoMiwgdmFsdWUpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlx
dWVQdHJLZXlfUmVtb3ZlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VV
bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZN
b3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wg
cmVzdWx0ID0gbWFwLnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOwor
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
VW5pcXVlUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFr
ZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdU
Rk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgaW50
IHJlc3VsdCA9IG1hcC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHJlc3VsdCk7CisKKyAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlv
bkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlx
dWVSZWZWYWx1ZSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8aW50LCBVbmlxdWVSZWY8aW50PiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisgICAgVW5p
cXVlUmVmPGludD4gZml2ZSA9IG1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGlu
dD4oNSk7CisgICAgbWFwLmFkZCg1LCBXVEZNb3ZlKGZpdmUpKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXAuY29udGFpbnMoNSkpOworICAgIGludCogc2hvdWxkQmVGaXZlID0gbWFwLmdldCg1KTsKKyAg
ICBFWFBFQ1RfRVEoKnNob3VsZEJlRml2ZSwgNSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPGludD4g
dGFrZW5GaXZlID0gbWFwLnRha2UoNSk7CisgICAgRVhQRUNUX0VRKCp0YWtlbkZpdmUsIDUpOwor
ICAgIG1hcC5lbnN1cmUoNiwgW10geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZldpdGhv
dXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig2KTsKKyAgICB9KTsKKyAgICBFWFBFQ1RfRkFMU0UobWFw
LmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAuY29udGFpbnMoNikpOworICAgIGZv
ciAoVW5pcXVlUmVmPGludD4mIGEgOiBtYXAudmFsdWVzKCkpCisgICAgICAgIEVYUEVDVF9FUShh
LmdldCgpLCA2KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0Fk
ZCkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSZWZQdHJLZXlfQWRkVXNpbmdSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJl
ZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAg
ICAgICAgbWFwLmFkZChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92ZSkKK3sKKyAgICB7Cisg
ICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhv
b2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dn
ZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRVc2luZ1Jh
dykKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLmdldCgpLCAw
KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZQdHJLZXlfQWRkS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9n
Z2VyPj4+IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsK
KyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVm
KGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1hcC5hZGQocHRyMiwgMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1Rf
U1RSRVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmVsZWFzZUtleUFscmVhZHlQcmVz
ZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKFdURk1vdmUocHRyMiksIDApOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktl
eV9BZGRVc2luZ01vdmVLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxS
ZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4g
bWFwOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAg
ICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
UmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFw
LmFkZChXVEZNb3ZlKHB0cjIpLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVD
VF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0KQoreworICAgIHsKKyAgICAgICAgRGVy
aXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
UHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZh
KTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
cmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ1JlbGVh
c2UpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dl
cj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAg
ICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KFdURk1vdmUocHRy
KSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJl
ZlB0cktleV9TZXRVc2luZ01vdmUpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2Vy
Pj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBt
YXAuc2V0KFdURk1vdmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSYXcpCit7CisgICAgeworICAgICAgICBE
ZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxS
ZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIo
JmEpOworICAgICAgICBtYXAuc2V0KHB0ci5nZXQoKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNU
X1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldEtl
eUFscmVhZHlQcmVzZW50KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNl
dChwdHIsIDApOworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyMigmYSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQocHRy
MiwgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAgIH0K
KworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAs
IFJlZlB0cktleV9TZXRVc2luZ1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7Cisg
ICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhv
b2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dn
ZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBFQ1Rf
U1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgICAg
IHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtYXAuc2V0KFdURk1vdmUocHRyMiksIDEpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USgxLCBtYXAuZ2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKwor
ICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdN
b3ZlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2Vy
Pj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBt
YXAuc2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8
UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLnNl
dChXVEZNb3ZlKHB0cjIpLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChwdHIuZ2V0KCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgRW5zdXJlKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+
PiBtYXA7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1cmUoMSwgW10g
eyByZXR1cm4gMTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9yLT5rZXkp
OworICAgICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0MiA9IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gMjsgfSk7CisgICAgICAg
IEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShhZGRSZXN1bHQyLmlzTmV3RW50cnkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgRW5zdXJlX01vdmVPbmx5VmFsdWVzKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgTW92ZU9ubHksIFJvYmluSG9vZEhhc2g8
dW5zaWduZWQ+PiBtb3ZlT25seVZhbHVlczsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbW92ZU9ubHlWYWx1ZXMuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIE1vdmVPbmx5KDEpOyB9KTsK
KyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnZhbHVlKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJl
c3VsdDIgPSBtb3ZlT25seVZhbHVlcy5lbnN1cmUoMSwgW10geyByZXR1cm4gTW92ZU9ubHkoMik7
IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPnZhbHVlLnZh
bHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPmtleSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQyLmlzTmV3RW50cnkpOworICAgIH0KK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRW5zdXJlX1VuaXF1ZVBvaW50ZXIpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6
OnVuaXF1ZV9wdHI8dW5zaWduZWQ+LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAg
IHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIG1h
a2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPHVuc2lnbmVkPigxKTsgfSk7CisgICAgICAg
IEVYUEVDVF9FUSgxdSwgKm1hcC5nZXQoMSkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsICphZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRS
ZXN1bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbWFwLmVuc3VyZSgxLCBbXSB7IHJl
dHVybiBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazx1bnNpZ25lZD4oMik7IH0pOwor
ICAgICAgICBFWFBFQ1RfRVEoMXUsICptYXAuZ2V0KDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1
LCAqYWRkUmVzdWx0Mi5pdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRS
ZXN1bHQyLmlzTmV3RW50cnkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgRW5zdXJlX1JlZlB0cikKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRy
PFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBtYXAuZW5z
dXJlKDEsIFsmXSB7IHJldHVybiBSZWZQdHI8UmVmTG9nZ2VyPigmYSk7IH0pOworICAgIEVYUEVD
VF9TVFJFUSgicmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1hcC5lbnN1
cmUoMSwgWyZdIHsgcmV0dXJuIFJlZlB0cjxSZWZMb2dnZXI+KCZhKTsgfSk7CisgICAgRVhQRUNU
X1NUUkVRKCIiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKwor
ICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQor
CitjbGFzcyBPYmplY3RXaXRoUmVmTG9nZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBPYmplY3RXaXRoUmVmTG9nZ2VyKFJlZjxSZWZMb2dnZXI+JiYgbG9n
Z2VyKQorICAgICAgICA6IG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKKyAgICB7CisgICAgfQor
CisgICAgUmVmPFJlZkxvZ2dlcj4gbV9sb2dnZXI7Cit9OworCisKK3N0YXRpYyB2b2lkIHRlc3RN
b3ZpbmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3sKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0
cjxPYmplY3RXaXRoUmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKwor
ICAgIG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxv
Z2dlcj4oV1RGTW92ZShsb2dnZXIpKTsgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RNb3ZpbmdV
c2luZ0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxPYmplY3RX
aXRoUmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKworICAgIGF1dG8m
IHNsb3QgPSBtYXAuYWRkKDEsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzbG90ID0g
bWFrZVVuaXF1ZTxPYmplY3RXaXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfTGFtYmRhc0NhcHR1cmluZ0J5UmVmZXJl
bmNlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAg
IFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFdU
Rk1vdmUocmVmKSk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAg
dGVzdE1vdmluZ1VzaW5nQWRkKFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVR
KCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KK30KKwor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBWYWx1ZUlzRGVzdHJ1Y3RlZE9uUmVtb3ZlKQor
eworICAgIHN0cnVjdCBEZXN0cnVjdG9yT2JzZXJ2ZXIgeworICAgICAgICBEZXN0cnVjdG9yT2Jz
ZXJ2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVyKGJvb2wqIGRl
c3RydWN0ZWQpCisgICAgICAgICAgICA6IGRlc3RydWN0ZWQoZGVzdHJ1Y3RlZCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgfkRlc3RydWN0b3JPYnNlcnZlcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChkZXN0cnVjdGVkKQorICAgICAgICAgICAgICAgICpkZXN0cnVjdGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERlc3RydWN0b3JPYnNlcnZlcihEZXN0cnVj
dG9yT2JzZXJ2ZXImJiBvdGhlcikKKyAgICAgICAgICAgIDogZGVzdHJ1Y3RlZChvdGhlci5kZXN0
cnVjdGVkKQorICAgICAgICB7CisgICAgICAgICAgICBvdGhlci5kZXN0cnVjdGVkID0gbnVsbHB0
cjsKKyAgICAgICAgfQorCisgICAgICAgIERlc3RydWN0b3JPYnNlcnZlciYgb3BlcmF0b3I9KERl
c3RydWN0b3JPYnNlcnZlciYmIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0cnVj
dGVkID0gb3RoZXIuZGVzdHJ1Y3RlZDsKKyAgICAgICAgICAgIG90aGVyLmRlc3RydWN0ZWQgPSBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCogZGVzdHJ1Y3RlZCB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgRGVzdHJ1Y3Rvck9ic2VydmVyLCBSb2Jp
bkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgIGJvb2wgZGVzdHJ1Y3RlZCA9IGZhbHNlOworICAg
IG1hcC5hZGQoNSwgRGVzdHJ1Y3Rvck9ic2VydmVyIHsgJmRlc3RydWN0ZWQgfSk7CisKKyAgICBF
WFBFQ1RfRkFMU0UoZGVzdHJ1Y3RlZCk7CisKKyAgICBib29sIHJlbW92ZVJlc3VsdCA9IG1hcC5y
ZW1vdmUoNSk7CisKKyAgICBFWFBFQ1RfVFJVRShyZW1vdmVSZXN1bHQpOworICAgIEVYUEVDVF9U
UlVFKGRlc3RydWN0ZWQpOworfQorCitzdHJ1Y3QgRGVyZWZPYnNlcnZlciB7CisgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIE5FVkVSX0lOTElORSB2b2lkIHJlZigpCisg
ICAgeworICAgICAgICArK2NvdW50OworICAgIH0KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBkZXJl
ZigpCisgICAgeworICAgICAgICAtLWNvdW50OworICAgICAgICBvYnNlcnZlZEJ1Y2tldCA9IGJ1
Y2tldEFkZHJlc3MtPmdldCgpOworICAgIH0KKyAgICB1bnNpZ25lZCBjb3VudCB7IDEgfTsKKyAg
ICBjb25zdCBSZWZQdHI8RGVyZWZPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgeyBudWxscHRyIH07
CisgICAgY29uc3QgRGVyZWZPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgeyBudWxscHRyIH07Cit9
OworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJOb3RaZXJvZWRCZWZvcmVEZXJl
ZikKK3sKKyAgICBhdXRvIG9ic2VydmVyID0gbWFrZVVuaXF1ZTxEZXJlZk9ic2VydmVyPigpOwor
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxEZXJl
Zk9ic2VydmVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxEZXJlZk9ic2VydmVyPj4+IG1h
cDsKKyAgICBtYXAuYWRkKGFkb3B0UmVmKG9ic2VydmVyLmdldCgpKSwgNSk7CisKKyAgICBhdXRv
IGl0ZXJhdG9yID0gbWFwLmZpbmQob2JzZXJ2ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGl0
ZXJhdG9yICE9IG1hcC5lbmQoKSk7CisKKyAgICBvYnNlcnZlci0+YnVja2V0QWRkcmVzcyA9ICZp
dGVyYXRvci0+a2V5OworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0
ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUob2JzZXJ2ZXIuZ2V0KCkp
KTsKKworICAgIC8vIFJvYmluSG9vZEhhc2hTZXQgZG9lcyBub3QgdXNlIHRvbWJzdG9uZS4gVGhl
IHVzZWQgYnVja2V0IG1heSBpbmNsdWRlIGFuIGV4aXN0aW5nIGVudHJ5LCBvciBlbXB0eS4KKyAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRpZCBub3QgYWRkIHRoZSBvdGhlciBEZXJlZk9ic2VydmVy
LiBTbyB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51bGxwdHIpLgorICAgIEVYUEVDVF9UUlVFKG9i
c2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEob2JzZXJ2
ZXItPmNvdW50LCAwdSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZl9LZXkp
Cit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jp
bkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+
IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIDEpOworICAgIH0KKworICAg
IEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5I
b29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiBy
ZWYoYSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShyZWYpLCAxKTsKKyAgICB9CisKKyAgICBB
U1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVm
QShhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZkEpLCAxKTsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWZBMihhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHJlZkEyKSwgMSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5lbnN1cmUo
V1RGTW92ZShyZWYpLCBbXSgpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+
LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVm
PFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisK
KyAgICAgICAgYXV0byBpdCA9IG1hcC5maW5kKCZhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoaXQg
IT0gbWFwLmVuZCgpKTsKKworICAgICAgICBBU1NFUlRfRVEoaXQtPmtleS5wdHIoKSwgJmEpOwor
ICAgICAgICBBU1NFUlRfRVEoaXQtPnZhbHVlLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgbWFwLnJlbW92ZSgmYSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJl
ZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIDEpOwor
CisgICAgICAgIGludCBpID0gbWFwLnRha2UoJmEpOworICAgICAgICBBU1NFUlRfRVEoaSwgMSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVm
TG9nZ2VyPj4+IG1hcDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxlYWsu
IE5vIGJpZyBkZWFsIGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAgYXV0
byogcG9pbnRlciA9IHJlZi5wdHIoKTsKKyAgICAgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYp
LCBpICsgMSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShtYXAuY29udGFpbnMocG9pbnRlcikp
OworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZl9WYWx1
ZSkKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworICAgIH0KKworICAgIEFTU0VSVF9T
VFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsK
KyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxp
bnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAu
c2V0KDEsIFdURk1vdmUocmVmKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworICAgICAgICBSZWZMb2dnZXIgYigiYiIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBS
b2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBKGEp
OworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmQSkpOworCisgICAgICAgIFJlZjxSZWZM
b2dnZXI+IHJlZkIoYik7CisgICAgICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWZCKSk7CisgICAg
fQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGIpIGRlcmVmKGEpIGRlcmVmKGIpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEi
KTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50
LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVm
PFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisK
KyAgICAgICAgYXV0byBhR2V0ID0gbWFwLmdldCgxKTsKKyAgICAgICAgQVNTRVJUX0VRKGFHZXQs
ICZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGlu
dD4+IG1hcDsKKworICAgICAgICBhdXRvIGVtcHR5R2V0ID0gbWFwLmdldCgxKTsKKyAgICAgICAg
QVNTRVJUX1RSVUUoZW1wdHlHZXQgPT0gbnVsbHB0cik7CisgICAgfQorCisgICAgeworICAgICAg
ICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwg
V1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFPdXQgPSBtYXAudGFrZSgxKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBBU1NFUlRf
RVEoJmEsIGFPdXQuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIGF1dG8gZW1wdHlUYWtlID0gbWFwLnRh
a2UoMSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihlbXB0eVRha2Up
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dl
cj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJl
ZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworICAgICAgICBtYXAucmVt
b3ZlKDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBS
ZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgbWFwLmVu
c3VyZSgxLCBbJl0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihh
KTsKKyAgICAgICAgICAgIHJldHVybiByZWY7CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFT
U0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGlu
dCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlc2UgUmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1
ZXNzLgorICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZM
b2dnZXIoImEiKSk7CisgICAgICAgICAgICBtYXAuYWRkKGkgKyAxLCBXVEZNb3ZlKHJlZikpOwor
ICAgICAgICAgICAgQVNTRVJUX1RSVUUobWFwLmNvbnRhaW5zKGkgKyAxKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJh
dG9yKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQs
IERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvciwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXAxOworICAg
IGZvciAoYXV0byYgdmFsdWUgOiBtYXAxLnZhbHVlcygpKQorICAgICAgICAodm9pZCl2YWx1ZTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmTWFwcGVkVG9Ob25aZXJvRW1wdHlW
YWx1ZSkKK3sKKyAgICBjbGFzcyBWYWx1ZSB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZSgp
ID0gZGVmYXVsdDsKKyAgICAgICAgVmFsdWUoVmFsdWUmJikgPSBkZWZhdWx0OworICAgICAgICBW
YWx1ZShjb25zdCBWYWx1ZSYpID0gZGVmYXVsdDsKKyAgICAgICAgVmFsdWUmIG9wZXJhdG9yPShW
YWx1ZSYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgVmFsdWUoaW50MzJfdCBmKQorICAgICAgICAg
ICAgOiBtX2ZpZWxkKGYpCisgICAgICAgIHsgfQorCisgICAgICAgIGludDMyX3QgZmllbGQoKSB7
IHJldHVybiBtX2ZpZWxkOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBpbnQzMl90IG1fZmll
bGQgeyAweGJhZGJlZWYgfTsKKyAgICB9OworCisgICAgY2xhc3MgS2V5IDogcHVibGljIFJlZkNv
dW50ZWQ8S2V5PiB7CisgICAgICAgIEtleSgpID0gZGVmYXVsdDsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBSZWY8S2V5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEtleSk7
IH0KKyAgICB9OworCisgICAgc3RhdGljX2Fzc2VydCghV1RGOjpIYXNoVHJhaXRzPFZhbHVlPjo6
ZW1wdHlWYWx1ZUlzWmVybywgIiIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFJlZjxLZXk+LCBWYWx1ZSwgUm9iaW5Ib29kSGFzaDxSZWY8S2V5Pj4+IG1h
cDsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZjxLZXk+LCBpbnQzMl90Pj4gdmVjdG9yTWFwOwor
CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgMTYwOyArK2kpIHsKKyAgICAgICAgUmVmPEtl
eT4ga2V5ID0gS2V5OjpjcmVhdGUoKTsKKyAgICAgICAgbWFwLmFkZChSZWY8S2V5PihrZXkuZ2V0
KCkpLCBWYWx1ZSB7IGkgfSk7CisgICAgICAgIHZlY3Rvck1hcC5hcHBlbmQoeyBXVEZNb3ZlKGtl
eSksIGkgfSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBwYWlyIDogdmVjdG9yTWFwKQorICAg
ICAgICBBU1NFUlRfRVEocGFpci5zZWNvbmQsIG1hcC5nZXQocGFpci5maXJzdCkuZmllbGQoKSk7
CisKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiB2ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9UUlVF
KG1hcC5yZW1vdmUocGFpci5maXJzdCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSYW5kb21fRW1wdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsK
KworICAgIGF1dG8gcmVzdWx0ID0gbWFwLnJhbmRvbSgpOworICAgIEFTU0VSVF9FUShyZXN1bHQs
IG1hcC5lbmQoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9XcmFw
QXJvdW5kKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1
bnNpZ25lZCwgdW5zaWduZWQsIFplcm9IYXNoPHVuc2lnbmVkPiwgQmlnVGFibGVIYXNoVHJhaXRz
PHVuc2lnbmVkPj4gbWFwOworICAgIG1hcC5hZGQoMSwgMSk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1hcC5yYW5kb20oKTsKKyAgICBBU1NFUlRfRVEocmVzdWx0LCBtYXAuYmVnaW4oKSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9Jc0V2ZW5seURpc3RyaWJ1dGVkKQor
eworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwg
dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbWFwOworICAgIG1hcC5hZGQoMCwgMCk7CisgICAgbWFw
LmFkZCgxLCAxKTsKKworICAgIHVuc2lnbmVkIHplcm9zID0gMDsKKyAgICB1bnNpZ25lZCBvbmVz
ID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAg
ICAgYXV0byBpdCA9IG1hcC5yYW5kb20oKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUpCisgICAg
ICAgICAgICArK3plcm9zOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9FUShp
dC0+dmFsdWUsIDF1KTsKKyAgICAgICAgICAgICsrb25lczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEFTU0VSVF9FUSh6ZXJvcyArIG9uZXMsIDEwMDB1KTsKKyAgICBBU1NFUlRfTEUoemVyb3Ms
IDYwMHUpOworICAgIEFTU0VSVF9MRShvbmVzLCA2MDB1KTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgUmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKKyAgICBFWFBF
Q1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLmNhcGFjaXR5KCkp
OworCisgICAgbWFwLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0VR
KDB1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1LCBtYXAuY2FwYWNpdHkoKSk7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgbWFwLmFkZCht
YWtlU3RyaW5nKCJmb28iLCBpKSwgbWFrZVN0cmluZygiYmFyIiwgaSkpOworICAgIEVYUEVDVF9F
USg5OTk5dSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgbWFwLmNhcGFjaXR5
KCkpOworICAgIEVYUEVDVF9UUlVFKG1hcC5jb250YWlucygiZm9vMyJfc3RyKSk7CisgICAgRVhQ
RUNUX1NUUkVRKCJiYXIzIiwgbWFwLmdldCgiZm9vMyJfc3RyKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBtYXAuYWRkKG1ha2VT
dHJpbmcoImV4Y2VzcyIsIGkpLCBtYWtlU3RyaW5nKCJiYXoiLCBpKSk7CisgICAgRVhQRUNUX0VR
KDk5OTl1ICsgOTk5OXUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIG1hcC5j
YXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAg
ICBFWFBFQ1RfVFJVRShtYXAucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAgRVhQ
RUNUX0VRKDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBtYXAuY2Fw
YWNpdHkoKSk7CisgICAgRVhQRUNUX1NUUkVRKCJiYXozIiwgbWFwLmdldCgiZXhjZXNzMyJfc3Ry
KS51dGY4KCkuZGF0YSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQor
ICAgICAgICBFWFBFQ1RfVFJVRShtYXAucmVtb3ZlKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKSk7
CisgICAgRVhQRUNUX0VRKDB1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIG1hcC5j
YXBhY2l0eSgpKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbWFwMjsKKyAgICBtYXAyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
OTk5OSk7CisgICAgRVhQRUNUX0ZBTFNFKG1hcDIucmVtb3ZlKCJmb28xIl9zKSk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICAgICAgbWFwMi5hZGQobWFrZVN0cmlu
ZygiZm9vIiwgaSksIG1ha2VTdHJpbmcoImJhciIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoMjAwMHUs
IG1hcDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1LCBtYXAyLmNhcGFjaXR5KCkpOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVF
KG1hcDIucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDB1LCBt
YXAyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDh1LCBtYXAyLmNhcGFjaXR5KCkpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSYW5kb21fSXNFdmVubHlEaXN0cmlidXRlZEFmdGVy
UmVtb3ZlKQoreworICAgIGZvciAoc2l6ZV90IHRhYmxlU2l6ZSA9IDI7IHRhYmxlU2l6ZSA8PSAy
ICogNjsgKyt0YWJsZVNpemUpIHsgLy8gT3VyIGhhc2ggdGFibGVzIHNocmluayBhdCBhIGxvYWQg
ZmFjdG9yIG9mIDEgLyA2LgorICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1hcDsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5h
ZGQoaSwgaSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAyOyBpIDwgdGFibGVTaXplOyArK2kp
CisgICAgICAgICAgICBtYXAucmVtb3ZlKGkpOworCisgICAgICAgIHVuc2lnbmVkIHplcm9zID0g
MDsKKyAgICAgICAgdW5zaWduZWQgb25lcyA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICAgICAgYXV0byBpdCA9IG1hcC5yYW5kb20o
KTsKKyAgICAgICAgICAgIGlmICghaXQtPnZhbHVlKQorICAgICAgICAgICAgICAgICsremVyb3M7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfRVEoaXQtPnZhbHVl
LCAxdSk7CisgICAgICAgICAgICAgICAgKytvbmVzOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUX0VRKHplcm9zICsgb25lcywgMTAwMHUpOworICAgICAgICBBU1NF
UlRfTEUoemVyb3MsIDYwMHUpOworICAgICAgICBBU1NFUlRfTEUob25lcywgNjAwdSk7CisgICAg
fQorfQorCitjbGFzcyBUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3IgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRlc3RPYmplY3RXaXRoQ3VzdG9tRGVz
dHJ1Y3RvcihGdW5jdGlvbjx2b2lkKCk+JiYgcnVuSW5EZXN0cnVjdG9yKQorICAgICAgICA6IG1f
cnVuSW5EZXN0cnVjdG9yKFdURk1vdmUocnVuSW5EZXN0cnVjdG9yKSkKKyAgICB7IH0KKworICAg
IH5UZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgbV9ydW5J
bkRlc3RydWN0b3IoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZCgpPiBt
X3J1bkluRGVzdHJ1Y3RvcjsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIENsZWFy
X1JlZW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9y
PiwgUm9iaW5Ib29kSGFzaDx1aW50NjRfdD4+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDw9IDEwOyArK2kpIHsKKyAgICAgICAgbWFwLmFkZChpLCBtYWtlVW5pcXVlPFRlc3RPYmpl
Y3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcj4oWyZtYXBdIHsKKyAgICAgICAgICAgIG1hcC5jbGVhcigp
OworICAgICAgICAgICAgRVhQRUNUX0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICAgICAgICAgIEVY
UEVDVF9UUlVFKG1hcC5pc0VtcHR5KCkpOworICAgICAgICB9KSk7CisgICAgfQorICAgIEVYUEVD
VF9FUSgxMFUsIG1hcC5zaXplKCkpOworICAgIG1hcC5jbGVhcigpOworICAgIEVYUEVDVF9FUSgw
VSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEFkZEFuZElkZW50aXR5KQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVuc2ln
bmVkPiBtYXA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWUzOyArK2lu
ZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1hcC5zZXQoc3RyaW5nLmltcGwoKSwgaW5kZXgpOworICAgICAg
ICBFWFBFQ1RfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9FUShyZXN1
bHQuaXRlcmF0b3ItPmtleSwgc3RyaW5nLmltcGwoKSk7CisgICAgfQorfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBMYXJnZVJlbW92YWwpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsK
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAg
ICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIG1hcC5z
ZXQoc3RyaW5nLmltcGwoKSwgaW5kZXgpOworICAgIH0KKyAgICBFWFBFQ1RfRVEobWFwLnNpemUo
KSwgMWU0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5k
ZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKSB7CisgICAgICAgICAgICBhdXRvIHN0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1h
cC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVk
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEobWFwLnNpemUoKSwgMWU0IC8gMik7
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7Cisg
ICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBpZiAo
aW5kZXggJiAweDEpCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobWFwLmNvbnRhaW5zKHN0cmlu
Zy5pbXBsKCkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9
IG1hcC5nZXQoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIGlu
ZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoIShpbmRleCAmIDB4MSkpIHsKKyAg
ICAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAg
ICAgYm9vbCByZW1vdmVkID0gbWFwLnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUSht
YXAuc2l6ZSgpLCAwdSk7CisgICAgRVhQRUNUX0VRKG1hcC5jYXBhY2l0eSgpLCA4dSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJlMmFjMTU4NGNh
MDgzMmU0NGM3ODAyNDgzMjViOWY5NTIzNTA5NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hTZXQuY3BwCkBAIC0wLDAgKzEsNTg2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJD
b3VudGVycy5oIgorI2luY2x1ZGUgIkRlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIgorI2luY2x1
ZGUgIk1vdmVPbmx5LmgiCisjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCisjaW5jbHVkZSAiVGVzdC5o
IgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0b3B3YXRjaC5oPgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPGludCBpbml0aWFsQ2FwYWNpdHk+Citz
dHJ1Y3QgSW5pdGlhbENhcGFjaXR5VGVzdEhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
dW1UYWJsZVNpemUgPSBpbml0aWFsQ2FwYWNpdHk7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IFJvYmluSG9vZEhhc2ggOiBwdWJsaWMgRGVmYXVsdEhhc2g8VD4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7Cit9OworCitzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGNhcGFjaXR5Rm9yU2l6ZSh1bnNpZ25lZCBzaXplKQoreworICAg
IHVuc2lnbmVkIGNhcGFjaXR5ID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpOworICAg
IGlmIChzaXplICogMTAwID49IGNhcGFjaXR5ICogOTUpCisgICAgICAgIHJldHVybiBjYXBhY2l0
eSAqIDI7CisgICAgcmV0dXJuIGNhcGFjaXR5OworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXpl
Pgordm9pZCB0ZXN0SW5pdGlhbENhcGFjaXR5KCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5ID0gY2FwYWNpdHlGb3JTaXplKHNpemUpOworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxpbnQsIFJvYmluSG9vZEhhc2g8aW50PiwgSW5p
dGlhbENhcGFjaXR5VGVzdEhhc2hUcmFpdHM8aW5pdGlhbENhcGFjaXR5Pj4gdGVzdFNldDsKKwor
ICAgIC8vIEluaXRpYWwgY2FwYWNpdHkgaXMgbnVsbC4KKyAgICBBU1NFUlRfRVEoMHUsIHRlc3RT
ZXQuY2FwYWNpdHkoKSk7CisKKyAgICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gc2l6ZSBzaG91bGQg
bmV2ZXIgY2hhbmdlIHRoZSBjYXBhY2l0eS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICB0ZXN0U2V0LmFkZChpKTsKKyAgICAgICAgQVNTRVJUX0VRKGlu
aXRpYWxDYXBhY2l0eSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRlc3RTZXQuY2FwYWNpdHkoKSkp
OworICAgIH0KKworICAgIC8vIEFkZGluZyBpdGVtcyB1cCB0byBtb3JlIHRoYW4gOTUlIG9mIHRo
ZSBjYXBhY2l0eSBzaG91bGQgbm90IGNoYW5nZSB0aGUgY2FwYWNpdHkuCisgICAgdW5zaWduZWQg
Y2FwYWNpdHlMaW1pdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6OmNlaWwoaW5pdGlhbENh
cGFjaXR5ICogMC45NSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpIDwgY2FwYWNpdHlM
aW1pdDsgKytpKSB7CisgICAgICAgIHRlc3RTZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEo
aW5pdGlhbENhcGFjaXR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgp
KSk7CisgICAgfQorCisgICAgLy8gQWRkaW5nIG9uZSBtb3JlIGl0ZW0gaW5jcmVhc2UgdGhlIGNh
cGFjaXR5LgorICAgIHRlc3RTZXQuYWRkKGluaXRpYWxDYXBhY2l0eSk7CisgICAgRVhQRUNUX0dU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2FwYWNp
dHkpOworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRl
c3RDYXBhY2l0eVVwVG9TaXplKCk7Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVz
dENhcGFjaXR5VXBUb1NpemU8MD4oKQoreworfQordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5s
aW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpCit7CisgICAgZ2VuZXJhdGVU
ZXN0Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4oKTsKKyAgICB0ZXN0SW5pdGlhbENhcGFjaXR5
PHNpemU+KCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIEluaXRpYWxDYXBhY2l0
eSkKK3sKKyAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDEyOD4oKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaFNldCwgTW92ZU9ubHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PE1vdmVPbmx5PiBoYXNoU2V0OworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShp
ICsgMSk7CisgICAgICAgIGhhc2hTZXQuYWRkKFdURk1vdmUobW92ZU9ubHkpKTsKKyAgICB9CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJV
RShoYXNoU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkgKyAxKSkpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5yZW1vdmUo
TW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmlzRW1wdHkoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBoYXNoU2V0
LmFkZChNb3ZlT25seShpICsgMSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7
ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzaFNldC50YWtlKE1vdmVPbmx5KGkgKyAxKSkg
PT0gTW92ZU9ubHkoaSArIDEpKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgp
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hT
ZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8TW92ZU9ubHk+IHNlY29uZFNldDsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIHNlY29uZFNldC5hZGQoaGFzaFNldC50YWtlQW55
KCkpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5KCkpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2Vjb25kU2V0
LmNvbnRhaW5zKE1vdmVPbmx5KGkgKyAxKSkpOworfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hTZXQsIFVuaXF1ZVB0cktleSkKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyPj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsK
KworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBzZXQuY2xlYXIoKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktl
eV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8aW50Pj4+IHNldDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdp
dGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5n
ZXQoKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBhdXRvIGl0ID0g
c2V0LmZpbmQocHRyKTsKKyAgICBBU1NFUlRfVFJVRShpdCAhPSBzZXQuZW5kKCkpOworICAgIEVY
UEVDVF9FUShwdHIsIGl0LT5nZXQoKSk7CisgICAgRVhQRUNUX0VRKDUsICppdC0+Z2V0KCkpOwor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2lu
Z1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxp
bnQ+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RN
YWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAg
IHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBzZXQu
Y29udGFpbnMocHRyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0
cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4+PiBzZXQ7CisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQ
dHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldC5y
ZW1vdmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9U
YWtlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4s
IFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciog
cHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsK
KworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHNldC50YWtlKHB0
cik7CisgICAgRVhQRUNUX0VRKHB0ciwgcmVzdWx0LmdldCgpKTsKKworICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAg
IEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25D
b3VudCk7CisKKyAgICByZXN1bHQgPSBudWxscHRyOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQ29weUVtcHR5KQoreworICAgIHsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBS
b2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBi
YXIoZm9vKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgpKTsKKyAgICB9CisgICAgeworICAgICAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+PiBmb28oeyAxLCA1LCA2NCwgNDIgfSk7CisgICAgICAgIEVYUEVDVF9FUSg0
dSwgZm9vLnNpemUoKSk7CisgICAgICAgIGZvby5yZW1vdmUoMSk7CisgICAgICAgIGZvby5yZW1v
dmUoNSk7CisgICAgICAgIGZvby5yZW1vdmUoNDIpOworICAgICAgICBmb28ucmVtb3ZlKDY0KTsK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisKKyAgICAgICAgRVhQRUNUX0VR
KDB1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYmFyLnNpemUoKSk7
CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBDb3B5QWxsb2NhdGVBdExl
YXN0TWluaW11bUNhcGFjaXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGZvbyh7IDQyIH0p
OworICAgIEVYUEVDVF9FUSgxdSwgZm9vLnNpemUoKSk7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4g
YmFyKGZvbyk7CisKKyAgICBFWFBFQ1RfRVEoOHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICBFWFBF
Q1RfRVEoMXUsIGJhci5zaXplKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBD
b3B5Q2FwYWNpdHlJc05vdE9uQm91bmRhcnkpCit7CisgICAgZm9yICh1bnNpZ25lZCBzaXplID0g
NDsgc2l6ZSA8IDEwMDsgKytzaXplKSB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IHNvdXJj
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemUgKyAxOyArK2kpCisgICAg
ICAgICAgICBzb3VyY2UuYWRkKGkpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkx
KHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkyKHNvdXJjZSk7CisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9i
aW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkzKHNvdXJjZSk7CisKKyAgICAgICAgRVhQRUNUX0VR
KHNpemUsIGNvcHkxLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzaXplLCBjb3B5Mi5zaXpl
KCkpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwgY29weTMuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemUgKyAxOyArK2kpIHsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKGNvcHkxLmNvbnRhaW5zKGkpKSA8PCBpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUo
Y29weTIuY29udGFpbnMoaSkpIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5j
b250YWlucyhpKSkgPDwgaTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTEu
Y29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5z
KHNpemUgKyAyKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5My5jb250YWlucyhzaXplICsg
MikpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkyLnJlbW92ZSgxKSk7CisgICAgICAgIEVY
UEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpLCBjb3B5Mi5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKDEpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5
My5hZGQoc2l6ZSArIDIpLmlzTmV3RW50cnkpOworICAgICAgICBpZiAoKGNvcHkxLmNhcGFjaXR5
KCkgKiAwLjk1KSA8PSBjb3B5MS5zaXplKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEoY29weTEu
Y2FwYWNpdHkoKSAqIDIsIGNvcHkzLmNhcGFjaXR5KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5KCksIGNvcHkzLmNh
cGFjaXR5KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29weTMuY29u
dGFpbnMoc2l6ZSArIDIpKTsKKyAgICB9Cit9CisKK3N0cnVjdCBEZXJlZk9ic2VydmVyIHsKKyAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgTkVWRVJfSU5MSU5FIHZvaWQg
cmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAgIE5FVkVSX0lOTElORSB2
b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0tY291bnQ7CisgICAgICAgIG9ic2VydmVkQnVj
a2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfQorICAgIHVuc2lnbmVkIGNvdW50IHsg
MSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9ic2VydmVyPiogYnVja2V0QWRkcmVzcyB7IG51
bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2VydmVyKiBvYnNlcnZlZEJ1Y2tldCB7IG51bGxw
dHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlZlB0ck5vdFplcm9lZEJl
Zm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPERlcmVmT2JzZXJ2
ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVm
UHRyPERlcmVmT2JzZXJ2ZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxEZXJlZk9ic2VydmVyPj4+
IHNldDsKKyAgICBzZXQuYWRkKGFkb3B0UmVmKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICBhdXRv
IGl0ZXJhdG9yID0gc2V0LmZpbmQob2JzZXJ2ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGl0
ZXJhdG9yICE9IHNldC5lbmQoKSk7CisKKyAgICBvYnNlcnZlci0+YnVja2V0QWRkcmVzcyA9IGl0
ZXJhdG9yLmdldCgpOworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0
ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHNldC5yZW1vdmUob2JzZXJ2ZXIuZ2V0KCkp
KTsKKworICAgIC8vIFJvYmluSG9vZEhhc2hTZXQgZG9lcyBub3QgdXNlIHRvbWJzdG9uZS4gVGhl
IHVzZWQgYnVja2V0IG1heSBpbmNsdWRlIGFuIGV4aXN0aW5nIGVudHJ5LCBvciBlbXB0eS4KKyAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIGRpZCBub3QgYWRkIHRoZSBvdGhlciBEZXJlZk9ic2VydmVy
LiBTbyB0aGlzIG11c3QgYmUgYW4gZW1wdHkgKG51bGxwdHIpLgorICAgIEVYUEVDVF9UUlVFKG9i
c2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEob2JzZXJ2
ZXItPmNvdW50LCAwdSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVl
UHRyTm90WmVyb2VkQmVmb3JlRGVzdHJ1Y3RvcikKK3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9i
c2VydmVyIHsKKyAgICAgICAgfkRlc3RydWN0b3JPYnNlcnZlcigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG9ic2VydmUoKTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gb2JzZXJ2ZTsKKyAgICB9OworCisgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPERlc3RydWN0
b3JPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgPSBudWxscHRyOworICAgIGNvbnN0IERlc3RydWN0
b3JPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgPSBudWxscHRyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+IG9ic2VydmVyKG5ldyBEZXN0cnVjdG9yT2JzZXJ2ZXIgeyBb
Jl0oKSB7CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7Cisg
ICAgfX0pOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0
ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5p
cXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+Pj4gc2V0OworICAgIGF1dG8gYWRkUmVzdWx0ID0g
c2V0LmFkZChXVEZNb3ZlKG9ic2VydmVyKSk7CisKKyAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7
CisKKyAgICBidWNrZXRBZGRyZXNzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLmdldCgpOworCisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUo
c2V0LnJlbW92ZSgqYWRkUmVzdWx0Lml0ZXJhdG9yKSk7CisKKyAgICAvLyBSb2Jpbkhvb2RIYXNo
U2V0IGRvZXMgbm90IHVzZSB0b21ic3RvbmUuIFRoZSB1c2VkIGJ1Y2tldCBtYXkgaW5jbHVkZSBh
biBleGlzdGluZyBlbnRyeSwgb3IgZW1wdHkuCisgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBkaWQg
bm90IGFkZCB0aGUgb3RoZXIgRGVzdHJ1Y3Rvck9ic2VydmVyLiBTbyB0aGlzIG11c3QgYmUgYW4g
ZW1wdHkgKG51bGxwdHIpLgorICAgIEVYUEVDVF9UUlVFKG9ic2VydmVkQnVja2V0ID09IG51bGxw
dHIpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBSZWYpCit7CisgICAgeworICAg
ICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9n
Z2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNl
dC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChyZWYu
Y29weVJlZigpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAg
ICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2Vy
Pj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5h
ZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgc2V0LnJlbW92ZSgmYSk7CisgICAgfQorCisgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFz
aDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7
CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFPdXQgPSBz
ZXQudGFrZSgmYSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQp
KTsKKyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJl
ZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAg
ICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91dCA9IHNldC50
YWtlQW55KCk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsK
KyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVm
TG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKyAgICAgICAgYXV0
byBlbXB0eVRha2UgPSBzZXQudGFrZUFueSgpOworICAgICAgICBBU1NFUlRfRkFMU0Uoc3RhdGlj
X2Nhc3Q8Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWZMb2dn
ZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsK
KworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92
ZShyZWYpKTsKKworICAgICAgICBBU1NFUlRfVFJVRShzZXQuY29udGFpbnMoJmEpKTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNl
dDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxlYWsuIE5vIGJpZyBkZWFs
IGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZiA9IGFk
b3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAgYXV0byogcG9pbnRlciA9
IHJlZi5wdHIoKTsKKyAgICAgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9UUlVFKHNldC5jb250YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJl
ZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZM
b2dnZXI+Pj4gc2V0MihzZXQpOworICAgIH0KKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PERlbGV0ZWRBZGRyZXNzT2ZP
cGVyYXRvcj4gc2V0MTsKKyAgICBzZXQxLmFkZCgxMCk7CisKKyAgICBzZXQxLnJlbW92ZSgxMCk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlbW92ZVJhbmRvbSkKK3sKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9v
ZEhhc2g8dW5zaWduZWQ+PiBzZXQxIHsgMSwgMiwgMyB9OworICAgIHNldDEucmVtb3ZlKHNldDEu
cmFuZG9tKCkpOworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIHNldDEucmVt
b3ZlKHNldDEucmFuZG9tKCkpOworICAgIEFTU0VSVF9UUlVFKHNldDEuaXNFbXB0eSgpKTsKK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgUmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSkKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQ7
CisgICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldC5j
YXBhY2l0eSgpKTsKKworICAgIHNldC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAg
IEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNh
cGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAg
IHNldC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgc2V0
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNhcGFjaXR5KCkpOworICAgIEVY
UEVDVF9UUlVFKHNldC5jb250YWlucygiZm9vMyJfc3RyKSk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0LmFkZChtYWtlU3RyaW5nKCJleGNlc3MiLCBp
KSk7CisgICAgRVhQRUNUX0VRKDk5OTl1ICsgOTk5OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVD
VF9FUSgzMjc2OHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
OTk5OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKG1ha2VTdHJpbmcoImZv
byIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMzI3Njh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5
OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZShtYWtlU3RyaW5nKCJleGNl
c3MiLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQyOworICAgIHNldDIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5yZW1vdmUoImZvbzEiX3MpKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAgICBzZXQyLmFkZChtYWtlU3Ry
aW5nKCJmb28iLCBpKSk7CisgICAgRVhQRUNUX0VRKDIwMDB1LCBzZXQyLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDE2Mzg0dSwgc2V0Mi5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMjAwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZXQyLnJlbW92ZShtYWtlU3Ry
aW5nKCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0Mi5zaXplKCkpOworICAgIEVY
UEVDVF9FUSg4dSwgc2V0Mi5jYXBhY2l0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aFNldCwgQWRkQW5kSWRlbnRpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gc2V0OworICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IDFlMzsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9
IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHN0
cmluZy5pbXBsKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqcmVzdWx0Lml0ZXJhdG9yLCBzdHJpbmcuaW1wbCgpKTsKKyAgICB9
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIExhcmdlUmVtb3ZhbCkKK3sKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmUHRyPFN0cmluZ0ltcGw+
PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4
KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAg
ICBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUo
KSwgMWU0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5k
ZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKSB7CisgICAgICAgICAgICBhdXRvIHN0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNl
dC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVk
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgMWU0IC8gMik7
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7Cisg
ICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBpZiAo
aW5kZXggJiAweDEpCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHN0cmlu
Zy5pbXBsKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNv
bnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCEoaW5kZXggJiAweDEp
KSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAg
ICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBF
Q1RfRVEoc2V0LnNpemUoKSwgMHUpOworICAgIEVYUEVDVF9FUShzZXQuY2FwYWNpdHkoKSwgOHUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424888</attachid>
            <date>2021-04-01 05:41:44 -0700</date>
            <delta_ts>2021-04-01 07:48:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401054143.patch</filename>
            <type>text/plain</type>
            <size>297393</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MDNjMmE5NjFjYTE5ZjkwNWUyMTNmZTY5MGRhZTMxZjQ5YTU2MjJlLi5iOWQzMWVlYzU2NjQzMTk5
OGE0Mzg5MTFjMzNjOWExYmNkZjVhMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6bG9va1VwUHJpdmF0ZU5hbWVJbXBsKToKKyAgICAg
ICAgKEpTQzo6bG9va1VwV2VsbEtub3duU3ltYm9sSW1wbCk6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50bENvbGxhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAg
KiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpp
bml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6YWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6aW50bEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0QXZhaWxhYmxlTG9jYWxlKToKKyAgICAgICAgKEpTQzo6
bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRjaGVyKToKKyAgICAgICAg
KEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgor
ICAgICAgICAoSlNDOjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKToKKyAgICAg
ICAgKEpTQzo6aW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlND
OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxQ
bHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bFJlbGF0aXZlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZVJlbGF0aXZlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHA6CisgICAgICAgIChKU0M6OkludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cENhY2hlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBLZXkuaDoKKwogMjAyMS0wMy0z
MSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgY29uc3RydWN0b3JzIG9mIEVTNiBjb2xsZWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA2ZDRiMGI0NGRmYjBk
ZWY5ZGI1ZWFlOWViMGJiNjc1Y2FlZGM3MGViLi5jMjM2MTI5MTliODc2MDlmYzBlZTVjMzViZDk1
NmEwODZmY2UxOTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NiBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jp
bkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRv
bid0IHVzZSBpdCBhcyBhIGRlZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQg
cGVyZm9ybWFuY2Ugdi5zLiBtZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAg
YW5kIHRoaXMgcGF0Y2gncyBnb2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZh
dWx0LiBSYXRoZXIsIHRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8g
bm9uLXBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3
ZSBjYW4gc2F2ZSBtZW1vcnkuIFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29t
cHV0ZXMgaGFzaCB2YWx1ZSBjb21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRy
b3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGls
bCwgdGhpcyBpcyB1c2VmdWwgc2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFu
eSBzbWFsbCBIYXNoVGFibGVzIGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUg
c3VwZXIgbGFyZ2UgSGFzaFRhYmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2Ft
ZSBhbW91bnQgb2YgbWVtb3J5IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBn
b2FsIGlzIGFwcGx5aW5nIHRoaXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwg
YnV0IGEgZmV3IiBzaW5nbGV0b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJs
ZSBtYWludGFpbnMgZGlzdGFuY2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBh
ZGp1c3RpbmcgZXhpc3RpbmcgZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcs
IGlmIHdlIGZvdW5kIHRoYXQgdGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJ
QiB0aGFuIHRoZSBjdXJyZW50IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVu
dHJpZXMsIGFuZCBpbnNlcnQgdGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4g
VGhpcyBpcyBnaXZpbmcKKyAgICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8g
cG9vciBlbnRyeSAodGhhdCdzIHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBh
bmQgbWFraW5nIGF2ZXJhZ2UgRElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29k
IGludmFyaWFudAorICAgICAgICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3
ZSBmb3VuZCB0aGF0IGV4aXN0aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4g
c3RvcCBzZWFyY2hpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0
aGF0CisgICAgICAgIHdlIHNob3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdo
ZW4gaW5zZXJ0aW5nLiBUaGVzZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3Jt
YW5jZSBldmVuIHVuZGVyIHNpZ25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQt
ZmFjdG9yCisgICAgICAgIGp1c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGlu
ZyBwZXJmb3JtYW5jZSwgYnV0IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMg
Y29tcGFyZWQgdG8gbm9ybWFsIG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAg
V2UgaW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRz
IG9mIHRhYmxlcyBiYXNlZCBvbiBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBU
aGlzIGhhcyA5NSUgbG9hZC1mYWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1h
cHMgd2hpY2ggaXMgbW9zdGx5LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tp
bmcgdXAgcmVwZWF0ZWRseS4gSW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1h
bnkgdGhpcyBraW5kIG9mIHRhYmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3Vz
IGtpbmRzIG9mIHRoaW5ncy4gV2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3Ig
dGFibGUgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAg
d2UgYXJlIG1haW50YWlucyBmYXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMg
aGFzIDkwJSBsb2FkLWZhY3Rvci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcg
aXQgaWYgc2V0cyBhbmQgbWFwcyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNp
dmUuCisKKyAgICAgICAgMy4gRmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAg
ICAgICAgIFRoaXMgaGFzIDc1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBh
cmVkIHRvIEhhc2hTZXQgYW5kIEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQt
ZmFjdG9yIGZvciBsYXJnZSBzaXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVy
Zm9ybWFuY2UgcmVncmVzc2VkCisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0
b3IgbGFyZ2UgSGFzaFNldCBhbmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1h
bmNlIGludGVuc2l2ZSAoZS5nLiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBl
cmZvcm1hbmNlIGludGVuc2l2ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0
aGlzIHBhdGNoLCB3ZSByZXBsYWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdp
dGggUm9iaW5Ib29kSGFzaFRhYmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0
aWFuc3lsdmFuLmNvbS9wb3N0L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZh
dWx0LWhhc2gtdGFibGUtaW1wbGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RG
OjpZPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAg
ICAgICAgKFdURjo6WT46OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25z
dCk6CisgICAgICAgIChXVEY6Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29u
c3QpOgorICAgICAgICAoV1RGOjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFi
bGVUcmFpdHNBcmc+OjppbmxpbmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46
OmlubGluZUVuc3VyZSk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAg
ICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0c0FyZz46OmZhc3RBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3Vy
ZSk6CisgICAgICAgIChXVEY6Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3Zl
SWYpOgorICAgICAgICAoV1RGOjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6
CisgICAgICAgIChXVEY6Olk+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6WT46OmlzVmFsaWRLZXkpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OnNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
Y2FwYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Olg+OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Olg+OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpY
Pjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRz
QXJnPjo6aW5saW5lU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJn
Pjo6aW5saW5lQWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
aW5saW5lRW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6
c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ok1hcHBlZFRyYWl0cz46OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpNYXBwZWRUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6
Olc+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Vz46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4g
Y29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46
OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV1RGOjpUYWJsZVRyYWl0cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRy
YWl0cz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1
cmUpOgorICAgICAgICAoV1RGOjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+Ojpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtl
QW55KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0cz46OnRha2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToK
KyAgICAgICAgKFdURjo6PSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpWPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRyYWl0cz46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZW5zdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6Vj46OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFp
dHM+OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlY+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6cmVtb3ZlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToK
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5
VHJhaXRzPjo6YWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoV1RGOjpLZXlU
cmFpdHM+OjphZGQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRQYXNzaW5nSGFzaENv
ZGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlbW92
ZUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjbGVhcik6CisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OnN3YXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpI
YXNoVGFibGUpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmludmFsaWRhdGVJdGVyYXRvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaE1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvUm9iaW5Ib29kSGFzaFNldC5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6On5Sb2Jpbkhvb2RIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFi
bGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
cmFuZG9tIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjYXBhY2l0eSBjb25zdCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YWRkKToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjpmaW5kKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxl
OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb250YWlu
cyBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eUJ1Y2tl
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aXNFbXB0eU9yRGVsZXRlZEJ1
Y2tldCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bG9va3VwKToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3kpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFu
ZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y29tcHV0ZVRhYmxlSGFzaCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRTaHJpbmsgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNocmluayk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVsZXRlQnVja2V0KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpkZXNpcmVkSW5kZXgpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OnByb2JlRGlzdGFuY2UpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUNv
bnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Om1h
a2VLbm93bkdvb2RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
bWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6dGFibGVTaXplTWFzayBjb25zdCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6a2V5Q291bnQgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jp
bkhvb2RIYXNoVGFibGU6OnRhYmxlSGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpjaGVja0tleSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpsb29rdXApOgorICAg
ICAgICAoV1RGOjpTaXplUG9saWN5Pjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6U2l6
ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
YWRkKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZUZv
ckFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUpOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RGOjpTaXpl
UG9saWN5Pjo6ZmluZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6U2l6
ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAo
V1RGOjpTaXplUG9saWN5Pjo6YWxsb2NhdGVUYWJsZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpkZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZXhwYW5k
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnNocmlua1RvQmVzdFNpemUpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNsZWFy
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OlJvYmluSG9vZEhhc2hUYWJsZSk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAg
IChXVEY6OlNpemVQb2xpY3k+OjpjaGVja1RhYmxlQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSBjb25z
dCk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaDoKKyAgICAgICAgKiB3dGYv
dGV4dC9BdG9tU3RyaW5nSW1wbC5jcHA6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1Rh
YmxlLmNwcDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxl
KToKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6
QXRvbVN0cmluZ1RhYmxlOjp0YWJsZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaC5o
OgorCiAyMDIxLTAzLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgU2VydmljZSBXb3JrZXIgc2NyaXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGluIHRoZSBuZXR3
b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MWQ3ZGVkZWU2NmI0OTYwMGJmYmRkNzBhNTQyZGMw
ZWM5NDBkYWYwLi40MDE4YjZkNmQwMzk5NTE2OWM4OTNiYjU1MDU3MzA2MzIyN2VmN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMjEtMDQtMDEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRh
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4
OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YnVja2V0TUlNRVR5cGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6cG9wdXBWYWx1ZSBjb25zdCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1F1
YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHBy
aW50TmFtZXNIZWFkZXJGaWxlKToKKyAgICAgICAgKHByaW50RmFjdG9yeUNwcEZpbGUpOgorICAg
ICAgICAocHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUpOgorICAgICAgICAqIGVkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvckZvcm1h
dEJsb2NrKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZCk6CisgICAgICAgICogaHRtbC9BdXRvZmlsbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmaWVsZE5hbWVNYXApOgorICAgICAgICAqIGh0bWwvSFRN
TERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aXNDYXNlU2Vu
c2l0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnByZXZlbnRzUGFyZW50T2JqZWN0RnJvbUV4cG9zdXJlKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQ2FzZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTVkdUYWdOYW1lQ2Fz
ZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVz
dEZvcmVpZ25BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE5hbWVzV2l0aFByZWZp
eCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3QpOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RyaWN0
ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5jdGlvbk1hcCk6CisgICAgICAgICogcGxh
dGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
ZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VCYWNrc2xhc2hBc1llblNpZ25G
b3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkSW5p
dERhdGFUeXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Y29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xpcHBlckZpbHRlck1hc2tlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
bWFya2VyVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQW5kU3Ryb2tlVGFncyk6CisgICAg
ICAgIChXZWJDb3JlOjpjaGFpbmFibGVSZXNvdXJjZVRhZ3MpOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQWRqdXN0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Omhhc0VmZmVjdGl2ZURp
c3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1
cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphbmltYXRhYmxlQXR0cmlidXRlRm9yTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRl
TmFtZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBzdmcvU1ZHVGVzdHMu
aDoKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVBbGxvd2VkRWxlbWVudFNldCk6CisgICAgICAgIChXZWJDb3JlOjppc0Rpc2FsbG93ZWRF
bGVtZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpjcmVhdGVGdW5jdGlvbk1hcCk6CisgICAgICAgICogeG1sL1hQYXRoUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVBeGlzTmFtZXNNYXApOgorCiAyMDIxLTAzLTMw
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIENvbXB1dGVk
IHN0eWxlIGZvciBhIGJvcmRlci1yYWRpdXMgY29ybmVyIHNob3VsZCBuZXZlciBiZSAwcHggd2hl
biB0aGUgcHJvdmlkZWQgd2lkdGggaXNuJ3QgMHB4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBkY2Q1MGEyYzUwNDhj
NGM5NDU2Zjg4YzMzMWY5NDc0MWMwMzk3MjQuLjQxMGM2ZTVmYjA1MTgxOTFkYjcxMDg1ODRhOTIy
YWNmNzQ0ODE3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDQtMDEgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1Y2Ug
Um9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNU
YWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJp
YnV0ZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1u
cyk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVRhYmxlUXVlcmllcyk6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL0NvY29hL0RlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRBcHBCb3VuZERvbWFp
bnNUZXN0aW5nKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OmRlY29kZSk6CisgICAgICAgICog
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorCiAyMDIxLTAzLTMwICBXZW5zb24gSHNpZWggIDx3ZW5z
b25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEZhbGwgYmFjayB0byBjb250ZXh0
IG1lbnUgcHJlc2VudGF0aW9uIGFmdGVyIGxvbmcgcHJlc3NpbmcgaW1hZ2Ugb3ZlcmxheSB0ZXh0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmlu
ZGV4IDJhMDg4N2U3M2U1NzFmMDA4ZTg4NGRiMzQzMDQ4NmQzNDIwMDcyMjAuLjdmOGFlNGYxNDBl
ZTc0M2QwZmU1ZjM5NTQzODdiZTNjZmQ2ZDVmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0
IENoYXJCdWZmZXJTZWFjaGVyIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgUHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25z
dCBIYXNoU2V0PFN0cmluZz4mIHNldCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZm
ZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKK3N0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9v
a1VwUHJpdmF0ZU5hbWVJbXBsKGNvbnN0IEJ1aWx0aW5OYW1lczo6UHJpdmF0ZU5hbWVTZXQmIHNl
dCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1
ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gc2V0LmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8
Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yID09IHNldC5lbmQoKSkK
QEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgUHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZh
dGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmluZz4mIHNldCwgY29ucwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxL
bm93blN5bWJvbEltcGwoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPiYgbWFwLCBj
b25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVy
KQorc3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgQnVp
bHRpbk5hbWVzOjpXZWxsS25vd25TeW1ib2xNYXAmIG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNs
YXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJh
dG9yID0gbWFwLmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7
CiAgICAgaWYgKGl0ZXJhdG9yID09IG1hcC5lbmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRleCAzMTk0NWJmM2UxNmNkMzA0ZThkODgyOWIx
OTk3MWRhN2NjY2UzOWEyLi4wMGQ5NmQzYzc0NDVlYWE2YjQ4M2Q0MDlhZDRmODc4NWRiMzdjNGQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBA
IC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIK
KyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xOTksNiArMjAxLDkgQEAgY2xh
c3MgQnVpbHRpbk5hbWVzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdWlsdGluTmFtZXMp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAKIHB1YmxpYzoKKyAgICB1c2luZyBQcml2
YXRlTmFtZVNldCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJp
bmc+OworICAgIHVzaW5nIFdlbGxLbm93blN5bWJvbE1hcCA9IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKKwogICAgIEJ1aWx0aW5O
YW1lcyhWTSYsIENvbW1vbklkZW50aWZpZXJzKik7CiAKICAgICBQcml2YXRlU3ltYm9sSW1wbCog
bG9va1VwUHJpdmF0ZU5hbWUoY29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwpAQCAtMjMyLDggKzIz
Nyw2IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1f
ZG9sbGFyVk1OYW1lOwogICAgIGNvbnN0IEpTQzo6SWRlbnRpZmllciBtX2RvbGxhclZNUHJpdmF0
ZU5hbWU7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fcG9seVByb3RvUHJpdmF0ZU5hbWU7
Ci0gICAgdXNpbmcgUHJpdmF0ZU5hbWVTZXQgPSBIYXNoU2V0PFN0cmluZz47Ci0gICAgdXNpbmcg
V2VsbEtub3duU3ltYm9sTWFwID0gSGFzaE1hcDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKICAgICBQ
cml2YXRlTmFtZVNldCBtX3ByaXZhdGVOYW1lU2V0OwogICAgIFdlbGxLbm93blN5bWJvbE1hcCBt
X3dlbGxLbm93blN5bWJvbHNNYXA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKaW5kZXggNWNmNGZh
NTVjM2VlZWRlZjRmOGVhOTNjZDYxZDQ2NjFlYjY3ZjgyYS4uNzg1N2RiYTAxMTU4YTc2ZjdlMDE2
YTIzNzkzNTA1ZDZkYTViMzBjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTIxMiw3ICsyMTMsNyBAQCBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5IHsK
IAogcHJpdmF0ZToKICAgICBWTSYgbV92bTsKLSAgICBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3Ry
aW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9ieXRlY29kZUludHJpbnNpY01h
cDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFVu
aXF1ZWRTdHJpbmdJbXBsPiwgRW50cnksIElkZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50
cmluc2ljTWFwOwogCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05T
VEFOVF9HRU5FUkFUT1JTKG5hbWUpIFN0cm9uZzxVbmtub3duPiBtXyMjbmFtZTsKICAgICBKU0Nf
Q09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVFNfU0lNUExFX0VBQ0hfTkFNRShKU0Nf
REVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAppbmRleCA0NGQxY2ZkYmQ0OTQ5MTZl
ZGJmZmQ0ZjMxNGY3Y2Q1ZmJmYjZmMTUzLi5hZTZkYmIwZjhmNTkyMzUwYTRjZjJlNDEwZGYwYmQy
ZGFiYzc4YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5o
CkBAIC0yOTQsNiArMjk0LDcgQEAgSlNWYWx1ZSBpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1
ZShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKIHN0cnVjdCBJZGVudGlmaWVyUmVwSGFzaCA6IFB0
ckhhc2g8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4mIGtleSkgeyByZXR1cm4ga2V5LT5l
eGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVW5p
cXVlZFN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFz
aCgpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsK
IH07CiAKIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxp
bnQ+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
CmluZGV4IDQ2NTUyNDhmMjgwNDkxMGU0YjRkY2MyMGU1YmJlOTE0ZTU4OWYxZWEuLmM4MmZhNjBl
YjBjMjY3ZGFlNzAxODNjY2NhZWM4ZTk5YmY5NTRhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgaWYgKCFjYXNlRmlyc3RPcHRpb24uaXNOdWxsKCkpCiAg
ICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5z
aW9uS2V5OjpLZildID0gY2FzZUZpcnN0T3B0aW9uOwogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9j
YWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1
dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxl
cywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxl
dmFudEV4dGVuc2lvbktleTo6Q28sIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLZiwgUmVsZXZhbnRF
eHRlbnNpb25LZXk6OktuIH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZl
ZC5sb2NhbGU7CkBAIC00NDQsNyArNDQ0LDcgQEAgYm9vbCBJbnRsQ29sbGF0b3I6OnVwZGF0ZUNh
bkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24oKSBjb25zdAogfQogCiAjaWYgQVNTRVJUX0VOQUJM
RUQKLXZvaWQgSW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBsb2NhbGVzKQordm9pZCBJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxl
SW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmIGxvY2FsZXMpCiB7CiAgICAgZm9yIChhdXRvJiBs
b2NhbGUgOiBsb2NhbGVzKSB7CiAgICAgICAgIGF1dG8gY2hlY2tBU0NJSU9yZGVyaW5nV2l0aERV
Q0VUID0gW10oY29uc3QgU3RyaW5nJiBsb2NhbGUsIFVDb2xsYXRvciYgY29sbGF0b3IpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKaW5kZXggMjRkNjE2
MTY0OWFkOWZlN2Q0ZjcwYWU2YzI5YzgyYTdlMmY5NmYyMy4uNWU1MmExYzkyNWMyZWQ0MDNjMTM3
NTNjNWMxNzJjOWZjZDNlZjA5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkludGxPYmplY3QuaCIKICNpbmNsdWRlIDx1bmlj
b2RlL3Vjb2wuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvSUNVSGVscGVycy5oPgogCkBA
IC03Myw5ICs3Myw5IEBAIGNsYXNzIEludGxDb2xsYXRvciBmaW5hbCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHN0YXRpYyB2b2lk
IGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBz
dGF0aWMgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgTG9jYWxlU2V0Jik7CiAj
ZWxzZQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29u
c3QgSGFzaFNldDxTdHJpbmc+JikgeyB9CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNoZWNrSUNV
TG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmKSB7IH0KICNlbmRpZgogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAKaW5kZXggZjUyZWJiMjIyYjM0YmQ2YzBkNDM4MjliNTNiOTc1N2I5YTFmYzNiOS4u
Zjg5ODA2YzU2YjI2MDUyMmZjN2M3Yjk4YWY4NTJjZjczM2Y4OTg1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCkBAIC01
NjYsNyArNTY2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGlt
ZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICBsb2NhbGVPcHRp
b25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6SGMpXSA9IFN0
cmluZygpOwogICAgIH0KIAotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9j
YWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBh
dXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0
aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q2EsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpI
YywgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2Nh
bGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
MWJiYTFiMDVjMmUzMmFjMGQxOGRkMTQzNmMzNDg4NjQwZjcwYTRhOS4uYzA5MDliODkxZTk0MzBj
MGRhNDM4YTEwNDgzYjBmMzJhMGYxMjk0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YsIChKCiAgICAgLy8gMTIu
Mi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0
aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBi
ZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAgIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExv
Y2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAppbmRleCAyMmExMTVkMTM5ZjZjNWIyNDVl
ZGViYTgwOWUyOGU5ODY3NjgwYjgzLi4wZGU1NzQyOTM0NWFkODFkYWU0MTYwZWFkZGI1MDk3YzY0
MjBjMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlz
cGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlz
cGxheU5hbWVzLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIEludGxEaXNwbGF5TmFtZXM6Omlu
aXRpYWxpemVEaXNwbGF5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKICAg
ICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxv
Y2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsg
fSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCmluZGV4IGQxZjA2NmYwYTA5MzM3NjkxMWRiMTBiODhmYWE5ZjQ1
ZjM1YjU2OGMuLjE3ZTA3OWZlNzdkYTBhMDdjNDM3ZTBlZTdhNmQ5ODNmYmVjYzM3YjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3Bs
YXlOYW1lc0NvbnN0cnVjdG9yLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2Ys
IChKU0dsb2JhCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtZGlzcGxheW5h
bWVzLyNzZWMtSW50bC5EaXNwbGF5TmFtZXMuc3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAvLyAx
LiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGlzcGxheU5hbWVzJS5bW2F2YWlsYWJsZUxvY2Fs
ZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
RGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8g
Mi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVz
KS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9j
YWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCmluZGV4IDgxN2I5
Y2FlNTkzNGFmNzY1NTQ2MzJkZTk5NTc2ODVlMDkwYTMwOTIuLjg4MGVkMjZlNzNhZmUxY2E5NDQ3
NzQ1YmVlZmFmOWI1ZDM2ZjQxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIEludGxMaXN0
Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25z
dCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRp
b25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1h
dENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDQ3ZTVlZTIzZGJmMWUwYjAzOWMzY2FmMDc4MGYx
YjY0M2Q1YzEyYzkuLjAwOGU5M2Q4Y2JhY2IyNjdlMGRmMGU2Nzk4YmRhNzIyMjE1YTNjNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChK
U0dsb2JhbE8KICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1saXN0LWZvcm1h
dC8jc2VjLUludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YKIAogICAgIC8vIDEuIExl
dCBhdmFpbGFibGVMb2NhbGVzIGJlICVMaXN0Rm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4K
LSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVx
dWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZl
Y3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCmluZGV4IDAwN2M5ZDMwMjcx
NWE1ODMyODU3NjBkY2M3MGIyZDRlZjlmMDU4Y2IuLmYwMzUwYzg0MzhkNzdlYmU3YTVmOTI3NDkw
N2UzY2I0MmEzN2U1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxOdW1iZXJGb3JtYXQuY3BwCkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmEKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVs
ZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1iZXJpbmdTeXN0ZW07CiAgICAgfQogCi0gICAg
YXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1iZXJGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xv
YmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRj
aGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVE
YXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggMWM1YjI5M2FmY2RhZTJlYjYyZWJiYzI2NDQzNzlhZjU5MzIxMTBmMC4u
ZjIxYTY5MjZmMzFlZDdhYWYyNWU4ZmQ0OWQ5OTdjMWQ1OTFmMTM4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29u
c3RydWN0b3IuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0cK
ICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2Fs
ZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxl
TG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
TnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3Rl
ZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8
U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCA0MGY4OWU4ZmU3NGU4ZGJjZjBlNTgzNTBhYmVj
MWY3YTg1ZDhiZGU0Li45ZDUzNmQ3NGMwMTlkMThkYTc1ODM3ZDU5YWI3Mzg3OTZlZWQ2MDI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcApAQCAtMzUy
LDcgKzM1Miw3IEBAIFN0cmluZyBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqIGxv
Y2FsZUlELCBib29sIGlzSW1tb3J0YWwpCiB9CiAKIC8vIEVuc3VyZSB3ZSBoYXZlIHh4LVpaIHdo
ZW5ldmVyIHdlIGhhdmUgeHgtWXl5eS1aWi4KLXN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2Nh
bGVJZk5lZWRlZChIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcg
bG9jYWxlKQorc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKExvY2FsZVNl
dCYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nVmlldyBsb2NhbGUpCiB7CiAgICAgaWYgKGxvY2Fs
ZS5sZW5ndGgoKSA8IDEwKQogICAgICAgICByZXR1cm47CkBAIC0zNzcsOSArMzc3LDkgQEAgc3Rh
dGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKEhhc2hTZXQ8U3RyaW5nPiYgYXZh
aWxhYmxlTG9jYWxlcywgU3RyaW4KICAgICBhdmFpbGFibGVMb2NhbGVzLmFkZChTdHJpbmdJbXBs
OjpjcmVhdGVTdGF0aWNTdHJpbmdJbXBsKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsK
IH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCitjb25z
dCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gYXZhaWxhYmxlTG9jYWxlczsKKyAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsKICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uo
aW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAgICAgIGF2YWlsYWJsZUxvY2FsZXMuY29uc3RydWN0
KCk7CkBAIC00NTUsOSArNDU1LDkgQEAgY29uc3QgdWludDhfdCBkdWNldFdlaWdodHNbMTI4XSA9
IHsKICAgICA5NSwgOTcsIDk5LCAyMSwgMzYsIDIyLCAzNywgMCwKIH07CiAKLWNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCitjb25zdCBMb2NhbGVT
ZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFibGVMb2NhbGVzOworICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplT25jZSwgWyZdIHsKICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3Qo
KTsKQEAgLTQ3NiwyMiArNDc2LDIxIEBAIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxh
dG9yQXZhaWxhYmxlTG9jYWxlcygpCiAgICAgcmV0dXJuIGF2YWlsYWJsZUxvY2FsZXM7CiB9CiAK
LWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQor
Y29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gY2FjaGVkQXZhaWxhYmxlTG9j
YWxlczsKLSAgICBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBjYWNoZWRBdmFp
bGFibGVMb2NhbGVzLmdldCgpOwotCisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2Nh
bGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRp
YWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewotICAg
ICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpOworICAgICAgICBhdmFpbGFi
bGVMb2NhbGVzLmNvbnN0cnVjdCgpOworICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy0+
aXNFbXB0eSgpKTsKICAgICAgICAgY29uc3RleHByIGJvb2wgaXNJbW1vcnRhbCA9IHRydWU7CiAg
ICAgICAgIGludDMyX3QgY291bnQgPSB1YnJrX2NvdW50QXZhaWxhYmxlKCk7CiAgICAgICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFN0cmluZyBs
b2NhbGUgPSBsYW5ndWFnZVRhZ0ZvckxvY2FsZUlEKHVicmtfZ2V0QXZhaWxhYmxlKGkpLCBpc0lt
bW9ydGFsKTsKICAgICAgICAgICAgIGlmIChsb2NhbGUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsK
LSAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChhdmFpbGFibGVMb2NhbGVz
LCBsb2NhbGUpOworICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy0+YWRkKGxvY2FsZSk7Cisg
ICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoYXZhaWxhYmxlTG9jYWxlcy5n
ZXQoKSwgbG9jYWxlKTsKICAgICAgICAgfQogICAgIH0pOwogICAgIHJldHVybiBhdmFpbGFibGVM
b2NhbGVzOwpAQCAtNjk4LDcgKzY5Nyw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAgICAg
cmV0dXJuIHNlZW47CiB9CiAKLVN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiBsb2NhbGUpCitTdHJp
bmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMs
IGNvbnN0IFN0cmluZyYgbG9jYWxlKQogewogICAgIHJldHVybiBiZXN0QXZhaWxhYmxlTG9jYWxl
KGxvY2FsZSwgWyZdKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlKSB7CiAgICAgICAgIHJldHVybiBh
dmFpbGFibGVMb2NhbGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSk7CkBAIC03NjMsNyArNzYyLDcgQEAg
U3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUp
CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1
bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIExvb2t1
cE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtbG9va3VwbWF0Y2hlcgpAQCAtODA0LDcg
KzgwMyw3IEBAIHN0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVzdEZpdE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0
IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2Fs
ZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExv
Y2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMt
YmVzdGZpdG1hdGNoZXIKQEAgLTgyNSw3ICs4MjQsNyBAQCBjb25zdGV4cHIgQVNDSUlMaXRlcmFs
IHJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5nKFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7CiB9CiAKLVJlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0
aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5
PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29u
c3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKQorUmVzb2x2ZWRMb2NhbGUgcmVzb2x2
ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBM
b2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiBv
cHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2
YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJp
bmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpCiB7CiAgICAgLy8gUmVzb2x2ZUxvY2FsZSAoYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucywgcmVsZXZhbnRFeHRlbnNp
b25LZXlzLCBsb2NhbGVEYXRhKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLXJlc29sdmVsb2NhbGUKQEAgLTg5MCw3ICs4ODksNyBAQCBSZXNvbHZlZExvY2FsZSBy
ZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPgogICAgIHJldHVybiByZXNvbHZlZDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGxvb2t1
cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVx
dWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9j
YWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8g
TG9va3VwU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1sb29rdXBzdXBw
b3J0ZWRsb2NhbGVzCkBAIC05MTksNyArOTE4LDcgQEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1
cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFMK
ICAgICByZXR1cm4gc3Vic2V0OwogfQogCi1zdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRl
ZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcykKK3N0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWJlc3RmaXRzdXBwb3J0ZWRs
b2NhbGVzCkBAIC05MjgsNyArOTI3LDcgQEAgc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0
ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2gKICAgICBy
ZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogfQogCi1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1
ZSBvcHRpb25zVmFsdWUpCitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCiB7
CiAgICAgLy8gU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3Nl
Yy1zdXBwb3J0ZWRsb2NhbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2Jq
ZWN0LmgKaW5kZXggZmEyZTgyODA3OGI3ZTg1MWE3NzFkYzBhMDgwZmI2YTY4NWExMmFlZC4uNjE0
MGMyMGQ2ZmQzZThlOGI1Mjg5NzVkNjM4NDhmZjE4M2ZjYWI3MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIHN0cnVjdCBVRmllbGRQb3NpdGlvbkl0ZXJhdG9y
OwogCkBAIC04MSwxNSArODIsMTYgQEAgY2xhc3MgSW50bE9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKIH07CiAKIFN0cmluZyBkZWZhdWx0TG9jYWxlKEpTR2xvYmFsT2Jq
ZWN0Kik7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxBdmFpbGFibGVMb2NhbGVzKCk7Ci1j
b25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKLWNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKLWlu
bGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0
dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5s
aW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQordXNpbmcgTG9jYWxlU2V0ID0g
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz47Citjb25zdCBM
b2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2NhbGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxD
b2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRl
ckF2YWlsYWJsZUxvY2FsZXMoKTsKK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxEYXRlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygp
OyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9j
YWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBM
b2NhbGVTZXQmIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50
bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNv
bnN0IExvY2FsZVNldCYgaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4g
aW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogCiBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihK
U0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpTT2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1l
KTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNP
YmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25z
dCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJh
Y2spOwpAQCAtMTA3LDEwICsxMDksMTAgQEAgc3RydWN0IFJlc29sdmVkTG9jYWxlIHsKICAgICBS
ZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5zaW9uczsKIH07CiAKLVJlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVN
YXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3Ry
aW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7
Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOworUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2Fs
ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1hdGNoZXIsIGNvbnN0
IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3RkOjppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0
ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxl
RGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKTsKK0pTVmFsdWUgc3Vw
cG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxl
TG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUg
b3B0aW9ucyk7CiBTdHJpbmcgcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGxvY2FsZSk7Ci1TdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsK
K1N0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9j
YWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRMb2NhbGUpOwogdGVtcGxhdGU8dHlwZW5hbWUg
UHJlZGljYXRlPiBTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBTdHJpbmcmIHJlcXVl
c3RlZExvY2FsZSwgUHJlZGljYXRlKTsKIFZlY3RvcjxTdHJpbmc+IG51bWJlcmluZ1N5c3RlbXNG
b3JMb2NhbGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAppbmRleCBlNjVmYjBkNzMyNzE1Mjli
NWNhYTlkOWZhYmVjOWJlYmNiNGM1NmEyLi5jY2NmNDk3MTU4MThkZmQzMDI2OGEzMTdhZGFkYjhl
OGRjYmFmNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQ
bHVyYWxSdWxlcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6Omlu
aXRpYWxpemVQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHUK
ICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1hdGNo
ZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hl
ciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJf
cywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0
aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBsdXJhbFJ1bGVzQXZhaWxh
YmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1
cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVM
b2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBs
b2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogICAgIG1fbG9j
YWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0Nv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlc0NvbnN0cnVjdG9yLmNwcAppbmRleCBmODg1MGIxMGE4YmZlNjU3MDQzZDJhMWVhZDA3MTEw
NDFiOTIwNTkxLi4yN2IyMzEwYjM0OGExZTRhNDVkZjBlZjkxMTUzYTllNDVlOGZmNTdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzQ29uc3RydWN0b3IuY3BwCkBAIC0xMTUsNyArMTE1LDcgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKEludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNP
ZiwgKEpTR2wKIAogICAgIC8vIDEzLjMuMiBJbnRsLlBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2Fs
ZXNPZiAobG9jYWxlcyBbLCBvcHRpb25zIF0pCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hNDAyLyNzZWMtaW50bC5wbHVyYWxydWxlcy5zdXBwb3J0ZWRsb2NhbGVzb2YKLSAgICBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCmluZGV4IGY3ZDM4YjgxZWFjODI4NjNmNWFk
OGJjYzgzMjQ2NTI2OTI4MTc3NmUuLjJiNWQyOGVmZDhjZThmMjdkNjU3NTg1MDJhMzEwOTgwNWI3
MDczZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxh
dGl2ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJbnRsUmVs
YXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXplUmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWwKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBudW1iZXJpbmdTeXN0ZW07CiAgICAgfQogCi0g
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZl
VGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVM
b2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBh
dXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVs
ZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVz
b2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVU
aW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IDE3NGI2ZmRjZTJjODZiZmMxMWI1ZWIxZWY1
MzcyMDk4ZWE4OTg0OTQuLjlhOGM4ZDRjYTZjNmM0ZWQzNWZmNzBlOTdlN2QzZWNjNGY1OWFlNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTExLDcgKzExMSw3
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVU
aW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVz
ID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcApp
bmRleCAwNGNmMTdkNTA5MzU2MjFjNDI0OGU4NDhiNzc1MGVkYTM3ZWE4MWU4Li4yYWQ3NGY5NGJi
ZThjYTE3Yzc3NTg5MmFmYmM2ZmVmNzEyYTYyYjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIElu
dGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdtZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBsbwogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAg
ICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxv
Y2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3Qs
IGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2Fs
ZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxv
Y2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50ZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
U2VnbWVudGVyQ29uc3RydWN0b3IuY3BwCmluZGV4IGZmZDczZjczNmE5NzQzMzc4ZGZkYjFhMzFk
NGJmOTlmOThkZWFlNTIuLjA5Mzk0ZGMxOGVkZGYyYTkzMTk1MWU3YzZmYWE5NzIyOGZiZjYzNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNl
Z21lbnRlckNvbnN0cnVjdG9yLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihJbnRsU2VnbWVudGVyQ29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChK
U0dsb2JhbE9iCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtc2VnbWVudGVy
LyNzZWMtaW50bC5zZWdtZW50ZXIuc3VwcG9ydGVkbG9jYWxlc29mCiAKICAgICAvLyAxLiBMZXQg
YXZhaWxhYmxlTG9jYWxlcyBiZSAlU2VnbWVudGVyJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAg
ICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVy
QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3Rl
ZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8
U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXggODI3MzdkOGY5YzY4ZGUxOGU4N2Y1ZTU3Y2VhMGE2
MDIxMGU4ODg4Ni4uM2E3MTFmYjkwOWI2OTBlMGYxOWZlYTUxNzRjNjgwNThjYmU0YzQ3MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCkBAIC0zMyw3ICsz
Myw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUg
PGFycmF5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3Mg
UmVnRXhwQ2FjaGUgZmluYWwgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBmcmllbmQgY2xhc3MgUmVnRXhwOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPj4gUmVnRXhwQ2FjaGVNYXA7CisgICAg
dHlwZWRlZiBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVn
RXhwPj4gUmVnRXhwQ2FjaGVNYXA7CiAKIHB1YmxpYzoKICAgICBSZWdFeHBDYWNoZShWTSogdm0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAppbmRleCBlMGY4ODMx
MDIwZDZkOTM1YzcwMTkwMWZiNDliMjhjYjZkYzkzOGZjLi5kMTY2Mjc5ZjZkYjJlY2VlYjJlM2U3
MGIwN2Q5NjNiZWU0YWJlMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBLZXkuaApAQCAtNzEsNiArNzEsNyBAQCBzdHJ1Y3QgUmVnRXhwS2V5IHsKICAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnRXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0
ZXJuLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVnRXhwS2V5
JiBhLCBjb25zdCBSZWdFeHBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAg
ICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MjZiNDVlNTUzYjA2N2UyNDAzMjdjYzg4NjdlYzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNj
MzFkMzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC03MTcsNyArNzE3LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0Mw
OERFIC8qIFRocmVhZEdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRo
cmVhZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRD
QUIwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzFCREUyODIyRTkxM0NDMDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRh
YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdp
c3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3Rl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcy
Q0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEw
OTIgLyogTmFrZWRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRS
ZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5
REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJl
Zi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYy
NUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzgs
NiArNzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGlu
ZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUwMDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElDVUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5
c3RlbUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQg
LyogTm9ubW92YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjExLDYgKzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgy
NUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLywKIAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUg
LyogUmVzb3VyY2VVc2FnZS5oICovLAogCQkJCUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBS
ZXRhaW5QdHIuaCAqLywKKwkJCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29k
SGFzaE1hcC5oICovLAorCQkJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUyNjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhh
c2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYxMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNw
cCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJ
CTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJm
YzkxNzguLmUxZmE1NDVhNDAxNzhlYTMyMzcwODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VVc2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBS
b2Jpbkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jpbkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RI
YXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAogICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRo
bWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dU
Ri93dGYvRm9yd2FyZC5oCmluZGV4IDQxOThlODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYz
Nzg5YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmgKQEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0
czsKIHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUuLi4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxh
dGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRz
Oworc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlwZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4gY2xhc3MgSGFzaFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8
VmFsdWU+PiBjbGFzcyBIYXNoQ291bnRlZFNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVu
YW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJn
Pj4gY2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9
IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4g
Y2xhc3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0
czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBI
YXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFy
ZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0
czxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0Owog
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYv
d3RmL0hhc2hNYXAuaAppbmRleCBiZjZiOGJhYzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1
YmNmLi44OTAxYjVmM2YyNzliOGJlMDM2NTBjN2MyYWRlYjYxYjBhZWZhOWU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5o
CkBAIC0zMSw3ICszMSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBh
aXJLZXlFeHRyYWN0b3IgewogICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBl
eHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJuIHAua2V5OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwcml2YXRlOgpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsK
IAogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOwogCi0gICAgdXNpbmcgSGFzaFRh
YmxlVHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBh
aXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVl
UGFpclRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5h
bWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRlIFRhYmxlVHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBh
aXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hG
dW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKIAogICAgIGNsYXNzIEhh
c2hNYXBLZXlzUHJveHk7CiAgICAgY2xhc3MgSGFzaE1hcFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkx
ICsyMzIsODkgQEAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAo
SGFzaE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKIHsKICAgICBtX2lt
cGwuc3dhcChvdGhlci5tX2ltcGwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVk
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5h
bWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpzaXplKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNp
dHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9v
bCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9pbXBsLmlzRW1wdHkoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+
IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+OjplbmQoKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdp
bigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6YmVnaW4oKSBjb25zdCAtPiBjb25z
dF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmVuZCgpIGNvbnN0IC0+IGNv
bnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9y
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0
dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29u
c3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29u
c3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0
IEtleVR5cGUmIGtleSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9v
bCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyhrZXkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUm
IHZhbHVlKQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25z
dCBUWVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRy
YW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1p
bmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1I
YXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1
ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRy
YW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1h
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3Qg
LT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNv
bnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVu
dHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8
SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0
b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMyNCw5ICszMjIsOSBAQCBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFw
cGVkUGVla1R5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmlubGluZUdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVl
a1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZ
UEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0g
Y29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8
SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0
b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTMzNCwxNiArMzMyLDE2IEBAIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25z
dCAtPiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIGJvb2wg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBU
WVBFJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
PEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xh
dG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwg
ViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgQWRkUmVz
dWx0IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJk
PFY+KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewpAQCAtMzUzLDkxICsz
NTEsOTEgQEAgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUg
Vj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYg
dmFsdWUpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRy
YWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewog
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVl
UGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZv
cndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlw
ZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRl
PHR5cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojpp
bmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lO
TElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5
LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0
ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVu
Y3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJl
c3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYg
a2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KGtl
eSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
PgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtl
eSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0Fy
Zz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICBy
ZXR1cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNB
cmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBr
ZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRB
cmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0Fy
Zz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRl
cjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtl
eSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
PgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlw
ZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJh
aXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1h
cHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSks
IHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0
c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0
QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNf
SU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlU
eXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVB
ZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZ
U19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUm
JiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQo
V1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFi
bGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46
OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1
bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJn
LCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUm
IGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxp
bmVFbnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJl
c3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtl
eSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVF
bnN1cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5l
IGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsKICAgICByZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJ
TkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25z
dCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHMsIHR5cGVuYW1lIFk+CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBNYXBwZWRUcmFpdHMsIFk+OjppbmxpbmVHZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAt
PiBNYXBwZWRQZWVrVHlwZQogewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3Rf
Y2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRp
dHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4
IEBAIEFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46
OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrCiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVl
ayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZShpdGVyYXRv
ciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMsMjcgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5j
dG9yJiYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJl
bW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYo
c3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3Zl
KGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQg
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
TWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CithdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBl
ZFRha2VUeXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09
IGVuZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAgQEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHkKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1Nt
YXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1
bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJh
dG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBl
cjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtl
eSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNo
TWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVu
YW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6aW5saW5lR2V0KHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAg
ICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1f
aW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwy
MyArNTE0LDIzIEBAIGlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdl
dCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUKICAgICByZXR1cm4gTWFwcGVkVHJh
aXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVr
VHlwZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAg
ICByZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46
OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZSh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVt
b3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6
dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRl
cmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1
NDAsMTQgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAg
IG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYg
a2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwg
ViwgVywgWCwgWT46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIGlmIChL
ZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtleSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTU2NSwxMyArNTYzLDEzIEBAIGlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Omlz
VmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEs
IGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNv
bnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9
IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgp
OwogICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIs
OCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29u
c3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICBy
ZXR1cm4gIShhID09IGIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5o
IGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IDY4YTE1ZGMwMzc1YTE3MTljN2FiMzI0
NjJjN2FkZjc5ZWQ2MGI0ZWYuLmE0MDJjZTI3Mzc1YWNlYjBjZWIwNGY5ZWI1YTFlNDFhZDJjNjlm
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0
cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRh
YmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNDEsNyArMzksNyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFs
IHsKICAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBl
OwogCiBwcml2YXRlOgotICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8VmFsdWVU
eXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRy
YWl0cywgVmFsdWVUcmFpdHM+OworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBU
YWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJ
ZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRz
PjsKIAogcHVibGljOgogICAgIC8vIEhhc2hTZXQgaXRlcmF0b3JzIGhhdmUgdGhlIGZvbGxvd2lu
ZyBzdHJ1Y3R1cmU6CkBAIC0xODYsMTA5ICsxODQsMTA5IEBAIHN0cnVjdCBIYXNoU2V0RW5zdXJl
VHJhbnNsYXRvckFkYXB0b3IgewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2Fw
KEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnN3YXAo
SGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9pbXBsLnN3YXAob3RoZXIubV9pbXBsKTsgCiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdW5z
aWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhh
c2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuc2l6
ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4K
LWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNhcGFjaXR5KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNF
bXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0eSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5pc0VtcHR5KCk7IAogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxU
LCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9p
bXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRl
cmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+OjplbmQoKSBjb25zdCAtPiBp
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lu
bGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmZpbmQodmFsdWUpOyAK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6Y29udGFpbnMoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKHZh
bHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1dG8g
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1
ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdCAt
PiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJh
bnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9v
bCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29u
dGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0
ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9y
PgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5z
dXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2lubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjplbnN1
cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hTZXRFbnN1cmVUcmFuc2xhdG9yQWRhcHRvcjxUcmFp
dHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxG
dW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
LCBXPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJl
dHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1
ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBW
LCBXPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4g
bV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRW
b2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
LCBXPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQo
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGRWb2lkKFZhbHVlVHlwZSYm
IHZhbHVlKQogewogICAgIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Citpbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRz
Pjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFz
aFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4K
LWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0
ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoSXRl
cmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKQEAgLTI5Niw5ICsyOTQsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBj
aGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitp
bmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2lu
LCBJdGVyYXRvclR5cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZv
ciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTMw
Niw4ICszMDQsOCBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9p
bXBsID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE2LDI3ICsz
MTQsMjcgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0
KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0
IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVt
b3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZh
bHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFYsIFc+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHJl
dHVybiBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpj
bGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2xlYXIoKQogewogICAg
IG1faW1wbC5jbGVhcigpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3Ig
aXQpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShp
dGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKIHsKICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAg
IHJldHVybiBWYWx1ZVRyYWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAg
LTM0Niw0OCArMzQ0LDQ4IEBAIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRl
cmF0b3IgaXQpIC0+IFRha2VUeXBlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8
VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+Citpbmxp
bmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
IC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWLCBXPjo6dGFrZUFueSgpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2Uo
YmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4K
IHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2
YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFs
dWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+
OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVl
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxh
dGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUs
IGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQ
dHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNv
bnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8
dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJs
ZVRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6
dHlwZQogewogICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5s
aW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojp0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQogewogICAg
IHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFs
aWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgViwgVz46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIGlm
IChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC00MDMsOSArNDAxLDkgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNW
YWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8
dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QK
K2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJD
b2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBv
dGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTYsMjIg
KzQxNCwyMiBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0
IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRl
PHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46
Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0
CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVy
Q29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyQ29sbGVjdGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+Ci12b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K3ZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCiB7CiAgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IGxpc3QpCiAgICAgICAgIGFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFY+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFYsIFc+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFi
bGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDZkNGIyYzhmNzJiMmUwMzZj
MTYwMDEwYzBhNjI5NTg3YzVlZGYwYTguLmQzOTk3OWE0MWVhYzhkZWFhMzdlNDU3OThjMjRlMmJj
MDc4ZTRkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC03OSw0NiArNzksNDggQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogI2VuZGlmCiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPios
Ci0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSos
IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0g
ICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hU
YWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhh
c2hUYWJsZVR5cGUqKTsKIAogI2lmICFDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAg
ICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBI
YXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5
cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2
b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwg
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBp
bnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAK
ICAgICB0eXBlZGVmIGVudW0geyBIYXNoSXRlbUtub3duR29vZCB9IEhhc2hJdGVtS25vd25Hb29k
VGFnOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xh
c3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9y
d2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBj
b25zdCBWYWx1ZSY+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJp
dmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFi
bGVUeXBlID0gSGFzaFRhYmxlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhh
c2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNl
VHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0g
ICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNo
VGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CisgICAgICAgIGZy
aWVuZCBpdGVyYXRvcjsKIAogICAgICAgICB2b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQogICAgICAg
ICB7CkBAIC0yNDMsMTggKzI0NSwxOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVi
bGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6
cHRyZGlmZl90LCBWYWx1ZSosIFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVU
eXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAg
IHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAg
ICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBS
ZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAK
LSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJs
ZVR5cGU7CiAKICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUs
IFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kKSA6IG1faXRlcmF0b3IodGFibGUsIHBv
cywgZW5kKSB7IH0KICAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFi
bGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5cGUgZW5kLCBIYXNoSXRlbUtub3duR29vZFRh
ZyB0YWcpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBlbmQsIHRhZykgeyB9CkBAIC0zNDcsOCAr
MzQ5LDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hU
YWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8
SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBU
cmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAg
IHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwpAQCAtNDA3LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIEhhc2hUYWJs
ZSgpOwogICAgICAgICB+SGFzaFRhYmxlKCkgCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoKTsgCisgICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMp
OyAKICAgICAgICAgICAgIGlmIChtX3RhYmxlKQogICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVU
YWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9O
CkBAIC01NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5j
eUV4Y2VwdFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9S
UwotICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0gICAgICAgIHN0
YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAgICAgICAgIC8v
IExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxN
YXhMb2FkRGVub21pbmF0b3I7CkBAIC04NTYsNyArODUzLDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBjaGVja0tleTxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKIApAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tl
eTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7
CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3Rh
YmxlKQogICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7
CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAog
ICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKQEAgLTExMTAsMTQg
KzExMDcsMTQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVBbmRJbnZhbGlkYXRl
V2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0gICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0
aGlzKTsKICAgICAgICAgcmVtb3ZlKHBvcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lk
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqIHBvcykKICAgICB7Ci0g
ICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAg
ICAgcmVtb3ZlKHBvcyk7CiAgICAgfQpAQCAtMTM3Myw3ICsxMzcwLDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZv
aWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjpjbGVhcigpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIGlmICghbV90
YWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTQwOSw4ICsxNDA2LDggQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgog
ICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgewotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJdGVyYXRv
cnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAgICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlLCBvdGhl
ci5tX3RhYmxlKTsKIApAQCAtMTQzNCw3ICsxNDMxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgLCBtX211dGV4KG1ha2VVbmlx
dWU8TG9jaz4oKSkKICNlbmRpZgogICAgIHsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZvdGhlcik7CiAKICAgICAgICAg
bV90YWJsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWJsZSwgbnVsbHB0cik7CiAKQEAgLTE1
MDAsMzAgKzE0OTcsMjkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKIAogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNv
bnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jaygqbV9tdXRleCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0OwotICAgICAg
ICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKKyAgICAgICAg
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIG5leHQ7CisgICAgICAgIGZv
ciAodHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IqIHAgPSB0YWJsZS0+bV9p
dGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0Owot
ICAgICAgICAgICAgcC0+bV90YWJsZSA9IDA7Ci0gICAgICAgICAgICBwLT5tX25leHQgPSAwOwot
ICAgICAgICAgICAgcC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgICAgICBwLT5tX3RhYmxlID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fbmV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICBw
LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICBtX2l0ZXJhdG9ycyA9
IDA7CisgICAgICAgIHRhYmxlLT5tX2l0ZXJhdG9ycyA9IG51bGxwdHI7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KLSAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogdGFibGUsCi0gICAg
ICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJs
ZSwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAg
ICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7Cisg
ICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBJbnNlcnQgaXRl
cmF0b3IgYXQgaGVhZCBvZiBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAg
ICBpZiAoIXRhYmxlKSB7Ci0gICAgICAgICAgICBpdC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAg
IGl0LT5tX25leHQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOwogICAgICAgICAgICAgQVNTRVJU
KHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7CkBAIC0xNTM2LDggKzE1MzIsOCBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4qIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9p
ZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBp
dCkKICAgICB7CiAgICAgICAgIC8vIERlbGV0ZSBpdGVyYXRvciBmcm9tIGRvdWJseS1saW5rZWQg
bGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghaXQtPm1fdGFibGUpIHsKQEAgLTE1NTks
MTMgKzE1NTUsMTggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFz
aFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGl0LT5tX3RhYmxl
ID0gMDsKLSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0g
MDsKKyAgICAgICAgaXQtPm1fdGFibGUgPSBudWxscHRyOworICAgICAgICBpdC0+bV9uZXh0ID0g
bnVsbHB0cjsKKyAgICAgICAgaXQtPm1fcHJldmlvdXMgPSBudWxscHRyOwogICAgIH0KIAogI2Vu
ZGlmIC8vIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAorICAgIHN0cnVjdCBIYXNoVGFibGVU
cmFpdHMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgICAgICB1c2luZyBUYWJsZVR5cGUgPSBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz47CisgICAgfTsKKwogICAgIC8vIGl0ZXJhdG9yIGFkYXB0ZXJzCiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yQWRhcHRlciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2Fy
ZF9pdGVyYXRvcl90YWcsIFZhbHVlVHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IFZhbHVlVHlw
ZSosIGNvbnN0IFZhbHVlVHlwZSY+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmlu
SG9vZEhhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kN2JlMjFmYzViNjlkYTIyNjY5MGE2YjI4MGNhZTAwMDRkMTI3MzRmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKKy8vIDk1JSBsb2FkLWZhY3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA5MCUgbG9hZC1mYWN0b3IuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFy
ZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFp
dHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRB
cmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgTWVt
b3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDc1JSBsb2FkLWZhY3Rv
ci4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0g
SGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRz
PE1hcHBlZEFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8S2V5QXJn
LCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBGYXN0
Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwOwordXNpbmcgV1RG
OjpNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcDsKK3VzaW5nIFdURjo6RmFzdFJvYmluSG9v
ZEhhc2hNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRhM2U0NWI5
MGJmNTY4ZWYxOWViZmIxOGUxZGEyNDc0ZmRlY2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyA5NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9
IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxW
YWx1ZUFyZz4+Cit1c2luZyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQg
PSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9yLgor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFz
aDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+Pgor
dXNpbmcgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBI
YXNoQXJnLCBUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+
OworCisvLyA3NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJn
ID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBGYXN0Um9iaW5Ib29kSGFzaFNldCA9IEhh
c2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJs
ZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDsKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdFJv
YmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6OkZhc3RSb2Jpbkhvb2RIYXNoU2V0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzY3MGZiODQwNjhmZGFlOWYyMjk4
MzQzZmJlN2IxNDE3NWE2ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9i
aW5Ib29kSGFzaFRhYmxlLmgKQEAgLTAsMCArMSw4ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgor
Y2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlOworCisvLyA5NSUgbG9hZCBmYWN0b3IuIFRoaXMgYSBi
aXQgcmVncmVzcyAiaW5zZXJ0aW9uIiBwZXJmb3JtYW5jZSwgd2hpbGUgaXQga2VlcHMgbG9va3Vw
IHBlcmZvcm1hbmNlIHNhbmUuCisvLyBSb2Jpbkhvb2RIYXNoVGFibGUgY2FuIHdvcmsgd2l0aCA5
NSUgbG9hZCBmYWN0b3IgYmVjYXVzZSBvZiBtYWludGFpbmVkIHByb2JlIGRpc3RhbmNlLgorc3Ry
dWN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gMTk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAyMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gOTAlIGxv
YWQgZmFjdG9yLiBSb2Jpbkhvb2RIYXNoVGFibGUgY2FuIHdvcmsgd2l0aCBzdWNoIGEgaGlnaCBs
b2FkLWZhY3Rvci4KKy8vIE9ic2VydmVkIHBlcmZvcm1hbmNlIGlzIHNsaWdodGx5IHdvcnNlIHRo
YW4gSGFzaFRhYmxlICg3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCUgZm9yIGxhcmdlIHRhYmxlKS4K
K3N0cnVjdCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gOTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDEwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7Cit9OworCisvLyA3NSUgbG9hZCBmYWN0
b3IsIHRoaXMgbWFpbnRhaW5zIHRoZSBwZXJmb3JtYW5jZSBzYW1lIHRvIEhhc2hUYWJsZSwgc3Rp
bGwgdGhlIGxvYWQgZmFjdG9yCisvLyBpcyBoaWdoZXIgKEhhc2hUYWJsZSB1c2VzIDc1JSBmb3Ig
c21hbGwgdGFibGUsIDUwIGZvciBsYXJnZSB0YWJsZSkuCitzdHJ1Y3QgRmFzdFJvYmluSG9vZEhh
c2hUYWJsZVNpemVQb2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9h
ZE51bWVyYXRvciA9IDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVu
b21pbmF0b3IgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7
Cit9OworCisvLyBSb2Jpbkhvb2QgSGFzaFRhYmxlIGhhcyBzZXZlcmFsIGxpbWl0YXRpb25zIGNv
bXBhcmVkIHRvIHVzdWFsIEhhc2hUYWJsZSwgdGhhdCdzIHdoeSB0aGlzIGlzIG5vdCBhIGRlZmF1
bHQgb25lLgorLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBjb21wdXRlcyBoYXNoIG11Y2ggbW9yZSBm
cmVxdWVudGx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIEtleSBzaG91bGQgY2FjaGUgY29tcHV0ZWQg
aGFzaC4KKy8vIEJ1dCBvdXIgZGVmYXVsdCBIYXNoVGFibGUgZG9lcyBub3QgY2FjaGUgaGFzaCB2
YWx1ZSBiZWNhdXNlIG9mIG1lbW9yeSB1c2FnZS4gVGhpcyBkZXNpZ24gbWVhbnMgdGhhdCBLZXkg
dHlwZQorLy8gc2hvdWxkIGhhdmUgaGFzaCB2YWx1ZSBpbnRydXNpdmVseSAoZS5nLiBXVEY6OlN0
cmluZyBob2xkcyBoYXNoIHZhbHVlIGludGVybmFsbHkpLgorLy8KKy8vIElmIHRoZSBhYm92ZSBy
ZXF1aXJlbWVudHMgbWVldCB5b3VyIHVzZSBjYXNlLCB0aGVuIHlvdSBjYW4gdHJ5IFJvYmluSG9v
ZCBIYXNoVGFibGUuCisvLyBUaGUgbGFyZ2VzdCBiZW5lZml0IGlzIHRoYXQgd2UgY2FuIHVzZSBz
aWduaWZpY2FudGx5IGhpZ2ggbG9hZC1mYWN0b3IgKDkwJSAtIDk1JSkhCisvLworLy8gVGhlIGFs
Z29yaXRobSBpcyBSb2Jpbkhvb2QtSGFzaGluZyArIGJhY2t3YXJkIHNoaWZ0IGRlbGV0aW9uLCBk
ZXNjcmliZWQgaW4gWzEsMl0uCisvLworLy8gTmFpdmUgUm9iaW5Ib29kSGFzaFRhYmxlIGhhcyBz
b21lIGNhc2VzIHdoaWNoIGNhdXNlIE8oTl4yKSB3aGVuIGl0ZXJhdGluZyBpdCBhbmQgaW5zZXJ0
aW5nIGl0IHRvIHNvbWUgbmV3IFJvYmluSG9vZEhhc2hUYWJsZQorLy8gd2l0aG91dCByZXNlcnZp
bmcgY2FwYWNpdHkgYW5kIHRoaXMgaXMgYmVjYXVzZSBvZiBoaWdoIGxvYWQtZmFjdG9yIGFuZCBl
eHBvc2VkIGhhc2gtb3JkZXJpbmcgYXQgaXRlcmF0aW9uWzNdLiBUbyBtaXRpZ2F0ZSBpdCwKKy8v
IHdlIGNhbGN1bGF0ZSBoYXNoIGZvciBlYWNoIHRhYmxlLCBhbmQgZG8gWE9SIHdpdGggdGhlIGhh
c2ggdmFsdWUgdG8gbWFrZSBoYXNoLW9yZGVyaW5nIGRpZmZlcmVudCBmb3IgZWFjaCB0YWJsZS4K
Ky8vCisvLyBbMV06IGh0dHBzOi8vY29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTEvcm9iaW4taG9v
ZC1oYXNoaW5nLworLy8gWzJdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzE3L3Jv
YmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlvbi8KKy8vIFszXTogaHR0cHM6
Ly9hY2NpZGVudGFsbHlxdWFkcmF0aWMudHVtYmxyLmNvbS9wb3N0LzE1MzU0NTQ1NTk4Ny9ydXN0
LWhhc2gtaXRlcmF0aW9uLXJlaW5zZXJ0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgor
Y2xhc3MgUm9iaW5Ib29kSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBIYXNoVGFibGVU
eXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OworICAgIHVzaW5nIGl0ZXJhdG9y
ID0gSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgY29uc3RfaXRl
cmF0b3IgPSBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5n
IFZhbHVlVHJhaXRzID0gVHJhaXRzOworICAgIHVzaW5nIEtleVR5cGUgPSBLZXk7CisgICAgdXNp
bmcgVmFsdWVUeXBlID0gVmFsdWU7CisgICAgdXNpbmcgSWRlbnRpdHlUcmFuc2xhdG9yVHlwZSA9
IElkZW50aXR5SGFzaFRyYW5zbGF0b3I8VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+OworICAg
IHVzaW5nIEFkZFJlc3VsdCA9IEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj47CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHByb2JlRGlzdGFuY2VUaHJlc2hvbGQgPSAxMjg7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KCFLZXlUcmFpdHM6Omhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5j
dGlvbik7CisgICAgc3RhdGljX2Fzc2VydChIYXNoRnVuY3Rpb25zOjpoYXNIYXNoSW5WYWx1ZSk7
CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoKSA9IGRlZmF1bHQ7CisKKyAgICB+Um9iaW5Ib29k
SGFzaFRhYmxlKCkKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7Cisg
ICAgICAgIGlmIChtX3RhYmxlKQorICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUs
IHRhYmxlU2l6ZSgpKTsKKyAgICB9CisKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUoY29uc3QgUm9i
aW5Ib29kSGFzaFRhYmxlJik7CisgICAgdm9pZCBzd2FwKFJvYmluSG9vZEhhc2hUYWJsZSYpOwor
ICAgIFJvYmluSG9vZEhhc2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJs
ZSYpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKyAg
ICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShSb2Jpbkhvb2RIYXNoVGFibGUmJik7CisK
KyAgICAvLyBXaGVuIHRoZSBoYXNoIHRhYmxlIGlzIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgc2Ft
ZSBpdGVyYXRvciBmb3IgZW5kIGFzIGZvciBiZWdpbi4KKyAgICAvLyBUaGlzIGlzIG1vcmUgZWZm
aWNpZW50IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkgYW5kIGRl
bGV0ZWQKKyAgICAvLyBidWNrZXRzLCBhbmQgaXRlcmF0aW5nIGFuIGVtcHR5IHRhYmxlIGlzIGEg
Y29tbW9uIGNhc2UgdGhhdCdzIHdvcnRoIG9wdGltaXppbmcuCisgICAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VJdGVyYXRvcihtX3RhYmxlKTsgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihtX3RhYmxl
ICsgdGFibGVTaXplKCkpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpc0VtcHR5KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9Cisg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUtub3duR29vZENvbnN0
SXRlcmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorCisgICAgaXRlcmF0b3IgcmFuZG9t
KCkKKyAgICB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZW5k
KCk7CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1f
dGFibGVbd2Vha1JhbmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKKyAgICAgICAgICAg
IGlmICghaXNFbXB0eUJ1Y2tldChidWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
S25vd25Hb29kSXRlcmF0b3IoJmJ1Y2tldCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgY29u
c3RfaXRlcmF0b3IgcmFuZG9tKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3RfaXRl
cmF0b3I+KGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPnJhbmRvbSgpKTsg
fQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGtleUNvdW50KCk7IH0KKyAg
ICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRhYmxlU2l6ZSgpOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWtleUNvdW50KCk7IH0KKworICAgIHZvaWQg
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV90YWJsZSk7CisgICAgICAgIEFTU0VSVCghdGFibGVTaXplKCkpOworCisgICAg
ICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNp
emU7CisgICAgICAgIHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSA9IHN0ZDo6bWF4KG1pbmltdW1UYWJs
ZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50KSk7CisKKyAgICAgICAgbV90YWJs
ZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBu
ZXdUYWJsZVNpemU7CisgICAgICAgIG1fa2V5Q291bnQgPSAwOworICAgICAgICBtX3RhYmxlSGFz
aCA9IGNvbXB1dGVUYWJsZUhhc2gobV90YWJsZSk7CisgICAgICAgIG1fd2lsbEV4cGFuZCA9IGZh
bHNlOworICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIH0KKwor
ICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gYWRkPElk
ZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZhbHVlKTsg
fQorICAgIEFkZFJlc3VsdCBhZGQoVmFsdWVUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVu
dGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCBXVEZNb3ZlKHZh
bHVlKSk7IH0KKworICAgIC8vIEEgc3BlY2lhbCB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmluZHMg
dGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3Ro
ZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmpl
Y3QgaXMgYWxyZWFkeQorICAgIC8vIGluIHRoZSB0YWJsZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+IEFkZFJlc3VsdCBh
ZGQoVCYmIGtleSwgRXh0cmEmJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkUGFzc2luZ0hhc2hD
b2RlKFQmJiBrZXksIEV4dHJhJiYpOworCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBl
JiBrZXkpIHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBm
aW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNv
bnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gY29udGFpbnM8SWRlbnRpdHlUcmFuc2xh
dG9yVHlwZT4oa2V5KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0
IFQmKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVD4gYm9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZShj
b25zdCBLZXlUeXBlJik7CisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOworICAgIHZvaWQgcmVt
b3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvcik7CisgICAgdm9pZCByZW1v
dmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2l0ZXJhdG9yKTsKKyAgICB2b2lk
IGNsZWFyKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVja2V0KGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIHsgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8S2V5VHJhaXRzPihFeHRy
YWN0b3I6OmV4dHJhY3QodmFsdWUpKTsgfQorICAgIHN0YXRpYyBib29sIGlzRW1wdHlPckRlbGV0
ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNFbXB0eUJ1Y2tldCh2
YWx1ZSk7IH0KKworICAgIFZhbHVlVHlwZSogbG9va3VwKGNvbnN0IEtleSYga2V5KSB7IHJldHVy
biBsb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGxvb2t1cChjb25z
dCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+
IFZhbHVlVHlwZSogaW5saW5lTG9va3VwKGNvbnN0IFQmKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgICAgIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3Q7CisjZWxzZQorICAg
ICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgorCisj
aWYgQ0hFQ0tfSEFTSFRBQkxFX0NPTlNJU1RFTkNZCisgICAgICAgIHZvaWQgaW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3koKSBjb25zdCB7IGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOyB9Cisg
ICAgICAgIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29u
c3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7IH0KKyNlbHNlCisgICAgICAg
IHN0YXRpYyB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsg
fQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpIHsg
fQorI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2
NF90IGtleUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
a2V5Q291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVy
YXRvcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFZhbHVlVHlwZSogYWxsb2NhdGVU
YWJsZSh1bnNpZ25lZCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFs
dWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSk7CisKKyAgICB1c2luZyBMb29rdXBUeXBlID0g
c3RkOjpwYWlyPFZhbHVlVHlwZSosIGJvb2w+OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IHZvaWQgY2hlY2tLZXkoY29uc3QgVCYpOworCisgICAg
dm9pZCBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoVmFsdWVUeXBlJiYsIHVuc2lnbmVkIGlu
ZGV4LCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1hc2ss
IHVuc2lnbmVkIHRhYmxlSGFzaCk7CisKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGVXaXRo
b3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSopOworICAgIHZvaWQgcmVtb3ZlQW5k
SW52YWxpZGF0ZShWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZShWYWx1ZVR5cGUqKTsKKwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlVGFibGVIYXNoKFZhbHVlVHlwZSogdGFibGUpIHsg
cmV0dXJuIERlZmF1bHRIYXNoPFZhbHVlVHlwZSo+OjpoYXNoKHRhYmxlKTsgfQorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlD
b3VudCk7CisgICAgYm9vbCBzaG91bGRFeHBhbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5z
aWduZWQga2V5Q291bnQgPSB0aGlzLT5rZXlDb3VudCgpOworICAgICAgICB1bnNpZ25lZCB0YWJs
ZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAgICAgaWYgKHNob3VsZEV4cGFuZChrZXlD
b3VudCwgdGFibGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBJ
ZiBwcm9iZS1sZW5ndGggZXhjZWVkcyBwcm9iZURpc3RhbmNlVGhyZXNob2xkLCBhbmQgNTAlfiBp
cyBmaWxsZWQsIGV4cGFuZCB0aGUgdGFibGUuCisgICAgICAgIHJldHVybiBtX3dpbGxFeHBhbmQg
JiYga2V5Q291bnQgKiAyID49IHRhYmxlU2l6ZTsKKyAgICB9CisgICAgYm9vbCBzaG91bGRTaHJp
bmsoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpICogbWluTG9hZCA8IHRhYmxlU2l6ZSgpICYm
IHRhYmxlU2l6ZSgpID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOyB9CisgICAgdm9pZCBl
eHBhbmQoKTsKKyAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKHRhYmxlU2l6ZSgpIC8gMik7IH0K
KyAgICB2b2lkIHNocmlua1RvQmVzdFNpemUoKTsKKworICAgIHZvaWQgcmVoYXNoKHVuc2lnbmVk
IG5ld1RhYmxlU2l6ZSk7CisgICAgdm9pZCByZWluc2VydChWYWx1ZVR5cGUmJik7CisKKyAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KTsKKyAgICBzdGF0
aWMgdm9pZCBkZWxldGVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpIHsgaGFzaFRyYWl0c0RlbGV0
ZUJ1Y2tldDxUcmFpdHM+KGJ1Y2tldCk7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgZGVzaXJlZEluZGV4KHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGhhc2ggJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIHByb2JlRGlzdGFuY2UodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIChpbmRleCArIHNpemUgLSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spKSAmIHNpemVN
YXNrOworICAgIH0KKworICAgIGl0ZXJhdG9yIG1ha2VJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
eyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCkpOyB9Cisg
ICAgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgp
KTsgfQorICAgIGl0ZXJhdG9yIG1ha2VLbm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykg
eyByZXR1cm4gaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJ
dGVtS25vd25Hb29kKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VLbm93bkdvb2RDb25zdEl0
ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlz
LCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSwgSGFzaEl0ZW1Lbm93bkdvb2QpOyB9CisKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2Vw
dFNpemUoKSBjb25zdDsKKyNlbHNlCisgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gU2l6ZVBvbGljeTo6bWF4TG9hZE51bWVyYXRvcjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IFNpemVQ
b2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1pbkxvYWQgPSBTaXplUG9saWN5OjptaW5Mb2FkOworCisgICAgdW5zaWduZWQgdGFibGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemU7IH0KKyAgICB1bnNpZ25lZCB0YWJsZVNpemVN
YXNrKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVNpemUgLSAxOyB9CisgICAgdW5zaWduZWQga2V5
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50OyB9CisgICAgdW5zaWduZWQgdGFibGVI
YXNoKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZUhhc2g7IH0KKworICAgIFZhbHVlVHlwZSogbV90
YWJsZSB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZSB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX2tleUNvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fdGFibGVIYXNoIHsgMCB9
OworICAgIGJvb2wgbV93aWxsRXhwYW5kIHsgZmFsc2UgfTsKKworI2lmIENIRUNLX0hBU0hUQUJM
RV9JVEVSQVRPUlMKK3B1YmxpYzoKKyAgICAvLyBBbGwgYWNjZXNzIHRvIG1faXRlcmF0b3JzIHNo
b3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KKyAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9y
KiBtX2l0ZXJhdG9ycyB7IG51bGxwdHIgfTsKKyAgICAvLyBVc2Ugc3RkOjp1bmlxdWVfcHRyIHNv
IEhhc2hUYWJsZSBjYW4gc3RpbGwgYmUgbWVtbW92ZSdkIG9yIG1lbWNweSdlZC4KKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxMb2NrPiBtX211dGV4IHsgbWFrZVVuaXF1ZTxMb2NrPigpIH07
CisjZW5kaWYKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVD4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bG9v
a3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVMb29r
dXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19J
TkxJTkUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1cChj
b25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKKworICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFi
bGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxl
U2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVu
c2lnbmVkIHRhYmxlSGFzaCA9IHRoaXMtPnRhYmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2gg
PSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpIF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5j
ZSA9IDA7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90
YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1h
aW50YWlucyB0aGlzIGludmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHBy
b2Jpbmcgd2hlbiBkaXN0YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0
aW5nIGVudHJ5LgorICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JU
eXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4g
cHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYg
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OworCisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAg
ICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Citp
bmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNr
ZXQoVmFsdWVUeXBlJiBidWNrZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8
VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1
Y2tldCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5M
SU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0
cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+
KGtleSk7CisKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hv
dWxkIGV4cGFuZCBiZWZvcmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBl
eHBhbmQgYSB0YWJsZSBhZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0
byByZS1sb29rIHVwIGVudHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRy
eSBwb3NpdGlvbiBpcyBub3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxk
RXhwYW5kKCkpCisgICAgICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKKworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
KyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25l
ZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQg
ZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFu
c2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihl
eHRyYSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBl
bnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBl
bnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxl
SGFzaDsKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjpl
cXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtu
b3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisgICAgICAgIHVuc2lnbmVkIGVudHJ5
RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNr
KTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAg
aWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAg
bV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0
aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAg
ICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgICAgICBtYWludGFpblByb2Jl
RGlzdGFuY2VGb3JBZGQoV1RGTW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFu
Y2UsIHNpemUsIHNpemVNYXNrLCB0YWJsZUhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAg
ICsrZGlzdGFuY2U7CisgICAgfQorCisgICAgbV9rZXlDb3VudCArPSAxOworCisgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtu
b3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+CitBTFdBWVNfSU5MSU5FIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+
OjptYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoVmFsdWVUeXBlJiYgdmFsdWUsIHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBkaXN0YW5jZSwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgc2l6ZU1h
c2ssIHVuc2lnbmVkIHRhYmxlSGFzaCkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBD
KysgQURMLgorICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICArK2Rpc3Rh
bmNlOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFi
bGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAg
ICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHBy
b2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBp
ZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2Ug
Pj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQg
PSB0cnVlOworICAgICAgICAgICAgc3dhcCh2YWx1ZSwgKmVudHJ5KTsKKyAgICAgICAgICAgIGRp
c3RhbmNlID0gZW50cnlEaXN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9Cit9CisKKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4KK2lubGluZSBhdXRvIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYg
ZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkp
OworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBl
eHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5k
IGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5nIGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUt
bG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9z
aXRpb24gaXMgbm90IHN0YWJsZSBkdXJpbmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFu
ZCgpKQorICAgICAgICBleHBhbmQoKTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CisKKyAgICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFi
bGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAg
dW5zaWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFz
aCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQg
aW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3Rh
bmNlID0gMDsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRl
KCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEp
LCBoYXNoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYg
ZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQg
ZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJs
ZUhhc2g7CisgICAgICAgIGlmIChlbnRyeUhhc2ggPT0gaGFzaCAmJiBIYXNoVHJhbnNsYXRvcjo6
ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICByZXR1
cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKworICAg
ICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gsIGlu
ZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlzdGFu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNob2xk
KQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAgICAvLyBT
dGFydCBzd2FwcGluZyBleGlzdGluZyBlbnRyeSB0byBtYWludGFpbiBwcm9iZS1kaXN0YW5jZSBp
bnZhcmlhbnQuCisgICAgICAgICAgICBWYWx1ZVR5cGUgZXhpc3RpbmdFbnRyeSA9IFdURk1vdmUo
KmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBz
dGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOwor
ICAgICAgICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdF
bnRyeSksIGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5
Q291bnQgKz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAg
ICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1
c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJs
ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1
bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNo
ID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUp
KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBz
aXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2ln
blRvRW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0
b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAg
ICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3Rh
bmNlKSB7CisgICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlz
dGFuY2UgPSBlbnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5k
KGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAg
IHJldHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5z
bGF0b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisg
ICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVu
YW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBU
JiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAg
ICAgICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxS
b2Jpbkhvb2RIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOwor
ICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtl
S25vd25Hb29kQ29uc3RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citi
b29sIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5
KSBjb25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxI
YXNoVHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3Zv
aWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0
aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKHRoaXMpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92
ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cyh0aGlzKTsKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92
ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICAvLyBU
aGlzIGlzIHJlbW92YWwgdmlhICJiYWNrd2FyZC1zaGlmdC1kZWxldGlvbiIuIFRoaXMgYmFzaWNh
bGx5IHNoaWZ0IGV4aXN0aW5nIGVudHJpZXMgdG8gcmVtb3ZlZCBlbXB0eSBlbnRyeSBwbGFjZSBz
byB0aGF0IHdlIG1ha2UKKyAgICAvLyB0aGUgdGFibGUgYXMgaWYgbm8gcmVtb3ZhbCBoYXBwZW5l
ZCBzbyBmYXIuIFRoaXMgZGVjcmVhc2VzIGRpc3RhbmNlLXRvLWluaXRpYWwtYnVja2V0IChESUIp
IG9mIHRoZSBzdWJzZXF1ZW50IGVudHJpZXMgYnkgMS4gVGhpcyBtYWludGFpbnMKKyAgICAvLyBE
SUIgb2YgdGhlIHRhYmxlIGxvdyBhbmQgcmVsYXRpdmVseSBjb25zdGFudCBldmVuIGlmIHdlIGhh
dmUgbWFueSByZW1vdmFscywgY29tcGFyZWQgdG8gdXNpbmcgdG9tYnN0b25lcy4KKyAgICAvLyBo
dHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNr
d2FyZC1zaGlmdC1kZWxldGlvbi8KKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURM
LgorICAgIGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAgICBpbml0aWFsaXplQnVja2V0KCpwb3MpOwor
ICAgIG1fa2V5Q291bnQgLT0gMTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsK
KyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0
YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3Vz
ID0gcG9zIC0gbV90YWJsZTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsg
MSkgJiBzaXplTWFzazsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91
c0VudHJ5ID0gbV90YWJsZSArIGluZGV4UHJldmlvdXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9
IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91
c0VudHJ5KSk7CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoIXByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgc3dhcCgqcHJldmlvdXNFbnRyeSwgKmVudHJ5KTsKKworICAgICAgICBpbmRl
eFByZXZpb3VzID0gaW5kZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFz
azsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOwor
CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+
KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVX
aXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9
PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJh
dG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGlu
ZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5k
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50
cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQoreworICAg
IHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQg
c2l6ZSkgLT4gVmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJl
ciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAv
LyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChU
cmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJv
ZWRNYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFy
Kj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxp
emVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRl
YWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1
ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpleHBhbmQoKQoreworICAgIHVuc2lnbmVkIG5ld1Np
emU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6
ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBl
bHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsKKworICAgIHJlaGFzaChuZXdTaXpl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NvbnN0ZXhwciB1bnNpZ25lZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2ln
bmVkIGtleUNvdW50KQoreworICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5k
VXBUb1Bvd2VyT2ZUd28oa2V5Q291bnQpOworCisgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3Vu
dCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1
dG8gYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9y
LCB1bnNpZ25lZCBrZXlDb3VudCwgdW5zaWduZWQgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
Ly8gSGVyZSBpcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAz
LzQgbG9hZC1mYWN0b3IuCisgICAgICAgIC8vIFdpdGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxv
YWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlzIDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBh
cmUgZ2V0dGluZyBoYWxmLXdheSBiZXR3ZWVuIDExLzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUg
c2l6ZQorICAgICAgICAvLyB0byBhdm9pZCBiZWluZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQg
YnJpbmcgdGhlIHJhdGlvIGNsb3NlIHRvIDExLzI0LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMg
YSBsb2FkIGluIHRoZSBib3VuZHMgWzkvMjQsIDE1LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExv
YWRSYXRpbyA9IGxvYWRGYWN0b3I7CisgICAgICAgIGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAg
LyBtaW5Mb2FkOworICAgICAgICBkb3VibGUgYXZlcmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0
aW8gKyBtaW5Mb2FkUmF0aW8pIC8gMjsKKyAgICAgICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZl
cmFnZUFuZE1heExvYWRSYXRpbyA9IChhdmVyYWdlTG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAv
IDI7CisgICAgICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2Vl
bkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUg
bG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhM
b2FkRGVub21pbmF0b3I7CisgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24o
bG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVT
aXplICo9IDI7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsKKyAgICByZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11
bVRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5z
aWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAg
ICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUo
a2V5Q291bnQoKSkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXpl
KQoreworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisg
ICAgdW5zaWduZWQgb2xkVGFibGVTaXplID0gdGFibGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBv
bGRUYWJsZSA9IG1fdGFibGU7CisKKyAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50
KCk7CisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICBtX3Rh
YmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKyAgICBtX2tleUNvdW50ID0gb2xkS2V5Q291bnQ7Cisg
ICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4
cGFuZCA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFRhYmxlU2l6
ZTsgKytpKSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAg
IGlmICghaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpCisgICAgICAgICAgICByZWluc2VydChXVEZN
b3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICB9CisK
KyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVy
cHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIG1fdGFibGVTaXplID0gMDsK
KyAgICBtX2tleUNvdW50ID0gMDsKKyAgICBtX3RhYmxlSGFzaCA9IDA7CisgICAgbV93aWxsRXhw
YW5kID0gZmFsc2U7CisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90YWJsZSwg
bnVsbHB0ciksIG9sZFRhYmxlU2l6ZSk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJs
ZSYgb3RoZXIpCit7CisgICAgaWYgKCFvdGhlci5tX3RhYmxlU2l6ZSB8fCAhb3RoZXIubV9rZXlD
b3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUob3Ro
ZXIubV90YWJsZVNpemUpOworICAgIG1fdGFibGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7Cisg
ICAgbV9rZXlDb3VudCA9IG90aGVyLm1fa2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21w
dXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4cGFuZCA9IG90aGVyLm1fd2lsbEV4
cGFuZDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFi
bGVTaXplOyArK2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVy
Lm1fdGFibGVbaW5kZXhdOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob3RoZXJFbnRyeSkp
IHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSBlbnRyeShvdGhlckVudHJ5KTsKKyAgICAgICAgICAg
IHJlaW5zZXJ0KFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFz
aFRhYmxlJiBvdGhlcikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgor
ICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygm
b3RoZXIpOworCisgICAgc3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1f
dGFibGVTaXplLCBvdGhlci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhl
ci5tX2tleUNvdW50KTsKKyAgICBzd2FwKG1fdGFibGVIYXNoLCBvdGhlci5tX3RhYmxlSGFzaCk7
CisgICAgc3dhcChtX3dpbGxFeHBhbmQsIG90aGVyLm1fd2lsbEV4cGFuZCk7CisKKyAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhh
c2hUYWJsZSYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RI
YXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90
aGVyKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXpl
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV90YWJsZUhhc2ggPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGVIYXNoLCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd2lsbEV4cGFuZCwgZmFsc2UpOworCisgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRh
YmxlJiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUgdGVtcChXVEZNb3ZlKG90aGVyKSk7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCkgY29uc3QKK3sKKyAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXpl
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIFZh
bHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaTsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGtleSA9IEV4
dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKKyAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAg
ICArK2NvdW50OworCisgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShr
ZXkpOworICAgIH0KKworICAgIEFTU0VSVChjb3VudCA9PSBrZXlDb3VudCgpKTsKKyAgICBBU1NF
UlQodGhpcy0+dGFibGVTaXplKCkgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplKTsKKyAg
ICBBU1NFUlQodGFibGVTaXplTWFzaygpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkg
PT0gdGFibGVTaXplTWFzaygpICsgMSk7Cit9CisKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAor
CitzdHJ1Y3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9Owor
CitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5Q29tcGFj
dFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhv
b2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCmluZGV4
IDkyZDIwOGQzNWUyYWFkNWI4ODI3M2UzNDE4NmMyN2I1ZDA3Y2UxZmQuLmJhZDJjYWIwZDVhZjY5
ODYzYmQwOGEyODkwYjU0M2RhODgzN2U1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdI
YXNoLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0g
dHJ1ZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXVEY6OkF0
b21TdHJpbmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdURjo6QXRvbVN0cmluZz4gewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVm
MTQ2YzNiMmVlODlmZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRl
ZjRjZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyAr
NjMsNyBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdF
Ql9USFJFQUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0
cmluZ0ltcGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3Ry
aW5nVGFibGVJbXBsOwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0
cmluZ1RhYmxlKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z1RhYmxlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRl
eCBlMGMwYWZiYWVhNDM2ODYxYjhiOGU0MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4
NjY4ZWY1ZTRhNTZhMjQ5NzVkMjAxZmE4ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nVGFibGUuY3BwCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3Ry
aW5nVGFibGU6On5BdG9tU3RyaW5nVGFibGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRy
PFN0cmluZ0ltcGw+JiBzdHJpbmcgOiBtX3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
aW5nIDogbV90YWJsZSkKICAgICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1
OGMxYmMxMmM0ZTMwNDUxMTNhNTdlLi5mZmFmODM2NDIyYzUyOWUzOWU2ZDE3MGRiY2I4NGY5OWI2
Nzk0ZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNz
IFN0cmluZ0ltcGw7CiBjbGFzcyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5nIFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0
cmluZ0ltcGw+OworICAgIHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nRW50
cnk+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAg
IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxl
OyB9CisgICAgU3RyaW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAog
cHJpdmF0ZToKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAg
ICBTdHJpbmdUYWJsZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNo
LmgKaW5kZXggNWE4Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYx
YmRmMjFiNThkYmY2Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0g
dHJ1ZTsKICAgICB9OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlh
Q2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRp
ZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhkMDRh
MjU2NDM2ZTc3MTVjYzYuLjA5NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQwNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVk
aWFDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBh
YmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNpbmNs
dWRlICJNZWRpYUVuY29kaW5nQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5naW5l
Q29uZmlndXJhdGlvbkZhY3RvcnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVz
KCkKIHsKICAgICAvLyBBICJidWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRhaW5l
ciB0eXBlIGRvZXMgbm90IHVuaXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6IGh0
dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+KHsK
LSAgICAgICAgImF1ZGlvLzNncHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAgICJh
dWRpby8zZ3BwMiIsCi0gICAgICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9tcDQi
LAotICAgICAgICAidmlkZW8vbXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0gICAg
ICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0gICAg
ICAgICJhdWRpby92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBwbGUu
bXBlZ3VybCIsCi0gICAgICAgICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwKLSAg
ICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJp
bmc+PiBidWNrZXRNSU1FVHlwZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAg
ICAgICAiYXVkaW8vM2dwcCJfcywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAgICJh
dWRpby8zZ3BwMiJfcywKKyAgICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVkaW8v
bXA0Il9zLAorICAgICAgICAidmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXA0
Il9zLAorICAgICAgICAidmlkZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRpb24v
bXAyMSJfcywKKyAgICAgICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAgICAi
dmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisgICAg
ICAgICJ2aWRlby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAiYXVk
aW8vd2VibSJfcywKICAgICB9KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKaW5kZXggOTA0MzU0ZDYyOGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQzMTAx
ZWRlZjQ1MmFkMDk0ZjAzNWJmODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2ICs4
NCw3IEBACiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNp
YmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgpAQCAtMjYwNyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdXBwb3J0c0hhc1BvcHVwKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnBvcHVwVmFsdWUoKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
U3RyaW5nPiB7Ci0gICAgICAgICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwgImRp
YWxvZyIKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJfcywg
InRyZWUiX3MsICJncmlkIl9zLCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBoYXNQ
b3B1cCA9IGdldEF0dHJpYnV0ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2ZTc2NzI3NGE1OWUwZmJiMDE2Nzdl
MDlkOWE3OTJlMzk5YzlkMjA3Li40NmJiZjllZTk2MmFlNGU5Y2MxMzdiY2FiN2QyN2RiMDQwNjQ1
ZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yMzg5LDcgKzIzODksNyBAQCB2b2lkIEVs
ZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JT
aGFkb3dSb290KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxp
ZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFnLmdl
dCgpLAogICAgICAgICAgICAgJmFzaWRlVGFnLmdldCgpLApAQCAtMjQxMCw3ICsyNDEwLDggQEAg
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgICAgICAgICAgJnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3BhblRh
Zy5nZXQoKQogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+
IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3Qp
KTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNldC5h
ZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9R
dWFsaWZpZWROYW1lLmgKaW5kZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVkZDM5
MmY0Zi4uNDI5ZmM1NTk2NDM1MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxpZmll
ZE5hbWVIYXNoIHsKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lJiBh
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwgY29u
c3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFs
dWUgPSB0cnVlOwogfTsKIAogaW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhiMDMx
OWNlMjUyYzZjNjZhY2I3OTNmNWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJjOGE3
ZDhlODUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAKICAg
ICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNTUyIs
ICRmYW1pbHlOYW1lc0ZpbGVCYXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApAQCAt
NzA5LDYgKzcxMCw3IEBAIHN1YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGljZW5z
ZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfSwgPDxFTkQsICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlmaWVk
TmFtZSA6IHB1YmxpYyBRdWFsaWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgog
RU5ECkBAIC05NTYsNyArOTU4LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk5Niw3ICs5OTgsNyBAQCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFsaWZp
ZWROYW1lOyAvLyBVc2UgcG9pbnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVtcHR5
VmFsdWUoKSBpbiBIYXNoTWFwIGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBORVZF
Ul9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1D
b25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1G
YWN0b3J5TWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1
Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5
TWFwKCkKIHsKICAgICBzdHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWU7CkBAIC0xMDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYgPDxF
TkQKICAgICB9OwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25h
bWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0byYg
ZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeShl
bnRyeS5mdW5jdGlvbiwgZW50cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUu
bG9jYWxOYW1lKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwogfQog
CiBzdGF0aWMgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRy
eSBmaW5kJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9uKGNv
bnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlN
YXAoKSk7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7CisgICAg
cmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rvcnk6
OmNyZWF0ZUtub3duRWxlbWVudChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3VtZW50
JiBkb2N1bWVudCRmb3JtRWxlbWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpCkBAIC0xMjI2LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNw
cEZpbGUKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVORAog
OwpAQCAtMTI0Nyw3ICsxMjUwLDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGljIE5F
VkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1XcmFwcGVyTWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3Jh
cHBlck1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lOwpAQCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmludCBG
IDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZvciAo
YXV0byYgZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFt
ZSgpLmltcGwoKSwgZW50cnkuZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUu
bG9jYWxOYW1lKCksIGVudHJ5LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBKU0RP
TU9iamVjdCogY3JlYXRlSlMkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+
JiYgZWxlbWVudCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7Ci0g
ICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGwoKSkpCisgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCku
Z2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShlbGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRhMzlj
NjMwYmIyZmExYjRkZWJiM2QwLi5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdmNDMw
OTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVmlz
aWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgs
NyArMTE5LDcgQEAgRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0
QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRGb3JG
b3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBj
b25zdCBhdXRvIGJsb2NrVGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJEZXN0
cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5h
bWU+IHsKICAgICAgICAgYWRkcmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAgICAg
YXNpZGVUYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1h
dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAppbmRleCA0ZWMwYjRlNTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42NjE0
MDdlMTQ1MjRjZjJhMTNmZWEzNjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3ZlRm9y
bWF0Q29tbWFuZDo6UmVtb3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0
YXRpYyBib29sIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZlckRl
c3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBl
bGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAgICAg
ICBiVGFnLAogICAgICAgICBiZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2YzJl
MDA4ZmY4M2ZhZGEzYTdkYWYuLmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3Y2Uz
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMgYm9v
bCBpc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAg
ICAgICAgICAgJnVsVGFnLmdldCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAgICAg
ICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAg
IGZvciAoYXV0byYgdGFnIDogdGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2NhbE5h
bWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0F1dG9maWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmluZGV4
IDY3MzVlMjY5ZjI1YWVmN2JjMDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIyMWRj
MjdlOTQyMjgyZjE0ZjkwMzJlOWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQXV0b2ZpbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHN0
cnVjdCBBdXRvZmlsbEluZm8gewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9Owog
Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5h
bWVNYXAoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAgIHN0
YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0
cnVjdCBNYXBFbnRyeSB7CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8
QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAgIHsg
ImVtYWlsIiwgeyBBdXRvZmlsbEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6OkNv
bnRhY3QgfSB9LAogICAgICAgICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6Oklt
cHAsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2UyOTA5
NDRhNGI3Y2ZhZWRkOGQ3NS4uMDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2MGRl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMjI1LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nhc2VT
ZW5zaXRpdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAg
ICAgICAgICAgICZ2YWx1ZXR5cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0ci5n
ZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBz
ZXQ7CiAgICAgICAgIGZvciAoYXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0LmFk
ZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMyNGI4
YTAzZTZiMTcxNjIwZDZjYmUuLmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUyZjJj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01MSw2
ICs1MSw3IEBACiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hTZXQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2ZW50
c1BhcmVudE9iamVjdEZyb21FeHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAgICBz
dGF0aWMgY29uc3QgYXV0byBtb3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsK
LSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAg
IGF1dG8qIHRhZ3MgPSBIVE1MTmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgSFRNTE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAgICAg
ICAgIGF1dG8mIHRhZyA9ICp0YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5NGU5
OWNiZTM5MTY4Zi4uOTJmMjc2ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmlu
SG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtNDc4LDkgKzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNv
bnN0IEhUTUxTdGFja0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNv
bnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1
YWxpZmllZE5hbWU+IHN0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1
YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNh
c2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChT
VkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05hbWVz
OjpnZXRTVkdUYWdzKCksIFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGNhc2VkTmFtZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAgICBp
ZiAoY2FzZWROYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAg
dG9rZW4uc2V0TmFtZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRqdXN0QXR0cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
JiBtYXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0
QXR0cmlidXRlcyhjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewogICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0ZS5s
b2NhbE5hbWUoKSk7CkBAIC01MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVz
dEF0dHJpYnV0ZXMoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG8K
IAogdGVtcGxhdGU8Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgp
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1h
cChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0
b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNU
YWJsZSgpLCBhdHRyaWJ1dGVzVGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFw
LCB0b2tlbik7CiB9CiAKQEAgLTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRqdXN0
QXR0cmlidXRlczxNYXRoTUxOYW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpNYXRo
TUxBdHRyc0NvdW50Pih0b2tlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFByZWZp
eChIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJp
bmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQg
bGVuZ3RoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21T
dHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQocHJl
Zml4ICsgJzonICsgbG9jYWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBu
YW1lLm5hbWVzcGFjZVVSSSgpKSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRoUHJl
Zml4ID0gW10oTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJp
bmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBtYXAu
YWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2Fs
TmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3RhdGlj
IEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0
ZXNNYXAoKQotewotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBR
dWFsaWZpZWROYW1lPiBtYXA7CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJlZml4
KG1hcCwgeGxpbmtOYW1lLCBYTGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFtZXM6
OlhMaW5rQXR0cnNDb3VudCk7CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogCiBz
dGF0aWMgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxp
ZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVz
TWFwKCk7CiAgICAgYWRqdXN0QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRiYzlk
OGUyNjM1MmQ1ZjYyMGQ3YjU1YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThmYWYx
MWJhNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUwLDEw
IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24oKQog
ICAgIHJldHVybiByZWdpb25DaGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8
dWludDhfdD4+JiB0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3Qg
YXV0byByZWdpb25Db2xvcnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICByZXR1
cm4gSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJuIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4
X3Q+PiB7IHsKICAgICAgICAgICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYzLCA1
MCB9IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1MCB9
IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0gfSwK
QEAgLTE5NCw0OSArMTk1LDQ5IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5
OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9udC51
cGRhdGUobnVsbHB0cik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiKSk7
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
dG91Y2hzdGFydCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAg
ZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRS
ZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0Il9z
LCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVj
dC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJ0b3VjaG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91
Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4dC5m
aWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2htb3Zl
IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRB
bGlnbmVkVGV4dCgidG91Y2htb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0
aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVu
ZCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoInRvdWNoZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlv
bigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzAp
OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQo
InRvdWNoZm9yY2VjaGFuZ2UiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRleHQu
ZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9y
Y2VjaGFuZ2UiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250LCBs
ZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxl
Z2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyIs
IGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxp
Z25lZFRleHQoInBhc3NpdmUgbGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0
LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0
LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24iKSk7
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
bW91c2Vkb3duIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBk
cmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVj
dC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9zLCBj
b250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5t
b3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29s
b3JzKCkuZ2V0KCJtb3VzZW1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hF
dmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxs
UmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3ZlIiwg
Y29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgibW91c2Vtb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9u
KCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxD
b2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiX3Mp
KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWdu
ZWRUZXh0KCJtb3VzZXVwIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9ybXMs
IHRoZSAid2hlZWwiIHJlZ2lvbiBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdp
b24uCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdl
dCgid2hlZWwiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpLmdldCgid2hlZWwiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3Qp
OwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJu
b24tZmFzdCByZWdpb24iX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7
CiAjZW5kaWYKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lvbiA6
IG1fZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hS
ZWdpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNl
clRpbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKaW5kZXggZWQ4ZGQ5MjM4ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAxNTI3
N2UwN2M0M2Q5Zjk4OWExN2VhYmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAoUGVy
Zm9ybWFuY2VUaW1pbmc6OiopKCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRp
b25UaW1pbmdGdW5jdGlvbk1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVz
dHJpY3RlZE1hcmtOYW1lc1RvTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVy
RGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7Cisg
ICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+
KHsKICAgICAgICAgeyAiY29ubmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0
RW5kIH0sCiAgICAgICAgIHsgImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpj
b25uZWN0U3RhcnQgfSwKICAgICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5jZVRp
bWluZzo6ZG9tQ29tcGxldGUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2YxOTc3
MGQ0ODFlNmJlZTRmZWRhZWE2NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlkMmMz
NDFlYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlw
ZVJlZ2lzdHJ5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlN
RVR5cGVSZWdpc3RyeUNvY29hLm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8cGFs
L3NwaS9jb2NvYS9Db3JlU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNV
UkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0
cmluZywgSGFzaFNldDxTdHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0YXRp
YyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNGb3JN
SU1FVHlwZU1hcCgpCiB7CiAgICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFw
ID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hT
ZXQ8U3RyaW5nPj4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPj4gbWFwOwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1hcC5h
ZGQodHlwZSwgSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9u
KTsKKyAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24pOwog
ICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBTdHJp
bmcmIHR5cGUsIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2VhNzQ1
MmQ1ZmYyZTZjYjVmM2UxMTY2NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYxMjg3
ZTJhNzI5Y2M0NzFiYmQxZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNo
QXNZZW5TaWduRm9yRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAoZmFt
aWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBh
dXRvIHNldCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0
cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewogICAg
ICAgICAgICAgdW5zaWduZWQgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAg
IHNldC5hZGQoQXRvbVN0cmluZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsIH0pOwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVk
KEhhc2hTZXQ8QXRvbVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VO
ZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4gewogICAgICAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJBcmlh
bCBIZWJyZXciLAogICAgICAgICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBj
Yzg0OWQ5YTcwLi4xNDI0ZDFiZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgSEFW
RShBVkNPTlRFTlRLRVlTRVNTSU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZlY3Rv
cjxSZWY8U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFj
dEtleUlEc1NrCiAgICAgcmV0dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8
QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRh
VHlwZXMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+
PiB2YWxpZFR5cGVzID0gSGFzaFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5n
Pj4gdmFsaWRUeXBlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAgICAg
ICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENETVBy
aXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlTVFJF
QU1JTkdfQ0VOQ19JTklUREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVmNzQ3
NThiMTc4MmZjZDk3OTE3Li5hNDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5MjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuY3BwCkBAIC0zMSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgi
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VU
eXBlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEhhc2hTZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBlKTsK
ICAgICAgICAgfSwgJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRlZmF1
bHRTdXBwb3J0ZWRJbWFnZVR5cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBl
c10oY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lzdGVt
U3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsKLQot
ICAgICAgICByZXR1cm4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOworICAg
ICAgICBmb3IgKGF1dG8mIGltYWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKSB7
CisgICAgICAgICAgICBpZiAoc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFn
ZVR5cGUpKQorICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJuIGRl
ZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2ODY3
NDAwZDc2ZWUzYzY2NTc1ZS4uNGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2QwYjli
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5oCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBw
b3J0ZWRJbWFnZVR5cGVzKCk7CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNV
dGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0hFVkNVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4MWRi
YTAyOGIzZWU5MjMzLi42MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRp
bGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJIRVZD
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2ltcG9y
dCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lv
bi5oPgorI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNpbXBv
cnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJvb2wg
dmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRp
YUNhcGFiaWxpdGllc0luZm8mCiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBj
b2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKIHsK
LSAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcs
IENNVmlkZW9Db2RlY1R5cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVjVHlw
ZV9IMjY0IH0sCi0gICAgICAgIHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0g
ICAgICAgIHsgImh2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhl
djEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFr
ZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxT
dHJpbmcsIENNVmlkZW9Db2RlY1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVv
Q29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVf
SDI2NCB9LAorICAgICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisg
ICAgICAgIHsgImhldjEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsKIAog
ICAgIGF1dG8gZmluZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRiMGNh
Y2Q2N2RmYmI5NWMxMmQ5OS4uZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0Mjlm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEzNzEs
MTUgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJlYWRD
YWxsYmFjayhDYWxsT25DbGllbnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBj
b2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIsICJW
X1ZQOSIgfSk7CisgICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCJf
cywgIlZfVlA5Il9zIH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQor
Y29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBzdGF0
aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJB
X1ZPUkJJUyIsICJBX09QVVMiIH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5n
Pj4oeyAiQV9WT1JCSVMiX3MsICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIzODRm
OTJmNzQ4ZjRjOWJhNWQ5MWI4ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0NmQ1
YzcyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBw
cml2YXRlCiAKICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90
KTsKIAotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29k
ZWNzKCk7Ci0gICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9D
b2RlY3MoKTsKKyAgICBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGljIGNv
bnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBw
b3J0ZWRBdWRpb0NvZGVjcygpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpT
dGF0dXMgT25FbGVtZW50QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6
QWN0aW9uKikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAKaW5kZXggODgwY2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFhZi4u
ZmUwZWQzMTQ0MTE0OGVlMTUzYjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0ZGlv
Lmg+CkBAIC00Myw5ICs0NCw5IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsKIH0K
IAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkK
K3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHNfdGFnTGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH
MTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhpY3Mg
ZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3Jh
cGhpY3NFbGVtZW50CkBAIC05Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+
JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAot
c3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2Vy
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChT
VkdOYW1lczo6bGluZVRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCku
YWRkKFNWR05hbWVzOjpwYXRoVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkgQEAg
c3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBzX3Rh
Z0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFn
cygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJp
bmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLT5s
b2NhbE5hbWUoKSk7CkBAIC0xMjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmlu
Zz4mIGZpbGxBbmRTdHJva2VUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0
aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRpYyBj
b25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4m
IGNoYWluYWJsZVJlc291cmNlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3Rh
Z0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190
YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5sb2Nh
bE5hbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3NThh
Mjc4MzlhMmI4MTg2NDRhY2VjMmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMzNDAx
Mjc2ZTUzNmZhZjQwMGMyZDZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIu
Y3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUg
ewpAQCAtNDk3LDcgKzQ5OCw3IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMgYm9v
bCBoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50
JiBlbGVtZW50KQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxh
eS0zLyN1bmJveC1odG1sCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0g
W10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xp
c3RbXSA9IHsKICAgICAgICAgICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJUYWcu
Z2V0KCksCkBAIC01MTcsNyArNTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxh
eU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAg
ICAgICZ0ZXh0YXJlYVRhZy5nZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCksCiAg
ICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAg
ICAgICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIG5hbWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5s
b2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0Mjhm
OTllMjhhMTc4Ny4uNzEyNjgwYTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3ICsx
MjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGlu
ZXMoU3RyaW5nVmlldyBzdHJpbmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0YXRp
YyBjb25zdCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10g
ewotICAgICAgICBIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAg
ICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0LmFk
ZCh7CiAgICAgICAgICAgICBTVkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAppbmRleCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4MTdl
YjU0Li45YzE0MGNjMWQ0ZTAzOGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJfSU5M
SU5FIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1
dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5SUQ+
IGNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAtMTQx
LDE2ICsxNDIsMTYgQEAgc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBs
KiwgQ1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRyLmdl
dCgpLAogICAgIH07CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJ
RD4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9t
U3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRy
aWJ1dGVOYW1lcykgewogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1l
LT5sb2NhbE5hbWUoKTsKLSAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQcm9w
ZXJ0eUlEKGxvY2FsTmFtZSkpOworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJvcGVy
dHlJRChsb2NhbE5hbWUpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3VwcG9y
dHMgInRyYW5zZm9ybS1vcmlnaW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVkLAog
ICAgIC8vIGFuZCB3ZSBjYW4gYWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJsZSBh
Ym92ZSBpbnN0ZWFkLgotICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFt
ZSgpLmltcGwoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQodHJh
bnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdp
bik7CiAKICAgICByZXR1cm4gbWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmllZE5h
bWUgU1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxOYW1lCiAgICAgICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAgICAg
ICAgICAgJlNWR05hbWVzOjpocmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1hcC5hZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03
ODAsNyArNzgxLDcgQEAgQ1NTUHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9y
U1ZHQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4gQ1NT
UHJvcGVydHlJbnZhbGlkOwogCiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9IG1h
a2VOZXZlckRlc3Ryb3llZChjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkp
OwotICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKS5p
bXBsKCkpOworICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5h
bWUoKSk7CiB9CiAKIGJvb2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmluZGV4
IDFkMmNkOTc4ZWQxMzIzNmQ2YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFkY2U1
ZjJiNjU3MDk5NmE1ZmE0NDU1NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUZXN0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApAQCAt
MTYzLDcgKzE2Myw3IEBAIHZvaWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlkYXRl
U3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmli
dXRlcykKK3ZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzKQogewogICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNB
dHRyKTsKICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1Mjk3
NmM1MjJhOGM1Yi4uMGMyNTIxNjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1Rlc3RzLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxpZmll
ZE5hbWUuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmlu
SG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBA
IGNsYXNzIFNWR1Rlc3RzIHsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBoYXNG
ZWF0dXJlRm9yTGVnYWN5QmluZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggZTA1
ZmI1M2MwMTk5NzE2YjM0NTZmNzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0M2Qz
YTI0MjIyYjhmNGZiMzc3MTExMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJY
TGlua05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3
NywxNCArMTc4LDE0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3Ry
aW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0
KCkKIHsKICAgICAvLyBTcGVjOiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGljcyBl
bGVtZW50IG9yIG90aGVyICd1c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0IHRo
YXQgY2FuIGJlIHJlLXVzZWQKICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBTVkcg
ZG9jdW1lbnQgdmlhIGEgJ3VzZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1lbnQi
IGlzIGRlZmluZWQgYXMgJ2NpcmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAncGF0
aCcsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNsdWRl
ZCBhcmUgYW55dGhpbmcgdGhhdCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkgbWFr
ZSBzZW5zZSB0byBhcHBlYXIgb25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVzcGFj
ZSBTVkdOYW1lczsKLSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZvciAo
YXV0byYgdGFnIDogeyBhVGFnLmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0KCks
IGVsbGlwc2VUYWcuZ2V0KCksIGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFnLmdl
dCgpLCBtZXRhZGF0YVRhZy5nZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQoKSwg
cG9seWxpbmVUYWcuZ2V0KCksIHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNoVGFn
LmdldCgpLCBzeW1ib2xUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdldCgp
LCB0aXRsZVRhZy5nZXQoKSwgdHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRhZy5n
ZXQoKSB9KQogICAgICAgICBzZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNl
dDsKQEAgLTE5Miw3ICsxOTMsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVB
bGxvd2VkRWxlbWVudFNldCgpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRFbGVt
ZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsK
ICAgICByZXR1cm4gIXNldC5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApp
bmRleCA2ODE5MWI5NGE0MDAxMDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFlNzZk
YTRhZmQ2MDQ5ZGJjYTYwYjkwZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00NjIsNyArNDYzLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9y
RW5kKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9vbCBT
VkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9
IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMg
Y29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAg
ICAgIFNWR05hbWVzOjpiZWdpbkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAogICAg
ICAgICBTVkdOYW1lczo6ZHVyQXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3Bw
CmluZGV4IDlmZGZiYThiMTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBjMjJk
NGI2N2NlNWZmYTNiODMwNjljYmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
RnVuY3Rpb25zLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCArNjY5
LDQ0IEBAIHN0cnVjdCBGdW5jdGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVudENv
dW50SW50ZXJ2YWw7CiB9OwogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFs
dWU+IGNyZWF0ZUZ1bmN0aW9uTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1h
cCgpCiB7CiAgICAgc3RydWN0IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1hcFZh
bHVlIGZ1bmN0aW9uOwogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5n
IGZ1bmN0aW9uc1tdID0gewotICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlvbkJv
b2xlYW4sIDEgfSB9LAotICAgICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNlaWxp
bmcsIDEgfSB9LAotICAgICAgICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJ
bnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwgeyBj
cmVhdGVGdW5jdGlvbkNvbnRhaW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNyZWF0
ZUZ1bmN0aW9uQ291bnQsIDEgfSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVuY3Rp
b25GYWxzZSwgMCB9IH0sCi0gICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZsb29y
LCAxIH0gfSwKLSAgICAgICAgeyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAotICAg
ICAgICB7ICJsYW5nIiwgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7ICJs
YXN0IiwgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1uYW1l
IiwgeyBjcmVhdGVGdW5jdGlvbkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAg
ICB7ICJuYW1lIiwgeyBjcmVhdGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAg
ICAgICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkksIElu
dGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVhdGVG
dW5jdGlvbk5vcm1hbGl6ZVNwYWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5v
dCIsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7IGNy
ZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBvc2l0
aW9uIiwgeyBjcmVhdGVGdW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91bmQi
LCB7IGNyZWF0ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0aCIs
IHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5nIiwg
eyBjcmVhdGVGdW5jdGlvblN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJz
dHJpbmctbGVuZ3RoIiwgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwg
MSkgfSB9LAotICAgICAgICB7ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5n
LCBJbnRlcnZhbCgyLCAzKSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgY3Jl
YXRlRnVuY3Rpb25TdWJzdHJpbmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1i
ZWZvcmUiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAgICAg
eyAic3VtIiwgeyBjcmVhdGVGdW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5zbGF0
ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVlIiwg
eyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uQm9vbGVhbiwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsgY3Jl
YXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNyZWF0
ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgICAg
IHsgImNvbnRhaW5zIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAgICAg
ICB7ICJjb3VudCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAgeyAi
ZmFsc2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZsb29y
Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywgeyBj
cmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVGdW5j
dGlvbkxhbmcsIDEgfSB9LAorICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTGFz
dCwgMCB9IH0sCisgICAgICAgIHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25Mb2Nh
bE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVhdGVG
dW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNlLXVy
aSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAor
ICAgICAgICB7ICJub3JtYWxpemUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVT
cGFjZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRlRnVu
Y3Rpb25Ob3QsIDEgfSB9LAorICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rpb25O
dW1iZXIsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsgY3Jl
YXRlRnVuY3Rpb25Qb3NpdGlvbiwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBjcmVh
dGVGdW5jdGlvblN0YXJ0c1dpdGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsgY3Jl
YXRlRnVuY3Rpb25TdHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3RyaW5n
LWxlbmd0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkg
fSB9LAorICAgICAgICB7ICJzdWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcs
IEludGVydmFsKDIsIDMpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmct
YmVmb3JlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICAg
ICAgeyAic3VtIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAidHJh
bnNsYXRlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAgeyAi
dHJ1ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgRnVuY3Rpb25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsKICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1bmN0
aW9uLm5hbWUsIGZ1bmN0aW9uLmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAKaW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQwYzc5
MGQ1ODk1MC4uODlmN2VkOWQ3MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiWFBh
dGhQYXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBA
IC03NiwyOCArNzcsMjggQEAgc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3RlcikK
ICAgICByZXR1cm4gTm90UGFydE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBT
dGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1l
c01hcCgpCiB7CiAgICAgc3RydWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsK
ICAgICB9OwogICAgIGNvbnN0IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAgICB7
ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rvci1v
ci1zZWxmIiwgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJpYnV0
ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGls
ZEF4aXMgfSwKLSAgICAgICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0s
Ci0gICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZB
eGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKLSAg
ICAgICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9
LAotICAgICAgICB7ICJuYW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAgICAg
IHsgInBhcmVudCIsIFN0ZXA6OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5nIiwg
U3RlcDo6UHJlY2VkaW5nQXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0
ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxm
QXhpcyB9CisgICAgICAgIHsgImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAg
ICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0s
CisgICAgICAgIHsgImF0dHJpYnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAg
ICB7ICJjaGlsZCJfcywgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQi
X3MsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2Vs
ZiJfcywgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5n
Il9zLCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5n
Il9zLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2Ui
X3MsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVwOjpQ
YXJlbnRBeGlzIH0sCisgICAgICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5nQXhp
cyB9LAorICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5nU2li
bGluZ0F4aXMgfSwKKyAgICAgICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAgIH07
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAgICAg
Zm9yIChhdXRvJiBheGlzTmFtZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChheGlz
TmFtZS5uYW1lLCBheGlzTmFtZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggODdi
ZDI4ZWI0OGFlMjQwMDY1NThlOGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMyNjRl
MGM1YTA5YzdlYmJlM2RjZGNlN2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVk
ZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENv
cGllci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBTdHJp
bmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcg
T2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJuICJD
UkVBVEUgVEFCTEUgXCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZ
IEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1Qg
RkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIg
Tk9UIE5VTEwsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdy
YW5kZmF0aGVyZWQgSU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVM
TCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJ
TlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFCTEUg
XCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0
cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNl
ZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQg
SU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJl
dmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBO
VUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJ
IElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJ
TlRFR0VSIE5PVCBOVUxMKSJfczsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYg
ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBj
b2x1bW5zID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVE
b21haW5JRCIsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1lT2ZB
ZENsaWNrIiwgInRva2VuIiwgInNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGljIGNv
bnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJz
b3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJj
ZUlEIl9zLCAidGltZU9mQWRDbGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5
SUQiX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBF
eHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRp
YyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4g
eyAic291cmNlU2l0ZURvbWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJj
ZUlEIiwgImF0dHJpYnV0aW9uVHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRDbGlj
ayIsICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUiLCAi
a2V5SUQiLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3RhdGlj
IGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7
ICJzb3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNv
dXJjZUlEIl9zLCAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGlt
ZU9mQWRDbGljayJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3Ms
ICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRp
b24iX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsyOTQs
OSBAQCBzdGF0aWMgYm9vbCBuZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYg
c2NoZW1hKQogICAgIHJldHVybiBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zIik7CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3Jl
YXRlVGFibGVRdWVyaWVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQogewot
ICAgIHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVy
aWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3Ms
IGNyZWF0ZU9ic2VydmVkRG9tYWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBj
cmVhdGVUb3BMZXZlbERvbWFpbnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMiX3MsIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc30s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5o
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBlNDhl
ODMyNmEyYTczNWVmOTI0Zjg3MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3MmFj
YzFhZTMzYzk1ODdjNDgyM2JmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmgKQEAgLTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
PiA6IFZlY3RvckFyZ3VtZW50Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJn
LCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNo
TWFwVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hU
YWJsZVRyYWl0cz4gSGFzaE1hcFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0LDYg
KzUxNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhhc2hN
YXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25h
bDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDggKzU1
Miw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0
cnVjdCBBcmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+
PiB7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBI
YXNoU2V0VHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBB
cmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hU
YWJsZVRyYWl0cz4+IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAg
ICAgewpAQCAtNTc5LDYgKzU4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hTZXQ7
CisgICAgICAgIGhhc2hTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7CiAg
ICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dz
ZXJDaGVja3MubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3Nl
ckNoZWNrcy5tbQppbmRleCA0OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFiZDZk
Li45YTRkNzgwOWU2M2U0ODUyNDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAjaW1w
b3J0IDx3dGYvSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1w
b3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNp
bXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAt
NTgsNyArNTksNyBAQCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
PiBnZXRBcHBCb3VuZERvbWFpbnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJRC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBhdXRv
IGFwcEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRvIGFw
cEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+PiB7CiAgICAgICAgIHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVyIl9z
LCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygiMTI3
LjAuMC4xIikgfX0sCiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNTdG9yZS5jcHAKaW5kZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZkZDgx
ZDBkNy4uY2U1NmY5Y2Q0NjI4NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1Miwx
MyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAKIGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlciwgV2ViUHJlZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlvbmFs
PEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4g
dmFsdWVzOwogICAgIGRlY29kZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVzKTsK
IAotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZhdWx0
czsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRlY29k
ZXIgPj4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
c1N0b3JlLmgKaW5kZXggYzVmZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYwOC4u
NGEzZDhmMmE0ZTRjZjBjNzgxZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j
bHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC02Niw3ICs2Niw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVzaW5n
IFZhbHVlID0gVmFyaWFudDxTdHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZhbHVl
TWFwID0gTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAgICAg
VmFsdWVNYXAgbV92YWx1ZXM7CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94
eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5
Q29jb2EubW0KaW5kZXggMmYwYWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4Ny4u
MDQxNzQ4YjkwNDRhZDI1MzY4OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAg
LTY1LDkgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRz
IHVuZXhwZWN0ZWRBY3Rpdml0eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Mo
KQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4m
IFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJ
ZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFu
ZGFyZGl6aW5nUGF0aCwKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYktpdCJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRo
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApp
bmRleCA1YTY2MjAyMjkxMzA0YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBhZmI0
M2I3NDUwMzliMGI0ODMzNTFlNDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5Ojp1cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAKICNp
ZiAhUExBVEZPUk0oQ09DT0EpCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5Ojpw
bGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNj
ZXNzOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vz
czsKICAgICByZXR1cm4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCA2OGQ2
NmM2MTVlYmE2ZTk3YjBhM2M4MGQ0MzRiMWIxMTQ4YjJkMDdjLi5hYjEzNTU1OTZkNTczMzY3MWZk
MzIyZTA2YzMyNTAyNmE5NzQ5MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5o
PgogCiAjaWYgSEFWRShWSVNJQklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzYsNyArNDc3
LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHVibGljIFJlc3BvbnNpdmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWluZ0Rl
YnVnZ2VkKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRDb2Rl
KCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBh
dGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFz
c3VtZWRSZWFkQWNjZXNzKCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZl
bmVzc1RpbWVyKCkgeyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9pZCB1
cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5NDdhZmY0MDQ3ZThhMWE3MDcwOTll
ZWNmNzhjMDgyZmU3MzMxOTYuLmE3ZTA3ZmExNzQ5ZWIwZjM2MTMwODdhMzFlZDBmY2ZiYmFmMTk2
ODYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoTWFwLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RNb3Zp
bmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdB
ZGQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5oOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwOiBDb3BpZWQgZnJvbSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YnVja2V0Rm9yS2V5KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Olplcm9IYXNoOjpoYXNoKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6Ok9iamVjdFdpdGhSZWZMb2dnZXI6Ok9iamVjdFdpdGhSZWZMb2dnZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nRW5zdXJlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnRlc3RNb3ZpbmdVc2luZ0FkZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpEZXJlZk9ic2VydmVyOjpyZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNl
cnZlcjo6ZGVyZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdE9iamVjdFdpdGhDdXN0
b21EZXN0cnVjdG9yOjpUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3IpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yOjp+VGVzdE9iamVj
dFdpdGhDdXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Sb2Jpbkhvb2RIYXNoU2V0LmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvSGFzaFNldC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjYXBhY2l0eUZv
clNpemUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdEluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpE
ZXJlZk9ic2VydmVyOjpyZWYpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZl
cjo6ZGVyZWYpOgorCiAyMDIxLTAzLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgU2VydmljZSBXb3JrZXIgc2NyaXB0cyB1c2UgdG9vIG11Y2ggbWVtb3J5IGlu
IHRoZSBuZXR3b3JrIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IDlj
NTVlNGY2ZWFhOGU1YmFhYWRhMTIyNTY2MjA1OWVkZjYyNWNkMGUuLjNmN2NmZmRlMjkxYzJkODJk
ZDEyNTFiYmVjOGM4MTMxMTI3ZmJlZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApA
QCAtNzksNiArNzksOCBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgVGVzdHMvV1RGL1JlZkNv
dW50ZXIuY3BwCiAgICAgVGVzdHMvV1RGL1JlZkxvZ2dlci5jcHAKICAgICBUZXN0cy9XVEYvUmVm
UHRyLmNwcAorICAgIFRlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcAorICAgIFRlc3RzL1dU
Ri9Sb2Jpbkhvb2RIYXNoU2V0LmNwcAogICAgIFRlc3RzL1dURi9SdW5Mb29wLmNwcAogICAgIFRl
c3RzL1dURi9TSEExLmNwcAogICAgIFRlc3RzL1dURi9TYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0
aW9ucy5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmJhMDMyYzg1ODNiOWYxODc4ODE4
YmE2NDk2OTM0NmM0ZTA0YjczMy4uYTljNzQ4MTI4YTM4ODRmOTFlMGFjN2Q0MzI2OWJkMGMyZWU1
ZGVmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMTIsNiArMTExMiw4IEBACiAJCUUz
MjVDOTA3MjNFMzg3MDIwMEJDN0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjVDOTA2MjNFMzg3
MDIwMEJDN0QzQiAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSAqLzsgfTsKIAkJRTMyQjU0
OTIyMjgxMEFDNDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzJCNTQ5MTIyODEwQUMwMDA4QUQ3MDIgLyogUGFja2Vk
LmNwcCAqLzsgfTsKIAkJRTM0QTZEMTkyNDEyREUzOTAwMTJBQjZFIC8qIEdyYW50QWNjZXNzVG9Q
cmVmZXJlbmNlc1NlcnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzRBNkQxODI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZl
cmVuY2VzU2VydmljZS5tbSAqLzsgfTsKKwkJRTM1NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJv
YmluSG9vZEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQuY3Bw
ICovOyB9OworCQlFMzU1QTYzMjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzU1QTYz
MTI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgKi87IH07CiAJCUUzNUI5
MDgyMjNGNjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUI5MDgxMjNGNjBERDAwMDAw
MTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSAqLzsgfTsKIAkJRTM1RkM3QjIyMkI4MkE3
MzAwRjMyRjk4IC8qIEpTTG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUZDN0IxMjJCODJBNkQwMEYzMkY5OCAv
KiBKU0xvY2tUYWtlc1dlYlRocmVhZExvY2subW0gKi87IH07CiAJCUUzNzNENzkxMUYyQ0YzNTIw
MEM2RkFBRiAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzOTUzRjk1MUYyQ0YzMjEwMEE3NkEyRSAvKiBTaWduYWxzLmNwcCAqLzsg
fTsKQEAgLTI4OTksNiArMjkwMSw4IEBACiAJCUUzMjVDOTA2MjNFMzg3MDIwMEJDN0QzQiAvKiBQ
aWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBpY3R1cmVJ
blBpY3R1cmVTdXBwb3J0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzJCNTQ5
MTIyODEwQUMwMDA4QUQ3MDIgLyogUGFja2VkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhY2tl
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEE2RDE4MjQxMkRFMzkwMDEy
QUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gR3JhbnRBY2Nlc3NUb1ByZWZlcmVuY2VzU2VydmljZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhh
c2hTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUm9iaW5Ib29k
SGFzaFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNTVBNjMxMjYxNTcx
OEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJvYmluSG9vZEhhc2hNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzVCOTA4MTIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxpemVkRGV2aWNlTW9k
ZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4IC8qIEpT
TG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEpTTG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM4ODg4NzAyMEM5MDk4MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyUG9vbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDAyLDYgKzQ0MDYsOCBAQAogCQkJCTQ0MkJCRjY4
MUM5MUNBRDkwMDE3MDg3RiAvKiBSZWZMb2dnZXIuY3BwICovLAogCQkJCTkzQTQyN0FEMTgwREE2
MEYwMENEMjRENyAvKiBSZWZMb2dnZXIuaCAqLywKIAkJCQk5M0E0MjdBODE4MEQ5QjA3MDBDRDI0
RDcgLyogUmVmUHRyLmNwcCAqLywKKwkJCQlFMzU1QTYzMTI2MTU3MThGMDAxQzExMjkgLyogUm9i
aW5Ib29kSGFzaE1hcC5jcHAgKi8sCisJCQkJRTM1NUE2MkYyNjE1NzE3NDAwMUMxMTI5IC8qIFJv
YmluSG9vZEhhc2hTZXQuY3BwICovLAogCQkJCUU0QzlBQkM3MUIzREIxNzEwMDQwQTk4NyAvKiBS
dW5Mb29wLmNwcCAqLywKIAkJCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCTFBMzUyNEFDMUQ2M0E0RkIwMDMxNzI5
QiAvKiBTY29wZS5jcHAgKi8sCkBAIC01MTQ4LDYgKzUxNTQsOCBAQAogCQkJCTdDODNERjE2MUQw
QTU5MEMwMEZFQkNGMyAvKiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDRBQzhCQzYy
MUQwMjQ1QTAwQ0FGQjM0IC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Qzgz
REYyNDFEMEE1OTBDMDBGRUJDRjMgLyogUmV0YWluUHRyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTM1NUE2MzIyNjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTM1NUE2MzAyNjE1NzE3NDAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMDUxRDBBNTkwQzAwRkVCQ0YzIC8qIFJ1bkxv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjYxRDBBNTkwQzAwRkVCQ0YzIC8qIFNh
dHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzUy
NEFFMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRv
ci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJh
dG9yLmgKaW5kZXggNDVjY2ZhNDAzMGUxMmFkM2M1YTZkYzM3NGMxNWJkOWVkMzEwOTAyYS4uZmRm
YWJlZWM0YmY0ZTBkMDdjZjg1MGM0MjJjNDEyNGI0N2U0NzFiZiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgK
QEAgLTc3LDYgKzc3LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8RGVsZXRlZEFk
ZHJlc3NPZk9wZXJhdG9yPiB7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7IC8vIFRoaXMgaXMgbm90IGNvcnJlY3QsIGJ1dCBmb3Ig
ZGVidWdnaW5nIG9mIFJvYmluSG9vZEhhc2hTZXQuCiB9OwogfQogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCmluZGV4IGFhYmU3ZGRhYzI3NzNiNmY3OTZlMjA0MGIz
MjJiZTU5ZTFmMDc4NmQuLmM4NDNlN2M1NWFiMTM0M2U4MDJhYjc4NDcwNDdmOWY4NmE1MjQ3Yjgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCkBAIC02NjgsMTQg
KzY2OCwxNCBAQCBjbGFzcyBPYmplY3RXaXRoUmVmTG9nZ2VyIHsKIH07CiAKIAotdm9pZCB0ZXN0
TW92aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0
ZXN0TW92aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFz
aE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7
CiAgICAgCiAgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gbWFrZVVuaXF1ZTxPYmplY3RX
aXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOyB9KTsKIH0KIAotdm9pZCB0ZXN0TW92aW5n
VXNpbmdBZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5n
VXNpbmdBZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCiB7CiAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+PiBtYXA7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKaW5kZXggZTdjZmJjY2FkMWQ0NTljZDY0
Y2EyMTI4ODhhN2E5NjJjZDVlMzAzMS4uYjBjNjQ5MjI2ZWVhM2JjZjMxZTBiMDI4NjQ4NTdlYmQ2
NjRiN2Q0OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNl
dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKQEAg
LTcwLDExICs3MCwxMSBAQCB2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHkoKQogICAgIEVYUEVDVF9H
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSwgaW5pdGlhbENhcGFj
aXR5KTsKIH0KIAotdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBh
Y2l0eVVwVG9TaXplKCk7Ci10ZW1wbGF0ZTw+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRv
U2l6ZTwwPigpCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRl
c3RDYXBhY2l0eVVwVG9TaXplKCk7Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVz
dENhcGFjaXR5VXBUb1NpemU8MD4oKQogewogfQotdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gdm9p
ZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+
IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQogewogICAgIGdlbmVy
YXRlVGVzdENhcGFjaXR5VXBUb1NpemU8c2l6ZSAtIDE+KCk7CiAgICAgdGVzdEluaXRpYWxDYXBh
Y2l0eTxzaXplPigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TW92ZU9ubHkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmgKaW5k
ZXggZDljMjA2YzI4ZWM0OWRjY2QwY2Y5ZDQwN2FkMzcyZmFjMDI0NGJhZC4uYTEwYzVlOGY4NjUx
ZTdkYTY0MmZjNGZkZjAxZDJlMGU4ZjUzNTcwNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Nb3ZlT25seS5oCkBAIC05NCw3ICs5NCw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPE1vdmVPbmx5PiB7CiAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQogCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsg
Ly8gVGhpcyBpcyBub3QgY29ycmVjdCwgYnV0IGZvciBkZWJ1Z2dpbmcgb2YgUm9iaW5Ib29kSGFz
aFNldC4KIH07CiB9IC8vIG5hbWVzcGFjZSBXVEYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWZjYWI2YWVk
YjgxOTQxN2Y3MWRkNzE5OTlkMWM0NjdlNjhkNjQwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAKQEAgLTAsMCArMSwx
MjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgiCisjaW5j
bHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRlICJUZXN0
LmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBSb2Jpbkhvb2RIYXNoIDogcHVibGljIERlZmF1bHRIYXNo
PFQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwor
fTsKKwordHlwZWRlZiBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxpbnQsIGludCwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBJbnRIYXNoTWFwOworCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBIYXNoVGFibGVJdGVyYXRvckNvbXBhcmlzb24pCit7CisgICAgSW50
SGFzaE1hcCBtYXA7CisgICAgbWFwLmFkZCgxLCAyKTsKKyAgICBBU1NFUlRfVFJVRShtYXAuYmVn
aW4oKSAhPSBtYXAuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVnaW4oKSA9PSBtYXAu
ZW5kKCkpOworCisgICAgSW50SGFzaE1hcDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBtYXAuYmVn
aW4oKTsKKyAgICBBU1NFUlRfVFJVRShiZWdpbiA9PSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJU
X1RSVUUobWFwLmJlZ2luKCkgPT0gYmVnaW4pOworICAgIEFTU0VSVF9UUlVFKGJlZ2luICE9IG1h
cC5lbmQoKSk7CisgICAgQVNTRVJUX1RSVUUobWFwLmVuZCgpICE9IGJlZ2luKTsKKyAgICBBU1NF
UlRfRkFMU0UoYmVnaW4gIT0gbWFwLmJlZ2luKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAuYmVn
aW4oKSAhPSBiZWdpbik7CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luID09IG1hcC5lbmQoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKG1hcC5lbmQoKSA9PSBiZWdpbik7Cit9CisKK3N0cnVjdCBUZXN0RG91
YmxlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8ZG91YmxlPiB7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5pbXVtVGFibGVTaXplID0gODsKK307CisKK3R5cGVkZWYgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGRvdWJsZSwgaW50NjRfdCwgUm9iaW5Ib29kSGFzaDxkb3Vi
bGU+LCBUZXN0RG91YmxlSGFzaFRyYWl0cz4gRG91YmxlSGFzaE1hcDsKKworc3RhdGljIGludCBi
dWNrZXRGb3JLZXkoZG91YmxlIGtleSkKK3sKKyAgICByZXR1cm4gRGVmYXVsdEhhc2g8ZG91Ymxl
Pjo6aGFzaChrZXkpICYgKFRlc3REb3VibGVIYXNoVHJhaXRzOjptaW5pbXVtVGFibGVTaXplIC0g
MSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBCaWdUYWJsZUhhc2hUcmFpdHMg
OiBwdWJsaWMgSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFi
bGVTaXplID0gV1RGOjpIYXNoVGFibGVDYXBhY2l0eUZvclNpemU8NDA5Nj46OnZhbHVlOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFplcm9IYXNoIDogcHVibGljIEludEhhc2g8
VD4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKSB7IHJldHVybiAwOyB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIERvdWJsZUhhc2hDb2xsaXNpb25zKQoreworICAgIC8v
IFRoZSAiY2xvYmJlciIga2V5IGhlcmUgaXMgb25lIHRoYXQgZW5kcyB1cCBzdGVhbGluZyB0aGUg
YnVja2V0IHRoYXQgdGhlIC0wIGtleQorICAgIC8vIG9yaWdpbmFsbHkgd2FudHMgdG8gYmUgaW4u
IFRoaXMgbWFrZXMgdGhlIDAgYW5kIC0wIGtleXMgY29sbGlkZSBhbmQgdGhlIHRlc3QgdGhlbgor
ICAgIC8vIGZhaWxzIHVubGVzcyB0aGUgRmxvYXRIYXNoOjplcXVhbHMoKSBpbXBsZW1lbnRhdGlv
biBjYW4gZGlzdGluZ3Vpc2ggdGhlbS4KKyAgICBjb25zdCBkb3VibGUgY2xvYmJlcktleSA9IDY7
CisgICAgY29uc3QgZG91YmxlIHplcm9LZXkgPSAwOworICAgIGNvbnN0IGRvdWJsZSBuZWdhdGl2
ZVplcm9LZXkgPSAtemVyb0tleTsKKworICAgIERvdWJsZUhhc2hNYXAgbWFwOworICAgIG1hcC5h
ZGQoY2xvYmJlcktleSwgMSk7CisgICAgbWFwLmFkZCh6ZXJvS2V5LCAyKTsKKyAgICBtYXAuYWRk
KG5lZ2F0aXZlWmVyb0tleSwgMyk7CisKKyAgICBBU1NFUlRfRVEoYnVja2V0Rm9yS2V5KGNsb2Ji
ZXJLZXkpLCBidWNrZXRGb3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7CisgICAgQVNTRVJUX0VRKG1h
cC5nZXQoY2xvYmJlcktleSksIDEpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KHplcm9LZXkpLCAy
KTsKKyAgICBBU1NFUlRfRVEobWFwLmdldChuZWdhdGl2ZVplcm9LZXkpLCAzKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgTW92ZU9ubHlWYWx1ZXMpCit7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBNb3ZlT25seSwgUm9iaW5I
b29kSGFzaDx1bnNpZ25lZD4+IG1vdmVPbmx5VmFsdWVzOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7Cisg
ICAgICAgIG1vdmVPbmx5VmFsdWVzLnNldChpICsgMSwgV1RGTW92ZShtb3ZlT25seSkpOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgYXV0
byBpdCA9IG1vdmVPbmx5VmFsdWVzLmZpbmQoaSArIDEpOworICAgICAgICBBU1NFUlRfRkFMU0Uo
aXQgPT0gbW92ZU9ubHlWYWx1ZXMuZW5kKCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgNTA7ICsraSkKKyAgICAgICAgQVNTRVJUX0VRKG1vdmVPbmx5VmFsdWVzLnRha2Uo
aSArIDEpLnZhbHVlKCksIGkgKyAxKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSA1MDsgaSA8IDEw
MDsgKytpKQorICAgICAgICBBU1NFUlRfVFJVRShtb3ZlT25seVZhbHVlcy5yZW1vdmUoaSArIDEp
KTsKKworICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5VmFsdWVzLmlzRW1wdHkoKSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIE1vdmVPbmx5S2V5cykKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8TW92ZU9ubHksIHVuc2lnbmVkPiBtb3ZlT25s
eUtleXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAg
IE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgbW92ZU9ubHlLZXlzLnNldChXVEZN
b3ZlKG1vdmVPbmx5KSwgaSArIDEpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgMTAwOyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9IG1vdmVPbmx5S2V5cy5maW5kKE1vdmVP
bmx5KGkgKyAxKSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShpdCA9PSBtb3ZlT25seUtleXMuZW5k
KCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAg
ICAgIEFTU0VSVF9GQUxTRShtb3ZlT25seUtleXMuYWRkKE1vdmVPbmx5KGkgKyAxKSwgaSArIDEp
LmlzTmV3RW50cnkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAg
ICAgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsK
KworICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5S2V5cy5pc0VtcHR5KCkpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBJbml0aWFsaXplckxpc3QpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnN0cmluZywgUm9iaW5I
b29kSGFzaDx1bnNpZ25lZD4+IG1hcCA9IHsKKyAgICAgICAgeyAxLCAib25lIiB9LAorICAgICAg
ICB7IDIsICJ0d28iIH0sCisgICAgICAgIHsgMywgInRocmVlIiB9LAorICAgICAgICB7IDQsICJm
b3VyIiB9LAorICAgIH07CisKKyAgICBFWFBFQ1RfRVEoNHUsIG1hcC5zaXplKCkpOworCisgICAg
RVhQRUNUX0VRKCJvbmUiLCBtYXAuZ2V0KDEpKTsKKyAgICBFWFBFQ1RfRVEoInR3byIsIG1hcC5n
ZXQoMikpOworICAgIEVYUEVDVF9FUSgidGhyZWUiLCBtYXAuZ2V0KDMpKTsKKyAgICBFWFBFQ1Rf
RVEoImZvdXIiLCBtYXAuZ2V0KDQpKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoKSwgbWFw
LmdldCg1KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVmZmljaWVudEdldHRl
cikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWdu
ZWQsIENvcHlNb3ZlQ291bnRlciwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICBt
YXAuc2V0KDEsIENvcHlNb3ZlQ291bnRlcigpKTsKKworICAgIHsKKyAgICAgICAgQ29weU1vdmVD
b3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgICAgIG1hcC5nZXQoMSk7CisgICAgICAg
IEVYUEVDVF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQpOworICAgICAgICBF
WFBFQ1RfRVEoMFUsIENvcHlNb3ZlQ291bnRlcjo6bW92ZUNvdW50KTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIENvcHlNb3ZlQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgICAgICBt
YXAuZ2V0KDIpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6Y29uc3Ry
dWN0aW9uQ291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMFUsIENvcHlNb3ZlQ291bnRlcjo6Y29w
eUNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6Om1vdmVDb3Vu
dCk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXkp
Cit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3Bl
OworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5p
cXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNo
PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKwor
ICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyPigpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9DdXN0b21EZWxl
dGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBj
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyU2NvcGU7CisgICAgRGVsZXRlckNvdW50ZXI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj46OlRlc3RpbmdTY29wZSBkZWxldGVyQ291bnRlclNj
b3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+Pj4gbWFwOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI+PiB1bmlxdWVQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXIoKSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKSk7
CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIEVYUEVDVF9FUSgwdSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj46OmRlbGV0ZXJDb3VudCgpKTsKKworICAgIG1hcC5jbGVhcigpOworCisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIEVYUEVDVF9FUSgxdSwgRGVsZXRlckNvdW50ZXI8
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj46OmRlbGV0ZXJDb3VudCgpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIp
Cit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5p
cXVlX3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBt
YXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0No
ZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFk
ZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgYXV0byBpdCA9IG1hcC5maW5kKHB0cik7
CisgICAgQVNTRVJUX1RSVUUoaXQgIT0gbWFwLmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBp
dC0+a2V5LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaXQtPnZhbHVlKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0NvbnRhaW5zVXNpbmdSYXdQb2ludGVy
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVu
aXF1ZV9wdHI8aW50PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4g
bWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2ND
aGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5h
ZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBtYXAuY29u
dGFpbnMocHRyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktl
eV9HZXRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3Rk
Ojp1bmlxdWVfcHRyPGludD4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlx
dWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQ
dHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgaW50
IHZhbHVlID0gbWFwLmdldChwdHIpOworICAgIEVYUEVDVF9FUSgyLCB2YWx1ZSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50
ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNj
b3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RI
YXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsK
KworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1
ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBF
WFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRl
c3RydWN0aW9uQ291bnQpOworCisgICAgYm9vbCByZXN1bHQgPSBtYXAucmVtb3ZlKHB0cik7Cisg
ICAgRVhQRUNUX0VRKHRydWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfVGFrZVVzaW5nUmF3UG9p
bnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUg
c2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFw
OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5p
cXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9u
Q291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6
ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBpbnQgcmVzdWx0ID0gbWFwLnRha2UocHRyKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVJlZlZhbHVlKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFVuaXF1ZVJlZjxpbnQ+LCBSb2Jp
bkhvb2RIYXNoPGludD4+IG1hcDsKKyAgICBVbmlxdWVSZWY8aW50PiBmaXZlID0gbWFrZVVuaXF1
ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBtYXAuYWRkKDUsIFdURk1v
dmUoZml2ZSkpOworICAgIEVYUEVDVF9UUlVFKG1hcC5jb250YWlucyg1KSk7CisgICAgaW50KiBz
aG91bGRCZUZpdmUgPSBtYXAuZ2V0KDUpOworICAgIEVYUEVDVF9FUSgqc2hvdWxkQmVGaXZlLCA1
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiB0YWtlbkZpdmUgPSBtYXAudGFrZSg1KTsKKyAg
ICBFWFBFQ1RfRVEoKnRha2VuRml2ZSwgNSk7CisgICAgbWFwLmVuc3VyZSg2LCBbXSB7CisgICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlUmVmV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDYpOwor
ICAgIH0pOworICAgIEVYUEVDVF9GQUxTRShtYXAuY29udGFpbnMoNSkpOworICAgIEVYUEVDVF9U
UlVFKG1hcC5jb250YWlucyg2KSk7CisgICAgZm9yIChVbmlxdWVSZWY8aW50PiYgYSA6IG1hcC52
YWx1ZXMoKSkKKyAgICAgICAgRVhQRUNUX0VRKGEuZ2V0KCksIDYpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkKQoreworICAgIHsKKyAgICAgICAgRGVyaXZl
ZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRy
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsK
KyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVm
KGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRVc2luZ1JlbGVhc2Up
Cit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4s
IGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBS
ZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUocHRyKSwg
MCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJL
ZXlfQWRkVXNpbmdNb3ZlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFk
ZChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmF3KQoreworICAgIHsKKyAgICAgICAgRGVyaXZl
ZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRy
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsK
KyAgICAgICAgbWFwLmFkZChwdHIuZ2V0KCksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJF
USgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRLZXlBbHJl
YWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgeworICAgICAg
ICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKHB0ciwgMCk7Cisg
ICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRy
MigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmFkZChwdHIyLCAwKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBF
Q1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlf
QWRkVXNpbmdSZWxlYXNlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgRGVyaXZlZFJlZkxvZ2dl
ciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+
IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAg
ICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJl
ZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1h
cC5hZGQoV1RGTW92ZShwdHIyKSwgMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBF
Q1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92ZUtleUFscmVhZHlQcmVz
ZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKFdURk1vdmUocHRyMiksIDApOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktl
eV9TZXQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxv
Z2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAg
ICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwgMCk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nUmVsZWFzZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2
ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0
cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7
CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1Rf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZSkKK3sKKyAg
ICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxS
ZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQoV1RGTW92ZShwdHIpLCAwKTsKKyAg
ICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRV
c2luZ1JhdykKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVm
TG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisg
ICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLmdl
dCgpLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0S2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgewor
ICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5I
b29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9n
Z2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNU
X1NUUkVRKCJyZWYoYSkgcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAg
ICB7CisgICAgICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbWFwLnNldChwdHIyLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFw
LmdldChwdHIuZ2V0KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBF
Q1RfU1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nUmVsZWFzZUtl
eUFscmVhZHlQcmVzZW50KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNl
dChwdHIsIDApOworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyMigmYSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RG
TW92ZShwdHIyKSwgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICAgICAgRVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ01vdmVLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAg
ICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxS
ZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBF
WFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuc2V0KFdURk1vdmUocHRyMiksIDEpOworICAgICAg
ICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSgxLCBtYXAuZ2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQ
RUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAg
IH0KKworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmUpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbWFwLmVuc3VyZSgxLCBbXSB7IHJldHVybiAxOyB9KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbWFwLmVuc3VyZSgx
LCBbXSB7IHJldHVybiAyOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRv
ci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7Cisg
ICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfTW92ZU9ubHlWYWx1
ZXMpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2ln
bmVkLCBNb3ZlT25seSwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1vdmVPbmx5VmFsdWVzOwor
ICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtb3ZlT25seVZhbHVlcy5lbnN1cmUoMSwg
W10geyByZXR1cm4gTW92ZU9ubHkoMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRk
UmVzdWx0Lml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0MiA9IG1vdmVPbmx5VmFsdWVzLmVuc3Vy
ZSgxLCBbXSB7IHJldHVybiBNb3ZlT25seSgyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwg
YWRkUmVzdWx0Mi5pdGVyYXRvci0+dmFsdWUudmFsdWUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgx
dSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJl
c3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBFbnN1cmVfVW5pcXVlUG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZD4sIFJvYmlu
SG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hl
Y2s8dW5zaWduZWQ+KDEpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFwLmdldCgxKSk7
CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCkp
OworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJl
c3VsdDIgPSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1h
bGxvY0NoZWNrPHVuc2lnbmVkPigyKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKm1hcC5n
ZXQoMSkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsICphZGRSZXN1bHQyLml0ZXJhdG9yLT52YWx1
ZS5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+a2V5
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdDIuaXNOZXdFbnRyeSk7CisgICAgfQor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfUmVmUHRyKQoreworICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1
bnNpZ25lZD4+IG1hcDsKKworICAgIG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIFJlZlB0cjxS
ZWZMb2dnZXI+KCZhKTsgfSk7CisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRyPFJl
ZkxvZ2dlcj4oJmEpOyB9KTsKKyAgICBFWFBFQ1RfU1RSRVEoIiIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK2NsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iamVjdFdpdGhS
ZWZMb2dnZXIoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCisgICAgICAgIDogbV9sb2dnZXIoV1RG
TW92ZShsb2dnZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBSZWY8UmVmTG9nZ2VyPiBtX2xvZ2dl
cjsKK307CisKKworc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJlZjxSZWZMb2dn
ZXI+JiYgbG9nZ2VyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jp
bkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1
cm4gbWFrZVVuaXF1ZTxPYmplY3RXaXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikpOyB9KTsK
K30KKworc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dnZXI+JiYgbG9n
Z2VyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNp
Z25lZCwgc3RkOjp1bmlxdWVfcHRyPE9iamVjdFdpdGhSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNo
PHVuc2lnbmVkPj4gbWFwOworCisgICAgYXV0byYgc2xvdCA9IG1hcC5hZGQoMSwgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOworICAgIHNsb3QgPSBtYWtlVW5pcXVlPE9iamVjdFdpdGhSZWZMb2dn
ZXI+KFdURk1vdmUobG9nZ2VyKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVu
c3VyZV9MYW1iZGFzQ2FwdHVyaW5nQnlSZWZlcmVuY2UpCit7CisgICAgeworICAgICAgICBEZXJp
dmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICB0ZXN0TW92aW5nVXNpbmdFbnN1cmUoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBFWFBF
Q1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAg
fQorCisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVm
PFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICB0ZXN0TW92aW5nVXNpbmdBZGQoV1RGTW92ZShy
ZWYpKTsKKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7CisgICAgfQorfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAs
IFZhbHVlSXNEZXN0cnVjdGVkT25SZW1vdmUpCit7CisgICAgc3RydWN0IERlc3RydWN0b3JPYnNl
cnZlciB7CisgICAgICAgIERlc3RydWN0b3JPYnNlcnZlcigpID0gZGVmYXVsdDsKKworICAgICAg
ICBEZXN0cnVjdG9yT2JzZXJ2ZXIoYm9vbCogZGVzdHJ1Y3RlZCkKKyAgICAgICAgICAgIDogZGVz
dHJ1Y3RlZChkZXN0cnVjdGVkKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+RGVz
dHJ1Y3Rvck9ic2VydmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRlc3RydWN0ZWQp
CisgICAgICAgICAgICAgICAgKmRlc3RydWN0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgRGVzdHJ1Y3Rvck9ic2VydmVyKERlc3RydWN0b3JPYnNlcnZlciYmIG90aGVyKQorICAgICAg
ICAgICAgOiBkZXN0cnVjdGVkKG90aGVyLmRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG90aGVyLmRlc3RydWN0ZWQgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgRGVz
dHJ1Y3Rvck9ic2VydmVyJiBvcGVyYXRvcj0oRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RydWN0ZWQgPSBvdGhlci5kZXN0cnVjdGVkOworICAg
ICAgICAgICAgb3RoZXIuZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sKiBkZXN0cnVjdGVkIHsgbnVsbHB0ciB9
OworICAgIH07CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
aW50LCBEZXN0cnVjdG9yT2JzZXJ2ZXIsIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAg
Ym9vbCBkZXN0cnVjdGVkID0gZmFsc2U7CisgICAgbWFwLmFkZCg1LCBEZXN0cnVjdG9yT2JzZXJ2
ZXIgeyAmZGVzdHJ1Y3RlZCB9KTsKKworICAgIEVYUEVDVF9GQUxTRShkZXN0cnVjdGVkKTsKKwor
ICAgIGJvb2wgcmVtb3ZlUmVzdWx0ID0gbWFwLnJlbW92ZSg1KTsKKworICAgIEVYUEVDVF9UUlVF
KHJlbW92ZVJlc3VsdCk7CisgICAgRVhQRUNUX1RSVUUoZGVzdHJ1Y3RlZCk7Cit9CisKK3N0cnVj
dCBEZXJlZk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgICsrY291bnQ7CisgICAg
fQorICAgIE5FVkVSX0lOTElORSB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIC0tY291bnQ7
CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgfQor
ICAgIHVuc2lnbmVkIGNvdW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0cjxEZXJlZk9ic2VydmVy
PiogYnVja2V0QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBEZXJlZk9ic2VydmVyKiBv
YnNlcnZlZEJ1Y2tldCB7IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIFJlZlB0ck5vdFplcm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1dG8gb2JzZXJ2ZXIgPSBt
YWtlVW5pcXVlPERlcmVmT2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBpbnQsIFJvYmluSG9vZEhh
c2g8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+Pj4gbWFwOworICAgIG1hcC5hZGQoYWRvcHRSZWYob2Jz
ZXJ2ZXIuZ2V0KCkpLCA1KTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBtYXAuZmluZChvYnNlcnZl
ci5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoaXRlcmF0b3IgIT0gbWFwLmVuZCgpKTsKKworICAg
IG9ic2VydmVyLT5idWNrZXRBZGRyZXNzID0gJml0ZXJhdG9yLT5rZXk7CisKKyAgICBFWFBFQ1Rf
VFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RS
VUUobWFwLnJlbW92ZShvYnNlcnZlci5nZXQoKSkpOworCisgICAgLy8gSXQgaWYgZmluZSB0byBl
aXRoZXIgbGVhdmUgdGhlIG9sZCB2YWx1ZSBpbnRhY3QgYXQgZGVsZXRpb24gb3IgYWxyZWFkeSBz
ZXQgaXQgdG8gdGhlIGRlbGV0ZWQKKyAgICAvLyB2YWx1ZS4KKyAgICAvLyBBIHplcm8gd291bGQg
YmUgYSBpbmNvcnJlY3Qgb3V0Y29tZSBhcyBpdCB3b3VsZCBtZWFuIHdlIG51bGxlZCB0aGUgYnVj
a2V0IGJlZm9yZSBhbiBvcGFxdWUKKyAgICAvLyBjYWxsLgorICAgIEVYUEVDVF9UUlVFKG9ic2Vy
dmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2
ZWRCdWNrZXQgPT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpKTsKKyAgICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZl9LZXkpCit7CisgICAgeworICAgICAgICBS
ZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dn
ZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFw
LmFkZChXVEZNb3ZlKHJlZiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVm
TG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2Vy
Pj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5z
ZXQoV1RGTW92ZShyZWYpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+
PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQShhKTsKKyAgICAgICAgbWFwLmFk
ZChXVEZNb3ZlKHJlZkEpLCAxKTsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBMihhKTsK
KyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHJlZkEyKSwgMSk7CisgICAgfQorCisgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGlu
dCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5lbnN1cmUoV1RGTW92ZShyZWYpLCBbXSgpIHsK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8
UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOwor
ICAgICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgYXV0byBpdCA9IG1h
cC5maW5kKCZhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoaXQgIT0gbWFwLmVuZCgpKTsKKworICAg
ICAgICBBU1NFUlRfRVEoaXQtPmtleS5wdHIoKSwgJmEpOworICAgICAgICBBU1NFUlRfRVEoaXQt
PnZhbHVlLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdURk1vdmUo
cmVmKSwgMSk7CisKKyAgICAgICAgbWFwLnJlbW92ZSgmYSk7CisgICAgfQorCisgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
eworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNo
PFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIDEpOworCisgICAgICAgIGludCBpID0gbWFw
LnRha2UoJmEpOworICAgICAgICBBU1NFUlRfRVEoaSwgMSk7CisgICAgfQorCisgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
eworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJl
ZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxlYWsuIE5vIGJpZyBkZWFsIGZvciBhIHRl
c3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZiA9IGFkb3B0UmVmKCpu
ZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAgYXV0byogcG9pbnRlciA9IHJlZi5wdHIo
KTsKKyAgICAgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCBpICsgMSk7CisgICAgICAgICAg
ICBBU1NFUlRfVFJVRShtYXAuY29udGFpbnMocG9pbnRlcikpOworICAgICAgICB9CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZl9WYWx1ZSkKK3sKKyAgICB7CisgICAgICAg
IFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFw
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBX
VEZNb3ZlKHJlZikpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAg
UmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuc2V0KDEsIFdURk1vdmUocmVmKSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworICAgICAg
ICBSZWZMb2dnZXIgYigiYiIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBKGEpOworICAgICAgICBtYXAuYWRkKDEs
IFdURk1vdmUocmVmQSkpOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkIoYik7CisgICAg
ICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWZCKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVR
KCJyZWYoYSkgcmVmKGIpIGRlcmVmKGEpIGRlcmVmKGIpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9i
aW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOwor
ICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgYXV0byBhR2V0ID0g
bWFwLmdldCgxKTsKKyAgICAgICAgQVNTRVJUX0VRKGFHZXQsICZhKTsKKyAgICB9CisKKyAgICBB
U1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxp
bnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBh
dXRvIGVtcHR5R2V0ID0gbWFwLmdldCgxKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoZW1wdHlHZXQg
PT0gbnVsbHB0cik7CisgICAgfQorCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJl
ZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsKKworICAg
ICAgICBhdXRvIGFPdXQgPSBtYXAudGFrZSgxKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoc3RhdGlj
X2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBBU1NFUlRfRVEoJmEsIGFPdXQuZ2V0KCkpOwor
ICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFw
OworCisgICAgICAgIGF1dG8gZW1wdHlUYWtlID0gbWFwLnRha2UoMSk7CisgICAgICAgIEFTU0VS
VF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihlbXB0eVRha2UpKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50
Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFk
ZCgxLCBXVEZNb3ZlKHJlZikpOworICAgICAgICBtYXAucmVtb3ZlKDEpOworICAgIH0KKworICAg
IEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgbWFwLmVuc3VyZSgxLCBbJl0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgICAgIHJldHVy
biByZWY7CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8aW50Pj4gbWFwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyAr
K2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2UgUmVmTG9nZ2VyIG9iamVj
dHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1ZXNzLgorICAgICAgICAgICAgUmVm
PFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZMb2dnZXIoImEiKSk7CisgICAgICAg
ICAgICBtYXAuYWRkKGkgKyAxLCBXVEZNb3ZlKHJlZikpOworICAgICAgICAgICAgQVNTRVJUX1RS
VUUobWFwLmNvbnRhaW5zKGkgKyAxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaE1hcCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIERlbGV0ZWRBZGRyZXNzT2ZPcGVy
YXRvciwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXAxOworICAgIGZvciAoYXV0byYgdmFsdWUgOiBt
YXAxLnZhbHVlcygpKQorICAgICAgICAodm9pZCl2YWx1ZTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgUmVmTWFwcGVkVG9Ob25aZXJvRW1wdHlWYWx1ZSkKK3sKKyAgICBjbGFzcyBW
YWx1ZSB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZSgpID0gZGVmYXVsdDsKKyAgICAgICAg
VmFsdWUoVmFsdWUmJikgPSBkZWZhdWx0OworICAgICAgICBWYWx1ZShjb25zdCBWYWx1ZSYpID0g
ZGVmYXVsdDsKKyAgICAgICAgVmFsdWUmIG9wZXJhdG9yPShWYWx1ZSYmKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgVmFsdWUoaW50MzJfdCBmKQorICAgICAgICAgICAgOiBtX2ZpZWxkKGYpCisgICAg
ICAgIHsgfQorCisgICAgICAgIGludDMyX3QgZmllbGQoKSB7IHJldHVybiBtX2ZpZWxkOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBpbnQzMl90IG1fZmllbGQgeyAweGJhZGJlZWYgfTsKKyAg
ICB9OworCisgICAgY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5PiB7CisgICAgICAg
IEtleSgpID0gZGVmYXVsdDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWY8S2V5PiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEtleSk7IH0KKyAgICB9OworCisgICAgc3Rh
dGljX2Fzc2VydCghV1RGOjpIYXNoVHJhaXRzPFZhbHVlPjo6ZW1wdHlWYWx1ZUlzWmVybywgIiIp
OworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxLZXk+
LCBWYWx1ZSwgUm9iaW5Ib29kSGFzaDxSZWY8S2V5Pj4+IG1hcDsKKyAgICBWZWN0b3I8c3RkOjpw
YWlyPFJlZjxLZXk+LCBpbnQzMl90Pj4gdmVjdG9yTWFwOworCisgICAgZm9yIChpbnQzMl90IGkg
PSAwOyBpIDwgMTYwOyArK2kpIHsKKyAgICAgICAgUmVmPEtleT4ga2V5ID0gS2V5OjpjcmVhdGUo
KTsKKyAgICAgICAgbWFwLmFkZChSZWY8S2V5PihrZXkuZ2V0KCkpLCBWYWx1ZSB7IGkgfSk7Cisg
ICAgICAgIHZlY3Rvck1hcC5hcHBlbmQoeyBXVEZNb3ZlKGtleSksIGkgfSk7CisgICAgfQorCisg
ICAgZm9yIChhdXRvJiBwYWlyIDogdmVjdG9yTWFwKQorICAgICAgICBBU1NFUlRfRVEocGFpci5z
ZWNvbmQsIG1hcC5nZXQocGFpci5maXJzdCkuZmllbGQoKSk7CisKKyAgICBmb3IgKGF1dG8mIHBh
aXIgOiB2ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9UUlVFKG1hcC5yZW1vdmUocGFpci5maXJz
dCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSYW5kb21fRW1wdHkpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNp
Z25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKworICAgIGF1dG8gcmVzdWx0ID0g
bWFwLnJhbmRvbSgpOworICAgIEFTU0VSVF9FUShyZXN1bHQsIG1hcC5lbmQoKSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9XcmFwQXJvdW5kKQoreworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFpl
cm9IYXNoPHVuc2lnbmVkPiwgQmlnVGFibGVIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbWFwOworICAg
IG1hcC5hZGQoMSwgMSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5yYW5kb20oKTsKKyAgICBB
U1NFUlRfRVEocmVzdWx0LCBtYXAuYmVnaW4oKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hNYXAsIFJhbmRvbV9Jc0V2ZW5seURpc3RyaWJ1dGVkKQoreworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVk
Pj4gbWFwOworICAgIG1hcC5hZGQoMCwgMCk7CisgICAgbWFwLmFkZCgxLCAxKTsKKworICAgIHVu
c2lnbmVkIHplcm9zID0gMDsKKyAgICB1bnNpZ25lZCBvbmVzID0gMDsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9IG1hcC5yYW5k
b20oKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUpCisgICAgICAgICAgICArK3plcm9zOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDF1KTsKKyAgICAg
ICAgICAgICsrb25lczsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9FUSh6ZXJvcyAr
IG9uZXMsIDEwMDB1KTsKKyAgICBBU1NFUlRfTEUoemVyb3MsIDYwMHUpOworICAgIEFTU0VSVF9M
RShvbmVzLCA2MDB1KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkp
OworICAgIEVYUEVDVF9FUSgwdSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgbWFwLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0VRKDB1LCBtYXAuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMTYzODR1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgbWFwLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSwg
bWFrZVN0cmluZygiYmFyIiwgaSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgbWFwLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgbWFwLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVF
KG1hcC5jb250YWlucygiZm9vMyJfc3RyKSk7CisgICAgRVhQRUNUX1NUUkVRKCJiYXIzIiwgbWFw
LmdldCgiZm9vMyJfc3RyKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgOTk5OTsgKytpKQorICAgICAgICBtYXAuYWRkKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpLCBt
YWtlU3RyaW5nKCJiYXoiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1ICsgOTk5OXUsIG1hcC5z
aXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShtYXAucmVt
b3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBtYXAuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBtYXAuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNU
X1NUUkVRKCJiYXozIiwgbWFwLmdldCgiZXhjZXNzMyJfc3RyKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRSht
YXAucmVtb3ZlKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDB1LCBt
YXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFw
MjsKKyAgICBtYXAyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0ZB
TFNFKG1hcDIucmVtb3ZlKCJmb28xIl9zKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIw
MDA7ICsraSkKKyAgICAgICAgbWFwMi5hZGQobWFrZVN0cmluZygiZm9vIiwgaSksIG1ha2VTdHJp
bmcoImJhciIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoMjAwMHUsIG1hcDIuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMTYzODR1LCBtYXAyLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAyMDAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcDIucmVtb3ZlKG1ha2VTdHJp
bmcoImZvbyIsIGkpKSk7CisgICAgRVhQRUNUX0VRKDB1LCBtYXAyLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKDh1LCBtYXAyLmNhcGFjaXR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBSYW5kb21fSXNFdmVubHlEaXN0cmlidXRlZEFmdGVyUmVtb3ZlKQoreworICAgIGZvciAo
c2l6ZV90IHRhYmxlU2l6ZSA9IDI7IHRhYmxlU2l6ZSA8PSAyICogNjsgKyt0YWJsZVNpemUpIHsg
Ly8gT3VyIGhhc2ggdGFibGVzIHNocmluayBhdCBhIGxvYWQgZmFjdG9yIG9mIDEgLyA2LgorICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVu
c2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1hcDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5hZGQoaSwgaSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAyOyBpIDwgdGFibGVTaXplOyArK2kpCisgICAgICAgICAgICBtYXAucmVt
b3ZlKGkpOworCisgICAgICAgIHVuc2lnbmVkIHplcm9zID0gMDsKKyAgICAgICAgdW5zaWduZWQg
b25lcyA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDA7ICsraSkg
eworICAgICAgICAgICAgYXV0byBpdCA9IG1hcC5yYW5kb20oKTsKKyAgICAgICAgICAgIGlmICgh
aXQtPnZhbHVlKQorICAgICAgICAgICAgICAgICsremVyb3M7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfRVEoaXQtPnZhbHVlLCAxdSk7CisgICAgICAgICAgICAg
ICAgKytvbmVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX0VR
KHplcm9zICsgb25lcywgMTAwMHUpOworICAgICAgICBBU1NFUlRfTEUoemVyb3MsIDYwMHUpOwor
ICAgICAgICBBU1NFUlRfTEUob25lcywgNjAwdSk7CisgICAgfQorfQorCitjbGFzcyBUZXN0T2Jq
ZWN0V2l0aEN1c3RvbURlc3RydWN0b3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3RvcihGdW5jdGlvbjx2b2lk
KCk+JiYgcnVuSW5EZXN0cnVjdG9yKQorICAgICAgICA6IG1fcnVuSW5EZXN0cnVjdG9yKFdURk1v
dmUocnVuSW5EZXN0cnVjdG9yKSkKKyAgICB7IH0KKworICAgIH5UZXN0T2JqZWN0V2l0aEN1c3Rv
bURlc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgbV9ydW5JbkRlc3RydWN0b3IoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX3J1bkluRGVzdHJ1Y3RvcjsKK307
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIENsZWFyX1JlZW50ZXIpCit7CisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVuaXF1
ZV9wdHI8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yPiwgUm9iaW5Ib29kSGFzaDx1aW50
NjRfdD4+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IDEwOyArK2kpIHsKKyAg
ICAgICAgbWFwLmFkZChpLCBtYWtlVW5pcXVlPFRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rv
cj4oWyZtYXBdIHsKKyAgICAgICAgICAgIG1hcC5jbGVhcigpOworICAgICAgICAgICAgRVhQRUNU
X0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5pc0VtcHR5
KCkpOworICAgICAgICB9KSk7CisgICAgfQorICAgIEVYUEVDVF9FUSgxMFUsIG1hcC5zaXplKCkp
OworICAgIG1hcC5jbGVhcigpOworICAgIEVYUEVDVF9FUSgwVSwgbWFwLnNpemUoKSk7CisgICAg
RVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIEFkZEFuZElkZW50aXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVuc2lnbmVkPiBtYXA7CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWUzOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8g
c3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1h
cC5zZXQoc3RyaW5nLmltcGwoKSwgaW5kZXgpOworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9FUShyZXN1bHQuaXRlcmF0b3ItPmtleSwgc3Ry
aW5nLmltcGwoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBMYXJn
ZVJlbW92YWwpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBT
dHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIG1hcC5zZXQoc3RyaW5nLmltcGwoKSwgaW5k
ZXgpOworICAgIH0KKyAgICBFWFBFQ1RfRVEobWFwLnNpemUoKSwgMWU0KTsKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGlu
ZGV4ICYgMHgxKSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGlu
ZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1hcC5yZW1vdmUoc3RyaW5nLmltcGwo
KSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBFWFBFQ1RfRVEobWFwLnNpemUoKSwgMWU0IC8gMik7CisgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0g
U3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBpZiAoaW5kZXggJiAweDEpCisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0UobWFwLmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IG1hcC5nZXQoc3RyaW5nLmltcGwo
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIGluZGV4KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkg
eworICAgICAgICBpZiAoIShpbmRleCAmIDB4MSkpIHsKKyAgICAgICAgICAgIGF1dG8gc3RyaW5n
ID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gbWFw
LnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbW92ZWQp
OworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAwdSk7CisgICAg
RVhQRUNUX0VRKG1hcC5jYXBhY2l0eSgpLCA4dSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JvYmlu
SG9vZEhhc2hTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29k
SGFzaFNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdjYTRhZDllMmMwMjk0MGYyNWQ5ZDM5ZDQ0N2I4YTkz
MzI3MTM0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1JvYmluSG9vZEhhc2hTZXQuY3BwCkBAIC0wLDAgKzEsNTkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1ZGUg
IkRlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIgorI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisjaW5j
bHVkZSAiUmVmTG9nZ2VyLmgiCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPGZ1bmN0aW9u
YWw+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CisjaW5jbHVkZSA8d3RmL1N0b3B3YXRjaC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK3RlbXBsYXRlPGludCBpbml0aWFsQ2FwYWNpdHk+CitzdHJ1Y3QgSW5pdGlhbENhcGFjaXR5
VGVzdEhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czxpbnQ+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSBpbml0aWFs
Q2FwYWNpdHk7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFJvYmluSG9vZEhh
c2ggOiBwdWJsaWMgRGVmYXVsdEhhc2g8VD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNIYXNoSW5WYWx1ZSA9IHRydWU7Cit9OworCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNh
cGFjaXR5Rm9yU2l6ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0g
V1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKHNpemUpOworICAgIGlmIChzaXplICogMTAwID49IGNh
cGFjaXR5ICogOTUpCisgICAgICAgIHJldHVybiBjYXBhY2l0eSAqIDI7CisgICAgcmV0dXJuIGNh
cGFjaXR5OworfQorCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgordm9pZCB0ZXN0SW5pdGlhbENh
cGFjaXR5KCkKK3sKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gY2Fw
YWNpdHlGb3JTaXplKHNpemUpOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxpbnQsIFJvYmluSG9vZEhhc2g8aW50PiwgSW5pdGlhbENhcGFjaXR5VGVzdEhhc2hU
cmFpdHM8aW5pdGlhbENhcGFjaXR5Pj4gdGVzdFNldDsKKworICAgIC8vIEluaXRpYWwgY2FwYWNp
dHkgaXMgbnVsbC4KKyAgICBBU1NFUlRfRVEoMHUsIHRlc3RTZXQuY2FwYWNpdHkoKSk7CisKKyAg
ICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gc2l6ZSBzaG91bGQgbmV2ZXIgY2hhbmdlIHRoZSBjYXBh
Y2l0eS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICB0
ZXN0U2V0LmFkZChpKTsKKyAgICAgICAgQVNTRVJUX0VRKGluaXRpYWxDYXBhY2l0eSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRlc3RTZXQuY2FwYWNpdHkoKSkpOworICAgIH0KKworICAgIC8vIEFk
ZGluZyBpdGVtcyB1cCB0byBtb3JlIHRoYW4gOTUlIG9mIHRoZSBjYXBhY2l0eSBzaG91bGQgbm90
IGNoYW5nZSB0aGUgY2FwYWNpdHkuCisgICAgdW5zaWduZWQgY2FwYWNpdHlMaW1pdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGQ6OmNlaWwoaW5pdGlhbENhcGFjaXR5ICogMC45NSkpOworICAg
IGZvciAoc2l6ZV90IGkgPSBzaXplOyBpIDwgY2FwYWNpdHlMaW1pdDsgKytpKSB7CisgICAgICAg
IHRlc3RTZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEoaW5pdGlhbENhcGFjaXR5LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSk7CisgICAgfQorCisgICAgLy8g
QWRkaW5nIG9uZSBtb3JlIGl0ZW0gaW5jcmVhc2UgdGhlIGNhcGFjaXR5LgorICAgIHRlc3RTZXQu
YWRkKGluaXRpYWxDYXBhY2l0eSk7CisgICAgRVhQRUNUX0dUKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0ZXN0U2V0LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2FwYWNpdHkpOworfQorCit0ZW1wbGF0ZTx1
bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCk7
Cit0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4o
KQoreworfQordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0
Q2FwYWNpdHlVcFRvU2l6ZSgpCit7CisgICAgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTxz
aXplIC0gMT4oKTsKKyAgICB0ZXN0SW5pdGlhbENhcGFjaXR5PHNpemU+KCk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hTZXQsIEluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBnZW5lcmF0ZVRl
c3RDYXBhY2l0eVVwVG9TaXplPDEyOD4oKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNl
dCwgTW92ZU9ubHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PE1vdmVPbmx5PiBoYXNoU2V0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7
ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIGhhc2hT
ZXQuYWRkKFdURk1vdmUobW92ZU9ubHkpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmNvbnRhaW5zKE1v
dmVPbmx5KGkgKyAxKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkK
KyAgICAgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisK
KyAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBoYXNoU2V0LmFkZChNb3ZlT25seShpICsgMSkp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNU
X1RSVUUoaGFzaFNldC50YWtlKE1vdmVPbmx5KGkgKyAxKSkgPT0gTW92ZU9ubHkoaSArIDEpKTsK
KworICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hTZXQuYWRkKE1vdmVPbmx5KGkgKyAx
KSk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8TW92ZU9u
bHk+IHNlY29uZFNldDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisg
ICAgICAgIHNlY29uZFNldC5hZGQoaGFzaFNldC50YWtlQW55KCkpOworCisgICAgRVhQRUNUX1RS
VUUoaGFzaFNldC5pc0VtcHR5KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7
ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2Vjb25kU2V0LmNvbnRhaW5zKE1vdmVPbmx5KGkg
KyAxKSkpOworfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleSkK
K3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7
CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsKKworICAgIGF1
dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigp
OworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVY
UEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7CisKKyAgICBzZXQuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVy
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVu
aXF1ZV9wdHI8aW50PiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IHNldDsK
KworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8
aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdU
Rk1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBhdXRvIGl0ID0gc2V0LmZpbmQocHRyKTsKKyAgICBB
U1NFUlRfVFJVRShpdCAhPSBzZXQuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5nZXQo
KSk7CisgICAgRVhQRUNUX0VRKDUsICppdC0+Z2V0KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoU2V0LCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxp
bnQ+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0OworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOwor
ICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlx
dWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSh0cnVlLCBzZXQuY29udGFpbnMocHRyKSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1Bv
aW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3Bl
IHNjb3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0
ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29kSGFz
aDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7Cisg
ICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRy
LmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldC5yZW1vdmUocHRyKTsKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQor
eworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsK
KworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1
ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gc2V0OworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgp
OworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVY
UEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHNldC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKHB0
ciwgcmVzdWx0LmdldCgpKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICByZXN1bHQg
PSBudWxscHRyOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaFNldCwgQ29weUVtcHR5KQoreworICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVk
Pj4gZm9vOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgICAgICBF
WFBFQ1RfRVEoMHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIu
c2l6ZSgpKTsKKyAgICB9CisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBmb28oeyAx
LCA1LCA2NCwgNDIgfSk7CisgICAgICAgIEVYUEVDVF9FUSg0dSwgZm9vLnNpemUoKSk7CisgICAg
ICAgIGZvby5yZW1vdmUoMSk7CisgICAgICAgIGZvby5yZW1vdmUoNSk7CisgICAgICAgIGZvby5y
ZW1vdmUoNDIpOworICAgICAgICBmb28ucmVtb3ZlKDY0KTsKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2ln
bmVkPj4gYmFyKGZvbyk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuY2FwYWNpdHkoKSk7
CisgICAgICAgIEVYUEVDVF9FUSgwdSwgYmFyLnNpemUoKSk7CisgICAgfQorfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoU2V0LCBDb3B5QWxsb2NhdGVBdExlYXN0TWluaW11bUNhcGFjaXR5KQor
eworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwg
Um9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGZvbyh7IDQyIH0pOworICAgIEVYUEVDVF9FUSgxdSwg
Zm9vLnNpemUoKSk7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisKKyAgICBFWFBF
Q1RfRVEoOHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGJhci5zaXplKCkp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBDb3B5Q2FwYWNpdHlJc05vdE9uQm91
bmRhcnkpCit7CisgICAgZm9yICh1bnNpZ25lZCBzaXplID0gNDsgc2l6ZSA8IDEwMDsgKytzaXpl
KSB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNp
Z25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IHNvdXJjZTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHNpemUgKyAxOyArK2kpCisgICAgICAgICAgICBzb3VyY2UuYWRkKGkp
OworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNp
Z25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGNvcHkxKHNvdXJjZSk7CisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IGNvcHkyKHNvdXJjZSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+
IGNvcHkzKHNvdXJjZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkxLnNpemUoKSk7
CisgICAgICAgIEVYUEVDVF9FUShzaXplLCBjb3B5Mi5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoc2l6ZSwgY29weTMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IHNpemUgKyAxOyArK2kpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkxLmNvbnRhaW5z
KGkpKSA8PCBpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29weTIuY29udGFpbnMoaSkpIDw8
IGk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5jb250YWlucyhpKSkgPDwgaTsKKyAg
ICAgICAgfQorICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTEuY29udGFpbnMoc2l6ZSArIDIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRhaW5zKHNpemUgKyAyKSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShjb3B5My5jb250YWlucyhzaXplICsgMikpOworCisgICAgICAgIEVYUEVD
VF9UUlVFKGNvcHkyLnJlbW92ZSgxKSk7CisgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0
eSgpLCBjb3B5Mi5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkyLmNvbnRh
aW5zKDEpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5hZGQoc2l6ZSArIDIpLmlzTmV3
RW50cnkpOworICAgICAgICBpZiAoKGNvcHkxLmNhcGFjaXR5KCkgKiAwLjk1KSA8PSBjb3B5MS5z
aXplKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSAqIDIsIGNvcHkz
LmNhcGFjaXR5KCkpIDw8IGNvcHkxLnNpemUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
RVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5KCksIGNvcHkzLmNhcGFjaXR5KCkpIDw8IGNvcHkxLnNp
emUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29weTMuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAg
ICB9Cit9CisKK3N0cnVjdCBEZXJlZk9ic2VydmVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CisgICAgTkVWRVJfSU5MSU5FIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAg
ICsrY291bnQ7CisgICAgfQorICAgIE5FVkVSX0lOTElORSB2b2lkIGRlcmVmKCkKKyAgICB7Cisg
ICAgICAgIC0tY291bnQ7CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+
Z2V0KCk7CisgICAgfQorICAgIHVuc2lnbmVkIGNvdW50IHsgMSB9OworICAgIGNvbnN0IFJlZlB0
cjxEZXJlZk9ic2VydmVyPiogYnVja2V0QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBE
ZXJlZk9ic2VydmVyKiBvYnNlcnZlZEJ1Y2tldCB7IG51bGxwdHIgfTsKK307CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hTZXQsIFJlZlB0ck5vdFplcm9lZEJlZm9yZURlcmVmKQoreworICAgIGF1
dG8gb2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPERlcmVmT2JzZXJ2ZXI+KCk7CisKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+LCBS
b2Jpbkhvb2RIYXNoPFJlZlB0cjxEZXJlZk9ic2VydmVyPj4+IHNldDsKKyAgICBzZXQuYWRkKGFk
b3B0UmVmKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICBhdXRvIGl0ZXJhdG9yID0gc2V0LmZpbmQo
b2JzZXJ2ZXIuZ2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGl0ZXJhdG9yICE9IHNldC5lbmQoKSk7
CisKKyAgICBvYnNlcnZlci0+YnVja2V0QWRkcmVzcyA9IGl0ZXJhdG9yLmdldCgpOworCisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVY
UEVDVF9UUlVFKHNldC5yZW1vdmUob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIC8vIEl0IGlmIGZp
bmUgdG8gZWl0aGVyIGxlYXZlIHRoZSBvbGQgdmFsdWUgaW50YWN0IGF0IGRlbGV0aW9uIG9yIGFs
cmVhZHkgc2V0IGl0IHRvIHRoZSBkZWxldGVkCisgICAgLy8gdmFsdWUuCisgICAgLy8gQSB6ZXJv
IHdvdWxkIGJlIGEgaW5jb3JyZWN0IG91dGNvbWUgYXMgaXQgd291bGQgbWVhbiB3ZSBudWxsZWQg
dGhlIGJ1Y2tldCBiZWZvcmUgYW4gb3BhcXVlCisgICAgLy8gY2FsbC4KKyAgICBFWFBFQ1RfVFJV
RShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXIuZ2V0KCkgfHwgb2JzZXJ2ZXIt
Pm9ic2VydmVkQnVja2V0ID09IFJlZlB0cjxEZXJlZk9ic2VydmVyPjo6UHRyVHJhaXRzOjpoYXNo
VGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAgRVhQRUNUX0VRKG9ic2VydmVyLT5jb3VudCwgMHUp
OworfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0ck5vdFplcm9lZEJl
Zm9yZURlc3RydWN0b3IpCit7CisgICAgc3RydWN0IERlc3RydWN0b3JPYnNlcnZlciB7CisgICAg
ICAgIH5EZXN0cnVjdG9yT2JzZXJ2ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBvYnNlcnZl
KCk7CisgICAgICAgIH0KKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG9ic2VydmU7Cisg
ICAgfTsKKworICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+KiBi
dWNrZXRBZGRyZXNzID0gbnVsbHB0cjsKKyAgICBjb25zdCBEZXN0cnVjdG9yT2JzZXJ2ZXIqIG9i
c2VydmVkQnVja2V0ID0gbnVsbHB0cjsKKyAgICBib29sIGRlc3RydWN0b3JDYWxsZWQgPSBmYWxz
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVzdHJ1Y3Rvck9ic2VydmVyPiBvYnNlcnZlcihuZXcg
RGVzdHJ1Y3Rvck9ic2VydmVyIHsgWyZdKCkgeworICAgICAgICBvYnNlcnZlZEJ1Y2tldCA9IGJ1
Y2tldEFkZHJlc3MtPmdldCgpOworICAgICAgICBkZXN0cnVjdG9yQ2FsbGVkID0gdHJ1ZTsKKyAg
ICB9fSk7CisKKyAgICBjb25zdCBEZXN0cnVjdG9yT2JzZXJ2ZXIqIG9ic2VydmVyQWRkcmVzcyA9
IG9ic2VydmVyLmdldCgpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+LCBSb2Jpbkhvb2RIYXNo
PHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+Pj4gc2V0OworICAgIGF1dG8gYWRk
UmVzdWx0ID0gc2V0LmFkZChXVEZNb3ZlKG9ic2VydmVyKSk7CisKKyAgICBFWFBFQ1RfVFJVRShh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0g
bnVsbHB0cik7CisgICAgRVhQRUNUX0ZBTFNFKGRlc3RydWN0b3JDYWxsZWQpOworCisgICAgYnVj
a2V0QWRkcmVzcyA9IGFkZFJlc3VsdC5pdGVyYXRvci5nZXQoKTsKKworICAgIEVYUEVDVF9UUlVF
KG9ic2VydmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9GQUxTRShkZXN0cnVjdG9y
Q2FsbGVkKTsKKyAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKCphZGRSZXN1bHQuaXRlcmF0b3Ip
KTsKKworICAgIEVYUEVDVF9UUlVFKGRlc3RydWN0b3JDYWxsZWQpOworICAgIEVYUEVDVF9UUlVF
KG9ic2VydmVkQnVja2V0ID09IG9ic2VydmVyQWRkcmVzcyB8fCBvYnNlcnZlZEJ1Y2tldCA9PSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IERlc3RydWN0b3JPYnNlcnZlcio+KC0xKSk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlZikKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dl
ciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0Owor
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3Zl
KHJlZikpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJl
ZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAg
UmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKHJlZi5jb3B5UmVmKCkpOwor
ICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBh
KCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisg
ICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJl
ZikpOworICAgICAgICBzZXQucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAg
ICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dn
ZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0
LmFkZChXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91dCA9IHNldC50YWtlKCZhKTsK
KyAgICAgICAgQVNTRVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBB
U1NFUlRfRVEoJmEsIGFPdXQuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+
PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRk
KFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgYXV0byBhT3V0ID0gc2V0LnRha2VBbnkoKTsKKyAg
ICAgICAgQVNTRVJUX1RSVUUoc3RhdGljX2Nhc3Q8Ym9vbD4oYU91dCkpOworICAgICAgICBBU1NF
UlRfRVEoJmEsIGFPdXQuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jp
bkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBhdXRvIGVtcHR5VGFrZSA9
IHNldC50YWtlQW55KCk7CisgICAgICAgIEFTU0VSVF9GQUxTRShzdGF0aWNfY2FzdDxib29sPihl
bXB0eVRha2UpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZM
b2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJl
ZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworCisg
ICAgICAgIEFTU0VSVF9UUlVFKHNldC5jb250YWlucygmYSkpOworICAgIH0KKworICAgIEFTU0VS
VF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAg
IHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxS
ZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwg
b2YgdGhlc2UgUmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJ
IGd1ZXNzLgorICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBS
ZWZMb2dnZXIoImEiKSk7CisgICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOwor
ICAgICAgICAgICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworICAgICAgICAgICAgQVNTRVJUX1RS
VUUoc2V0LmNvbnRhaW5zKHBvaW50ZXIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRf
U1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+
PiBzZXQ7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChX
VEZNb3ZlKHJlZikpOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQy
KHNldCk7CisgICAgfQorICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hTZXQsIERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcikKK3sKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8RGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yPiBzZXQx
OworICAgIHNldDEuYWRkKDEwKTsKKworICAgIHNldDEucmVtb3ZlKDEwKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgUmVtb3ZlUmFuZG9tKQoreworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25l
ZD4+IHNldDEgeyAxLCAyLCAzIH07CisgICAgc2V0MS5yZW1vdmUoc2V0MS5yYW5kb20oKSk7Cisg
ICAgc2V0MS5yZW1vdmUoc2V0MS5yYW5kb20oKSk7CisgICAgc2V0MS5yZW1vdmUoc2V0MS5yYW5k
b20oKSk7CisgICAgQVNTRVJUX1RSVUUoc2V0MS5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoU2V0LCBSZXNlcnZlSW5pdGlhbENhcGFjaXR5KQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IHNldDsKKyAgICBFWFBFQ1Rf
RVEoMHUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LmNhcGFjaXR5KCkpOwor
CisgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0VRKDB1
LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYzODR1LCBzZXQuY2FwYWNpdHkoKSk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0LmFkZChtYWtl
U3RyaW5nKCJmb28iLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBzZXQuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMTYzODR1LCBzZXQuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoc2V0
LmNvbnRhaW5zKCJmb28zIl9zdHIpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsg
KytpKQorICAgICAgICBzZXQuYWRkKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKTsKKyAgICBFWFBF
Q1RfRVEoOTk5OXUgKyA5OTk5dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDMyNzY4dSwg
c2V0LmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisg
ICAgICAgIEVYUEVDVF9UUlVFKHNldC5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwgaSkpKTsKKyAg
ICBFWFBFQ1RfRVEoOTk5OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgzMjc2OHUsIHNl
dC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAg
ICAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKG1ha2VTdHJpbmcoImV4Y2VzcyIsIGkpKSk7Cisg
ICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIHNldC5jYXBh
Y2l0eSgpKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxT
dHJpbmc+IHNldDI7CisgICAgc2V0Mi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAg
IEVYUEVDVF9GQUxTRShzZXQyLnJlbW92ZSgiZm9vMSJfcykpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAyMDAwOyArK2kpCisgICAgICAgIHNldDIuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkp
KTsKKyAgICBFWFBFQ1RfRVEoMjAwMHUsIHNldDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMTYz
ODR1LCBzZXQyLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDAwOyAr
K2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHNldDIucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIsIGkp
KSk7CisgICAgRVhQRUNUX0VRKDB1LCBzZXQyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDh1LCBz
ZXQyLmNhcGFjaXR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBBZGRBbmRJ
ZGVudGl0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UmVmUHRyPFN0cmluZ0ltcGw+PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgMWUzOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoaW5kZXgpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQoc3RyaW5nLmltcGwoKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNU
X0VRKCpyZXN1bHQuaXRlcmF0b3IsIHN0cmluZy5pbXBsKCkpOworICAgIH0KK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgTGFyZ2VSZW1vdmFsKQoreworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWZQdHI8U3RyaW5nSW1wbD4+IHNldDsKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAg
YXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIHNldC5hZGQoc3Ry
aW5nLmltcGwoKSk7CisgICAgfQorICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCAxZTQpOworICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAg
ICBpZiAoaW5kZXggJiAweDEpIHsKKyAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpu
dW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gc2V0LnJlbW92ZShzdHJp
bmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9
CisgICAgfQorICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCAxZTQgLyAyKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBz
dHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGlmIChpbmRleCAmIDB4MSkK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMoc3RyaW5nLmltcGwoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoc3RyaW5n
LmltcGwoKSkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoIShpbmRleCAmIDB4MSkpIHsKKyAgICAgICAg
ICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9v
bCByZW1vdmVkID0gc2V0LnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUShzZXQuc2l6
ZSgpLCAwdSk7CisgICAgRVhQRUNUX0VRKHNldC5jYXBhY2l0eSgpLCA4dSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="444689"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424950</attachid>
            <date>2021-04-01 14:52:36 -0700</date>
            <delta_ts>2021-04-01 15:13:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401145236.patch</filename>
            <type>text/plain</type>
            <size>299498</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MGY5YzE4ZTQwMjkyNTYxMzE3YWY3ZDExMmEwNDIxMWRlZTM4OGE5Li4zNjIyZTRiYWI3MWRhMTFm
MTZkMjYyOWEyMDMyN2VlMDBkMTE4MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbCBQaXpsby4KKworICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1l
cy5jcHA6CisgICAgICAgIChKU0M6Omxvb2tVcFByaXZhdGVOYW1lSW1wbCk6CisgICAgICAgIChK
U0M6Omxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aDoKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2FsZUludmFy
aWFudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50bERpc3BsYXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bExpc3RGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6aW5pdGlh
bGl6ZUxpc3RGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAg
ICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZCk6CisgICAgICAgIChKU0M6Omlu
dGxBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bENvbGxhdG9yQXZhaWxhYmxl
TG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1
cE1hdGNoZXIpOgorICAgICAgICAoSlNDOjpiZXN0Rml0TWF0Y2hlcik6CisgICAgICAgIChKU0M6
OnJlc29sdmVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpz
dXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50
bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUGx1cmFs
UnVsZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFJlbGF0aXZlVGltZUZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsTGlzdEZvcm1hdEF2YWls
YWJsZUxvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBD
YWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwS2V5Lmg6CisKIDIwMjEtMDQtMDEgIFRh
ZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVzZSBv
ZiBFTkFCTEUgZnJvbSBBUEkgaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGUwMWU5ZTYwZjY4MDI0M2UyMjJjOTQ0Mzk0
ODhiNmYwZTUyYTA5ODkuLjllM2EzYzIwNjQxZmNhYTU5MDdlNjRkZGI0MmU1MTBkZTcwZDVkOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUwIEBACisyMDIxLTA0LTAxICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJs
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsIFBpemxvLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
aW1wbGVtZW50cyBSb2Jpbkhvb2RIYXNoVGFibGVbMV0uIFdlIGRvbid0IHVzZSBpdCBhcyBhIGRl
ZmF1bHQgaGFzaHRhYmxlIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgcGVyZm9ybWFuY2Ugdi5zLiBt
ZW1vcnktc2F2aW5nIGNoYXJhY3RlcmlzdGljcywKKyAgICAgICAgYW5kIHRoaXMgcGF0Y2gncyBn
b2FsIGlzIG5vdCB0YWNrbGluZyBvbiBtYWtpbmcgdGhpcyBkZWZhdWx0LiBSYXRoZXIsIHRoZSBn
b2FsIG9mIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaXQgdG8gbm9uLXBlcmZvcm1hbmNlIHNl
bnNpdGl2ZSBhcmVhIHF1aWNrbHkKKyAgICAgICAgc28gdGhhdCB3ZSBjYW4gc2F2ZSBtZW1vcnku
IFJvYmluSG9vZEhhc2hUYWJsZSBtb3JlIGZyZXF1ZW50bHkgY29tcHV0ZXMgaGFzaCB2YWx1ZSBj
b21wYXJlZCB0byBIYXNoVGFibGUsIHNvIHRoaXMgaXMgbm90IGRyb3AtaW4gcmVwbGFjZW1lbnQg
Zm9yIHRoZSBleGlzdGluZworICAgICAgICBvbmUuIEJ1dCBzdGlsbCwgdGhpcyBpcyB1c2VmdWwg
c2luY2Ugd2Uga25vdyB0aGF0ICJ3aGlsZSB0aGVyZSBhcmUgbWFueSBzbWFsbCBIYXNoVGFibGVz
IGFuZCB0aGV5IGhvbGRzIG11Y2ggbWVtb3J5LCB0aGVyZSBhcmUgc3VwZXIgbGFyZ2UgSGFzaFRh
YmxlcyBhbmQKKyAgICAgICAgdGhleSBob2xkcyBhbG1vc3Qgc2FtZSBhbW91bnQgb2YgbWVtb3J5
IHdoaWxlIHRoZXkgYXJlIGEgZmV3LiIuIFRoaXMgcGF0Y2gncyBnb2FsIGlzIGFwcGx5aW5nIHRo
aXMgUm9iaW5Ib29kSGFzaFRhYmxlIHRvIHRoZXNlICJsYXJnZSwgYnV0IGEgZmV3IiBzaW5nbGV0
b24gdGFibGVzLgorCisgICAgICAgIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgZGlzdGFu
Y2UtZnJvbS1pbml0aWFsLWJ1Y2tldCAoRElCKSBzbWFsbCBieSBhZGp1c3RpbmcgZXhpc3Rpbmcg
ZW50cmllcyB3aGVuIGluc2VydGluZy4gV2hlbiBpbnNlcnRpbmcsIGlmIHdlIGZvdW5kIHRoYXQg
dGhlCisgICAgICAgIGV4aXN0aW5nIGVudHJ5IGhhcyBsZXNzIERJQiB0aGFuIHRoZSBjdXJyZW50
IGluc2VydGluZyBlbnRyeSdzIERJQiwgdGhlbiB3ZSBzd2FwIGVudHJpZXMsIGFuZCBpbnNlcnQg
dGhlIGV4aXN0aW5nIGVudHJ5IHRvIHRoZSBvdGhlciBwbGFjZS4gVGhpcyBpcyBnaXZpbmcKKyAg
ICAgICAgc29tZSBnb29kIERJQiBmcm9tIHJpY2ggZW50cnkgdG8gcG9vciBlbnRyeSAodGhhdCdz
IHdoeSBpdCBpcyBjYWxsZWQgUm9iaW5Ib29kIEhhc2hpbmcpLCBhbmQgbWFraW5nIGF2ZXJhZ2Ug
RElCIGxvd2VyLiBBbmQgdGhpcyBhbGdvcml0aG0gYWRkcyBnb29kIGludmFyaWFudAorICAgICAg
ICB0aGF0LCB3aGVuIGxvb2tpbmcgdXAgYW4gZW50cnksIGFuZCB3ZSBmb3VuZCB0aGF0IGV4aXN0
aW5nIGVudHJ5IGhhcyBzbWFsbGVyIERJQiwgdGhlbiB3ZSBjYW4gc3RvcCBzZWFyY2hpbmcgaW4g
dGhlIG1pZGRsZSBvZiB0aGUgY2hhaW4gc2luY2Ugd2Uga25vdyB0aGF0CisgICAgICAgIHdlIHNo
b3VsZCBzd2FwIGVudHJpZXMgd2hlbiB0aGlzIGhhcHBlbmVkIHdoZW4gaW5zZXJ0aW5nLiBUaGVz
ZSB0d28gdHJpY2tzIG1haW50YWluIEhhc2hUYWJsZSBwZXJmb3JtYW5jZSBldmVuIHVuZGVyIHNp
Z25pZmljYW50bHkgaGlnaCBsb2FkIGZhY3RvcjogOTAlIGxvYWQtZmFjdG9yCisgICAgICAgIGp1
c3Qgd29ya3MuIDk1JSBsb2FkLWZhY3RvciByZWdyZXNzIGFkZGluZyBwZXJmb3JtYW5jZSwgYnV0
IHN0aWxsIGl0IGRvZXMgbm90IGJlY29tZSBjYXRhc3Ryb3BoaWMgY29tcGFyZWQgdG8gbm9ybWFs
IG9wZW4tYWRkcmVzc2luZyBIYXNoVGFibGUuCisKKyAgICAgICAgV2UgaW50cm9kdWNlIFJvYmlu
SG9vZEhhc2hUYWJsZSwgYW5kIGFkZGluZyBzZXZlcmFsIGtpbmRzIG9mIHRhYmxlcyBiYXNlZCBv
biBsb2FkLWZhY3RvcnMuCisKKyAgICAgICAgMS4gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0IC8gSGFzaE1hcAorCisgICAgICAgICAgICBUaGlzIGhhcyA5NSUgbG9hZC1m
YWN0b3IuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNldHMgYW5kIG1hcHMgd2hpY2ggaXMgbW9zdGx5
LWNvbnN0YW50OiBjb25zdHJ1Y3Rpbmcgb25jZSwgYW5kIGxvb2tpbmcgdXAgcmVwZWF0ZWRseS4g
SW4gV2ViS2l0LCB0aGVyZSBhcmUgc28KKyAgICAgICAgICAgIG1hbnkgdGhpcyBraW5kIG9mIHRh
YmxlcyBlLmcuIHNpbmdsZXRvbiBIYXNoTWFwIGZvciB2YXJpb3VzIGtpbmRzIG9mIHRoaW5ncy4g
V2UgY2FuIHVzZSB0aGlzIHN1cGVyIGhpZ2ggbG9hZC1mYWN0b3IgdGFibGUgc28gdGhhdCB3ZSBj
YW4gc2F2ZSBtZW1vcnkgZXZlbiB3aGlsZQorICAgICAgICAgICAgd2UgYXJlIG1haW50YWlucyBm
YXN0IEhhc2hUYWJsZSBsb29rdXAuCisKKyAgICAgICAgMi4gTWVtb3J5Q29tcGFjdFJvYmluSG9v
ZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMgaGFzIDkwJSBsb2FkLWZhY3Rv
ci4gSXQganVzdCB3b3JrcywgYW5kIHdlIGNhbiB0cnkgdXNpbmcgaXQgaWYgc2V0cyBhbmQgbWFw
cyBhcmUgc2lnbmlmaWNhbnRseSBwZXJmb3JtYW5jZSBpbnRlbnNpdmUuCisKKyAgICAgICAgMy4g
RmFzdFJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAgICAgIFRoaXMgaGFzIDc1
JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdGlsbCBnb29kIGNvbXBhcmVkIHRvIEhhc2hTZXQgYW5k
IEhhc2hNYXAgc2luY2UgdGhleSBhcmUgdXNpbmcgNTAlIGxvYWQtZmFjdG9yIGZvciBsYXJnZSBz
aXplZCB0YWJsZXMuIFRoaXMgaGFzIHZlcnkgc2xpZ2h0bHkgcGVyZm9ybWFuY2UgcmVncmVzc2Vk
CisgICAgICAgICAgICBjb21wYXJlZCB0byA1MCUgbG9hZC1mYWN0b3IgbGFyZ2UgSGFzaFNldCBh
bmQgSGFzaE1hcCwgYnV0IGlmIHRoYXQgaXMgbm90IHBlcmZvcm1hbmNlIGludGVuc2l2ZSAoZS5n
LiBBdG9tU3RyaW5nVGFibGUgaXMgb25lIG9mIHRoZSBtb3N0IHBlcmZvcm1hbmNlIGludGVuc2l2
ZSB0YWJsZSksIHRoaXMgaXMgZ29vZC4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSByZXBs
YWNlIG1hbnkgc2luZ2xldG9uIEhhc2hTZXQgLyBIYXNoTWFwIHdpdGggUm9iaW5Ib29kSGFzaFRh
YmxlLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly93d3cuc2ViYXN0aWFuc3lsdmFuLmNvbS9wb3N0
L3JvYmluLWhvb2QtaGFzaGluZy1zaG91bGQtYmUteW91ci1kZWZhdWx0LWhhc2gtdGFibGUtaW1w
bGVtZW50YXRpb24vCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0ZvcndhcmQuaDoK
KyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpZPjo6c3dhcCk6CisgICAg
ICAgIChXVEY6Olk+OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmNhcGFjaXR5IGNv
bnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZ
Pjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpZPjo6ZW5kKToKKyAgICAgICAgKFdURjo6WT46OmJl
Z2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6
Olk+OjpmaW5kKToKKyAgICAgICAgKFdURjo6WT46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RG
OjpZPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6Z2V0IGNvbnN0KToKKyAg
ICAgICAgKFdURjo6WT46OmlubGluZUdldCBjb25zdCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJh
aXRzQXJnPjo6aW5saW5lU2V0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+Ojppbmxp
bmVBZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmlubGluZUVuc3VyZSk6Cisg
ICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6c2V0KToKKyAgICAgICAgKFdURjo6VGFibGVU
cmFpdHNBcmc+OjphZGQpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmVuc3VyZSk6CisgICAgICAgIChXVEY6
Olk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpZPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RG
OjpZPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpZPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olk+
OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmlzVmFsaWRLZXkp
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6Olg+Ojpzd2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnNp
emUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6Y2FwYWNpdHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+OjpiZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6YmVnaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpYPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmZpbmQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Olg+Ojpjb250YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+
OjpnZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6aW5saW5lR2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lU2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lQWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6c2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6TWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1h
cHBlZFRyYWl0c0FyZz46OmVuc3VyZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRy
YWl0cz46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hcHBlZFRyYWl0cz46
OmlubGluZUdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpyZW1vdmUpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6cmVtb3ZlSWYpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpYPjo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHM+Ojp0
YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OnRha2UpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpYPjo6Y2hlY2tDb25zaXN0ZW5jeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+Ojppc1ZhbGlkS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgor
ICAgICAgICAoV1RGOjpXPjo6c3dhcCk6CisgICAgICAgIChXVEY6Olc+OjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6Vz46OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAo
V1RGOjpXPjo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmZpbmQgY29uc3QpOgorICAg
ICAgICAoV1RGOjpXPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0
cz46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OmNvbnRhaW5zIGNv
bnN0KToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHM+OjplbnN1cmUpOgorICAgICAgICAoV1RG
OjpXPjo6YWRkKToKKyAgICAgICAgKFdURjo6Vz46OmFkZFZvaWQpOgorICAgICAgICAoV1RGOjpU
YWJsZVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6Olc+OjpyZW1vdmUpOgorICAgICAgICAo
V1RGOjpXPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpXPjo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpXPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojp0YWtlQW55KToKKyAgICAgICAgKFdU
Rjo6VGFibGVUcmFpdHM+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnRh
a2UpOgorICAgICAgICAoV1RGOjpXPjo6aXNWYWxpZFZhbHVlKToKKyAgICAgICAgKFdURjo6PSBj
b25zdCk6CisgICAgICAgIChXVEY6Olc+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Vj46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6c2l6ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlY+Ojppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Vj46OmJlZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmVuZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Vj46OmNvbnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VHJhaXRzPjo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OmNv
bnRhaW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6ZW5zdXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjphZGRWb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VHJhaXRzPjo6YWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlY+OjpyZW1vdmVJZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlY+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46
OnRha2VBbnkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpyZW1vdmUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojp0YWtlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Vj46OmlzVmFsaWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlY+OjpjaGVja0Nv
bnNpc3RlbmN5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6Cisg
ICAgICAgIChXVEY6OmFkZEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6cmVtb3ZlSXRlcmF0b3Ip
OgorICAgICAgICAoV1RGOjppbnZhbGlkYXRlSXRlcmF0b3JzKToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjp+SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpyYW5kb20pOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpL
ZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRVbmlx
dWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6Cisg
ICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZSk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmNsZWFyKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6c3dhcCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Okhhc2hUYWJsZSk6CisgICAg
ICAgIChXVEY6Okhhc2hUYWJsZTo6aW52YWxpZGF0ZUl0ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OktleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jp
bkhvb2RIYXNoU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aDogQWRkZWQuCisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6flJvYmluSG9vZEhh
c2hUYWJsZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6YmVnaW4pOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmVuZCk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cmFu
ZG9tKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20gY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNpemUgY29uc3QpOgorICAgICAgICAo
V1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNhcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6Um9i
aW5Ib29kSGFzaFRhYmxlOjphZGQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
OmZpbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmZpbmQgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppc0VtcHR5QnVja2V0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppc0VtcHR5T3JEZWxldGVkQnVja2V0KToKKyAgICAgICAg
KFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpsb29rdXApOgorICAgICAgICAoV1RGOjpSb2Jpbkhv
b2RIYXNoVGFibGU6OmNoZWNrVGFibGVDb25zaXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJvYmlu
SG9vZEhhc2hUYWJsZTo6aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3kgY29uc3QpOgorICAg
ICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkRXhwYW5kKToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpjb21wdXRlVGFibGVIYXNoKToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91bGRFeHBhbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpS
b2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZFNocmluayBjb25zdCk6CisgICAgICAgIChXVEY6OlJv
YmluSG9vZEhhc2hUYWJsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjpkZWxldGVCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRl
c2lyZWRJbmRleCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6cHJvYmVEaXN0
YW5jZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUl0ZXJhdG9yKToK
KyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlQ29uc3RJdGVyYXRvciBjb25z
dCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6bWFrZUtub3duR29vZEl0ZXJh
dG9yKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjptYWtlS25vd25Hb29kQ29u
c3RJdGVyYXRvciBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hl
Y2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6dGFibGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjp0YWJsZVNpemVNYXNrIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjprZXlDb3VudCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
dGFibGVIYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrS2V5KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46Omxvb2t1cCk6CisgICAgICAgIChXVEY6OlNpemVQ
b2xpY3k+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6aW5pdGlh
bGl6ZUJ1Y2tldCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjphZGQpOgorICAgICAgICAo
V1RGOjpTaXplUG9saWN5Pjo6bWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKToKKyAgICAgICAg
KFdURjo6U2l6ZVBvbGljeT46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OlNp
emVQb2xpY3k+OjpyZWluc2VydCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpmaW5kKToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6
cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAg
ICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3ZlQW5kSW52YWxpZGF0ZSk6CisgICAgICAgIChXVEY6
OlNpemVQb2xpY3k+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6cmVtb3Zl
V2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmRlYWxsb2NhdGVU
YWJsZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpleHBhbmQpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpTaXpl
UG9saWN5Pjo6c2hyaW5rVG9CZXN0U2l6ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpy
ZWhhc2gpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2xlYXIpOgorICAgICAgICAoV1RG
OjpTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OnN3YXApOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGlj
eT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xp
Y3k+OjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplIGNvbnN0KToKKyAgICAgICAgKiB3
dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJ
bXBsLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAg
ICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6On5BdG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0
Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6
OnRhYmxlKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6CisKIDIwMjEtMDMtMzEg
IEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBBU0NX
ZWJLaXRTUElTdXBwb3J0IHRvIGJlIHVzZWQgb24gbWFjT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NzQyMDEz
ZjQ2OGYyNDMwNTVkMTAxOTJkNDM5MDgxYWNkOTJiNjQ4Li5kMzdhNWY0YmJlYmRiZmZhNTk4Zjkw
ODg4MmE3NmNiY2JhY2U4ZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMjEtMDQt
MDEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJ
bnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWwgUGl6
bG8uCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3Qp
OgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFt
ZXMucGw6CisgICAgICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZh
Y3RvcnlDcHBGaWxlKToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAg
ICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc0VsZW1lbnRGb3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3Jt
YXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1h
dENvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAg
ICAqIGh0bWwvQXV0b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToK
KyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVj
dEZyb21FeHBvc3VyZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6
YWRqdXN0U1ZHVGFnTmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAg
ICAgIChXZWJDb3JlOjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjphZGROYW1lc1dpdGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdl
T3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6
CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdS
ZWN0KToKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpyZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25N
YXApOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNl
QmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNj
YWRlOjpoYXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp2YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0
ZWRJbWFnZVR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2Nv
YS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRW
aWRlb0NvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpz
dXBwb3J0ZWRBdWRpb0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVz
b3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToK
KyAgICAgICAgKFdlYkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFu
ZFN0cm9rZVRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToK
KyAgICAgICAgKiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5p
bWF0aW9uRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1By
b3BlcnR5SURNYXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0
dHJpYnV0ZUZvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVy
dHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAg
ICAgICogc3ZnL1NWR1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNEaXNhbGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBw
b3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9Y
UGF0aFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVz
TWFwKToKKwogMjAyMS0wNC0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIEhhdmUgdGhlIFNlcnZpY2VXb3JrZXIgcHJvY2VzcyBob2xkIG9uIHRvIGEgZmlsZSBt
YXBwZWQgdmVyc2lvbiBvZiB0aGUgc2VydmljZSB3b3JrZXIgc2NyaXB0cyB0byBzYXZlIGRpcnR5
IG1lbW9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBjYTEzNzZjNDU1NWNjZTU4ZTdlMDVmZDgwOTg2MTgyMzMwYzc2
NzhkLi5jZjM1YTI1MzdkOTJmOWVhOWI4MTcyZGMwZGIxMWQzODdmODRhZDc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI3IEBACisyMDIxLTA0LTAxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRmlsIFBpemxvLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUpOgorICAg
ICAgICAoV2ViS2l0OjpleHBlY3RlZFVuYXR0cmlidXRlZENvbHVtbnMpOgorICAgICAgICAoV2Vi
S2l0OjpleHBlY3RlZEF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRl
VGFibGVRdWVyaWVzKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDoK
KyAgICAgICAgKiBTaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW06CisgICAg
ICAgIChXZWJLaXQ6OmdldEFwcEJvdW5kRG9tYWluc1Rlc3RpbmcpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJlZmVyZW5j
ZXNTdG9yZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRS
ZWFkQWNjZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRS
ZWFkQWNjZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisKIDIw
MjEtMDQtMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBIYXZl
IHRoZSBTZXJ2aWNlV29ya2VyIHByb2Nlc3MgaG9sZCBvbiB0byBhIGZpbGUgbWFwcGVkIHZlcnNp
b24gb2YgdGhlIHNlcnZpY2Ugd29ya2VyIHNjcmlwdHMgdG8gc2F2ZSBkaXJ0eSBtZW1vcnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKaW5kZXgg
MmEwODg3ZTczZTU3MWYwMDhlODg0ZGIzNDMwNDg2ZDM0MjAwNzIyMC4uN2Y4YWU0ZjE0MGVlNzQz
ZDBmZTVmMzk1NDM4N2JlM2NmZDZkNWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgQ2hh
ckJ1ZmZlclNlYWNoZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBsKGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgc2V0LCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFByaXZhdGVTeW1ib2xJbXBsKiBsb29rVXBQ
cml2YXRlTmFtZUltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpQcml2YXRlTmFtZVNldCYgc2V0LCBj
b25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVy
KQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuZmluZDxDaGFyQnVmZmVyU2VhY2hlcjxDaGFy
YWN0ZXJUeXBlPj4oYnVmZmVyKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gc2V0LmVuZCgpKQpAQCAt
MTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5h
bWVJbXBsKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc2V0LCBjb25zCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgU3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3du
U3ltYm9sSW1wbChjb25zdCBIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+JiBtYXAsIGNvbnN0
IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBidWZmZXIpCitz
dGF0aWMgU3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3duU3ltYm9sSW1wbChjb25zdCBCdWlsdGlu
TmFtZXM6OldlbGxLbm93blN5bWJvbE1hcCYgbWFwLCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9y
Q2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewogICAgIGF1dG8gaXRlcmF0b3Ig
PSBtYXAuZmluZDxDaGFyQnVmZmVyU2VhY2hlcjxDaGFyYWN0ZXJUeXBlPj4oYnVmZmVyKTsKICAg
ICBpZiAoaXRlcmF0b3IgPT0gbWFwLmVuZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDMxOTQ1YmYzZTE2Y2QzMDRlOGQ4ODI5YjE5OTcx
ZGE3Y2NjZTM5YTIuLjAwZDk2ZDNjNzQ0NWVhYTZiNDgzZDQwOWFkNGY4Nzg1ZGIzN2M0ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTI5
LDYgKzI5LDggQEAKICNpbmNsdWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE5OSw2ICsyMDEsOSBAQCBjbGFzcyBC
dWlsdGluTmFtZXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1aWx0aW5OYW1lcyk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAogcHVibGljOgorICAgIHVzaW5nIFByaXZhdGVO
YW1lU2V0ID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz47
CisgICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFwID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+OworCiAgICAgQnVpbHRpbk5hbWVz
KFZNJiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKIAogICAgIFByaXZhdGVTeW1ib2xJbXBsKiBsb29r
VXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7CkBAIC0yMzIsOCArMjM3LDYg
QEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9kb2xs
YXJWTU5hbWU7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1Qcml2YXRlTmFt
ZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9wb2x5UHJvdG9Qcml2YXRlTmFtZTsKLSAg
ICB1c2luZyBQcml2YXRlTmFtZVNldCA9IEhhc2hTZXQ8U3RyaW5nPjsKLSAgICB1c2luZyBXZWxs
S25vd25TeW1ib2xNYXAgPSBIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+OwogICAgIFByaXZh
dGVOYW1lU2V0IG1fcHJpdmF0ZU5hbWVTZXQ7CiAgICAgV2VsbEtub3duU3ltYm9sTWFwIG1fd2Vs
bEtub3duU3ltYm9sc01hcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAppbmRleCA1Y2Y0ZmE1NWMz
ZWVlZGVmNGY4ZWE5M2NkNjFkNDY2MWViNjdmODJhLi43ODU3ZGJhMDExNThhNzZmN2UwMTZhMjM3
OTM1MDVkNmRhNWIzMGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMjEyLDcgKzIxMyw3IEBAIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkgewogCiBw
cml2YXRlOgogICAgIFZNJiBtX3ZtOwotICAgIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPiwgRW50cnksIElkZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmluc2ljTWFwOwor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8VW5pcXVl
ZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJbnRyaW5z
aWNNYXA7CiAKICNkZWZpbmUgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5U
X0dFTkVSQVRPUlMobmFtZSkgU3Ryb25nPFVua25vd24+IG1fIyNuYW1lOwogICAgIEpTQ19DT01N
T05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19TSU1QTEVfRUFDSF9OQU1FKEpTQ19ERUNM
QVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCmluZGV4IDQ0ZDFjZmRiZDQ5NDkxNmVkYmZm
ZDRmMzE0ZjdjZDVmYmZiNmYxNTMuLmFlNmRiYjBmOGY1OTIzNTBhNGNmMmU0MTBkZjBiZDJkYWJj
NzhhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZp
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKQEAg
LTI5NCw2ICsyOTQsNyBAQCBKU1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKFZN
JiwgY29uc3QgSWRlbnRpZmllciYpOwogc3RydWN0IElkZW50aWZpZXJSZXBIYXNoIDogUHRySGFz
aDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYga2V5KSB7IHJldHVybiBrZXktPmV4aXN0
aW5nU3ltYm9sQXdhcmVIYXNoKCk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChVbmlxdWVk
U3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCk7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwogfTsK
IAogc3RydWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPGludD4g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKaW5k
ZXggNDY1NTI0OGYyODA0OTEwZTRiNGRjYzIwZTViYmU5MTRlNTg5ZjFlYS4uYzgyZmE2MGViMGMy
NjdkYWU3MDE4M2NjY2FlYzhlOTliZjk1NGE3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBJbnRs
Q29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGxvY2EKICAgICBpZiAoIWNhc2VGaXJzdE9wdGlvbi5pc051bGwoKSkKICAgICAg
ICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25L
ZXk6OktmKV0gPSBjYXNlRmlyc3RPcHRpb247CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byBy
ZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCBy
ZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2YW50
RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmLCBSZWxldmFudEV4dGVu
c2lvbktleTo6S24gfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxv
Y2FsZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBib29sIEludGxDb2xsYXRvcjo6dXBkYXRlQ2FuRG9B
U0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0CiB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAot
dm9pZCBJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGxvY2FsZXMpCit2b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VMb2NhbGVJbnZh
cmlhbnRzKGNvbnN0IExvY2FsZVNldCYgbG9jYWxlcykKIHsKICAgICBmb3IgKGF1dG8mIGxvY2Fs
ZSA6IGxvY2FsZXMpIHsKICAgICAgICAgYXV0byBjaGVja0FTQ0lJT3JkZXJpbmdXaXRoRFVDRVQg
PSBbXShjb25zdCBTdHJpbmcmIGxvY2FsZSwgVUNvbGxhdG9yJiBjb2xsYXRvcikgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAppbmRleCAyNGQ2MTYxNjQ5
YWQ5ZmU3ZDRmNzBhZTZjMjljODJhN2UyZjk2ZjIzLi41ZTUyYTFjOTI1YzJlZDQwM2MxMzc1M2M1
YzE3MmM5ZmNkM2VmMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsQ29sbGF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuaApAQCAtMjYsNyArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUgPHVuaWNvZGUv
dWNvbC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL2ljdS9JQ1VIZWxwZXJzLmg+CiAKQEAgLTcz
LDkgKzczLDkgQEAgY2xhc3MgSW50bENvbGxhdG9yIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogICAgIH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc3RhdGljIHZvaWQgY2hl
Y2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRp
YyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQmKTsKICNlbHNl
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBI
YXNoU2V0PFN0cmluZz4mKSB7IH0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tJQ1VMb2Nh
bGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNldCYpIHsgfQogI2VuZGlmCiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
LmNwcAppbmRleCBmNTJlYmIyMjJiMzRiZDZjMGQ0MzgyOWI1M2I5NzU3YjlhMWZjM2I5Li5mODk4
MDZjNTZiMjYwNTIyZmM3YzdiOThhZjg1MmNmNzMzZjg5ODVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKQEAgLTU2Niw3
ICs1NjYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9y
bWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIGxvY2FsZU9wdGlvbnNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYyldID0gU3RyaW5n
KCk7CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYSwgUmVsZXZhbnRFeHRlbnNpb25LZXk6OkhjLCBS
ZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9
IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAxYmJh
MWIwNWMyZTMyYWMwZDE4ZGQxNDM2YzM0ODg2NDBmNzBhNGE5Li5jMDkwOWI4OTFlOTQzMGMwZGE0
MzhhMTA0ODNiMGYzMmEwZjEyOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBA
IC0xMjYsNyArMTI2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEoKICAgICAvLyAxMi4yLjIg
SW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25z
XSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVE
YXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxl
cyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+
IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwCmluZGV4IDIyYTExNWQxMzlmNmM1YjI0NWVkZWJh
ODA5ZTI4ZTk4Njc2ODBiODMuLjBkZTU3NDI5MzQ1YWQ4MWRhZTQxNjBlYWRkYjUwOTdjNjQyMGMx
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5
TmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5
TmFtZXMuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgSW50bERpc3BsYXlOYW1lczo6aW5pdGlh
bGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1
dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxl
cywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBs
b2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXND
b25zdHJ1Y3Rvci5jcHAKaW5kZXggZDFmMDY2ZjBhMDkzMzc2OTExZGIxMGI4OGZhYTlmNDVmMzVi
NTY4Yy4uMTdlMDc5ZmU3N2RhMGEwN2M0MzdlMGVlN2E2ZDk4M2ZiZWNjMzdiOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3IuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2FsZXNPZiwgKEpT
R2xvYmEKICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1kaXNwbGF5bmFtZXMv
I3NlYy1JbnRsLkRpc3BsYXlOYW1lcy5zdXBwb3J0ZWRMb2NhbGVzT2YKIAogICAgIC8vIDEuIExl
dCBhdmFpbGFibGVMb2NhbGVzIGJlICVEaXNwbGF5TmFtZXMlLltbYXZhaWxhYmxlTG9jYWxlc11d
LgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEaXNw
bGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9j
YWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgog
ICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKaW5kZXggODE3YjljYWU1
OTM0YWY3NjU1NDYzMmRlOTk1NzY4NWUwOTBhMzA5Mi4uODgwZWQyNmU3M2FmZTFjYTk0NDc3NDVi
ZWVmYWY5YjVkMzZmNDE4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgSW50bExpc3RGb3Jt
YXQ6OmluaXRpYWxpemVMaXN0Rm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYgYXZhaWxhYmxl
TG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsK
ICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMs
IHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNDdlNWVlMjNkYmYxZTBiMDM5YzNjYWYwNzgwZjFiNjQz
ZDVjMTJjOS4uMDA4ZTkzZDhjYmFjYjI2N2UwZGYwZTY3OThiZGE3MjIyMTVhM2M2OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2xv
YmFsTwogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0LyNz
ZWMtSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJUxpc3RGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBp
bnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0
ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9y
PFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKaW5kZXggMDA3YzlkMzAyNzE1YTU4
MzI4NTc2MGRjYzcwYjJkNGVmOWYwNThjYi4uZjAzNTBjODQzOGQ3N2ViZTdhNWY5Mjc0OTA3ZTNj
YjQyYTM3ZTVkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5jcHAKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxldmFu
dEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKLSAgICBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsK
KyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxP
YmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIs
IGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxvY2FsZURhdGEp
OwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9y
LmNwcAppbmRleCAxYzViMjkzYWZjZGFlMmViNjJlYmJjMjY0NDM3OWFmNTkzMjExMGYwLi5mMjFh
NjkyNmYzMWVkN2FhZjI1ZThmZDQ5ZDk5N2MxZDU5MWYxMzhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEpTRwogICAg
IC8vIDExLjIuMiBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBb
LCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2Nh
bGVzIGJlICVOdW1iZXJGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAgIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1iZXJGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1i
ZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9j
YWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJp
bmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IDQwZjg5ZThmZTc0ZThkYmNmMGU1ODM1MGFiZWMxZjdh
ODVkOGJkZTQuLjlkNTM2ZDc0YzAxOWQxOGRhNzU4MzdkNTlhYjczODc5NmVlZDYwMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0zNTIsNyAr
MzUyLDcgQEAgU3RyaW5nIGxhbmd1YWdlVGFnRm9yTG9jYWxlSUQoY29uc3QgY2hhciogbG9jYWxl
SUQsIGJvb2wgaXNJbW1vcnRhbCkKIH0KIAogLy8gRW5zdXJlIHdlIGhhdmUgeHgtWlogd2hlbmV2
ZXIgd2UgaGF2ZSB4eC1ZeXl5LVpaLgotc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2FsZUlm
TmVlZGVkKEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nVmlldyBsb2Nh
bGUpCitzdGF0aWMgdm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoTG9jYWxlU2V0JiBh
dmFpbGFibGVMb2NhbGVzLCBTdHJpbmdWaWV3IGxvY2FsZSkKIHsKICAgICBpZiAobG9jYWxlLmxl
bmd0aCgpIDwgMTApCiAgICAgICAgIHJldHVybjsKQEAgLTM3Nyw5ICszNzcsOSBAQCBzdGF0aWMg
dm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzLCBTdHJpbgogICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKFN0cmluZ0ltcGw6OmNy
ZWF0ZVN0YXRpY1N0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpOwogfQog
Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxBdmFpbGFibGVMb2NhbGVzKCkKK2NvbnN0IExv
Y2FsZVNldCYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFibGVMb2NhbGVzOworICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplT25jZSwgWyZdIHsKICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsK
QEAgLTQ1NSw5ICs0NTUsOSBAQCBjb25zdCB1aW50OF90IGR1Y2V0V2VpZ2h0c1sxMjhdID0gewog
ICAgIDk1LCA5NywgOTksIDIxLCAzNiwgMjIsIDM3LCAwLAogfTsKIAotY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK2NvbnN0IExvY2FsZVNldCYg
aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIExhenlOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7CisgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOwpA
QCAtNDc2LDIyICs0NzYsMjEgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JB
dmFpbGFibGVMb2NhbGVzKCkKICAgICByZXR1cm4gYXZhaWxhYmxlTG9jYWxlczsKIH0KIAotY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpCitjb25z
dCBMb2NhbGVTZXQmIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCkKIHsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBjYWNoZWRBdmFpbGFibGVMb2NhbGVz
OwotICAgIEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGNhY2hlZEF2YWlsYWJs
ZUxvY2FsZXMuZ2V0KCk7Ci0KKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2FsZVNl
dD4gYXZhaWxhYmxlTG9jYWxlczsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6
ZU9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7Ci0gICAgICAg
IEFTU0VSVChhdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSk7CisgICAgICAgIGF2YWlsYWJsZUxv
Y2FsZXMuY29uc3RydWN0KCk7CisgICAgICAgIEFTU0VSVChhdmFpbGFibGVMb2NhbGVzLT5pc0Vt
cHR5KCkpOwogICAgICAgICBjb25zdGV4cHIgYm9vbCBpc0ltbW9ydGFsID0gdHJ1ZTsKICAgICAg
ICAgaW50MzJfdCBjb3VudCA9IHVicmtfY291bnRBdmFpbGFibGUoKTsKICAgICAgICAgZm9yIChp
bnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nIGxvY2Fs
ZSA9IGxhbmd1YWdlVGFnRm9yTG9jYWxlSUQodWJya19nZXRBdmFpbGFibGUoaSksIGlzSW1tb3J0
YWwpOwogICAgICAgICAgICAgaWYgKGxvY2FsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmFkZChsb2NhbGUpOwotICAg
ICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxvY2FsZXMsIGxv
Y2FsZSk7CisgICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLT5hZGQobG9jYWxlKTsKKyAgICAg
ICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChhdmFpbGFibGVMb2NhbGVzLmdldCgp
LCBsb2NhbGUpOwogICAgICAgICB9CiAgICAgfSk7CiAgICAgcmV0dXJuIGF2YWlsYWJsZUxvY2Fs
ZXM7CkBAIC02OTgsNyArNjk3LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2EKICAgICByZXR1
cm4gc2VlbjsKIH0KIAotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkKK1N0cmluZyBi
ZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgU3RyaW5nJiBsb2NhbGUpCiB7CiAgICAgcmV0dXJuIGJlc3RBdmFpbGFibGVMb2NhbGUobG9j
YWxlLCBbJl0oY29uc3QgU3RyaW5nJiBjYW5kaWRhdGUpIHsKICAgICAgICAgcmV0dXJuIGF2YWls
YWJsZUxvY2FsZXMuY29udGFpbnMoY2FuZGlkYXRlKTsKQEAgLTc2Myw3ICs3NjIsNyBAQCBTdHJp
bmcgcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0aWMgTWF0Y2hlclJlc3VsdCBs
b29rdXBNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3Rl
ZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gTG9va3VwTWF0
Y2hlciAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1sb29rdXBtYXRjaGVyCkBAIC04MDQsNyArODAz
LDcgQEAgc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgTWF0Y2hlclJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVz
dEZpdE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0
JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxl
cykKIHsKICAgICAvLyBCZXN0Rml0TWF0Y2hlciAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1iZXN0
Zml0bWF0Y2hlcgpAQCAtODI1LDcgKzgyNCw3IEBAIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgcmVs
ZXZhbnRFeHRlbnNpb25LZXlTdHJpbmcoUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5KQogICAgIHJl
dHVybiBBU0NJSUxpdGVyYWw6Om51bGwoKTsKIH0KIAotUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxv
Y2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
LCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25z
JiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJl
bGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBT
dHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpCitSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9j
YWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxh
YmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExvY2Fs
ZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmIG9wdGlv
bnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVsZXZhbnRF
eHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYs
IFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKIHsKICAgICAvLyBSZXNvbHZlTG9jYWxlIChhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zLCByZWxldmFudEV4dGVuc2lvbktl
eXMsIGxvY2FsZURhdGEpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNz
ZWMtcmVzb2x2ZWxvY2FsZQpAQCAtODkwLDcgKzg4OSw3IEBAIFJlc29sdmVkTG9jYWxlIHJlc29s
dmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJp
bmc+CiAgICAgcmV0dXJuIHJlc29sdmVkOwogfQogCi1zdGF0aWMgSlNBcnJheSogbG9va3VwU3Vw
cG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzKQorc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBMb29r
dXBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQog
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cHN1cHBvcnRl
ZGxvY2FsZXMKQEAgLTkxOSw3ICs5MTgsNyBAQCBzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9y
dGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoUwogICAg
IHJldHVybiBzdWJzZXQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVkTG9j
YWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
KQorc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdFN1cHBv
cnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdHN1cHBvcnRlZGxvY2Fs
ZXMKQEAgLTkyOCw3ICs5MjcsNyBAQCBzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExv
Y2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaAogICAgIHJldHVy
biBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcyk7CiB9CiAKLUpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9w
dGlvbnNWYWx1ZSkKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKICAg
ICAvLyBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVz
LCBvcHRpb25zKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXN1
cHBvcnRlZGxvY2FsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
aAppbmRleCBmYTJlODI4MDc4YjdlODUxYTc3MWRjMGEwODBmYjZhNjg1YTEyYWVkLi42MTQwYzIw
ZDZmZDNlOGU4YjUyODk3NWQ2Mzg0OGZmMTgzZmNhYjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L1JvYmluSG9vZEhhc2hTZXQuaD4KIAogc3RydWN0IFVGaWVsZFBvc2l0aW9uSXRlcmF0b3I7CiAK
QEAgLTgxLDE1ICs4MiwxNiBAQCBjbGFzcyBJbnRsT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogfTsKIAogU3RyaW5nIGRlZmF1bHRMb2NhbGUoSlNHbG9iYWxPYmplY3Qq
KTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsKLWNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOwotY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOwotaW5saW5l
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4g
aW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxl
TG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUGx1cmFsUnVs
ZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQot
aW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUg
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7
IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Cit1c2luZyBMb2NhbGVTZXQgPSBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPjsKK2NvbnN0IExvY2Fs
ZVNldCYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0IExvY2FsZVNldCYgaW50bENvbGxh
dG9yQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVudGVyQXZh
aWxhYmxlTG9jYWxlcygpOworaW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERhdGVUaW1lRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0K
K2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVz
KCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2Fs
ZVNldCYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZh
aWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsUGx1cmFsUnVs
ZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQor
aW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3Qg
TG9jYWxlU2V0JiBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRs
QXZhaWxhYmxlTG9jYWxlcygpOyB9CiAKIFRyaVN0YXRlIGludGxCb29sZWFuT3B0aW9uKEpTR2xv
YmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5hbWUpOwog
U3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25hbDxKU09iamVj
dCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNo
YXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxsYmFjayk7
CkBAIC0xMDcsMTAgKzEwOSwxMCBAQCBzdHJ1Y3QgUmVzb2x2ZWRMb2NhbGUgewogICAgIFJlbGV2
YW50RXh0ZW5zaW9ucyBleHRlbnNpb25zOwogfTsKIAotUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxv
Y2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9j
YWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExvY2FsZU1hdGNo
ZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3RkOjppbml0aWFsaXplcl9saXN0PFJl
bGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3RvcjxTdHJpbmc+
ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25LZXkpKTsKLUpT
VmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExv
Y2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CitSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9jYWxlKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciwgY29uc3QgUmVz
b2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNp
b25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCpsb2NhbGVEYXRh
KShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpOworSlNWYWx1ZSBzdXBwb3J0
ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRp
b25zKTsKIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bG9jYWxlKTsKLVN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRMb2NhbGUpOworU3Ry
aW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVz
LCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVk
aWNhdGU+IFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IFN0cmluZyYgcmVxdWVzdGVk
TG9jYWxlLCBQcmVkaWNhdGUpOwogVmVjdG9yPFN0cmluZz4gbnVtYmVyaW5nU3lzdGVtc0Zvckxv
Y2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCmluZGV4IGU2NWZiMGQ3MzI3MTUyOWI1Y2Fh
OWQ5ZmFiZWM5YmViY2I0YzU2YTIuLmNjY2Y0OTcxNTgxOGRmZDMwMjY4YTMxN2FkYWRiOGU4ZGNi
YWY1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVy
YWxSdWxlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6aW5pdGlh
bGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdQogICAg
IExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxlTWF0Y2hlcj4o
Z2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7
IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3QgZml0Il9zLCBM
b2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIg
XCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVM
b2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxS
dWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2Fs
ZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2Fs
ZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAgICAgbV9sb2NhbGUg
PSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVz
Q29uc3RydWN0b3IuY3BwCmluZGV4IGY4ODUwYjEwYThiZmU2NTcwNDNkMmExZWFkMDcxMTA0MWI5
MjA1OTEuLjI3YjIzMTBiMzQ4YTFlNGE0NWRmMGVmOTExNTNhOWU0NWU4ZmY1N2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVs
ZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mLCAo
SlNHbAogCiAgICAgLy8gMTMuMy4yIEludGwuUGx1cmFsUnVsZXMuc3VwcG9ydGVkTG9jYWxlc09m
IChsb2NhbGVzIFssIG9wdGlvbnMgXSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWE0MDIvI3NlYy1pbnRsLnBsdXJhbHJ1bGVzLnN1cHBvcnRlZGxvY2FsZXNvZgotICAgIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWls
YWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFBs
dXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVz
dGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggZjdkMzhiODFlYWM4Mjg2M2Y1YWQ4YmNj
ODMyNDY1MjY5MjgxNzc2ZS4uMmI1ZDI4ZWZkOGNlOGYyN2Q2NTc1ODUwMmEzMTA5ODA1YjcwNzNk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZl
VGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEludGxSZWxhdGl2
ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihSZWxl
dmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAKLSAgICBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1l
Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2Fs
ZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8g
cmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFu
dEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAgICAgbV9sb2NhbGUgPSByZXNvbHZl
ZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVG
b3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTc0YjZmZGNlMmM4NmJmYzExYjVlYjFlZjUzNzIw
OThlYTg5ODQ5NC4uOWE4YzhkNGNhNmM2YzRlZDM1ZmY3MGU5N2U3ZDNlY2M0ZjU5YWU2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZv
cm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgYXV0byYg
YXZhaWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVG
b3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBj
YW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCmluZGV4
IDA0Y2YxN2Q1MDkzNTYyMWM0MjQ4ZTg0OGI3NzUwZWRhMzdlYTgxZTguLjJhZDc0Zjk0YmJlOGNh
MTdjNzc1ODkyYWZiYzZmZWY3MTJhNjJiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgSW50bFNl
Z21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGxvCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNv
bnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxl
cygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0
aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRl
ckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdt
ZW50ZXJDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZmZkNzNmNzM2YTk3NDMzNzhkZmRiMWEzMWQ0YmY5
OWY5OGRlYWU1Mi4uMDkzOTRkYzE4ZWRkZjJhOTMxOTUxZTdjNmZhYTk3MjI4ZmJmNjM2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyQ29uc3RydWN0b3IuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKEludGxTZWdtZW50ZXJDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2xv
YmFsT2IKICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1zZWdtZW50ZXIvI3Nl
Yy1pbnRsLnNlZ21lbnRlci5zdXBwb3J0ZWRsb2NhbGVzb2YKIAogICAgIC8vIDEuIExldCBhdmFp
bGFibGVMb2NhbGVzIGJlICVTZWdtZW50ZXIlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAgIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdtZW50ZXJBdmFp
bGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxT
ZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9j
YWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJp
bmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuaAppbmRleCA4MjczN2Q4ZjljNjhkZTE4ZTg3ZjVlNTdjZWEwYTYwMjEw
ZTg4ODg2Li4zYTcxMWZiOTA5YjY5MGUwZjE5ZmVhNTE3NGM2ODA1OGNiZTRjNDczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKQEAgLTMzLDcgKzMzLDcg
QEAKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSA8YXJy
YXk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBSZWdF
eHBDYWNoZSBmaW5hbCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmVyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIAogICAgIGZyaWVuZCBjbGFzcyBSZWdFeHA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+PiBSZWdFeHBDYWNoZU1hcDsKKyAgICB0eXBl
ZGVmIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+
PiBSZWdFeHBDYWNoZU1hcDsKIAogcHVibGljOgogICAgIFJlZ0V4cENhY2hlKFZNKiB2bSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCmluZGV4IGUwZjg4MzEwMjBk
NmQ5MzVjNzAxOTAxZmI0OWIyOGNiNmRjOTM4ZmMuLmQxNjYyNzlmNmRiMmVjZWViMmUzZTcwYjA3
ZDk2M2JlZTRhYmUyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtl
eS5oCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBSZWdFeHBLZXkgewogICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBSZWdFeHBLZXkmIGtleSkgeyByZXR1cm4ga2V5LnBhdHRlcm4t
Pmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWdFeHBLZXkmIGEs
IGNvbnN0IFJlZ0V4cEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwogICAgIH07
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyNmI0
NWU1NTNiMDY3ZTI0MDMyN2NjODg2N2VjN2M4YzgxNDY3ZTVmLi41ZjMwYzlhNTYxMzdiM2MzMWQz
MGRiYWI1MzE5MzllYjNjODk4YTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTcxNyw3ICs3MTcsOSBAQAogCQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4REUg
LyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFk
R3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNDlBM0EyMjhCRENBQjAw
QkZBNkM3IC8qIENvbmN1cnJlbnRCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzMUJERTI4MjJFOTEzQ0MwMDI5QjEwNSAvKiBNYWNoVk1TUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFZNU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jpbkhvb2RIYXNoVGFibGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJlZ2lzdGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlZ2lzdGVycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzI1NjExMjI2MTFCNUI2MDBBNzJDQzUg
LyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkEyMDczMjNDNTkwMkQwMDM0QTA5MiAv
KiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYWtlZFJlZi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzM5QzE2MzI0NEI0RTg3MDAzNTlEQTkg
LyogRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhUmVmLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Q1Rjg3MUZCRUQ2NjcwMEJGNjI1RSAv
KiBSZWN1cnNhYmxlTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
Y3Vyc2FibGVMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczOCw2ICs3
NDAsNyBAQAogCQlFM0EzMkJDMzFGQzgzMEUyMDA3RDdFNzYgLyogSlNWYWx1ZU1hbGxvYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhbHVlTWFsbG9jLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQjhFNDFDMjRFN0NFOTIwMDM2NTVEOCAvKiBMaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTNCRTA5QTYyNEE1ODU0NTAwOURGMkI0IC8qIElDVUhlbHBlcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSUNVSGVscGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RIYXNoTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJvYmluSG9vZEhhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTNDRjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFBvaW50ZXJUdXBsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFM0UxNTgyNTFFQURBNTNDMDA0QTA3OUQgLyogU3lzdGVt
RnJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1GcmVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTY0RjBCMjI4MTM0MjgwMDFFNTVCNCAvKiBO
b25tb3ZhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vbm1vdmFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyMTEsNiArMTIxNCw5IEBACiAJCQkJQThBNDczMDMxNTFBODI1QjAw
NDEyM0ZGIC8qIFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMyNUNDODAwMDlERDQ0NSAvKiBS
ZXNvdXJjZVVzYWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1QjAwNDEyM0ZGIC8qIFJldGFp
blB0ci5oICovLAorCQkJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RIYXNo
TWFwLmggKi8sCisJCQkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hT
ZXQuaCAqLywKKwkJCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRh
YmxlLmggKi8sCiAJCQkJMkNERUQwRjExODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwICov
LAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8sCiAJCQkJMTRG
M0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKaW5kZXggYjM1Yzc1MmQyYzAwZTFhNTIyZDE1NDJkYTdlYjY1YjZkMmZjOTE3
OC4uZTFmYTU0NWE0MDE3OGVhMzIzNzA4OTM5NjNiYjRkYThlZjU4OGUxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKQEAgLTIxNCw2ICsyMTQsOSBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAg
UmVmUHRyLmgKICAgICBSZXNvdXJjZVVzYWdlLmgKICAgICBSZXRhaW5QdHIuaAorICAgIFJvYmlu
SG9vZEhhc2hNYXAuaAorICAgIFJvYmluSG9vZEhhc2hTZXQuaAorICAgIFJvYmluSG9vZEhhc2hU
YWJsZS5oCiAgICAgUnVuTG9vcC5oCiAgICAgU0hBMS5oCiAgICAgU2F0dXJhdGVkQXJpdGhtZXRp
Yy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKaW5kZXggNDE5OGU4Njg4OTVjN2NkZDE0NTU3MGEyMTkxMmQ2NWFjNjM3ODlj
NC4uM2Q5ZWI3OGIzNThlNzM1YWNiYTUwYTQwNjUzMTg3NjhhNzMyZjVkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApA
QCAtOTMsOSArOTMsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBFbnVtVHJhaXRzOwog
dGVtcGxhdGU8dHlwZW5hbWUgRSwgRS4uLj4gc3RydWN0IEVudW1WYWx1ZXM7CiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7CiAKK3N0cnVjdCBIYXNoVGFibGVUcmFpdHM7Citz
dHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5
VmFsdWVQYWlyS2V5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHM+IHN0cnVjdCBLZXlWYWx1ZVBhaXJUcmFpdHM7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+IHN0cnVjdCBLZXlWYWx1
ZVBhaXI7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPiBjbGFzcyBIYXNoVGFibGU7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZT4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1
ZT4+IGNsYXNzIEhhc2hDb3VudGVkU2V0OwotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUg
PSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PiBj
bGFzcyBIYXNoTWFwOwotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PiBjbGFz
cyBIYXNoU2V0OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPEtl
eUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+LCB0eXBlbmFtZSA9IEhhc2hU
YWJsZVRyYWl0cz4gY2xhc3MgSGFzaE1hcDsKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVHJhaXRzPFZh
bHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7CiAKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oIGIvU291cmNlL1dURi93dGYv
SGFzaE1hcC5oCmluZGV4IGJmNmI4YmFjNGVkYjJkZmExZjZjYzAwZjNiZTFmNjQxYTExODViY2Yu
Ljg5MDFiNWYzZjI3OWI4YmUwMzY1MGM3YzJhZGViNjFiMGFlZmE5ZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKQEAg
LTMxLDcgKzMxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJh
Y3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHByaXZhdGU6CkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEhhc2hNYXAgZmluYWwgewogCiAg
ICAgdXNpbmcgSGFzaEZ1bmN0aW9ucyA9IEhhc2hBcmc7CiAKLSAgICB1c2luZyBIYXNoVGFibGVU
eXBlID0gSGFzaFRhYmxlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5cGUsIEtleVZhbHVlUGFpcktl
eUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0aW9ucywgS2V5VmFsdWVQYWly
VHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBU
YWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5
cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0
aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+OwogCiAgICAgY2xhc3MgSGFzaE1h
cEtleXNQcm94eTsKICAgICBjbGFzcyBIYXNoTWFwVmFsdWVzUHJveHk7CkBAIC0yMzIsOTEgKzIz
Miw4OSBAQCBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c3dhcChIYXNo
TWFwJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQogewogICAgIG1faW1wbC5z
d2FwKG90aGVyLm1faW1wbCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnNpemUoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGlu
ZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywg
WCwgWT46OmNhcGFjaXR5KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgp
OyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzRW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiBt
X2ltcGwuaXNFbXB0eSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6YmVnaW4oKSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2luKCkgLT4gaXRl
cmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSAtPiBpdGVyYXRvcgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT46OmVuZCgpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0
ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgY29uc3QgLT4gY29uc3Rf
aXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJl
dHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0b3IKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBjb25zdF9p
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBjb25zdF9p
dGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgS2V5
VHlwZSYga2V5KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6aXRlcmF0b3IKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFs
dWUpCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IFRZ
UEUmIHZhbHVlKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmlu
ZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNs
YXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGlu
ZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciAKLUhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKSBj
b25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmlu
ZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNs
YXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBN
YXBwZWRQZWVrVHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3Qg
VFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0byogZW50cnkg
PSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGxvb2t1cDxIYXNo
TWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+
KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzI0LDkgKzMyMiw5IEBAIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
VywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlw
ZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYg
dmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0byogZW50cnkgPSBjb25z
dF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxIYXNo
TWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+
KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzM0LDE2ICszMzIsMTYgQEAgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+
IE1hcHBlZFBlZWtUeXAKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgYm9vbCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKK2lu
bGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+
Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVk
QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVNldChLJiYga2V5LCBWJiYg
dmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+Ojppbmxp
bmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gaW5saW5lQWRkKHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4o
dmFsdWUpKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CkBAIC0zNTMsOTEgKzM1MSw5
MSBAQCBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlw
ZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgot
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRz
QXJnPjo6aW5saW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWly
VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2Fy
ZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgRj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGlu
ZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5F
IGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKEsmJiBrZXksIEYm
JiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFk
ZDxIYXNoTWFwRW5zdXJlVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlv
bnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPEY+KGZ1bmN0b3IpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
PgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJn
LCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhh
c2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJh
aXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChjb25zdCBLZXlUeXBlJiBrZXks
IFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVTZXQoa2V5LCBz
dGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
c2V0KEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVy
biBpbmxpbmVTZXQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4K
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywg
dHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoSyYmIGtleSwg
ViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywg
SGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6
YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwg
c3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChjb25zdCBLZXlUeXBlJiBr
ZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsK
ICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CithdXRv
IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBUJiYgbWFwcGVk
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUoa2V5KSwgc3Rk
Ojpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RBZGQo
Y29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJ
TkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcs
IE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUm
IGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChr
ZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0Fy
Zz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+Ojpm
YXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lO
TElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoS2V5VHlwZSYmIGtl
eSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChXVEZN
b3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1l
IEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRy
YWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hNYXA8S2V5QXJn
LCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZW5z
dXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAor
YXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1h
cHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoY29uc3QgS2V5VHlwZSYga2V5
LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUVu
c3VyZShrZXksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OmVuc3VyZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0
CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShLZXlUeXBlJiYga2V5LCBG
dW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUVuc3Vy
ZShzdGQ6OmZvcndhcmQ8S2V5VHlwZT4oa2V5KSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0
b3IpKTsKIH0KICAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWlubGluZSBhdXRvIEhhc2hN
YXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29u
c3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25z
dCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIHJldHVybiBnZXQ8SWRlbnRpdHlUcmFuc2xhdG9y
VHlwZT4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotQUxXQVlTX0lOTElORSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0KGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
cywgdHlwZW5hbWUgWT4KK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1h
cHBlZFRyYWl0cywgWT46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBjb25zdF9jYXN0
PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxJZGVudGl0eVRy
YW5zbGF0b3JUeXBlPihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC00NDUsOCArNDQzLDggQEAg
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6aW5s
aW5lR2V0KGNvbnN0IEtleVR5cGUmIGsKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVu
dHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0
KQogewogICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC00NTUsMjcgKzQ1MywyNyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZUlmKEZ1bmN0b3Im
JiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3Zl
SWYoRnVuY3RvciYmIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJuIG1faW1wbC5yZW1vdmVJZihzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIHJldHVybiByZW1vdmUoZmlu
ZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9pZCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjbGVhcigpCiB7CiAgICAgbV9pbXBsLmNsZWFyKCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBw
ZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFrZVR5cGUKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK2F1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBNYXBwZWRUcmFpdHMsIFk+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5cGUKIHsKICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5k
KCkpCkBAIC00ODUsMzAgKzQ4MywzMCBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVk
VHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeQogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQ
dHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rp
b25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+
Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKHR5cGVu
YW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46OnR5cGUKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFs
dWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+
OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IFgsIFk+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBU
cmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUg
Sz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCitpbmxp
bmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQogewogICAgIEtl
eVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBs
KS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJh
aXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAtNTE2LDIzICs1
MTQsMjMgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZQogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6
OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBl
Pjo6dHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQodHlwZW5hbWUgR2V0
UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQogewogICAgIHJl
dHVybiBpbmxpbmVHZXQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5cGU+Ojp0eXBl
CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojp0YWtlKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKIHsKICAgICBpdGVyYXRv
ciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5kKCkpCkBAIC01NDIsMTQgKzU0MCwx
NCBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtlKHR5cGVuYW1lIEdl
dFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2hlY2tDb25zaXN0
ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgbV9p
bXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJv
b2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAgaWYgKEtleVRy
YWl0czo6aXNEZWxldGVkVmFsdWUoa2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY1
LDEzICs1NjMsMTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNWYWxp
ZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29u
c3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citi
b29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3Qg
SGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICBpZiAoYS5zaXplKCkgIT0gYi5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb25zdF9pdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKIAogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CiAg
ICAgY29uc3RfaXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwpAQCAtNTg0LDggKzU4Miw4IEBA
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4m
IGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFt
ZSBZPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgs
IFk+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewogICAgIHJldHVy
biAhKGEgPT0gYik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmggYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggNjhhMTVkYzAzNzVhMTcxOWM3YWIzMjQ2MmM3
YWRmNzllZDYwYjRlZi4uYTQwMmNlMjczNzVhY2ViMGNlYjA0ZjllYjVhMWU0MWFkMmM2OWYzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hTZXQuaApAQCAtMjcsOSArMjcsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RydWN0
IElkZW50aXR5RXh0cmFjdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVU
cmFpdHNBcmc+CiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHByaXZhdGU6CkBAIC00MSw3ICszOSw3IEBAIGNsYXNzIEhhc2hTZXQgZmluYWwgewog
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGU7CiAK
IHByaXZhdGU6Ci0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxWYWx1ZVR5cGUs
IFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRz
LCBWYWx1ZVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVuYW1lIFRhYmxl
VHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50
aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+Owog
CiBwdWJsaWM6CiAgICAgLy8gSGFzaFNldCBpdGVyYXRvcnMgaGF2ZSB0aGUgZm9sbG93aW5nIHN0
cnVjdHVyZToKQEAgLTE4NiwxMDkgKzE4NCwxMDkgQEAgc3RydWN0IEhhc2hTZXRFbnN1cmVUcmFu
c2xhdG9yQWRhcHRvciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnN3YXAoSGFz
aFNldCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6c3dhcChIYXNo
U2V0JiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25l
ZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFzaFNl
dDxULCBVLCBWLCBXPjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OmNhcGFjaXR5KCkgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUg
dW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2FwYWNpdHkoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc0VtcHR5
KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojppc0VtcHR5KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUs
IFY+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWLCBXPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwu
YmVnaW4oKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRv
cgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUg
Vz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmVuZCgpIGNvbnN0IC0+IGl0ZXJh
dG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+
OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBj
b25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZCh2YWx1ZSk7IAogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29u
c3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpjb250YWlucyhjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnModmFsdWUp
OyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYXV0byBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBj
b25zdCAtPiBpdGVyYXRvcgoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQoY29uc3QgVCYgdmFsdWUpIGNvbnN0IC0+IGl0
ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xh
dG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKK2lubGluZSBib29sIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpjb250YWlu
cyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNv
bnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+Ci1p
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjplbnN1cmUo
VCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmVuc3VyZShU
JiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIG1f
aW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaFNldEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yPFRyYWl0cywg
SGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+
OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKFZhbHVlVHlw
ZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+
OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2lt
cGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmFkZFZvaWQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgbV9pbXBsLmFkZCh2YWx1
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFs
dWUpCiB7CiAgICAgbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2lubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojph
ZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJh
bnNsYXRvcj4+KHZhbHVlLCB2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0
b3JUeXBlIGVuZCkKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZChJdGVyYXRv
clR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytp
dGVyKQpAQCAtMjk2LDkgKzI5NCw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFk
ZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNoYW5n
ZWQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgog
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKK2lubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShJdGVyYXRvclR5cGUgYmVnaW4sIEl0
ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgZm9yIChJ
dGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtMzA2LDgg
KzMwNCw4IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAgIGlmIChpdC5tX2ltcGwg
PT0gbV9pbXBsLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTYsMjcgKzMxNCwy
NyBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmUo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgViwgVz46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJu
IG1faW1wbC5yZW1vdmVJZihmdW5jdG9yKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmNsZWFy
KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjbGVhcigpCiB7CiAgICAgbV9p
bXBsLmNsZWFyKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRvciBpdCkg
LT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlKGl0ZXJh
dG9yIGl0KSAtPiBUYWtlVHlwZQogewogICAgIGlmIChpdCA9PSBlbmQoKSkKICAgICAgICAgcmV0
dXJuIFZhbHVlVHJhaXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0eVZhbHVlKCkpOwpAQCAtMzQ2
LDQ4ICszNDQsNDggQEAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRv
ciBpdCkgLT4gVGFrZVR5cGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBV
LCBWPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlwZQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4g
VGFrZVR5cGUKIHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0
PFQsIFUsIFY+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFYsIFc+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKIHsKICAgICByZXR1cm4gdGFrZShiZWdp
bigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVt
cGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwg
aXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGZpbmQ8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBj
b25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9v
bD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgVGFibGVUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJh
aXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
CiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxpbmUg
YXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojp0YWtlKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnRha2UodHlw
ZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgcmV0
dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZh
bHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBW
LCBXPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgaWYgKFZh
bHVlVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTQwMyw5ICs0MDEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlk
VmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVy
YXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxl
Y3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICBpZiAoc2l6ZSgpICE9IG90aGVy
Q29sbGVjdGlvbi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxNiwyMiArNDE0
LDIyIEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3Ro
ZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlw
ZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3Bl
cmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lu
bGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xs
ZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXJDb2xsZWN0aW9uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KLXZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3QpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgordm9p
ZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKIHsKICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogbGlzdCkKICAgICAgICAgYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwg
Vj46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwg
ViwgVz46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
IGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKaW5kZXggNmQ0YjJjOGY3MmIyZTAzNmMxNjAw
MTBjMGE2Mjk1ODdjNWVkZjBhOC4uMTJkZDg0ODIyYWE1MzA2OGMzOGRjOWY4NDk2NmJhZDRhNDBi
M2QzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNl
L1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTc5LDQ2ICs3OSw0OCBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAjZW5kaWYKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgY2xhc3MgSGFzaFRhYmxlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAg
ICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVUeXBlKiwgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2
b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxl
Q29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRh
YmxlVHlwZSopOwogCiAjaWYgIUNIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSos
IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiop
IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQg
cmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFs
aWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlwZSopIHsgfQogCiAjZW5kaWYKIAogICAg
IHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1Lbm93bkdvb2RUYWc7
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJk
X2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZSosIGNvbnN0
IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRl
OgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5
cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBW
YWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBl
OwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJs
ZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAgICAgICAgZnJpZW5k
IGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpCiAgICAgICAgIHsK
QEAgLTI0MywxOCArMjQ1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3IgOiBwdWJsaWMg
c3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwgc3RkOjpwdHJk
aWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNp
bmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0
eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIFJlZmVy
ZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKIAotICAg
ICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlw
ZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJsZSwgUG9p
bnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0YWJsZSwgcG9zLCBl
bmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0YWJsZSwg
UG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25vd25Hb29kVGFnIHRh
ZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAgLTM0Nyw4ICszNDks
OSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcgSGFzaFRhYmxl
VHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFRyYWl0
cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsKICAgICAgICAgdHlw
ZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC00MDcsNyArNDEwLDcgQEAgREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgSGFzaFRhYmxlKCk7
CiAgICAgICAgIH5IYXNoVGFibGUoKSAKICAgICAgICAgewotICAgICAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpOyAKKyAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7IAog
ICAgICAgICAgICAgaWYgKG1fdGFibGUpCiAgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxl
KG1fdGFibGUpOwogI2lmIENIRUNLX0hBU0hUQUJMRV9VU0VfQUZURVJfREVTVFJVQ1RJT04KQEAg
LTQzNSw3ICs0MzgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgICAgICAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW5kKCk7CiAKLSAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFibGVbd2Vha1Jh
bmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKICAgICAgICAgICAgICAgICBpZiAoIWlz
RW1wdHlPckRlbGV0ZWRCdWNrZXQoYnVja2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VLbm93bkdvb2RJdGVyYXRvcigmYnVja2V0KTsKQEAgLTU1OSwxMiArNTYyLDYgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
c3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsgfQogI2VuZGlm
CiAKLSNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAgICAgIHZvaWQgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpOwotI2Vsc2UKLSAgICAgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpIHsgfQotI2VuZGlmCi0KICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIHNtYWxsIHRh
YmxlIGlzIDc1JS4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExv
YWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWROdW1lcmF0b3I7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0
b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWREZW5vbWluYXRvcjsKQEAgLTY5
NCw3ICs2OTEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAKLSAgICAg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIFZhbHVl
VHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCkBA
IC03NTAsNyArNzQ3LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IG51bGxwdHI7
CiAKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFu
Y2gKQEAgLTgxMSw3ICs4MDgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gbnVs
bHB0cjsKIAotICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlz
IGJyYW5jaApAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+
KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCk7CiAKQEAgLTg3Niw3ICs4NzMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVUeXBlKiBlbnRy
eTsKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
ICAgIGVudHJ5ID0gdGFibGUgKyBpOwogCiAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKQpAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNs
YXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAg
ICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtOTU4LDcgKzk1NSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgVmFsdWVUeXBl
KiBkZWxldGVkRW50cnkgPSBudWxscHRyOwogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5OwotICAg
ICAgICB3aGlsZSAoMSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgZW50
cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIHdlIGNvdW50IG9u
IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKQEAgLTEwMTcsNyArMTAx
NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhp
cyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5kKCk7CkBAIC0x
MTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52
YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCiAgICAg
ewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCiAg
ICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBp
ZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCArMTQwNiw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5pbnZhbGlkYXRl
SXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3YXAobV90YWJs
ZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwgbV9tdXRleCht
YWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVyLmludmFsaWRh
dGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOwogCiAg
ICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOwog
CkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJh
dG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsK
LSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4
dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9tdXRleCk7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBuZXh0OworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBwID0gdGFi
bGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgbV9pdGVy
YXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIHRhYmxl
LAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAg
IHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMg
PSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAgICAgLy8gSW5z
ZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4K
ICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAg
ICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAgICAgICAgICAg
IEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsxNTMyLDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
LCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgor
ICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHkt
bGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CkBA
IC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpdC0+
bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaXQtPm1f
bmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0cjsKICAgICB9
CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBzdHJ1Y3QgSGFz
aFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFibGVUeXBlID0g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6
OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBW
YWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEyNzM0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFy
Zz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxvYWQtZmFjdG9y
LgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1l
IEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1h
cDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNB
cmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisvLyA3NSUgbG9h
ZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0
c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFz
aFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAgPSBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
ZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDsKK3Vz
aW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6OkZhc3RS
b2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFz
aFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
YTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
OTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZh
Y3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVl
QXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFRhYmxl
VHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRy
YWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hT
ZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6Ok1lbW9yeUNv
bXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaFNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRmMWQyNjRiMzZiNDll
Y2RjYjI0NDcyNjdkN2JhOTdhZGNjMzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsODg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUlIGxvYWQgZmFjdG9yLiBU
aGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2UsIHdoaWxlIGl0IGtlZXBz
IGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3Jr
IHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5lZCBwcm9iZSBkaXN0YW5j
ZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVNpemVQ
b2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9
IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0g
MjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8v
IDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3b3JrIHdpdGggc3VjaCBh
IGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5jZSBpcyBzbGlnaHRseSB3
b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAlIGZvciBsYXJnZSB0
YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3kg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSAxMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gNzUlIGxv
YWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ugc2FtZSB0byBIYXNoVGFi
bGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChIYXNoVGFibGUgdXNlcyA3
NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IEZhc3RSb2Jp
bkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxv
YWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMgc2V2ZXJhbCBsaW1pdGF0
aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3aHkgdGhpcyBpcyBub3Qg
YSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29tcHV0ZXMgaGFzaCBtdWNo
IG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkgc2hvdWxkIGNhY2hlIGNv
bXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxlIGRvZXMgbm90IGNhY2hl
IGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMgZGVzaWduIG1lYW5zIHRo
YXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50cnVzaXZlbHkgKGUuZy4g
V1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4KKy8vCisvLyBJZiB0aGUg
YWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhlbiB5b3UgY2FuIHRyeSBS
b2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZpdCBpcyB0aGF0IHdlIGNh
biB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUgLSA5NSUpIQorLy8KKy8v
IFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNrd2FyZCBzaGlmdCBkZWxl
dGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIE5haXZlIFJvYmluSG9vZEhhc2hUYWJs
ZSBoYXMgc29tZSBjYXNlcyB3aGljaCBjYXVzZSBPKE5eMikgd2hlbiBpdGVyYXRpbmcgaXQgYW5k
IGluc2VydGluZyBpdCB0byBzb21lIG5ldyBSb2Jpbkhvb2RIYXNoVGFibGUKKy8vIHdpdGhvdXQg
cmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB0aGlzIGlzIGJlY2F1c2Ugb2YgaGlnaCBsb2FkLWZhY3Rv
ciBhbmQgZXhwb3NlZCBoYXNoLW9yZGVyaW5nIGF0IGl0ZXJhdGlvblszXS4gVG8gbWl0aWdhdGUg
aXQsCisvLyB3ZSBjYWxjdWxhdGUgaGFzaCBmb3IgZWFjaCB0YWJsZSwgYW5kIGRvIFhPUiB3aXRo
IHRoZSBoYXNoIHZhbHVlIHRvIG1ha2UgaGFzaC1vcmRlcmluZyBkaWZmZXJlbnQgZm9yIGVhY2gg
dGFibGUuCisvLworLy8gWzFdOiBodHRwczovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzExL3Jv
YmluLWhvb2QtaGFzaGluZy8KKy8vIFsyXTogaHR0cHM6Ly9jb2RlY2Fwc3VsZS5jb20vMjAxMy8x
MS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVsZXRpb24vCisvLyBbM106
IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20vcG9zdC8xNTM1NDU0NTU5
ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSGFz
aFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5PjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5Owor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRv
clR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25z
PjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1bHQ8aXRlcmF0b3I+Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlVGhyZXNob2xkID0g
MTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJc1JlbGVhc2VkV2Vha1Zh
bHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0aW9uczo6aGFzSGFzaElu
VmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgflJv
YmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRo
aXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZSht
X3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKGNv
bnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChSb2Jpbkhvb2RIYXNoVGFi
bGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCBSb2Jpbkhvb2RI
YXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jpbkhvb2RIYXNoVGFibGUm
Jik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxl
JiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0eSwganVzdCByZXR1cm4g
dGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisgICAgLy8gVGhpcyBpcyBt
b3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tpcCBhbGwgdGhlIGVtcHR5
IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0YWJs
ZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgorICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlSXRlcmF0b3IobV90YWJs
ZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
bV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJdGVyYXRvcihtX3RhYmxl
KTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKworICAgIGl0ZXJhdG9y
IHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBhdXRvJiBi
dWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6ZU1hc2soKV07Cisg
ICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAgICAgICB9OworICAgIH0K
KworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5y
YW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBrZXlDb3Vu
dCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUo
KTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisK
KyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgp
KTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5p
bXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heCht
aW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlDb3VudCkpOworCisgICAg
ICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFi
bGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAg
bV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgICAgICBtX3dpbGxF
eHBhbmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
KyAgICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0
dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUp
LCB2YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVy
biBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwg
V1RGTW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0
aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0
aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBp
ZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBB
ZGRSZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBh
c3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29u
c3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtl
eSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3Qg
eyByZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBj
b250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50
aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3Ig
ZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCisgICAgdm9p
ZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAg
ICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAg
IHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7
CisgICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRy
YWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0Vt
cHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1w
dHlCdWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtl
eSkgeyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBs
b29rdXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NF
UlRfRU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0Owor
I2Vsc2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9Cisj
ZW5kaWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsgfQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0
U2l6ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxz
ZQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2Vw
dFNpemUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4
cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1h
eExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUq
IGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0
ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOworCisgICAgdXNpbmcgTG9v
a3VwVHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQm
KTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1
bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVk
IHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpOworCisgICAgdm9pZCByZW1vdmVBbmRJbnZh
bGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lk
IHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVU
eXBlKik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVRhYmxlSGFzaChWYWx1ZVR5cGUq
IHRhYmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxWYWx1ZVR5cGUqPjo6aGFzaCh0YWJsZSk7IH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5z
aWduZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+a2V5Q291bnQoKTsKKyAgICAgICAgdW5z
aWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgIGlmIChzaG91bGRF
eHBhbmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCwg
YW5kIDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRhYmxlLgorICAgICAgICByZXR1cm4gbV93
aWxsRXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJsZVNpemU7CisgICAgfQorICAgIGJvb2wg
c2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJs
ZVNpemUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQor
ICAgIHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUo
KSAvIDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisKKyAgICB2b2lkIHJlaGFz
aCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYp
OworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KSB7IGhhc2hU
cmFpdHNEZWxldGVCdWNrZXQ8VHJhaXRzPihidWNrZXQpOyB9CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFz
aykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNr
KSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVU
eXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6
ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSog
cG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0
YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVU
eXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6
ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25H
b29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29k
KTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgdm9pZCBjaGVja1RhYmxlQ29uc2lz
dGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBjaGVj
a1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisjZW5kaWYKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNpemVQb2xpY3k6Om1heExvYWRO
dW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0
b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9hZDsKKworICAgIHVuc2lnbmVk
IHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CisgICAgdW5zaWduZWQg
dGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVu
c2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgIHVuc2ln
bmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVIYXNoOyB9CisKKyAgICBWYWx1
ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAw
IH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3RhYmxl
SGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZhbHNlIH07CisKKyNpZiBDSEVD
S19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0
ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCisgICAgbXV0YWJsZSBjb25z
dF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07CisgICAgLy8gVXNlIHN0ZDo6dW5p
cXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQu
CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9tdXRleCB7IG1ha2VVbmlxdWU8
TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5KGNvbnN0IFQmKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBv
bGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKK3sKKyAgICByZXR1cm4g
aW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+
CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojppbmxp
bmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7CisgICAgY2hlY2tLZXk8SGFz
aFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKKyAg
ICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIHNp
emUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNp
Z25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIFJvYmluSG9v
ZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhhdCB3ZSBjYW4gc3RvcAor
ICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBwcm9iaW5nIGRpc3RhbmNl
IG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0
b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRp
dHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIGlm
IChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1h
c2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGVudHJ5SGFz
aCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAg
ICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6
ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpp
bml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAgIEhhc2hUYWJsZUJ1Y2tl
dEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRpYWxp
emU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJh
PgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6YWRk
KFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAoreworICAgIGNoZWNrS2V5PEhh
c2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKwor
ICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5IGluc2VydGluZyBhbiBl
bnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5nIGFuIGVudHJ5LAorICAg
IC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0YWJsZSBzaW5jZSB0aGUg
aW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJpbmcgcmVoYXNpbmcuCisg
ICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsKKworICAgIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90YWJsZSk7CisKKyAgICB1
bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJs
ZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFibGVIYXNoKCk7
CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSkgXiB0YWJsZUhh
c2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFzaCwgc2l6ZU1hc2spOwor
ICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBudWxs
cHRyOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGVudHJ5ID0gbV90YWJsZSArIGluZGV4
OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBIYXNo
VHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6
Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAg
ICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChl
bnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFuY2UgPSBw
cm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAgICAgICAg
aWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNl
ID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV93aWxsRXhwYW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVudHJ5IHRv
IG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZhbHVlVHlw
ZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgZW50cnktPn5W
YWx1ZVR5cGUoKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5KTsKKyAgICAg
ICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4o
a2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFpbnRhaW5Q
cm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBlbnRyeURp
c3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xh
dG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQo
bWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9CisKKyAg
ICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCB0
cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0YW5jZUZv
ckFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGRpc3RhbmNl
LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaywgdW5zaWduZWQgdGFibGVIYXNoKQor
eworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXggPSAoaW5k
ZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICBp
ZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0czo6YXNz
aWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNs
YXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpIF4gdGFibGVIYXNoOwor
ICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRyeUhhc2gs
IGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVudHJ5RGlz
dGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhyZXNo
b2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAgICBz
d2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3RhbmNl
OworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOwor
ICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojph
ZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4gQWRkUmVzdWx0Cit7
CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBpbnZhbGlkYXRlSXRl
cmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hvdWxkIGV4cGFuZCBiZWZvcmUgcG90ZW50aWFs
bHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBleHBhbmQgYSB0YWJsZSBhZnRlciBpbnNlcnRp
bmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0byByZS1sb29rIHVwIGVudHJ5IGZyb20gdGhl
IHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRyeSBwb3NpdGlvbiBpcyBub3Qgc3RhYmxlIGR1
cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAgICAgIGV4cGFuZCgp
OworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVCht
X3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0
aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleCho
YXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgZW50cnkg
PSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsK
KyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndh
cmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0
eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgdW5z
aWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6
ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7Cisg
ICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkKKyAgICAg
ICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3RhcnQgc3dh
cHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52YXJpYW50
LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCplbnRyeSk7
CisgICAgICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICAgICAgaW5pdGlhbGl6
ZUJ1Y2tldCgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgq
ZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwg
aGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoV1RGTW92ZShl
eGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUsIHNpemVNYXNrLCB0YWJs
ZUhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW50
cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQor
ICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkp
LCBmYWxzZSk7CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAg
ICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQgKz0gMTsKKworICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVzdWx0KG1h
a2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpy
ZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZv
ciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0
aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKSBeIHRhYmxlSGFzaDsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWdu
ZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVudHJ5LCBX
VEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJh
Y3Rvcjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1h
c2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAgICAgICAg
ICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRyeURpc3Rh
bmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNr
OworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBv
bGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2F1
dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4g
aXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKwor
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisgICAg
aWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1ha2VLbm93
bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRvIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+IGNv
bnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZW5kKCk7
CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNoVGFibGUq
Pih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50cnkpCisg
ICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVy
YXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAoreworICAgIGlm
ICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVu
Y3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMp
OworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9p
ZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFs
dWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
LCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGlj
eT46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICAvLyBUaGlzIGlzIHJlbW92YWwgdmlh
ICJiYWNrd2FyZC1zaGlmdC1kZWxldGlvbiIuIFRoaXMgYmFzaWNhbGx5IHNoaWZ0IGV4aXN0aW5n
IGVudHJpZXMgdG8gcmVtb3ZlZCBlbXB0eSBlbnRyeSBwbGFjZSBzbyB0aGF0IHdlIG1ha2UKKyAg
ICAvLyB0aGUgdGFibGUgYXMgaWYgbm8gcmVtb3ZhbCBoYXBwZW5lZCBzbyBmYXIuIFRoaXMgZGVj
cmVhc2VzIGRpc3RhbmNlLXRvLWluaXRpYWwtYnVja2V0IChESUIpIG9mIHRoZSBzdWJzZXF1ZW50
IGVudHJpZXMgYnkgMS4gVGhpcyBtYWludGFpbnMKKyAgICAvLyBESUIgb2YgdGhlIHRhYmxlIGxv
dyBhbmQgcmVsYXRpdmVseSBjb25zdGFudCBldmVuIGlmIHdlIGhhdmUgbWFueSByZW1vdmFscywg
Y29tcGFyZWQgdG8gdXNpbmcgdG9tYnN0b25lcy4KKyAgICAvLyBodHRwczovL2NvZGVjYXBzdWxl
LmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1kZWxldGlv
bi8KKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGRlbGV0ZUJ1Y2tl
dCgqcG9zKTsKKyAgICBpbml0aWFsaXplQnVja2V0KCpwb3MpOworICAgIG1fa2V5Q291bnQgLT0g
MTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXpl
TWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50
YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0gcG9zIC0gbV90YWJsZTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsgMSkgJiBzaXplTWFzazsKKwor
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91c0VudHJ5ID0gbV90YWJs
ZSArIGluZGV4UHJldmlvdXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRl
eDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91c0VudHJ5KSk7CisgICAg
ICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CisgICAgICAg
IHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goZW50cnlL
ZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoIXByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBp
bmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc3dh
cCgqcHJldmlvdXNFbnRyeSwgKmVudHJ5KTsKKworICAgICAgICBpbmRleFByZXZpb3VzID0gaW5k
ZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAg
ICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOworCisgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4K
K2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3Iu
bV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZv
aWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3Rl
bmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJhdG9yLm1fcG9zaXRpb24p
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVj
ayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNo
ZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQ
b2xpY3k+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQoreworICAgIHJlbW92ZShmaW5kKGtl
eSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0byBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cywgU2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSkgLT4gVmFsdWVU
eXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRo
IGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAvLyBnY2MgZG9lc24ndCBh
cHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChUcmFpdHM6OmVtcHR5VmFs
dWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUq
PihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFs
bG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0
W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRlYWxsb2NhdGVUYWJsZShW
YWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKKyAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpleHBhbmQoKQoreworICAgIHVuc2lnbmVkIG5ld1NpemU7CisgICAgdW5zaWdu
ZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6ZSkKKyAgICAgICAgbmV3
U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIG5l
d1NpemUgPSBvbGRTaXplICogMjsKKworICAgIHJlaGFzaChuZXdTaXplKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NvbnN0ZXhwciB1bnNpZ25lZCBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2lnbmVkIGtleUNvdW50KQor
eworICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28o
a2V5Q291bnQpOworCisgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3VudCwgYmVzdFRhYmxlU2l6
ZSkpCisgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1dG8gYWJvdmVUaHJlc2hv
bGRGb3JFYWdlckV4cGFuc2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9yLCB1bnNpZ25lZCBrZXlD
b3VudCwgdW5zaWduZWQgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgLy8gSGVyZSBpcyB0aGUg
cmF0aW9uYWxlIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAzLzQgbG9hZC1mYWN0b3Iu
CisgICAgICAgIC8vIFdpdGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxvYWQgYXQgMS82LCBvdXIg
YXZlcmFnZSBsb2FkIGlzIDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBhcmUgZ2V0dGluZyBoYWxm
LXdheSBiZXR3ZWVuIDExLzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUgc2l6ZQorICAgICAgICAv
LyB0byBhdm9pZCBiZWluZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQgYnJpbmcgdGhlIHJhdGlv
IGNsb3NlIHRvIDExLzI0LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBi
b3VuZHMgWzkvMjQsIDE1LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExvYWRSYXRpbyA9IGxvYWRG
YWN0b3I7CisgICAgICAgIGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAgLyBtaW5Mb2FkOworICAg
ICAgICBkb3VibGUgYXZlcmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0aW8gKyBtaW5Mb2FkUmF0
aW8pIC8gMjsKKyAgICAgICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRS
YXRpbyA9IChhdmVyYWdlTG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIHJl
dHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhM
b2FkUmF0aW87CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0
YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7
CisgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5
Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisgICAg
dW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsK
KyAgICByZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5zaWduZWQgbWluaW11bVRh
YmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICByZWhhc2goc3RkOjpt
YXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUoa2V5Q291bnQoKSkpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplKQoreworICAgIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisgICAgdW5zaWduZWQgb2xk
VGFibGVTaXplID0gdGFibGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFi
bGU7CisKKyAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CisgICAgbV90YWJs
ZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICBtX3RhYmxlU2l6ZSA9IG5ld1Rh
YmxlU2l6ZTsKKyAgICBtX2tleUNvdW50ID0gb2xkS2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2gg
PSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4cGFuZCA9IGZhbHNlOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFRhYmxlU2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAgIGlmICghaXNFbXB0eUJ1
Y2tldChvbGRFbnRyeSkpCisgICAgICAgICAgICByZWluc2VydChXVEZNb3ZlKG9sZEVudHJ5KSk7
CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICB9CisKKyAgICBpZiAob2xkVGFi
bGUpCisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIq
PihvbGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAg
ICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxl
U2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50
ID0gMDsKKyAgICBtX3RhYmxlSGFzaCA9IDA7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7Cisg
ICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIG9sZFRh
YmxlU2l6ZSk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7Cisg
ICAgaWYgKCFvdGhlci5tX3RhYmxlU2l6ZSB8fCAhb3RoZXIubV9rZXlDb3VudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUob3RoZXIubV90YWJsZVNpemUp
OworICAgIG1fdGFibGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7CisgICAgbV9rZXlDb3VudCA9
IG90aGVyLm1fa2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1f
dGFibGUpOworICAgIG1fd2lsbEV4cGFuZCA9IG90aGVyLm1fd2lsbEV4cGFuZDsKKworICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFibGVTaXplOyArK2luZGV4
KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVyLm1fdGFibGVbaW5kZXhd
OworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob3RoZXJFbnRyeSkpIHsKKyAgICAgICAgICAg
IFZhbHVlVHlwZSBlbnRyeShvdGhlckVudHJ5KTsKKyAgICAgICAgICAgIHJlaW5zZXJ0KFdURk1v
dmUoZW50cnkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikK
K3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGludmFsaWRhdGVJ
dGVyYXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOworCisgICAg
c3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1fdGFibGVTaXplLCBvdGhl
ci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNvdW50KTsK
KyAgICBzd2FwKG1fdGFibGVIYXNoLCBvdGhlci5tX3RhYmxlSGFzaCk7CisgICAgc3dhcChtX3dp
bGxFeHBhbmQsIG90aGVyLm1fd2lsbEV4cGFuZCk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIp
IC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdG1wKG90
aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKQoreworICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXplID0gc3RkOjpleGNoYW5n
ZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV90YWJsZUhhc2ggPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fdGFibGVIYXNoLCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fd2lsbEV4cGFuZCwgZmFsc2UpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+
IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcChXVEZN
b3ZlKG90aGVyKSk7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKwor
I2lmIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29u
c3QKK3sKKyAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMs
IHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAg
dW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkg
PSBtX3RhYmxlICsgaTsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFj
dCgqZW50cnkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKKyAgICAg
ICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAgICArK2NvdW50OworCisg
ICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShrZXkpOworICAgIH0KKwor
ICAgIEFTU0VSVChjb3VudCA9PSBrZXlDb3VudCgpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVT
aXplKCkgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplKTsKKyAgICBBU1NFUlQodGFibGVT
aXplTWFzaygpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkgPT0gdGFibGVTaXplTWFz
aygpICsgMSk7Cit9CisKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorCitzdHJ1Y3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Cisg
ICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgTWVtb3J5
Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBU
YWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hU
YWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFp
dHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCmluZGV4IDkyZDIwOGQzNWUyYWFk
NWI4ODI3M2UzNDE4NmMyN2I1ZDA3Y2UxZmQuLmJhZDJjYWIwZDVhZjY5ODYzYmQwOGEyODkwYjU0
M2RhODgzN2U1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKQEAgLTQ1LDYg
KzQ1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9Owog
CiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPFdURjo6QXRvbVN0cmluZz4gewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcx
MTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBB
dG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVz
aW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3Vz
aW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwog
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRleCBlMGMwYWZiYWVhNDM2
ODYxYjhiOGU0MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4NjY4ZWY1ZTRhNTZhMjQ5
NzVkMjAxZmE4ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdU
YWJsZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCkBA
IC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3RyaW5nVGFibGU6On5BdG9t
U3RyaW5nVGFibGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBz
dHJpbmcgOiBtX3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV90YWJsZSkK
ICAgICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMwNDUx
MTNhNTdlLi5mZmFmODM2NDIyYzUyOWUzOWU2ZDE3MGRiY2I4NGY5OWI2Nzk0ZmI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBj
bGFzcyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgorICAgIHVzaW5nIFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0cmluZ0ltcGw+OworICAg
IHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nRW50cnk+OworCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFja2Vk
UHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3RyaW5n
VGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAgICBI
YXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJsZUlt
cGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggNWE4Mzg1
ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYxYmRmMjFiNThkYmY2Y2U2
MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTkwLDYg
KzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9Owog
CiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmls
aXRpZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhkMDRhMjU2NDM2ZTc3MTVjYzYu
LjA5NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQwNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFD
YXBhYmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNpbmNsdWRlICJNZWRpYUVuY29k
aW5nQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZh
Y3RvcnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKIHsKICAgICAvLyBB
ICJidWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRhaW5lciB0eXBlIGRvZXMgbm90
IHVuaXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6IGh0dHBzOi8vdG9vbHMuaWV0
Zi5vcmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3Ry
aW5nPj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+KHsKLSAgICAgICAgImF1ZGlv
LzNncHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAgICJhdWRpby8zZ3BwMiIsCi0g
ICAgICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9tcDQiLAotICAgICAgICAidmlk
ZW8vbXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0gICAgICAgICJ2aWRlby9xdWlj
a3RpbWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0gICAgICAgICJhdWRpby92bmQu
YXBwbGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAg
ICAgICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwKLSAgICAgICAgInZpZGVvL3dl
Ym0iLAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+PiBidWNrZXRNSU1F
VHlwZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgICAgICAiYXVkaW8vM2dw
cCJfcywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAgICJhdWRpby8zZ3BwMiJfcywK
KyAgICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVkaW8vbXA0Il9zLAorICAgICAg
ICAidmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXA0Il9zLAorICAgICAgICAi
dmlkZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXAyMSJfcywKKyAgICAg
ICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAgICAidmlkZW8vdm5kLmFwcGxl
Lm1wZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby9vZ2ci
X3MsCisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAiYXVkaW8vd2VibSJfcywKICAg
ICB9KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTA0MzU0
ZDYyOGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQzMTAxZWRlZjQ1MmFkMDk0ZjAz
NWJmODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVk
ZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpAQCAt
MjYwNyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0hhc1Bv
cHVwKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvcHVwVmFsdWUoKSBj
b25zdAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+
IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Ci0gICAg
ICAgICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwgImRpYWxvZyIKKyAgICBzdGF0
aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
U3RyaW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJfcywgInRyZWUiX3MsICJncmlk
Il9zLCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBoYXNQb3B1cCA9IGdldEF0dHJp
YnV0ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCBiNTlkZWQxYzdhZDliZDMwOGM2OGU4ZmVjOGRjMWE1OTBhNTBl
NTZmLi5hYTg3NjAyMGY2YWZmYTdlMDU2MjVlMmZlNGU1YzE4NzcyOTNkMjY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC0yMzg4LDcgKzIzODgsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNo
YWRvd1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05h
bWVzID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0
IHRhZ0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFnLmdldCgpLAogICAgICAgICAg
ICAgJmFzaWRlVGFnLmdldCgpLApAQCAtMjQwOSw3ICsyNDA5LDggQEAgc3RhdGljIGJvb2wgY2Fu
QXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgICAgICAg
ICAgJnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3BhblRhZy5nZXQoKQogICAgICAg
ICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAg
c2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9y
IChhdXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxO
YW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgK
aW5kZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVkZDM5MmY0Zi4uNDI5ZmM1NTk2
NDM1MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVk
TmFtZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxpZmllZE5hbWVIYXNoIHsKICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lJiBhLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwgY29uc3QgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogCi0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwogfTsK
IAogaW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhiMDMxOWNlMjUyYzZjNjZhY2I3
OTNmNWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJjOGE3ZDhlODUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAKICAgICBwcmludExpY2Vuc2VI
ZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNTUyIsICRmYW1pbHlOYW1lc0Zp
bGVCYXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApAQCAtNzA5LDYgKzcxMCw3IEBA
IHN1YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7CiAg
ICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSwgPDxF
TkQsICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlmaWVkTmFtZSA6IHB1YmxpYyBR
dWFsaWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogRU5ECkBAIC05NTYsNyAr
OTU4LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5Niw3ICs5OTgs
NyBAQCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFsaWZpZWROYW1lOyAvLyBVc2Ug
cG9pbnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVtcHR5VmFsdWUoKSBpbiBIYXNo
TWFwIGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1h
cDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0
aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkKK3N0
YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkKIHsKICAgICBz
dHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWU7CkBA
IC0xMDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYgPDxFTkQKICAgICB9OwogCi0g
ICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1
Y3RvckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVj
dG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkgOiB0YWJsZSkK
LSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeShlbnRyeS5mdW5jdGlvbiwg
ZW50cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCksICRw
YXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVu
Y3Rpb24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBzdGF0aWMgJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeSBmaW5kJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9uKGNvbnN0IEF0b21TdHJpbmcm
IGxvY2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0
cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlNYXAoKSk7Ci0gICAgcmV0
dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1hcC5nZXQo
KS5nZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVt
ZW50PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUtub3duRWxl
bWVudChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3VtZW50JiBkb2N1bWVudCRmb3Jt
RWxlbWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCkBAIC0x
MjI2LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVORAogOwpAQCAtMTI0Nyw3ICsx
MjUwLDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNo
TWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRX
cmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyTWFwKCkK
K3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBl
ckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCiB7CiAg
ICAgc3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
OwpAQCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsK
IAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3Bh
Y2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3Bh
Y2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkgOiB0
YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgZW50
cnkuZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCksIGVu
dHJ5LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBKU0RPTU9iamVjdCogY3JlYXRl
SlMkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+JiYgZWxlbWVudCkKIHsK
ICAgICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3Jl
YXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7Ci0gICAgaWYgKGF1dG8gZnVu
Y3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSkp
CisgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxv
Y2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgV1RGTW92
ZShlbGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Rm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRhMzljNjMwYmIyZmExYjRkZWJi
M2QwLi5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdmNDMwOTY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgsNyArMTE5LDcgQEAgRWxl
bWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGJsb2Nr
VGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKICAgICAgICAg
YWRkcmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAgICAgYXNpZGVUYWcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAppbmRleCA0ZWMw
YjRlNTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42NjE0MDdlMTQ1MjRjZjJhMTNm
ZWEzNjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6UmVt
b3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGlzRWxl
bWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAg
ICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0
PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UXVh
bGlmaWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAgICAgICBiVGFnLAogICAgICAg
ICBiZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2YzJlMDA4ZmY4M2ZhZGEzYTdk
YWYuLmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3Y2UzMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC02
Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFya3Vw
LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmlu
SG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMgYm9vbCBpc1Byb2hpYml0ZWRQ
YXJhZ3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAgICAgICAgICAgJnVsVGFn
LmdldCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAg
SGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGZvciAoYXV0byYgdGFn
IDogdGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAg
IHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmluZGV4IDY3MzVlMjY5ZjI1YWVm
N2JjMDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIyMWRjMjdlOTQyMjgyZjE0Zjkw
MzJlOWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHN0cnVjdCBBdXRvZmlsbElu
Zm8gewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9OwogCi1zdGF0aWMgY29uc3Qg
SGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQorc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5n
LCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRv
IG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7
CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywgQXV0
b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAgIHsgImVtYWlsIiwgeyBBdXRv
ZmlsbEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAg
ICAgICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6OkltcHAsIEF1dG9maWxsQ2F0
ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPEF0b21TdHJp
bmcsIEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBtYXA7CiAgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1l
LCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2UyOTA5NDRhNGI3Y2ZhZWRkOGQ3
NS4uMDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2MGRlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MjI1LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAgICAgICAgICAgICZ2YWx1
ZXR5cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0ci5nZXQoKSwKICAgICAgICAg
fTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGZv
ciAoYXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2NhbE5h
bWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMyNGI4YTAzZTZiMTcxNjIwZDZj
YmUuLmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUyZjJjNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgiCkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFs
bGJhY2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2ZW50c1BhcmVudE9iamVjdEZy
b21FeHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0
byBtb3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIGF1dG8qIHRhZ3MgPSBI
VE1MTmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
SFRNTE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAgICAgICAgIGF1dG8mIHRhZyA9
ICp0YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5NGU5OWNiZTM5MTY4Zi4uOTJm
Mjc2ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAj
aW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiAjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDc4
LDkgKzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFja0l0
ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxl
UXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4g
Y3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVu
c2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+IHN0
YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNv
bnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcs
IFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUg
PSBuYW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNhc2UoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9tU3Ry
aW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZH
VGFncygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1
YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05hbWVzOjpnZXRTVkdUYWdzKCks
IFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhc2Vk
TmFtZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAgICBpZiAoY2FzZWROYW1lLmxv
Y2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgdG9rZW4uc2V0TmFtZShj
YXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0QXR0
cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhjb25z
dCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBmb3IgKGF1
dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewogICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSk7CkBA
IC01MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFz
aE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG8KIAogdGVtcGxhdGU8Y29u
c3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgpLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9t
U3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFi
bGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxp
ZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNUYWJsZSgpLCBhdHRyaWJ1
dGVzVGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFwLCB0b2tlbik7CiB9CiAK
QEAgLTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RNYXRoTUxBdHRy
aWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRqdXN0QXR0cmlidXRlczxNYXRo
TUxOYW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpNYXRoTUxBdHRyc0NvdW50Pih0
b2tlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFByZWZpeChIYXNoTWFwPEF0b21T
dHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29u
c3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGlj
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFs
aWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiB7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFt
ZSA9IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQocHJlZml4ICsgJzonICsgbG9j
YWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lLm5hbWVzcGFjZVVS
SSgpKSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRoUHJlZml4ID0gW10oTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5h
bWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFtZSog
Y29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2Fs
TmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6
JyArIGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1l
c3BhY2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3RhdGljIEhhc2hNYXA8QXRvbVN0
cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQotewotICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBt
YXA7CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJlZml4KG1hcCwgeGxpbmtOYW1l
LCBYTGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFtZXM6OlhMaW5rQXR0cnNDb3Vu
dCk7CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogCiBzdGF0aWMgdm9pZCBhZGp1
c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAg
PSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCk7CiAgICAgYWRq
dXN0QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVn
UGFnZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRiYzlkOGUyNjM1MmQ1ZjYyMGQ3
YjU1YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThmYWYxMWJhNmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAtMzYsNiArMzYsNyBAQAog
I2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUwLDEwIEBAIGJvb2wgTm9uRmFz
dFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24oKQogICAgIHJldHVybiByZWdp
b25DaGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4
X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhfdD4+JiB0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byByZWdpb25Db2xv
cnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJp
bmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKICAgICAg
ICAgICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYzLCA1MCB9IH0sCiAgICAgICAg
ICAgICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1MCB9IH0sCiAgICAgICAgICAg
ICB7ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0gfSwKQEAgLTE5NCw0OSArMTk1
LDQ5IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5OjpkcmF3UmVjdChQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9udC51cGRhdGUobnVsbHB0cik7
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiKSk7CisgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hzdGFydCJfcykp
OwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25l
ZFRleHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkp
OworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0Il9zLCBjb250ZXh0LCBmb250
LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsK
LSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0
b3VjaG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRS
ZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2htb3ZlIiwgY29udGV4dCwgZm9u
dCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91
Y2htb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAg
bGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxD
b2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCJfcykpOwogICAgIGNv
bnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRv
dWNoZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3
UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3Qu
bG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9yY2VjaGFu
Z2UiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5k
UmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9yY2VjaGFuZ2UiLCBjb250
ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRU
ZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0
aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKICAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAg
IGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyIsIGNvbnRleHQsIGZvbnQs
IGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInBhc3Np
dmUgbGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwog
CiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0
b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24iKSk7CisgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vkb3duIl9zKSk7
CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVk
VGV4dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9zLCBjb250ZXh0LCBmb250LCBs
ZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3Vz
ZW1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0
KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3ZlIiwgY29udGV4dCwgZm9udCwg
bGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vt
b3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVn
ZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50
UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiX3MpKTsKICAgICBjb250ZXh0
LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZXVw
IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRB
bGlnbmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlv
bigpKTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9ybXMsIHRoZSAid2hlZWwiIHJl
Z2lvbiBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24uCi0gICAgY29udGV4
dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgid2hlZWwiKSk7Cisg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgid2hl
ZWwiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdo
dEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0
LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24i
X3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZW5kaWYKIAogICAg
IGZvciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lvbiA6IG1fZXZlbnRUcmFja2lu
Z1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKaW5kZXggZWQ4ZGQ5
MjM4ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAxNTI3N2UwN2M0M2Q5Zjk4OWEx
N2VhYmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VVc2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGlu
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIE5hdmlnYXRp
b25UaW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAoUGVyZm9ybWFuY2VUaW1pbmc6
OiopKCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1p
bmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5jdGlv
bk1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVzdHJpY3RlZE1hcmtOYW1l
c1RvTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CisgICAgc3RhdGljIGF1dG8g
bWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+KHsKICAgICAgICAgeyAi
Y29ubmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0RW5kIH0sCiAgICAgICAg
IHsgImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0U3RhcnQgfSwK
ICAgICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tQ29tcGxl
dGUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBl
UmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBl
UmVnaXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2YxOTc3MGQ0ODFlNmJlZTRmZWRh
ZWE2NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlkMmMzNDFlYjc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNv
Y29hLm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3Jl
U2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNVUkxGaWxlVHlwZU1hcHBp
bmdzU1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgorI2ltcG9ydCA8d3Rm
L1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxT
dHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCgpCiB7
CiAgICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwID0gbWFrZU5ldmVyRGVz
dHJveWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4gbWFw
OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gbWFwOwog
CiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgSGFzaFNl
dDxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKKyAgICAgICAgICAg
IG1hcC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0
cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24pOwogICAgICAgICB9OwogCiAg
ICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIE5TQXJy
YXk8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2VhNzQ1MmQ1ZmYyZTZjYjVmM2Ux
MTY2NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYxMjg3ZTJhNzI5Y2M0NzFiYmQx
ZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
QEAgLTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldCA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4g
c2V0OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3QgY2hhciogbmFtZSwgc3RkOjpp
bml0aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAgIHNldC5hZGQoQXRvbVN0
cmluZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
IH0pOwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFn
ZUNoYXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAg
c3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKEhhc2hTZXQ8QXRvbVN0
cmluZz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gewogICAg
ICAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJBcmlhbCBIZWJyZXciLAogICAg
ICAgICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwLi4xNDI0
ZDFiZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1p
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgSEFWRShBVkNPTlRFTlRLRVlT
RVNTSU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVm
ZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrCiAgICAg
cmV0dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZh
bGlkSW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB2YWxpZFR5cGVzID0g
SGFzaFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyhz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAgICAgICBDRE1Qcml2YXRlRmFp
clBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENETVByaXZhdGVGYWlyUGxheVN0
cmVhbWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklU
REFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVmNzQ3NThiMTc4MmZjZDk3OTE3
Li5hNDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5MjBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCkBAIC0z
MSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVs
dFN1cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKIHsKICAg
ICBzdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWZhdWx0U3VwcG9ydGVk
SW1hZ2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhh
c2hTZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBlKTsKICAgICAgICAgfSwgJnN5
c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlc10oY29uc3QgU3RyaW5n
JiBpbWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lzdGVtU3VwcG9ydGVkSW1hZ2VU
eXBlcy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4g
ZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOworICAgICAgICBmb3IgKGF1dG8m
IGltYWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKSB7CisgICAgICAgICAgICBp
ZiAoc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpKQorICAgICAg
ICAgICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0ZWRJ
bWFnZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2ODY3NDAwZDc2ZWUzYzY2NTc1
ZS4uNGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2QwYjliYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCkBAIC0yNSwx
MiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVz
KCk7CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCk7CiBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXND
b2NvYS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4MWRiYTAyOGIzZWU5MjMzLi42
MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGll
c0NvY29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJIRVZDVXRpbGl0aWVzLmgiCiAj
aW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2ltcG9ydCA8cGFsL2NvY29hL0FW
Rm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgog
I2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorI2ltcG9ydCA8
cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNpbXBvcnQgIlZpZGVvVG9vbGJv
eFNvZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFy
YW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0lu
Zm8mCiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBjb2RlY1R5cGVGb3JEb1Zp
Q29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKIHsKLSAgICBzdGF0aWMgYXV0
byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENNVmlkZW9Db2RlY1R5
cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAg
ICAgIHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAgICAgIHsgImh2YzEi
LCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhldjEiLCBrQ01WaWRlb0Nv
ZGVjVHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVk
PE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIENNVmlkZW9D
b2RlY1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQg
fSwKKyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAorICAgICAg
ICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgICAgIHsgImhldjEi
X3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsKIAogICAgIGF1dG8gZmluZFJl
c3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRiMGNhY2Q2N2RmYmI5NWMxMmQ5
OS4uZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0MjlmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEzNzEsMTUgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhDYWxsT25D
bGllbnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1
cHBvcnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIsICJWX1ZQOSIgfSk7CisgICAg
c3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCJfcywgIlZfVlA5Il9zIH0p
OwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQorY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2RlY3Mg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJBX1ZPUkJJUyIsICJBX09Q
VVMiIH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMi
X3MsICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVm
ZmVyUGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIzODRmOTJmNzQ4ZjRjOWJhNWQ5
MWI4ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0NmQ1YzcyZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYv
Qm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlCiAKICAgICBU
cmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotICAgIHN0YXRp
YyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKKyAgICBz
dGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRBdWRpb0NvZGVj
cygpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpTdGF0dXMgT25FbGVtZW50
QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKikgZmluYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5kZXgg
ODgwY2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFhZi4uZmUwZWQzMTQ0MTE0OGVl
MTUzYjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNWR1Bh
dHRlcm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiAj
aWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00Myw5ICs0
NCw5IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsKIH0KIAotc3RhdGljIEhhc2hT
ZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBw
ZXJGaWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlz
dDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyAiY29u
dGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNU
ZXJtQ29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhpY3MgZWxlbWVudHMiIDogaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3JhcGhpY3NFbGVtZW50CkBA
IC05Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVy
TWFza2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8
QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2VyVGFncygpCiB7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGluZVRh
Zy0+bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjpw
YXRoVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkgQEAgc3RhdGljIEhhc2hTZXQ8
QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0
YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBm
aWxsQW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7
CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0
LmdldCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2FsTmFtZSgpKTsKICAgICAgICAg
c190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLT5sb2NhbE5hbWUoKSk7CkBA
IC0xMjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGZpbGxBbmRTdHJv
a2VUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9t
U3RyaW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWluYWJsZVJlc291
cmNlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmlu
Zz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYg
KHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFk
ZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFtZSgpKTsKICAgICAgICAgc190
YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5sb2NhbE5hbWUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3NThhMjc4MzlhMmI4MTg2NDRh
Y2VjMmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMzNDAxMjc2ZTUzNmZhZjQwMGMy
ZDZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC01Nyw2ICs1
Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewpAQCAtNDk3LDcgKzQ5
OCw3IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMgYm9vbCBoYXNFZmZlY3RpdmVE
aXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1odG1s
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVz
ID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAgICBz
dGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAgICAg
ICAgICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJUYWcuZ2V0KCksCkBAIC01MTcs
NyArNTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNwbGF5
Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZ0ZXh0YXJlYVRh
Zy5nZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAg
ICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBzZXQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAgICAgICBmb3IgKGF1dG8mIG5h
bWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAg
ICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0MjhmOTllMjhhMTc4Ny4uNzEy
NjgwYTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3ICsxMjgsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoU3RyaW5nVmlldyBz
dHJpbmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHN1
cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBIYXNo
U2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAgICAgU1ZHVGVzdHM6OmFk
ZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0LmFkZCh7CiAgICAgICAgICAg
ICBTVkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApp
bmRleCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4MTdlYjU0Li45YzE0MGNjMWQ0
ZTAzOGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRv
bVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9w
ZXJ0eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJpYnV0
ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAtMTQxLDE2ICsxNDIsMTYgQEAg
c3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJ
RD4gY3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRyLmdldCgpLAogICAgIH07CiAK
LSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4gbWFwOworICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDU1NQcm9w
ZXJ0eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRyaWJ1dGVOYW1lcykgewog
ICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLT5sb2NhbE5hbWUoKTsK
LSAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQcm9wZXJ0eUlEKGxvY2FsTmFt
ZSkpOworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUp
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3VwcG9ydHMgInRyYW5zZm9ybS1v
cmlnaW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVkLAogICAgIC8vIGFuZCB3ZSBj
YW4gYWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJsZSBhYm92ZSBpbnN0ZWFkLgot
ICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLmltcGwoKSwgQ1NT
UHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0
dHItPmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbik7CiAKICAgICByZXR1
cm4gbWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmllZE5hbWUgU1ZHRWxlbWVudDo6
YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lCiAg
ICAgICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAgICAgICAgICAgJlNWR05hbWVz
OjpocmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5n
LCBRdWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CiAgICAgICAgIGZv
ciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1h
cC5hZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03ODAsNyArNzgxLDcgQEAg
Q1NTUHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFt
ZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlk
OwogCiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkpOwotICAgIHJldHVybiBw
cm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIHJl
dHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAKIGJv
b2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmluZGV4IDFkMmNkOTc4ZWQxMzIz
NmQ2YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFkY2U1ZjJiNjU3MDk5NmE1ZmE0
NDU1NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBA
IHZvaWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJl
cnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3ZvaWQgU1ZH
VGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQogewogICAg
IHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNBdHRyKTsKICAgICBzdXBw
b3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
c3RzLmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1Mjk3NmM1MjJhOGM1Yi4uMGMy
NTIxNjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3Rz
LmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNs
dWRlICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGNsYXNzIFNWR1Rlc3Rz
IHsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9tU3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNl
dDxRdWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0
ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+
Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBoYXNGZWF0dXJlRm9yTGVnYWN5
QmluZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggZTA1ZmI1M2MwMTk5NzE2YjM0
NTZmNzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0M2QzYTI0MjIyYjhmNGZiMzc3
MTExMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3NywxNCArMTc4LDE0IEBA
IHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxv
d2VkRWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCkKIHsKICAgICAvLyBT
cGVjOiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGljcyBlbGVtZW50IG9yIG90aGVy
ICd1c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0IHRoYXQgY2FuIGJlIHJlLXVz
ZWQKICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBTVkcgZG9jdW1lbnQgdmlhIGEg
J3VzZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1lbnQiIGlzIGRlZmluZWQgYXMg
J2NpcmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAncGF0aCcsICdwb2x5Z29uJywg
J3BvbHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNsdWRlZCBhcmUgYW55dGhpbmcg
dGhhdCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkgbWFrZSBzZW5zZSB0byBhcHBl
YXIgb25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKLSAg
ICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZvciAoYXV0byYgdGFnIDogeyBh
VGFnLmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0KCksIGVsbGlwc2VUYWcuZ2V0
KCksIGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFnLmdldCgpLCBtZXRhZGF0YVRh
Zy5nZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQoKSwgcG9seWxpbmVUYWcuZ2V0
KCksIHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNoVGFnLmdldCgpLCBzeW1ib2xU
YWcuZ2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdldCgpLCB0aXRsZVRhZy5nZXQo
KSwgdHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRhZy5nZXQoKSB9KQogICAgICAg
ICBzZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNldDsKQEAgLTE5Miw3ICsx
OTMsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNl
dCgpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRFbGVtZW50KGNvbnN0IFNWR0Vs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9t
U3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsKICAgICByZXR1cm4gIXNl
dC5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCA2ODE5MWI5NGE0
MDAxMDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFlNzZkYTRhZmQ2MDQ5ZGJjYTYw
YjkwZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlhMaW5rTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NjIsNyAr
NDYzLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKGNvbnN0IFN0cmlu
ZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9vbCBTVkdTTUlMRWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBw
b3J0ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIFNWR05hbWVzOjpi
ZWdpbkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAogICAgICAgICBTVkdOYW1lczo6
ZHVyQXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDlmZGZiYThi
MTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBjMjJkNGI2N2NlNWZmYTNiODMw
NjljYmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1
bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCArNjY5LDQ0IEBAIHN0cnVjdCBG
dW5jdGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVudENvdW50SW50ZXJ2YWw7CiB9
OwogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IGNyZWF0ZUZ1bmN0
aW9uTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCiB7CiAgICAgc3Ry
dWN0IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAg
IEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1hcFZhbHVlIGZ1bmN0aW9uOwog
ICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1tdID0g
ewotICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9LAot
ICAgICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNlaWxpbmcsIDEgfSB9LAotICAg
ICAgICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRl
cnZhbDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwgeyBjcmVhdGVGdW5jdGlvbkNv
bnRhaW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ291bnQs
IDEgfSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0s
Ci0gICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAxIH0gfSwKLSAgICAg
ICAgeyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAotICAgICAgICB7ICJsYW5nIiwg
eyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7ICJsYXN0IiwgeyBjcmVhdGVG
dW5jdGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1uYW1lIiwgeyBjcmVhdGVGdW5j
dGlvbkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJuYW1lIiwgeyBj
cmVhdGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZXNw
YWNlLXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkksIEludGVydmFsKDAsIDEpIH0g
fSwKLSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVhdGVGdW5jdGlvbk5vcm1hbGl6
ZVNwYWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5vdCIsIHsgY3JlYXRlRnVu
Y3Rpb25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uTnVt
YmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBvc2l0aW9uIiwgeyBjcmVhdGVG
dW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91bmQiLCB7IGNyZWF0ZUZ1bmN0
aW9uUm91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0aCIsIHsgY3JlYXRlRnVuY3Rp
b25TdGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5nIiwgeyBjcmVhdGVGdW5jdGlv
blN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJzdHJpbmctbGVuZ3RoIiwg
eyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAg
ICB7ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAz
KSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgY3JlYXRlRnVuY3Rpb25TdWJz
dHJpbmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1iZWZvcmUiLCB7IGNyZWF0
ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAgICAgeyAic3VtIiwgeyBjcmVh
dGVGdW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5zbGF0ZSIsIHsgY3JlYXRlRnVu
Y3Rpb25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVlIiwgeyBjcmVhdGVGdW5jdGlv
blRydWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQm9v
bGVhbiwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25DZWls
aW5nLCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0
LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgICAgIHsgImNvbnRhaW5zIl9z
LCB7IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAgICAgICB7ICJjb3VudCJfcywg
eyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAgeyAiZmFsc2UiX3MsIHsgY3Jl
YXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZsb29yIl9zLCB7IGNyZWF0ZUZ1
bmN0aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywgeyBjcmVhdGVGdW5jdGlvbklk
LCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9
LAorICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTGFzdCwgMCB9IH0sCisgICAg
ICAgIHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUsIEludGVydmFs
KDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWUsIElu
dGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNlLXVyaSJfcywgeyBjcmVhdGVG
dW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3Jt
YWxpemUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2YWwo
MCwgMSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEgfSB9
LAorICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rpb25OdW1iZXIsIEludGVydmFs
KDAsIDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsgY3JlYXRlRnVuY3Rpb25Qb3Np
dGlvbiwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUm91bmQs
IDEgfSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0YXJ0
c1dpdGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdHJp
bmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3RyaW5nLWxlbmd0aCJfcywgeyBj
cmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7
ICJzdWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcsIEludGVydmFsKDIsIDMp
IH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vi
c3RyaW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICAgICAgeyAic3VtIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAidHJhbnNsYXRlIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAgeyAidHJ1ZSJfcywgeyBjcmVh
dGVGdW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBIYXNoTWFwPFN0cmluZywgRnVu
Y3Rpb25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsKICAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1bmN0aW9uLm5hbWUsIGZ1bmN0
aW9uLmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5j
cHAKaW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQwYzc5MGQ1ODk1MC4uODlmN2Vk
OWQ3MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQ
YXJzZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAjaW5j
bHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC03NiwyOCArNzcsMjgg
QEAgc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gTm90
UGFydE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBjcmVh
dGVBeGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1lc01hcCgpCiB7CiAgICAg
c3RydWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgQVND
SUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsKICAgICB9OwogICAgIGNv
bnN0IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAgICB7ICJhbmNlc3RvciIsIFN0
ZXA6OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6
QW5jZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJpYnV0ZSIsIFN0ZXA6OkF0dHJp
YnV0ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKLSAgICAg
ICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCi0gICAgICAgIHsgImRl
c2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzIH0sCi0gICAgICAg
IHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKLSAgICAgICAgeyAiZm9sbG93
aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAotICAgICAgICB7ICJu
YW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAgICAgIHsgInBhcmVudCIsIFN0
ZXA6OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5nIiwgU3RlcDo6UHJlY2VkaW5n
QXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGluZ1Np
YmxpbmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9CisgICAgICAg
IHsgImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAgICAgICAgeyAiYW5jZXN0
b3Itb3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCisgICAgICAgIHsgImF0
dHJpYnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAgICB7ICJjaGlsZCJfcywg
U3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQiX3MsIFN0ZXA6OkRlc2Nl
bmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiJfcywgU3RlcDo6RGVz
Y2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nIl9zLCBTdGVwOjpGb2xs
b3dpbmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIl9zLCBTdGVwOjpGb2xs
b3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2UiX3MsIFN0ZXA6Ok5hbWVz
cGFjZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVwOjpQYXJlbnRBeGlzIH0sCisg
ICAgICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAorICAgICAgICB7
ICJwcmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKKyAg
ICAgICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAgIH07Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAgICAgZm9yIChhdXRvJiBheGlz
TmFtZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChheGlzTmFtZS5uYW1lLCBheGlz
TmFtZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggODdiZDI4ZWI0OGFlMjQwMDY1
NThlOGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMyNjRlMGM1YTA5YzdlYmJlM2Rj
ZGNlN2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL0NhbGxiYWNr
QWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1
ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21h
aW5zVGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJuICJDUkVBVEUgVEFCTEUgXCJP
YnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0cmFi
bGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNlZW4g
UkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5U
RUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFs
ZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxM
LHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5P
VCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElO
VEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJTlRF
R0VSIE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFCTEUgXCJPYnNlcnZlZERvbWFp
bnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVY
VCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVM
TCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBOT1QgTlVM
TCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIg
Tk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1l
c0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5V
TEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBOVUxM
KSJfczsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRVbmF0dHJp
YnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJkZXN0
aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1lT2ZBZENsaWNrIiwgInRva2Vu
IiwgInNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAidGltZU9m
QWRDbGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MgfSk7CiAgICAg
cmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMm
IGV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNv
bHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURv
bWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJjZUlEIiwgImF0dHJpYnV0
aW9uVHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRDbGljayIsICJlYXJsaWVzdFRp
bWVUb1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUiLCAia2V5SUQiLCAiZWFybGll
c3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29s
dW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9t
YWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywg
ImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3Ms
ICJrZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CiAgICAg
cmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsyOTQsOSBAQCBzdGF0aWMgYm9v
bCBuZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgc2NoZW1hKQogICAgIHJl
dHVybiBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zIik7CiB9CiAK
LXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3JlYXRlVGFibGVRdWVyaWVz
KCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQogewotICAgIHN0YXRpYyBhdXRv
IGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVyaWVzID0gbWFrZU5ldmVy
RGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIGNyZWF0ZU9ic2VydmVk
RG9tYWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBjcmVhdGVUb3BMZXZlbERv
bWFpbnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMiX3Ms
IGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc30sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBlNDhlODMyNmEyYTczNWVmOTI0
Zjg3MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3MmFjYzFhZTMzYzk1ODdjNDgy
M2JmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgK
QEAgLTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+PiA6IFZlY3RvckFyZ3Vt
ZW50Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5h
bWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFzaFRh
YmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFz
aE1hcFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0LDYgKzUxNCw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhhc2hNYXAucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBoYXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsK
ICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDggKzU1Miw4IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7Ci0gICAgdHlwZWRl
ZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhh
c2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsK
KyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hU
YWJsZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewpAQCAtNTc5LDYg
KzU4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hTZXQ7CisgICAgICAgIGhhc2hT
ZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7CiAgICAgICAgIGZvciAodWlu
dDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25h
bDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0gYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQppbmRl
eCA0OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFiZDZkLi45YTRkNzgwOWU2M2U0
ODUyNDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpAQCAtMzIsNiArMzIsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1h
cC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0
TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAtNTgsNyArNTksNyBAQCBP
cHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBnZXRBcHBCb3VuZERv
bWFpbnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJRC5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9tYWlu
TGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9tYWluTGlz
dCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiB7CiAgICAg
ICAgIHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVyIl9zLCBWZWN0b3I8V2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW46OnVuY2hl
Y2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygiMTI3LjAuMC4xIikgfX0sCiAg
ICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAK
aW5kZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZkZDgxZDBkNy4uY2U1NmY5Y2Q0
NjI4NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1MiwxMyBAQCB2b2lkIFdlYlBy
ZWZlcmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKIGJv
b2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2Vi
UHJlZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5n
LCBWYWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gdmFsdWVzOwogICAgIGRl
Y29kZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVzKTsKIAotICAgIE9wdGlvbmFs
PEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZhdWx0czsKKyAgICBPcHRpb25h
bDxWYWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRlY29kZXIgPj4gb3ZlcnJpZGRl
bkRlZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0
b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKaW5kZXgg
YzVmZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYwOC4uNGEzZDhmMmE0ZTRjZjBj
NzgxZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRGVjb2Rlci5o
IgogI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02Niw3ICs2Niw3IEBA
IHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVzaW5nIFZhbHVlID0gVmFyaWFu
dDxTdHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZhbHVlTWFwID0gTWVtb3J5Q29t
cGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAgICAgVmFsdWVNYXAgbV92YWx1
ZXM7CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXgg
MmYwYWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4Ny4uMDQxNzQ4YjkwNDRhZDI1
MzY4OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTY1LDkgKzY1LDkgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHVuZXhwZWN0ZWRBY3Rp
dml0eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNz
UHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVh
ZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+
PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxTdHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aCwK
ICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktp
dCJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoCiAgICAgfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1YTY2MjAyMjkx
MzA0YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBhZmI0M2I3NDUwMzliMGI0ODMz
NTFlNDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1cGRh
dGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09D
T0EpCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0
aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKICAgICByZXR1cm4g
cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCBlZjA1YjQxNDcwY2VlNWZlY2Fm
NzVjYmZiZTM2ZTFmMDhiZmQ3ZTY1Li5hNjhhOWMxNTFiM2MyZDAxN2JmMGQ3ZmQwYWI0ZjZhYjMy
ODQ5OTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCiAjaWYgSEFWRShW
SVNJQklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzgsNyArNDc5LDcgQEAgY2xhc3MgV2Vi
UHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHVibGljIFJlc3Bv
bnNpdmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWluZ0RlYnVnZ2VkKCkgY29uc3Q7
CiAgICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRDb2RlKCkgY29uc3Q7CiAKLSAg
ICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRS
ZWFkQWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNz
KCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZlbmVzc1RpbWVyKCkgeyBy
ZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9pZCB1cGRhdGVCYWNrZ3JvdW5k
UmVzcG9uc2l2ZW5lc3NUaW1lcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDhkMjczOGI0NTVkZjkxOGMzNmU4ZDA2NzQ4MzU1YTI1NzM5OGQy
ZTEuLjc4Y2Q3YmQwYjBiN2I0OGI0NGFmN2RiM2U0YTQ4YjUwZWQyY2RiMGEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAor
MjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAg
IFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5
IEZpbCBQaXpsby4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NP
Zk9wZXJhdG9yLmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdFbnN1cmUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Sb2Jpbkhvb2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvSGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpaZXJvSGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPYmplY3RXaXRo
UmVmTG9nZ2VyOjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RNb3ZpbmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92
aW5nVXNpbmdBZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVm
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6VGVzdE9i
amVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RP
YmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rv
cik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5j
cHA6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3Bw
LgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2FwYWNpdHlGb3JTaXplKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnRlc3RJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKwogMjAyMS0w
NC0wMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtDb2NvYV0gUkVHUkVTU0lPTihyMjcyOTk5KTogVXNlci1pbnN0YWxsZWQgZm9udHMgbm8gbG9u
Z2VyIHdvcmsgaW4gTWFpbApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggOWM1NWU0
ZjZlYWE4ZTViYWFhZGExMjI1NjYyMDU5ZWRmNjI1Y2QwZS4uM2Y3Y2ZmZGUyOTFjMmQ4MmRkMTI1
MWJiZWM4YzgxMzExMjdmYmVmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC03
OSw2ICs3OSw4IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvUmVmQ291bnRl
ci5jcHAKICAgICBUZXN0cy9XVEYvUmVmTG9nZ2VyLmNwcAogICAgIFRlc3RzL1dURi9SZWZQdHIu
Y3BwCisgICAgVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCisgICAgVGVzdHMvV1RGL1Jv
YmluSG9vZEhhc2hTZXQuY3BwCiAgICAgVGVzdHMvV1RGL1J1bkxvb3AuY3BwCiAgICAgVGVzdHMv
V1RGL1NIQTEuY3BwCiAgICAgVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25z
LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzOGUxNWZiNDYwYmFlYTE4MWUxZWJlNmIy
YmE0Y2FiMTlhYTJjMDJhLi41NmVjZWZlZTYxZDZkMmM2NTM3ODQwOGJmZTdlZWY5NDU2NjgyZTky
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTExMyw2ICsxMTEzLDggQEAKIAkJRTMyNUM5
MDcyM0UzODcwMjAwQkM3RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyNUM5MDYyM0UzODcwMjAw
QkM3RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tICovOyB9OwogCQlFMzJCNTQ5MjIy
ODEwQUM0MDA4QUQ3MDIgLyogUGFja2VkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzMkI1NDkxMjI4MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3Bw
ICovOyB9OwogCQlFMzRBNkQxOTI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZl
cmVuY2VzU2VydmljZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzNEE2RDE4MjQxMkRFMzkwMDEyQUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5j
ZXNTZXJ2aWNlLm1tICovOyB9OworCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5I
b29kSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5jcHAgKi87
IH07CisJCUUzNTVBNjMyMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVBNjMxMjYx
NTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCAqLzsgfTsKIAkJRTM1QjkwODIy
M0Y2MEREMDAwMDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QjkwODEyM0Y2MEREMDAwMDAxMUZG
IC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tICovOyB9OwogCQlFMzVGQzdCMjIyQjgyQTczMDBG
MzJGOTggLyogSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4IC8qIEpT
TG9ja1Rha2VzV2ViVGhyZWFkTG9jay5tbSAqLzsgfTsKIAkJRTM3M0Q3OTExRjJDRjM1MjAwQzZG
QUFGIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM5NTNGOTUxRjJDRjMyMTAwQTc2QTJFIC8qIFNpZ25hbHMuY3BwICovOyB9OwpA
QCAtMjkwMyw2ICsyOTA1LDggQEAKIAkJRTMyNUM5MDYyM0UzODcwMjAwQkM3RDNCIC8qIFBpY3R1
cmVJblBpY3R1cmVTdXBwb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGljdHVyZUluUGlj
dHVyZVN1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkI1NDkxMjI4
MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFja2VkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0QTZEMTgyNDEyREUzOTAwMTJBQjZF
IC8qIEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSb2Jpbkhvb2RIYXNo
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1NUE2MzEyNjE1NzE4RjAw
MUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzNUI5MDgxMjNGNjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsaXplZERldmljZU1vZGVsLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVGQzdCMTIyQjgyQTZEMDBGMzJGOTggLyogSlNMb2Nr
VGFrZXNXZWJUaHJlYWRMb2NrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzg4ODg3MDIwQzkwOTgxMDBFNjMyQkMgLyogV29ya2VyUG9vbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJQb29sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDgsNiArNDQxMiw4IEBACiAJCQkJNDQyQkJGNjgxQzkx
Q0FEOTAwMTcwODdGIC8qIFJlZkxvZ2dlci5jcHAgKi8sCiAJCQkJOTNBNDI3QUQxODBEQTYwRjAw
Q0QyNEQ3IC8qIFJlZkxvZ2dlci5oICovLAogCQkJCTkzQTQyN0E4MTgwRDlCMDcwMENEMjRENyAv
KiBSZWZQdHIuY3BwICovLAorCQkJCUUzNTVBNjMxMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhv
b2RIYXNoTWFwLmNwcCAqLywKKwkJCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5I
b29kSGFzaFNldC5jcHAgKi8sCiAJCQkJRTRDOUFCQzcxQjNEQjE3MTAwNDBBOTg3IC8qIFJ1bkxv
b3AuY3BwICovLAogCQkJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMUEzNTI0QUMxRDYzQTRGQjAwMzE3MjlCIC8q
IFNjb3BlLmNwcCAqLywKQEAgLTUxNTUsNiArNTE2MSw4IEBACiAJCQkJN0M4M0RGMTYxRDBBNTkw
QzAwRkVCQ0YzIC8qIFJlZlB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NEFDOEJDNjIxRDAy
NDVBMDBDQUZCMzQgLyogUmV0YWluUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjI0
MUQwQTU5MEMwMEZFQkNGMyAvKiBSZXRhaW5QdHIubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMzU1
QTYzMjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYwNTFEMEE1OTBDMDBGRUJDRjMgLyogUnVuTG9vcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYyNjFEMEE1OTBDMDBGRUJDRjMgLyogU2F0dXJh
dGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNTI0QUUx
RDYzQTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3Iu
aAppbmRleCA0NWNjZmE0MDMwZTEyYWQzYzVhNmRjMzc0YzE1YmQ5ZWQzMTA5MDJhLi5mZGZhYmVl
YzRiZjRlMGQwN2NmODUwYzQyMmM0MTI0YjQ3ZTQ3MWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaApAQCAt
NzcsNiArNzcsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxEZWxldGVkQWRkcmVz
c09mT3BlcmF0b3I+IHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0hhc2hJblZhbHVlID0gdHJ1ZTsgLy8gVGhpcyBpcyBub3QgY29ycmVjdCwgYnV0IGZvciBkZWJ1
Z2dpbmcgb2YgUm9iaW5Ib29kSGFzaFNldC4KIH07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvSGFzaE1hcC5jcHAKaW5kZXggYWFiZTdkZGFjMjc3M2I2Zjc5NmUyMDQwYjMyMmJl
NTllMWYwNzg2ZC4uYzg0M2U3YzU1YWIxMzQzZTgwMmFiNzg0NzA0N2Y5Zjg2YTUyNDdiOCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKQEAgLTY2OCwxNCArNjY4
LDE0IEBAIGNsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIgewogfTsKIAogCi12b2lkIHRlc3RNb3Zp
bmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lkIHRlc3RN
b3ZpbmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1hcDsKICAg
ICAKICAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBtYWtlVW5pcXVlPE9iamVjdFdpdGhS
ZWZMb2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0pOwogfQogCi12b2lkIHRlc3RNb3ZpbmdVc2lu
Z0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lkIHRlc3RNb3ZpbmdVc2lu
Z0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBz
dGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1hcDsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAppbmRleCBlN2NmYmNjYWQxZDQ1OWNkNjRjYTIx
Mjg4OGE3YTk2MmNkNWUzMDMxLi5iMGM2NDkyMjZlZWEzYmNmMzFlMGIwMjg2NDg1N2ViZDY2NGI3
ZDQ5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcApAQCAtNzAs
MTEgKzcwLDExIEBAIHZvaWQgdGVzdEluaXRpYWxDYXBhY2l0eSgpCiAgICAgRVhQRUNUX0dUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2FwYWNpdHkp
OwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5
VXBUb1NpemUoKTsKLXRlbXBsYXRlPD4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXpl
PDA+KCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENh
cGFjaXR5VXBUb1NpemUoKTsKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2Fw
YWNpdHlVcFRvU2l6ZTwwPigpCiB7CiB9Ci10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2b2lkIGdl
bmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5s
aW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpCiB7CiAgICAgZ2VuZXJhdGVU
ZXN0Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4oKTsKICAgICB0ZXN0SW5pdGlhbENhcGFjaXR5
PHNpemU+KCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3Zl
T25seS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaAppbmRleCBk
OWMyMDZjMjhlYzQ5ZGNjZDBjZjlkNDA3YWQzNzJmYWMwMjQ0YmFkLi5hMTBjNWU4Zjg2NTFlN2Rh
NjQyZmM0ZmRmMDFkMmUwZThmNTM1NzA0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Nb3ZlT25seS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L01vdmVPbmx5LmgKQEAgLTk0LDcgKzk0LDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8TW92ZU9ubHk+IHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9CiAKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOyAvLyBU
aGlzIGlzIG5vdCBjb3JyZWN0LCBidXQgZm9yIGRlYnVnZ2luZyBvZiBSb2Jpbkhvb2RIYXNoU2V0
LgogfTsKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZmNhYjZhZWRiODE5
NDE3ZjcxZGQ3MTk5OWQxYzQ2N2U2OGQ2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcApAQCAtMCwwICsxLDEyNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ291
bnRlcnMuaCIKKyNpbmNsdWRlICJEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCIKKyNpbmNsdWRl
ICJNb3ZlT25seS5oIgorI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIK
KyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IFJvYmluSG9vZEhhc2ggOiBwdWJsaWMgRGVmYXVsdEhhc2g8VD4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7Cit9Owor
Cit0eXBlZGVmIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGlu
dCwgaW50LCBSb2Jpbkhvb2RIYXNoPGludD4+IEludEhhc2hNYXA7CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hNYXAsIEhhc2hUYWJsZUl0ZXJhdG9yQ29tcGFyaXNvbikKK3sKKyAgICBJbnRIYXNo
TWFwIG1hcDsKKyAgICBtYXAuYWRkKDEsIDIpOworICAgIEFTU0VSVF9UUlVFKG1hcC5iZWdpbigp
ICE9IG1hcC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5iZWdpbigpID09IG1hcC5lbmQo
KSk7CisKKyAgICBJbnRIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IG1hcC5iZWdpbigp
OworICAgIEFTU0VSVF9UUlVFKGJlZ2luID09IG1hcC5iZWdpbigpKTsKKyAgICBBU1NFUlRfVFJV
RShtYXAuYmVnaW4oKSA9PSBiZWdpbik7CisgICAgQVNTRVJUX1RSVUUoYmVnaW4gIT0gbWFwLmVu
ZCgpKTsKKyAgICBBU1NFUlRfVFJVRShtYXAuZW5kKCkgIT0gYmVnaW4pOworICAgIEFTU0VSVF9G
QUxTRShiZWdpbiAhPSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5iZWdpbigp
ICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4gPT0gbWFwLmVuZCgpKTsKKyAgICBB
U1NFUlRfRkFMU0UobWFwLmVuZCgpID09IGJlZ2luKTsKK30KKworc3RydWN0IFRlc3REb3VibGVI
YXNoVHJhaXRzIDogSGFzaFRyYWl0czxkb3VibGU+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1p
bmltdW1UYWJsZVNpemUgPSA4OworfTsKKwordHlwZWRlZiBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8ZG91YmxlLCBpbnQ2NF90LCBSb2Jpbkhvb2RIYXNoPGRvdWJsZT4s
IFRlc3REb3VibGVIYXNoVHJhaXRzPiBEb3VibGVIYXNoTWFwOworCitzdGF0aWMgaW50IGJ1Y2tl
dEZvcktleShkb3VibGUga2V5KQoreworICAgIHJldHVybiBEZWZhdWx0SGFzaDxkb3VibGU+Ojpo
YXNoKGtleSkgJiAoVGVzdERvdWJsZUhhc2hUcmFpdHM6Om1pbmltdW1UYWJsZVNpemUgLSAxKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpZ1RhYmxlSGFzaFRyYWl0cyA6IHB1
YmxpYyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNp
emUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTw0MDk2Pjo6dmFsdWU7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWmVyb0hhc2ggOiBwdWJsaWMgSW50SGFzaDxUPiB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpIHsgcmV0dXJuIDA7IH0KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgRG91YmxlSGFzaENvbGxpc2lvbnMpCit7CisgICAgLy8gVGhl
ICJjbG9iYmVyIiBrZXkgaGVyZSBpcyBvbmUgdGhhdCBlbmRzIHVwIHN0ZWFsaW5nIHRoZSBidWNr
ZXQgdGhhdCB0aGUgLTAga2V5CisgICAgLy8gb3JpZ2luYWxseSB3YW50cyB0byBiZSBpbi4gVGhp
cyBtYWtlcyB0aGUgMCBhbmQgLTAga2V5cyBjb2xsaWRlIGFuZCB0aGUgdGVzdCB0aGVuCisgICAg
Ly8gZmFpbHMgdW5sZXNzIHRoZSBGbG9hdEhhc2g6OmVxdWFscygpIGltcGxlbWVudGF0aW9uIGNh
biBkaXN0aW5ndWlzaCB0aGVtLgorICAgIGNvbnN0IGRvdWJsZSBjbG9iYmVyS2V5ID0gNjsKKyAg
ICBjb25zdCBkb3VibGUgemVyb0tleSA9IDA7CisgICAgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVy
b0tleSA9IC16ZXJvS2V5OworCisgICAgRG91YmxlSGFzaE1hcCBtYXA7CisgICAgbWFwLmFkZChj
bG9iYmVyS2V5LCAxKTsKKyAgICBtYXAuYWRkKHplcm9LZXksIDIpOworICAgIG1hcC5hZGQobmVn
YXRpdmVaZXJvS2V5LCAzKTsKKworICAgIEFTU0VSVF9FUShidWNrZXRGb3JLZXkoY2xvYmJlcktl
eSksIGJ1Y2tldEZvcktleShuZWdhdGl2ZVplcm9LZXkpKTsKKyAgICBBU1NFUlRfRVEobWFwLmdl
dChjbG9iYmVyS2V5KSwgMSk7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQoemVyb0tleSksIDIpOwor
ICAgIEFTU0VSVF9FUShtYXAuZ2V0KG5lZ2F0aXZlWmVyb0tleSksIDMpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBNb3ZlT25seVZhbHVlcykKK3sKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIE1vdmVPbmx5LCBSb2Jpbkhvb2RI
YXNoPHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAg
ICAgbW92ZU9ubHlWYWx1ZXMuc2V0KGkgKyAxLCBXVEZNb3ZlKG1vdmVPbmx5KSk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0
ID0gbW92ZU9ubHlWYWx1ZXMuZmluZChpICsgMSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShpdCA9
PSBtb3ZlT25seVZhbHVlcy5lbmQoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCA1MDsgKytpKQorICAgICAgICBBU1NFUlRfRVEobW92ZU9ubHlWYWx1ZXMudGFrZShpICsg
MSkudmFsdWUoKSwgaSArIDEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDUwOyBpIDwgMTAwOyAr
K2kpCisgICAgICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5VmFsdWVzLnJlbW92ZShpICsgMSkpOwor
CisgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlWYWx1ZXMuaXNFbXB0eSgpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgTW92ZU9ubHlLZXlzKQoreworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxNb3ZlT25seSwgdW5zaWduZWQ+IG1vdmVPbmx5S2V5
czsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgTW92
ZU9ubHkgbW92ZU9ubHkoaSArIDEpOworICAgICAgICBtb3ZlT25seUtleXMuc2V0KFdURk1vdmUo
bW92ZU9ubHkpLCBpICsgMSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAx
MDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbW92ZU9ubHlLZXlzLmZpbmQoTW92ZU9ubHko
aSArIDEpKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5S2V5cy5lbmQoKSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAg
QVNTRVJUX0ZBTFNFKG1vdmVPbmx5S2V5cy5hZGQoTW92ZU9ubHkoaSArIDEpLCBpICsgMSkuaXNO
ZXdFbnRyeSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAg
ICBBU1NFUlRfVFJVRShtb3ZlT25seUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAxKSkpOworCisg
ICAgQVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hNYXAsIEluaXRpYWxpemVyTGlzdCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6c3RyaW5nLCBSb2Jpbkhvb2RI
YXNoPHVuc2lnbmVkPj4gbWFwID0geworICAgICAgICB7IDEsICJvbmUiIH0sCisgICAgICAgIHsg
MiwgInR3byIgfSwKKyAgICAgICAgeyAzLCAidGhyZWUiIH0sCisgICAgICAgIHsgNCwgImZvdXIi
IH0sCisgICAgfTsKKworICAgIEVYUEVDVF9FUSg0dSwgbWFwLnNpemUoKSk7CisKKyAgICBFWFBF
Q1RfRVEoIm9uZSIsIG1hcC5nZXQoMSkpOworICAgIEVYUEVDVF9FUSgidHdvIiwgbWFwLmdldCgy
KSk7CisgICAgRVhQRUNUX0VRKCJ0aHJlZSIsIG1hcC5nZXQoMykpOworICAgIEVYUEVDVF9FUSgi
Zm91ciIsIG1hcC5nZXQoNCkpOworICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygpLCBtYXAuZ2V0
KDUpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRWZmaWNpZW50R2V0dGVyKQor
eworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwg
Q29weU1vdmVDb3VudGVyLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAgIG1hcC5z
ZXQoMSwgQ29weU1vdmVDb3VudGVyKCkpOworCisgICAgeworICAgICAgICBDb3B5TW92ZUNvdW50
ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAgICAgbWFwLmdldCgxKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICAgICAg
RVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCk7CisgICAgICAgIEVYUEVD
VF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgQ29weU1vdmVDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgICAgIG1hcC5n
ZXQoMik7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291
bnQpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6bW92ZUNvdW50KTsK
KyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleSkKK3sK
KyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVf
cHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisgICAg
YXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7Cisg
ICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlv
bkNvdW50KTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0N1c3RvbURlbGV0ZXIp
Cit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIGNvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXJTY29wZTsKKyAgICBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6VGVzdGluZ1Njb3BlIGRlbGV0ZXJDb3VudGVyU2NvcGU7
CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+PiBtYXA7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj4+IHVuaXF1ZVB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cigpLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpKTsKKyAg
ICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQp
OworCisgICAgRVhQRUNUX0VRKDB1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBF
WFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRl
c3RydWN0aW9uQ291bnQpOworCisgICAgRVhQRUNUX0VRKDF1LCBEZWxldGVyQ291bnRlcjxDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfRmluZFVzaW5nUmF3UG9pbnRlcikKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVf
cHRyPGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IG1hcDsK
KworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8
aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdU
Rk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBhdXRvIGl0ID0gbWFwLmZpbmQocHRyKTsKKyAg
ICBBU1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5r
ZXkuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgyLCBpdC0+dmFsdWUpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVl
X3B0cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBtYXA7
CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNr
PGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChX
VEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG1hcC5jb250YWlu
cyhwdHIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0dl
dFVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVu
aXF1ZV9wdHI8aW50Pj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdp
dGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5n
ZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBpbnQgdmFs
dWUgPSBtYXAuZ2V0KHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHZhbHVlKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRlcikK
K3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7
CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8
c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisg
ICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRy
LmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IG1hcC5yZW1vdmUocHRyKTsKKyAgICBF
WFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVy
KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29w
ZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVu
aXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFz
aDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisK
KyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQ
dHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0
cnVjdGlvbkNvdW50KTsKKworICAgIGludCByZXN1bHQgPSBtYXAudGFrZShwdHIpOworICAgIEVY
UEVDVF9FUSgyLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUmVmVmFsdWUpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgVW5pcXVlUmVmPGludD4sIFJvYmluSG9v
ZEhhc2g8aW50Pj4gbWFwOworICAgIFVuaXF1ZVJlZjxpbnQ+IGZpdmUgPSBtYWtlVW5pcXVlUmVm
V2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIG1hcC5hZGQoNSwgV1RGTW92ZShm
aXZlKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNvbnRhaW5zKDUpKTsKKyAgICBpbnQqIHNob3Vs
ZEJlRml2ZSA9IG1hcC5nZXQoNSk7CisgICAgRVhQRUNUX0VRKCpzaG91bGRCZUZpdmUsIDUpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHRha2VuRml2ZSA9IG1hcC50YWtlKDUpOworICAgIEVY
UEVDVF9FUSgqdGFrZW5GaXZlLCA1KTsKKyAgICBtYXAuZW5zdXJlKDYsIFtdIHsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNik7CisgICAg
fSk7CisgICAgRVhQRUNUX0ZBTFNFKG1hcC5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX1RSVUUo
bWFwLmNvbnRhaW5zKDYpKTsKKyAgICBmb3IgKFVuaXF1ZVJlZjxpbnQ+JiBhIDogbWFwLnZhbHVl
cygpKQorICAgICAgICBFWFBFQ1RfRVEoYS5nZXQoKSwgNik7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVm
TG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVm
TG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAg
ICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmVsZWFzZSkKK3sK
KyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShwdHIpLCAwKTsK
KyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9B
ZGRVc2luZ01vdmUpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRy
PFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKFdU
Rk1vdmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdSYXcpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVm
TG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVm
TG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAg
ICAgICBtYXAuYWRkKHB0ci5nZXQoKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJy
ZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZEtleUFscmVhZHlQ
cmVzZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJv
YmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJl
ZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9
CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZh
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKHB0cjIsIDApOworICAgICAgICBF
WFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1h
cC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRV
c2luZ1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQ
dHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFw
OworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBt
YXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEp
IGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmFk
ZChXVEZNb3ZlKHB0cjIpLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9T
VFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdNb3ZlS2V5QWxyZWFkeVByZXNlbnQp
Cit7CisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29k
SGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJl
ZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAg
IEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQoV1RGTW92ZShwdHIyKSwgMCk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
bWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1Nl
dCkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJl
ZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAg
ICAgICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdNb3ZlKQoreworICAgIHsK
KyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOworICAgIH0K
KworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5n
UmF3KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dn
ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAg
ICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIuZ2V0KCks
IDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFJlZlB0cktleV9TZXRLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7CisgICAg
ICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RI
YXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+
IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBFQ1RfU1RS
RVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtYXAuc2V0KHB0cjIsIDEpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtYXAuZ2V0
KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIEVYUEVDVF9T
VFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNlS2V5QWxy
ZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRy
PFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0
ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLnNldChXVEZNb3Zl
KHB0cjIpLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChwdHIuZ2V0KCkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZUtleUFscmVhZHlQcmVzZW50KQoreworICAgIHsK
KyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworCisgICAgICAgIEVYUEVD
VF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICAg
ICAgeworICAgICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RGTW92ZShwdHIyKSwgMSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgRVhQRUNU
X0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAgIH0KKworICAgICAgICBFWFBFQ1Rf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQor
CisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZSkKK3sKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAgIHsKKyAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIDE7IH0pOworICAgICAgICBFWFBFQ1Rf
RVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMXUs
IGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdDIgPSBtYXAuZW5zdXJlKDEsIFtd
IHsgcmV0dXJuIDI7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0
b3ItPnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5r
ZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9Nb3ZlT25seVZhbHVlcykK
K3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQs
IE1vdmVPbmx5LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7CisgICAg
eworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1vdmVPbmx5VmFsdWVzLmVuc3VyZSgxLCBbXSB7
IHJldHVybiBNb3ZlT25seSgxKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1
bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbW92ZU9ubHlWYWx1ZXMuZW5zdXJlKDEs
IFtdIHsgcmV0dXJuIE1vdmVPbmx5KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRS
ZXN1bHQyLml0ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBh
ZGRSZXN1bHQyLml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0
Mi5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVu
c3VyZV9VbmlxdWVQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkPiwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFw
LmVuc3VyZSgxLCBbXSB7IHJldHVybiBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazx1
bnNpZ25lZD4oMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsICptYXAuZ2V0KDEpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDF1LCAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9yLT5rZXkpOworICAgICAgICBF
WFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
MiA9IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9j
Q2hlY2s8dW5zaWduZWQ+KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFwLmdldCgx
KSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKmFkZFJlc3VsdDIuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5rZXkpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9SZWZQdHIpCit7CisgICAgRGVyaXZl
ZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPHVuc2ln
bmVkPj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRyPFJlZkxv
Z2dlcj4oJmEpOyB9KTsKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBSZWZQdHI8UmVmTG9n
Z2VyPigmYSk7IH0pOworICAgIEVYUEVDVF9TVFJFUSgiIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworY2xhc3MgT2JqZWN0V2l0aFJlZkxvZ2dlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqZWN0V2l0aFJlZkxv
Z2dlcihSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKKyAgICAgICAgOiBtX2xvZ2dlcihXVEZNb3Zl
KGxvZ2dlcikpCisgICAgeworICAgIH0KKworICAgIFJlZjxSZWZMb2dnZXI+IG1fbG9nZ2VyOwor
fTsKKworCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4m
JiBsb2dnZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJvYmluSG9v
ZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBt
YWtlVW5pcXVlPE9iamVjdFdpdGhSZWZMb2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0pOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdBZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIp
Cit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVk
LCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8dW5z
aWduZWQ+PiBtYXA7CisKKyAgICBhdXRvJiBzbG90ID0gbWFwLmFkZCgxLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgc2xvdCA9IG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxvZ2dlcj4o
V1RGTW92ZShsb2dnZXIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRW5zdXJl
X0xhbWJkYXNDYXB0dXJpbmdCeVJlZmVyZW5jZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRS
ZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAg
IHRlc3RNb3ZpbmdVc2luZ0Vuc3VyZShXVEZNb3ZlKHJlZikpOworCisgICAgICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHRlc3RNb3ZpbmdVc2luZ0FkZChXVEZNb3ZlKHJlZikp
OworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKyAgICB9Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVmFs
dWVJc0Rlc3RydWN0ZWRPblJlbW92ZSkKK3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9ic2VydmVy
IHsKKyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIERl
c3RydWN0b3JPYnNlcnZlcihib29sKiBkZXN0cnVjdGVkKQorICAgICAgICAgICAgOiBkZXN0cnVj
dGVkKGRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5EZXN0cnVj
dG9yT2JzZXJ2ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGVzdHJ1Y3RlZCkKKyAg
ICAgICAgICAgICAgICAqZGVzdHJ1Y3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBE
ZXN0cnVjdG9yT2JzZXJ2ZXIoRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisgICAgICAgICAg
ICA6IGRlc3RydWN0ZWQob3RoZXIuZGVzdHJ1Y3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
b3RoZXIuZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBEZXN0cnVj
dG9yT2JzZXJ2ZXImIG9wZXJhdG9yPShEZXN0cnVjdG9yT2JzZXJ2ZXImJiBvdGhlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVzdHJ1Y3RlZCA9IG90aGVyLmRlc3RydWN0ZWQ7CisgICAgICAg
ICAgICBvdGhlci5kZXN0cnVjdGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wqIGRlc3RydWN0ZWQgeyBudWxscHRyIH07Cisg
ICAgfTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQs
IERlc3RydWN0b3JPYnNlcnZlciwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICBib29s
IGRlc3RydWN0ZWQgPSBmYWxzZTsKKyAgICBtYXAuYWRkKDUsIERlc3RydWN0b3JPYnNlcnZlciB7
ICZkZXN0cnVjdGVkIH0pOworCisgICAgRVhQRUNUX0ZBTFNFKGRlc3RydWN0ZWQpOworCisgICAg
Ym9vbCByZW1vdmVSZXN1bHQgPSBtYXAucmVtb3ZlKDUpOworCisgICAgRVhQRUNUX1RSVUUocmVt
b3ZlUmVzdWx0KTsKKyAgICBFWFBFQ1RfVFJVRShkZXN0cnVjdGVkKTsKK30KKworc3RydWN0IERl
cmVmT2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBO
RVZFUl9JTkxJTkUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9Cisg
ICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgLS1jb3VudDsKKyAg
ICAgICAgb2JzZXJ2ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICB9CisgICAg
dW5zaWduZWQgY291bnQgeyAxIH07CisgICAgY29uc3QgUmVmUHRyPERlcmVmT2JzZXJ2ZXI+KiBi
dWNrZXRBZGRyZXNzIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IERlcmVmT2JzZXJ2ZXIqIG9ic2Vy
dmVkQnVja2V0IHsgbnVsbHB0ciB9OworfTsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
UmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCit7CisgICAgYXV0byBvYnNlcnZlciA9IG1ha2VV
bmlxdWU8RGVyZWZPYnNlcnZlcj4oKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxS
ZWZQdHI8RGVyZWZPYnNlcnZlcj4+PiBtYXA7CisgICAgbWFwLmFkZChhZG9wdFJlZihvYnNlcnZl
ci5nZXQoKSksIDUpOworCisgICAgYXV0byBpdGVyYXRvciA9IG1hcC5maW5kKG9ic2VydmVyLmdl
dCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpdGVyYXRvciAhPSBtYXAuZW5kKCkpOworCisgICAgb2Jz
ZXJ2ZXItPmJ1Y2tldEFkZHJlc3MgPSAmaXRlcmF0b3ItPmtleTsKKworICAgIEVYUEVDVF9UUlVF
KG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRSht
YXAucmVtb3ZlKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICAvLyBJdCBpZiBmaW5lIHRvIGVpdGhl
ciBsZWF2ZSB0aGUgb2xkIHZhbHVlIGludGFjdCBhdCBkZWxldGlvbiBvciBhbHJlYWR5IHNldCBp
dCB0byB0aGUgZGVsZXRlZAorICAgIC8vIHZhbHVlLgorICAgIC8vIEEgemVybyB3b3VsZCBiZSBh
IGluY29ycmVjdCBvdXRjb21lIGFzIGl0IHdvdWxkIG1lYW4gd2UgbnVsbGVkIHRoZSBidWNrZXQg
YmVmb3JlIGFuIG9wYXF1ZQorICAgIC8vIGNhbGwuCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXIt
Pm9ic2VydmVkQnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8IG9ic2VydmVyLT5vYnNlcnZlZEJ1
Y2tldCA9PSBSZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkpOworICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmX0tleSkKK3sKKyAgICB7CisgICAgICAgIFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+
PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRk
KFdURk1vdmUocmVmKSwgMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dn
ZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4g
bWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLnNldChX
VEZNb3ZlKHJlZiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBKGEpOworICAgICAgICBtYXAuYWRkKFdU
Rk1vdmUocmVmQSksIDEpOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEyKGEpOworICAg
ICAgICBtYXAuc2V0KFdURk1vdmUocmVmQTIpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmVuc3VyZShXVEZNb3ZlKHJlZiksIFtdKCkgeworICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFTU0VSVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAg
ICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8
UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKworICAgICAgICBhdXRvIGl0ID0gbWFwLmZp
bmQoJmEpOworICAgICAgICBBU1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworCisgICAgICAg
IEFTU0VSVF9FUShpdC0+a2V5LnB0cigpLCAmYSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFs
dWUsIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJl
ZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAg
ICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYp
LCAxKTsKKworICAgICAgICBtYXAucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgaW50IGkgPSBtYXAudGFr
ZSgmYSk7CisgICAgICAgIEFTU0VSVF9FUShpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9n
Z2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwg
b2YgdGhlc2UgUmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJ
IGd1ZXNzLgorICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBS
ZWZMb2dnZXIoImEiKSk7CisgICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOwor
ICAgICAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIGkgKyAxKTsKKyAgICAgICAgICAgIEFT
U0VSVF9UUlVFKG1hcC5jb250YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlRfU1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmX1ZhbHVlKQoreworICAgIHsKKyAgICAgICAgUmVm
TG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisK
KyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1v
dmUocmVmKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIp
OworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQs
IFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWYpKTsKKyAg
ICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJl
ZkxvZ2dlciBiKCJiIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOwor
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RG
TW92ZShyZWZBKSk7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQihiKTsKKyAgICAgICAg
bWFwLnNldCgxLCBXVEZNb3ZlKHJlZkIpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJl
ZihhKSByZWYoYikgZGVyZWYoYSkgZGVyZWYoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhv
b2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAg
ICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFHZXQgPSBtYXAu
Z2V0KDEpOworICAgICAgICBBU1NFUlRfRVEoYUdldCwgJmEpOworICAgIH0KKworICAgIEFTU0VS
VF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAg
IHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwg
UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIGF1dG8g
ZW1wdHlHZXQgPSBtYXAuZ2V0KDEpOworICAgICAgICBBU1NFUlRfVFJVRShlbXB0eUdldCA9PSBu
dWxscHRyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJl
ZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworCisgICAgICAg
IGF1dG8gYU91dCA9IG1hcC50YWtlKDEpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2Fz
dDxib29sPihhT3V0KSk7CisgICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAg
fQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNf
c3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisK
KyAgICAgICAgYXV0byBlbXB0eVRha2UgPSBtYXAudGFrZSgxKTsKKyAgICAgICAgQVNTRVJUX0ZB
TFNFKHN0YXRpY19jYXN0PGJvb2w+KGVtcHR5VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBt
YXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEs
IFdURk1vdmUocmVmKSk7CisgICAgICAgIG1hcC5yZW1vdmUoMSk7CisgICAgfQorCisgICAgQVNT
RVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RI
YXNoPGludD4+IG1hcDsKKworICAgICAgICBtYXAuZW5zdXJlKDEsIFsmXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICAgICAgcmV0dXJuIHJl
ZjsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxpbnQ+PiBtYXA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBs
ZWFrLiBObyBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAg
IG1hcC5hZGQoaSArIDEsIFdURk1vdmUocmVmKSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRSht
YXAuY29udGFpbnMoaSArIDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9TVFJF
USgiZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9y
LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDE7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1hcDEu
dmFsdWVzKCkpCisgICAgICAgICh2b2lkKXZhbHVlOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZNYXBwZWRUb05vblplcm9FbXB0eVZhbHVlKQoreworICAgIGNsYXNzIFZhbHVl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlKCkgPSBkZWZhdWx0OworICAgICAgICBWYWx1
ZShWYWx1ZSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZh
dWx0OworICAgICAgICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVlJiYpID0gZGVmYXVsdDsKKworICAg
ICAgICBWYWx1ZShpbnQzMl90IGYpCisgICAgICAgICAgICA6IG1fZmllbGQoZikKKyAgICAgICAg
eyB9CisKKyAgICAgICAgaW50MzJfdCBmaWVsZCgpIHsgcmV0dXJuIG1fZmllbGQ7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGludDMyX3QgbV9maWVsZCB7IDB4YmFkYmVlZiB9OworICAgIH07
CisKKyAgICBjbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKKyAgICAgICAgS2V5
KCkgPSBkZWZhdWx0OworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KTsgfQorICAgIH07CisKKyAgICBzdGF0aWNf
YXNzZXJ0KCFXVEY6Okhhc2hUcmFpdHM8VmFsdWU+OjplbXB0eVZhbHVlSXNaZXJvLCAiIik7CisK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPEtleT4sIFZh
bHVlLCBSb2Jpbkhvb2RIYXNoPFJlZjxLZXk+Pj4gbWFwOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
UmVmPEtleT4sIGludDMyX3Q+PiB2ZWN0b3JNYXA7CisKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7
IGkgPCAxNjA7ICsraSkgeworICAgICAgICBSZWY8S2V5PiBrZXkgPSBLZXk6OmNyZWF0ZSgpOwor
ICAgICAgICBtYXAuYWRkKFJlZjxLZXk+KGtleS5nZXQoKSksIFZhbHVlIHsgaSB9KTsKKyAgICAg
ICAgdmVjdG9yTWFwLmFwcGVuZCh7IFdURk1vdmUoa2V5KSwgaSB9KTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIHBhaXIgOiB2ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9FUShwYWlyLnNlY29u
ZCwgbWFwLmdldChwYWlyLmZpcnN0KS5maWVsZCgpKTsKKworICAgIGZvciAoYXV0byYgcGFpciA6
IHZlY3Rvck1hcCkKKyAgICAgICAgQVNTRVJUX1RSVUUobWFwLnJlbW92ZShwYWlyLmZpcnN0KSk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9FbXB0eSkKK3sKKyAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAu
cmFuZG9tKCk7CisgICAgQVNTRVJUX0VRKHJlc3VsdCwgbWFwLmVuZCgpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX1dyYXBBcm91bmQpCit7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgWmVyb0hh
c2g8dW5zaWduZWQ+LCBCaWdUYWJsZUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFw
LmFkZCgxLCAxKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbWFwLnJhbmRvbSgpOworICAgIEFTU0VS
VF9FUShyZXN1bHQsIG1hcC5iZWdpbigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgUmFuZG9tX0lzRXZlbmx5RGlzdHJpYnV0ZWQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1
bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBt
YXA7CisgICAgbWFwLmFkZCgwLCAwKTsKKyAgICBtYXAuYWRkKDEsIDEpOworCisgICAgdW5zaWdu
ZWQgemVyb3MgPSAwOworICAgIHVuc2lnbmVkIG9uZXMgPSAwOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgp
OworICAgICAgICBpZiAoIWl0LT52YWx1ZSkKKyAgICAgICAgICAgICsremVyb3M7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAg
ICAgKytvbmVzOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX0VRKHplcm9zICsgb25l
cywgMTAwMHUpOworICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgQVNTRVJUX0xFKG9u
ZXMsIDYwMHUpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZXNlcnZlSW5pdGlh
bENhcGFjaXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbWFwOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDB1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBtYXAucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVY
UEVDVF9FUSgxNjM4NHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgOTk5OTsgKytpKQorICAgICAgICBtYXAuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtl
U3RyaW5nKCJiYXIiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMTYzODR1LCBtYXAuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUobWFw
LmNvbnRhaW5zKCJmb28zIl9zdHIpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhcjMiLCBtYXAuZ2V0
KCJmb28zIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5
OTk5OyArK2kpCisgICAgICAgIG1hcC5hZGQobWFrZVN0cmluZygiZXhjZXNzIiwgaSksIG1ha2VT
dHJpbmcoImJheiIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUgKyA5OTk5dSwgbWFwLnNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUo
bWFrZVN0cmluZygiZm9vIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkp
OworICAgIEVYUEVDVF9FUSgzMjc2OHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfU1RS
RVEoImJhejMiLCBtYXAuZ2V0KCJleGNlc3MzIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5y
ZW1vdmUobWFrZVN0cmluZygiZXhjZXNzIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5z
aXplKCkpOworICAgIEVYUEVDVF9FUSg4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAyOwor
ICAgIG1hcDIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0Uo
bWFwMi5yZW1vdmUoImZvbzEiX3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsg
KytpKQorICAgICAgICBtYXAyLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSwgbWFrZVN0cmluZygi
YmFyIiwgaSkpOworICAgIEVYUEVDVF9FUSgyMDAwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVD
VF9FUSgxNjM4NHUsIG1hcDIuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDIwMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwMi5yZW1vdmUobWFrZVN0cmluZygi
Zm9vIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoOHUsIG1hcDIuY2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAs
IFJhbmRvbV9Jc0V2ZW5seURpc3RyaWJ1dGVkQWZ0ZXJSZW1vdmUpCit7CisgICAgZm9yIChzaXpl
X3QgdGFibGVTaXplID0gMjsgdGFibGVTaXplIDw9IDIgKiA2OyArK3RhYmxlU2l6ZSkgeyAvLyBP
dXIgaGFzaCB0YWJsZXMgc2hyaW5rIGF0IGEgbG9hZCBmYWN0b3Igb2YgMSAvIDYuCisgICAgICAg
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWdu
ZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVuc2lnbmVkPj4gbWFwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
YmxlU2l6ZTsgKytpKQorICAgICAgICAgICAgbWFwLmFkZChpLCBpKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDI7IGkgPCB0YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5yZW1vdmUo
aSk7CisKKyAgICAgICAgdW5zaWduZWQgemVyb3MgPSAwOworICAgICAgICB1bnNpZ25lZCBvbmVz
ID0gMDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Cisg
ICAgICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOworICAgICAgICAgICAgaWYgKCFpdC0+
dmFsdWUpCisgICAgICAgICAgICAgICAgKyt6ZXJvczsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDF1KTsKKyAgICAgICAgICAgICAgICAr
K29uZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfRVEoemVy
b3MgKyBvbmVzLCAxMDAwdSk7CisgICAgICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAg
ICAgIEFTU0VSVF9MRShvbmVzLCA2MDB1KTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3RPYmplY3RX
aXRoQ3VzdG9tRGVzdHJ1Y3RvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgVGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKEZ1bmN0aW9uPHZvaWQoKT4m
JiBydW5JbkRlc3RydWN0b3IpCisgICAgICAgIDogbV9ydW5JbkRlc3RydWN0b3IoV1RGTW92ZShy
dW5JbkRlc3RydWN0b3IpKQorICAgIHsgfQorCisgICAgflRlc3RPYmplY3RXaXRoQ3VzdG9tRGVz
dHJ1Y3RvcigpCisgICAgeworICAgICAgICBtX3J1bkluRGVzdHJ1Y3RvcigpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fcnVuSW5EZXN0cnVjdG9yOworfTsKKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgQ2xlYXJfUmVlbnRlcikKK3sKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0
cjxUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3I+LCBSb2Jpbkhvb2RIYXNoPHVpbnQ2NF90
Pj4gbWFwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gMTA7ICsraSkgeworICAgICAg
ICBtYXAuYWRkKGksIG1ha2VVbmlxdWU8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yPihb
Jm1hcF0geworICAgICAgICAgICAgbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
MFUsIG1hcC5zaXplKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7
CisgICAgICAgIH0pKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKDEwVSwgbWFwLnNpemUoKSk7Cisg
ICAgbWFwLmNsZWFyKCk7CisgICAgRVhQRUNUX0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShtYXAuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
QWRkQW5kSWRlbnRpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJp
bmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLnNl
dChzdHJpbmcuaW1wbCgpLCBpbmRleCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICAgICAgRVhQRUNUX0VRKHJlc3VsdC5pdGVyYXRvci0+a2V5LCBzdHJpbmcu
aW1wbCgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIExhcmdlUmVt
b3ZhbCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVm
UHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZD4gbWFwOworICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmlu
Zzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgbWFwLnNldChzdHJpbmcuaW1wbCgpLCBpbmRleCk7
CisgICAgfQorICAgIEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAxZTQpOworICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBpZiAoaW5kZXgg
JiAweDEpIHsKKyAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgp
OworICAgICAgICAgICAgYm9vbCByZW1vdmVkID0gbWFwLnJlbW92ZShzdHJpbmcuaW1wbCgpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbW92ZWQpOworICAgICAgICB9CisgICAgfQorICAg
IEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAxZTQgLyAyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJp
bmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGlmIChpbmRleCAmIDB4MSkKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRShtYXAuY29udGFpbnMoc3RyaW5nLmltcGwoKSkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gbWFwLmdldChzdHJpbmcuaW1wbCgpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgaW5kZXgpOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7Cisg
ICAgICAgIGlmICghKGluZGV4ICYgMHgxKSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBT
dHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVt
b3ZlKHN0cmluZy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDB1KTsKKyAgICBFWFBF
Q1RfRVEobWFwLmNhcGFjaXR5KCksIDh1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29k
SGFzaFNldC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNo
U2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45N2NhNGFkOWUyYzAyOTQwZjI1ZDlkMzlkNDQ3YjhhOTMzMjcx
MzRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9i
aW5Ib29kSGFzaFNldC5jcHAKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiRGVs
ZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgiCisjaW5jbHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRl
ICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNp
bmNsdWRlIDx3dGYvU3RvcHdhdGNoLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
dGVtcGxhdGU8aW50IGluaXRpYWxDYXBhY2l0eT4KK3N0cnVjdCBJbml0aWFsQ2FwYWNpdHlUZXN0
SGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGlu
dD4geworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IGluaXRpYWxDYXBh
Y2l0eTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUm9iaW5Ib29kSGFzaCA6
IHB1YmxpYyBEZWZhdWx0SGFzaDxUPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hh
c2hJblZhbHVlID0gdHJ1ZTsKK307CisKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FwYWNp
dHlGb3JTaXplKHVuc2lnbmVkIHNpemUpCit7CisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBXVEY6
OnJvdW5kVXBUb1Bvd2VyT2ZUd28oc2l6ZSk7CisgICAgaWYgKHNpemUgKiAxMDAgPj0gY2FwYWNp
dHkgKiA5NSkKKyAgICAgICAgcmV0dXJuIGNhcGFjaXR5ICogMjsKKyAgICByZXR1cm4gY2FwYWNp
dHk7Cit9CisKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+Cit2b2lkIHRlc3RJbml0aWFsQ2FwYWNp
dHkoKQoreworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkgPSBjYXBhY2l0
eUZvclNpemUoc2l6ZSk7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PGludCwgUm9iaW5Ib29kSGFzaDxpbnQ+LCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0
czxpbml0aWFsQ2FwYWNpdHk+PiB0ZXN0U2V0OworCisgICAgLy8gSW5pdGlhbCBjYXBhY2l0eSBp
cyBudWxsLgorICAgIEFTU0VSVF9FUSgwdSwgdGVzdFNldC5jYXBhY2l0eSgpKTsKKworICAgIC8v
IEFkZGluZyBpdGVtcyB1cCB0byBzaXplIHNob3VsZCBuZXZlciBjaGFuZ2UgdGhlIGNhcGFjaXR5
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIHRlc3RT
ZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEoaW5pdGlhbENhcGFjaXR5LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSk7CisgICAgfQorCisgICAgLy8gQWRkaW5n
IGl0ZW1zIHVwIHRvIG1vcmUgdGhhbiA5NSUgb2YgdGhlIGNhcGFjaXR5IHNob3VsZCBub3QgY2hh
bmdlIHRoZSBjYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBjYXBhY2l0eUxpbWl0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6Y2VpbChpbml0aWFsQ2FwYWNpdHkgKiAwLjk1KSk7CisgICAgZm9y
IChzaXplX3QgaSA9IHNpemU7IGkgPCBjYXBhY2l0eUxpbWl0OyArK2kpIHsKKyAgICAgICAgdGVz
dFNldC5hZGQoaSk7CisgICAgICAgIEFTU0VSVF9FUShpbml0aWFsQ2FwYWNpdHksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpKTsKKyAgICB9CisKKyAgICAvLyBBZGRp
bmcgb25lIG1vcmUgaXRlbSBpbmNyZWFzZSB0aGUgY2FwYWNpdHkuCisgICAgdGVzdFNldC5hZGQo
aW5pdGlhbENhcGFjaXR5KTsKKyAgICBFWFBFQ1RfR1Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRl
c3RTZXQuY2FwYWNpdHkoKSksIGluaXRpYWxDYXBhY2l0eSk7Cit9CisKK3RlbXBsYXRlPHVuc2ln
bmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKTsKK3Rl
bXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPigpCit7
Cit9Cit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBh
Y2l0eVVwVG9TaXplKCkKK3sKKyAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPHNpemUg
LSAxPigpOworICAgIHRlc3RJbml0aWFsQ2FwYWNpdHk8c2l6ZT4oKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaFNldCwgSW5pdGlhbENhcGFjaXR5KQoreworICAgIGdlbmVyYXRlVGVzdENh
cGFjaXR5VXBUb1NpemU8MTI4PigpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBN
b3ZlT25seSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
TW92ZU9ubHk+IGhhc2hTZXQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytp
KSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgaGFzaFNldC5h
ZGQoV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgMTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuY29udGFpbnMoTW92ZU9u
bHkoaSArIDEpKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAg
ICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAg
IEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hTZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJV
RShoYXNoU2V0LnRha2UoTW92ZU9ubHkoaSArIDEpKSA9PSBNb3ZlT25seShpICsgMSkpOworCisg
ICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgaGFzaFNldC5hZGQoTW92ZU9ubHkoaSArIDEpKTsK
KworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxNb3ZlT25seT4g
c2Vjb25kU2V0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAg
ICAgc2Vjb25kU2V0LmFkZChoYXNoU2V0LnRha2VBbnkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRSho
YXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICBFWFBFQ1RfVFJVRShzZWNvbmRTZXQuY29udGFpbnMoTW92ZU9ubHkoaSArIDEp
KSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5KQorewor
ICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKwor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9w
dHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlx
dWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gc2V0OworCisgICAgYXV0byB1
bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Cisg
ICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
KworICAgIHNldC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjxpbnQ+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0OworCisg
ICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+
KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIHNldC5hZGQoV1RGTW92
ZSh1bmlxdWVQdHIpKTsKKworICAgIGF1dG8gaXQgPSBzZXQuZmluZChwdHIpOworICAgIEFTU0VS
VF9UUlVFKGl0ICE9IHNldC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmdldCgpKTsK
KyAgICBFWFBFQ1RfRVEoNSwgKml0LT5nZXQoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hTZXQsIFVuaXF1ZVB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4s
IFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBzZXQ7CisKKyAgICBhdXRvIHVu
aXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNSk7CisgICAg
aW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0
cikpOworCisgICAgRVhQRUNUX0VRKHRydWUsIHNldC5jb250YWlucyhwdHIpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRl
cikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2Nv
cGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0
ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsKKyAgICBh
dXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0
KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0LnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9F
USh0cnVlLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7Cisg
ICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1
ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7CisKKyAgICBhdXRvIHVu
aXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAg
ICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7Cisg
ICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
KworICAgIGF1dG8gcmVzdWx0ID0gc2V0LnRha2UocHRyKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBy
ZXN1bHQuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIHJlc3VsdCA9IG51
bGxwdHI7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoU2V0LCBDb3B5RW1wdHkpCit7CisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBm
b287CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNp
Z25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGJhcihmb28pOworCisgICAgICAgIEVYUEVD
VF9FUSgwdSwgYmFyLmNhcGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5zaXpl
KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGZvbyh7IDEsIDUs
IDY0LCA0MiB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDR1LCBmb28uc2l6ZSgpKTsKKyAgICAgICAg
Zm9vLnJlbW92ZSgxKTsKKyAgICAgICAgZm9vLnJlbW92ZSg1KTsKKyAgICAgICAgZm9vLnJlbW92
ZSg0Mik7CisgICAgICAgIGZvby5yZW1vdmUoNjQpOworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+
PiBiYXIoZm9vKTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5jYXBhY2l0eSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hTZXQsIENvcHlBbGxvY2F0ZUF0TGVhc3RNaW5pbXVtQ2FwYWNpdHkpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jp
bkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vKHsgNDIgfSk7CisgICAgRVhQRUNUX0VRKDF1LCBmb28u
c2l6ZSgpKTsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5z
aWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgIEVYUEVDVF9F
USg4dSwgYmFyLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9FUSgxdSwgYmFyLnNpemUoKSk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIENvcHlDYXBhY2l0eUlzTm90T25Cb3VuZGFy
eSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHNpemUgPSA0OyBzaXplIDwgMTAwOyArK3NpemUpIHsK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gc291cmNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgc2l6ZSArIDE7ICsraSkKKyAgICAgICAgICAgIHNvdXJjZS5hZGQoaSk7CisK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29weTEoc291cmNlKTsKKyAgICAgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNo
PHVuc2lnbmVkPj4gY29weTIoc291cmNlKTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29w
eTMoc291cmNlKTsKKworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwgY29weTEuc2l6ZSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkyLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShz
aXplLCBjb3B5My5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6
ZSArIDE7ICsraSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29weTEuY29udGFpbnMoaSkp
IDw8IGk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb3B5Mi5jb250YWlucyhpKSkgPDwgaTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkzLmNvbnRhaW5zKGkpKSA8PCBpOworICAgICAg
ICB9CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5MS5jb250YWlucyhzaXplICsgMikpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoY29weTIuY29udGFpbnMoc2l6ZSArIDIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKGNvcHkzLmNvbnRhaW5zKHNpemUgKyAyKSk7CisKKyAgICAgICAgRVhQRUNUX1RS
VUUoY29weTIucmVtb3ZlKDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5KCks
IGNvcHkyLmNhcGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTIuY29udGFpbnMo
MSkpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkzLmFkZChzaXplICsgMikuaXNOZXdFbnRy
eSk7CisgICAgICAgIGlmICgoY29weTEuY2FwYWNpdHkoKSAqIDAuOTUpIDw9IGNvcHkxLnNpemUo
KSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpICogMiwgY29weTMuY2Fw
YWNpdHkoKSkgPDwgY29weTEuc2l6ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBF
Q1RfRVEoY29weTEuY2FwYWNpdHkoKSwgY29weTMuY2FwYWNpdHkoKSkgPDwgY29weTEuc2l6ZSgp
OworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5jb250YWlucyhzaXplICsgMikpOworICAgIH0K
K30KKworc3RydWN0IERlcmVmT2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRDsKKyAgICBORVZFUl9JTkxJTkUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgKytj
b3VudDsKKyAgICB9CisgICAgTkVWRVJfSU5MSU5FIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAg
ICAgLS1jb3VudDsKKyAgICAgICAgb2JzZXJ2ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQo
KTsKKyAgICB9CisgICAgdW5zaWduZWQgY291bnQgeyAxIH07CisgICAgY29uc3QgUmVmUHRyPERl
cmVmT2JzZXJ2ZXI+KiBidWNrZXRBZGRyZXNzIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IERlcmVm
T2JzZXJ2ZXIqIG9ic2VydmVkQnVja2V0IHsgbnVsbHB0ciB9OworfTsKKworVEVTVChXVEZfUm9i
aW5Ib29kSGFzaFNldCwgUmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCit7CisgICAgYXV0byBv
YnNlcnZlciA9IG1ha2VVbmlxdWU8RGVyZWZPYnNlcnZlcj4oKTsKKworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4sIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+Pj4gc2V0OworICAgIHNldC5hZGQoYWRvcHRS
ZWYob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuZmluZChvYnNl
cnZlci5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoaXRlcmF0b3IgIT0gc2V0LmVuZCgpKTsKKwor
ICAgIG9ic2VydmVyLT5idWNrZXRBZGRyZXNzID0gaXRlcmF0b3IuZ2V0KCk7CisKKyAgICBFWFBF
Q1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNU
X1RSVUUoc2V0LnJlbW92ZShvYnNlcnZlci5nZXQoKSkpOworCisgICAgLy8gSXQgaWYgZmluZSB0
byBlaXRoZXIgbGVhdmUgdGhlIG9sZCB2YWx1ZSBpbnRhY3QgYXQgZGVsZXRpb24gb3IgYWxyZWFk
eSBzZXQgaXQgdG8gdGhlIGRlbGV0ZWQKKyAgICAvLyB2YWx1ZS4KKyAgICAvLyBBIHplcm8gd291
bGQgYmUgYSBpbmNvcnJlY3Qgb3V0Y29tZSBhcyBpdCB3b3VsZCBtZWFuIHdlIG51bGxlZCB0aGUg
YnVja2V0IGJlZm9yZSBhbiBvcGFxdWUKKyAgICAvLyBjYWxsLgorICAgIEVYUEVDVF9UUlVFKG9i
c2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2Jz
ZXJ2ZWRCdWNrZXQgPT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpQdHJUcmFpdHM6Omhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpKTsKKyAgICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7Cit9
CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyTm90WmVyb2VkQmVmb3Jl
RGVzdHJ1Y3RvcikKK3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9ic2VydmVyIHsKKyAgICAgICAg
fkRlc3RydWN0b3JPYnNlcnZlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9ic2VydmUoKTsK
KyAgICAgICAgfQorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gb2JzZXJ2ZTsKKyAgICB9
OworCisgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4qIGJ1Y2tl
dEFkZHJlc3MgPSBudWxscHRyOworICAgIGNvbnN0IERlc3RydWN0b3JPYnNlcnZlciogb2JzZXJ2
ZWRCdWNrZXQgPSBudWxscHRyOworICAgIGJvb2wgZGVzdHJ1Y3RvckNhbGxlZCA9IGZhbHNlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9yT2JzZXJ2ZXI+IG9ic2VydmVyKG5ldyBEZXN0
cnVjdG9yT2JzZXJ2ZXIgeyBbJl0oKSB7CisgICAgICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0
QWRkcmVzcy0+Z2V0KCk7CisgICAgICAgIGRlc3RydWN0b3JDYWxsZWQgPSB0cnVlOworICAgIH19
KTsKKworICAgIGNvbnN0IERlc3RydWN0b3JPYnNlcnZlciogb2JzZXJ2ZXJBZGRyZXNzID0gb2Jz
ZXJ2ZXIuZ2V0KCk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8c3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4sIFJvYmluSG9vZEhhc2g8c3Rk
Ojp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4+PiBzZXQ7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBzZXQuYWRkKFdURk1vdmUob2JzZXJ2ZXIpKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlZEJ1Y2tldCA9PSBudWxs
cHRyKTsKKyAgICBFWFBFQ1RfRkFMU0UoZGVzdHJ1Y3RvckNhbGxlZCk7CisKKyAgICBidWNrZXRB
ZGRyZXNzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLmdldCgpOworCisgICAgRVhQRUNUX1RSVUUob2Jz
ZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX0ZBTFNFKGRlc3RydWN0b3JDYWxs
ZWQpOworICAgIEVYUEVDVF9UUlVFKHNldC5yZW1vdmUoKmFkZFJlc3VsdC5pdGVyYXRvcikpOwor
CisgICAgRVhQRUNUX1RSVUUoZGVzdHJ1Y3RvckNhbGxlZCk7CisgICAgRVhQRUNUX1RSVUUob2Jz
ZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXJBZGRyZXNzIHx8IG9ic2VydmVkQnVja2V0ID09IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVzdHJ1Y3Rvck9ic2VydmVyKj4oLTEpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgUmVmKQoreworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAg
ICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVm
KSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9n
Z2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQocmVmLmNvcHlSZWYoKSk7CisgICAg
fQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEi
KTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVm
PFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAg
ICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7
CisgICAgICAgIHNldC5yZW1vdmUoJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+
PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRk
KFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgYXV0byBhT3V0ID0gc2V0LnRha2UoJmEpOworICAg
ICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxib29sPihhT3V0KSk7CisgICAgICAgIEFTU0VS
VF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNl
dDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RG
TW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFPdXQgPSBzZXQudGFrZUFueSgpOworICAgICAg
ICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxib29sPihhT3V0KSk7CisgICAgICAgIEFTU0VSVF9F
USgmYSwgYU91dC5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9v
ZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisgICAgICAgIGF1dG8gZW1wdHlUYWtlID0gc2V0
LnRha2VBbnkoKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKHN0YXRpY19jYXN0PGJvb2w+KGVtcHR5
VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAg
ICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dl
cj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJl
ZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisKKyAgICAg
ICAgQVNTRVJUX1RSVUUoc2V0LmNvbnRhaW5zKCZhKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgewor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxv
Z2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0
aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFrLiBObyBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vl
c3MuCisgICAgICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxv
Z2dlcigiYSIpKTsKKyAgICAgICAgICAgIGF1dG8qIHBvaW50ZXIgPSByZWYucHRyKCk7CisgICAg
ICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShz
ZXQuY29udGFpbnMocG9pbnRlcikpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9TVFJF
USgiZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZM
b2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNl
dDsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1v
dmUocmVmKSk7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDIoc2V0
KTsKKyAgICB9CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aFNldCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxEZWxldGVkQWRkcmVzc09mT3BlcmF0b3I+IHNldDE7Cisg
ICAgc2V0MS5hZGQoMTApOworCisgICAgc2V0MS5yZW1vdmUoMTApOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoU2V0LCBSZW1vdmVSYW5kb20pCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4g
c2V0MSB7IDEsIDIsIDMgfTsKKyAgICBzZXQxLnJlbW92ZShzZXQxLnJhbmRvbSgpKTsKKyAgICBz
ZXQxLnJlbW92ZShzZXQxLnJhbmRvbSgpKTsKKyAgICBzZXQxLnJlbW92ZShzZXQxLnJhbmRvbSgp
KTsKKyAgICBBU1NFUlRfVFJVRShzZXQxLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hTZXQsIFJlc2VydmVJbml0aWFsQ2FwYWNpdHkpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gc2V0OworICAgIEVYUEVDVF9FUSgw
dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAg
ICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNl
dC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytpKQorICAgICAgICBzZXQuYWRkKG1ha2VTdHJp
bmcoImZvbyIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIHNldC5zaXplKCkpOworICAgIEVY
UEVDVF9FUSgxNjM4NHUsIHNldC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShzZXQuY29u
dGFpbnMoImZvbzMiX3N0cikpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kp
CisgICAgICAgIHNldC5hZGQobWFrZVN0cmluZygiZXhjZXNzIiwgaSkpOworICAgIEVYUEVDVF9F
USg5OTk5dSArIDk5OTl1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBzZXQu
Y2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAg
ICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZShtYWtlU3RyaW5nKCJmb28iLCBpKSkpOworICAgIEVY
UEVDVF9FUSg5OTk5dSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDMyNzY4dSwgc2V0LmNh
cGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAg
IEVYUEVDVF9UUlVFKHNldC5yZW1vdmUobWFrZVN0cmluZygiZXhjZXNzIiwgaSkpKTsKKyAgICBF
WFBFQ1RfRVEoMHUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSg4dSwgc2V0LmNhcGFjaXR5
KCkpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4gc2V0MjsKKyAgICBzZXQyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHNldDIucmVtb3ZlKCJmb28xIl9zKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDIwMDA7ICsraSkKKyAgICAgICAgc2V0Mi5hZGQobWFrZVN0cmluZygiZm9vIiwgaSkpOwor
ICAgIEVYUEVDVF9FUSgyMDAwdSwgc2V0Mi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUs
IHNldDIuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7ICsraSkK
KyAgICAgICAgRVhQRUNUX1RSVUUoc2V0Mi5yZW1vdmUobWFrZVN0cmluZygiZm9vIiwgaSkpKTsK
KyAgICBFWFBFQ1RfRVEoMHUsIHNldDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoOHUsIHNldDIu
Y2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIEFkZEFuZElkZW50
aXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWZQ
dHI8U3RyaW5nSW1wbD4+IHNldDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihp
bmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChzdHJpbmcuaW1wbCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBFWFBFQ1RfRVEo
KnJlc3VsdC5pdGVyYXRvciwgc3RyaW5nLmltcGwoKSk7CisgICAgfQorfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoU2V0LCBMYXJnZVJlbW92YWwpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gc2V0OworICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRv
IHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgc2V0LmFkZChzdHJpbmcu
aW1wbCgpKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIDFlNCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlm
IChpbmRleCAmIDB4MSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJl
cihpbmRleCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBzZXQucmVtb3ZlKHN0cmluZy5p
bXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIDFlNCAvIDIpOworICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKQorICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhzdHJpbmcuaW1wbCgpKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhzdHJpbmcuaW1w
bCgpKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0
OyArK2luZGV4KSB7CisgICAgICAgIGlmICghKGluZGV4ICYgMHgxKSkgeworICAgICAgICAgICAg
YXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgICAgICBib29sIHJl
bW92ZWQgPSBzZXQucmVtb3ZlKHN0cmluZy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RS
VUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCks
IDB1KTsKKyAgICBFWFBFQ1RfRVEoc2V0LmNhcGFjaXR5KCksIDh1KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424961</attachid>
            <date>2021-04-01 16:46:49 -0700</date>
            <delta_ts>2021-04-01 23:40:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401164648.patch</filename>
            <type>text/plain</type>
            <size>301186</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MzE1YWVlYjI3YTZmYWM5MjQ3YTA3MjllYjlmNjE0ZDMzMTFiYWRhLi44Y2JiZTA5ZDYzMzk3ZDIx
Zjc2MDE3YmY2MmM1ZGQzMGQ1MDRjZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbCBQaXpsby4KKworICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1l
cy5jcHA6CisgICAgICAgIChKU0M6Omxvb2tVcFByaXZhdGVOYW1lSW1wbCk6CisgICAgICAgIChK
U0M6Omxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aDoKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2FsZUludmFy
aWFudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50bERpc3BsYXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bExpc3RGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6aW5pdGlh
bGl6ZUxpc3RGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAg
ICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZCk6CisgICAgICAgIChKU0M6Omlu
dGxBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bENvbGxhdG9yQXZhaWxhYmxl
TG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1
cE1hdGNoZXIpOgorICAgICAgICAoSlNDOjpiZXN0Rml0TWF0Y2hlcik6CisgICAgICAgIChKU0M6
OnJlc29sdmVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpz
dXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50
bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUGx1cmFs
UnVsZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFJlbGF0aXZlVGltZUZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsTGlzdEZvcm1hdEF2YWls
YWJsZUxvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBD
YWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwS2V5Lmg6CisKIDIwMjEtMDQtMDEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
NzQ3MjQpOiBKSVRDYWdlIHRyYW1wb2xpbmUgbmVlZHMgdG8gYmUgYWRqdXN0ZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYjRl
MmUxNzJkZDRkYmUyZjhjY2NkN2U2ZDEyYTVmOTNmZDI0OTc2Ni4uYWQ2ZmE1N2IxZDU5NzM0ZDI4
NzZmMzBkMDg2NmZmNjY3N2YyYjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNTAgQEAKKzIwMjEtMDQtMDEg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRy
b2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWwgUGl6bG8u
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIFJvYmluSG9vZEhhc2hUYWJsZVsxXS4g
V2UgZG9uJ3QgdXNlIGl0IGFzIGEgZGVmYXVsdCBoYXNodGFibGUgc2luY2UgaXQgaGFzIGRpZmZl
cmVudCBwZXJmb3JtYW5jZSB2LnMuIG1lbW9yeS1zYXZpbmcgY2hhcmFjdGVyaXN0aWNzLAorICAg
ICAgICBhbmQgdGhpcyBwYXRjaCdzIGdvYWwgaXMgbm90IHRhY2tsaW5nIG9uIG1ha2luZyB0aGlz
IGRlZmF1bHQuIFJhdGhlciwgdGhlIGdvYWwgb2YgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBp
dCB0byBub24tcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGFyZWEgcXVpY2tseQorICAgICAgICBzbyB0
aGF0IHdlIGNhbiBzYXZlIG1lbW9yeS4gUm9iaW5Ib29kSGFzaFRhYmxlIG1vcmUgZnJlcXVlbnRs
eSBjb21wdXRlcyBoYXNoIHZhbHVlIGNvbXBhcmVkIHRvIEhhc2hUYWJsZSwgc28gdGhpcyBpcyBu
b3QgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGV4aXN0aW5nCisgICAgICAgIG9uZS4gQnV0
IHN0aWxsLCB0aGlzIGlzIHVzZWZ1bCBzaW5jZSB3ZSBrbm93IHRoYXQgIndoaWxlIHRoZXJlIGFy
ZSBtYW55IHNtYWxsIEhhc2hUYWJsZXMgYW5kIHRoZXkgaG9sZHMgbXVjaCBtZW1vcnksIHRoZXJl
IGFyZSBzdXBlciBsYXJnZSBIYXNoVGFibGVzIGFuZAorICAgICAgICB0aGV5IGhvbGRzIGFsbW9z
dCBzYW1lIGFtb3VudCBvZiBtZW1vcnkgd2hpbGUgdGhleSBhcmUgYSBmZXcuIi4gVGhpcyBwYXRj
aCdzIGdvYWwgaXMgYXBwbHlpbmcgdGhpcyBSb2Jpbkhvb2RIYXNoVGFibGUgdG8gdGhlc2UgImxh
cmdlLCBidXQgYSBmZXciIHNpbmdsZXRvbiB0YWJsZXMuCisKKyAgICAgICAgUm9iaW5Ib29kSGFz
aFRhYmxlIG1haW50YWlucyBkaXN0YW5jZS1mcm9tLWluaXRpYWwtYnVja2V0IChESUIpIHNtYWxs
IGJ5IGFkanVzdGluZyBleGlzdGluZyBlbnRyaWVzIHdoZW4gaW5zZXJ0aW5nLiBXaGVuIGluc2Vy
dGluZywgaWYgd2UgZm91bmQgdGhhdCB0aGUKKyAgICAgICAgZXhpc3RpbmcgZW50cnkgaGFzIGxl
c3MgRElCIHRoYW4gdGhlIGN1cnJlbnQgaW5zZXJ0aW5nIGVudHJ5J3MgRElCLCB0aGVuIHdlIHN3
YXAgZW50cmllcywgYW5kIGluc2VydCB0aGUgZXhpc3RpbmcgZW50cnkgdG8gdGhlIG90aGVyIHBs
YWNlLiBUaGlzIGlzIGdpdmluZworICAgICAgICBzb21lIGdvb2QgRElCIGZyb20gcmljaCBlbnRy
eSB0byBwb29yIGVudHJ5ICh0aGF0J3Mgd2h5IGl0IGlzIGNhbGxlZCBSb2Jpbkhvb2QgSGFzaGlu
ZyksIGFuZCBtYWtpbmcgYXZlcmFnZSBESUIgbG93ZXIuIEFuZCB0aGlzIGFsZ29yaXRobSBhZGRz
IGdvb2QgaW52YXJpYW50CisgICAgICAgIHRoYXQsIHdoZW4gbG9va2luZyB1cCBhbiBlbnRyeSwg
YW5kIHdlIGZvdW5kIHRoYXQgZXhpc3RpbmcgZW50cnkgaGFzIHNtYWxsZXIgRElCLCB0aGVuIHdl
IGNhbiBzdG9wIHNlYXJjaGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjaGFpbiBzaW5jZSB3ZSBr
bm93IHRoYXQKKyAgICAgICAgd2Ugc2hvdWxkIHN3YXAgZW50cmllcyB3aGVuIHRoaXMgaGFwcGVu
ZWQgd2hlbiBpbnNlcnRpbmcuIFRoZXNlIHR3byB0cmlja3MgbWFpbnRhaW4gSGFzaFRhYmxlIHBl
cmZvcm1hbmNlIGV2ZW4gdW5kZXIgc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQgZmFjdG9yOiA5MCUg
bG9hZC1mYWN0b3IKKyAgICAgICAganVzdCB3b3Jrcy4gOTUlIGxvYWQtZmFjdG9yIHJlZ3Jlc3Mg
YWRkaW5nIHBlcmZvcm1hbmNlLCBidXQgc3RpbGwgaXQgZG9lcyBub3QgYmVjb21lIGNhdGFzdHJv
cGhpYyBjb21wYXJlZCB0byBub3JtYWwgb3Blbi1hZGRyZXNzaW5nIEhhc2hUYWJsZS4KKworICAg
ICAgICBXZSBpbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlLCBhbmQgYWRkaW5nIHNldmVyYWwg
a2luZHMgb2YgdGFibGVzIGJhc2VkIG9uIGxvYWQtZmFjdG9ycy4KKworICAgICAgICAxLiBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAg
ICAgIFRoaXMgaGFzIDk1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdWl0YWJsZSBmb3Igc2V0cyBh
bmQgbWFwcyB3aGljaCBpcyBtb3N0bHktY29uc3RhbnQ6IGNvbnN0cnVjdGluZyBvbmNlLCBhbmQg
bG9va2luZyB1cCByZXBlYXRlZGx5LiBJbiBXZWJLaXQsIHRoZXJlIGFyZSBzbworICAgICAgICAg
ICAgbWFueSB0aGlzIGtpbmQgb2YgdGFibGVzIGUuZy4gc2luZ2xldG9uIEhhc2hNYXAgZm9yIHZh
cmlvdXMga2luZHMgb2YgdGhpbmdzLiBXZSBjYW4gdXNlIHRoaXMgc3VwZXIgaGlnaCBsb2FkLWZh
Y3RvciB0YWJsZSBzbyB0aGF0IHdlIGNhbiBzYXZlIG1lbW9yeSBldmVuIHdoaWxlCisgICAgICAg
ICAgICB3ZSBhcmUgbWFpbnRhaW5zIGZhc3QgSGFzaFRhYmxlIGxvb2t1cC4KKworICAgICAgICAy
LiBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFNldCAvIEhhc2hNYXAKKworICAgICAgICAgICAg
VGhpcyBoYXMgOTAlIGxvYWQtZmFjdG9yLiBJdCBqdXN0IHdvcmtzLCBhbmQgd2UgY2FuIHRyeSB1
c2luZyBpdCBpZiBzZXRzIGFuZCBtYXBzIGFyZSBzaWduaWZpY2FudGx5IHBlcmZvcm1hbmNlIGlu
dGVuc2l2ZS4KKworICAgICAgICAzLiBGYXN0Um9iaW5Ib29kSGFzaFNldCAvIEhhc2hNYXAKKwor
ICAgICAgICAgICAgVGhpcyBoYXMgNzUlIGxvYWQtZmFjdG9yLiBUaGlzIGlzIHN0aWxsIGdvb2Qg
Y29tcGFyZWQgdG8gSGFzaFNldCBhbmQgSGFzaE1hcCBzaW5jZSB0aGV5IGFyZSB1c2luZyA1MCUg
bG9hZC1mYWN0b3IgZm9yIGxhcmdlIHNpemVkIHRhYmxlcy4gVGhpcyBoYXMgdmVyeSBzbGlnaHRs
eSBwZXJmb3JtYW5jZSByZWdyZXNzZWQKKyAgICAgICAgICAgIGNvbXBhcmVkIHRvIDUwJSBsb2Fk
LWZhY3RvciBsYXJnZSBIYXNoU2V0IGFuZCBIYXNoTWFwLCBidXQgaWYgdGhhdCBpcyBub3QgcGVy
Zm9ybWFuY2UgaW50ZW5zaXZlIChlLmcuIEF0b21TdHJpbmdUYWJsZSBpcyBvbmUgb2YgdGhlIG1v
c3QgcGVyZm9ybWFuY2UgaW50ZW5zaXZlIHRhYmxlKSwgdGhpcyBpcyBnb29kLgorCisgICAgICAg
IEluIHRoaXMgcGF0Y2gsIHdlIHJlcGxhY2UgbWFueSBzaW5nbGV0b24gSGFzaFNldCAvIEhhc2hN
YXAgd2l0aCBSb2Jpbkhvb2RIYXNoVGFibGUuCisKKyAgICAgICAgWzFdOiBodHRwczovL3d3dy5z
ZWJhc3RpYW5zeWx2YW4uY29tL3Bvc3Qvcm9iaW4taG9vZC1oYXNoaW5nLXNob3VsZC1iZS15b3Vy
LWRlZmF1bHQtaGFzaC10YWJsZS1pbXBsZW1lbnRhdGlvbi8KKworICAgICAgICAqIFdURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi9IYXNoTWFwLmg6CisgICAgICAg
IChXVEY6Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAgIChXVEY6Olk+OjplbmQp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAgICAoV1RGOjpZPjo6Zmlu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
VEY6Olk+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5saW5lR2V0IGNvbnN0KToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpzZXQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6CisgICAgICAgIChXVEY6OlRh
YmxlVHJhaXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6
ZW5zdXJlKToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olk+Ojpy
ZW1vdmVJZik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olk+Ojp0
YWtlKToKKyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAg
ICAoV1RGOjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46OnN3YXApOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Olg+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc0VtcHR5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2luKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5k
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRhaW5zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRU
cmFpdHNBcmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFp
dHNBcmc+OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjppbmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjphZGQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpyZW1vdmVJ
Zik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpzd2FwKToKKyAgICAgICAg
KFdURjo6Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y2FwYWNpdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RG
OjpXPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRh
YmxlVHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olc+OjphZGQpOgorICAgICAgICAoV1RGOjpXPjo6YWRk
Vm9pZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6
Vz46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olc+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6
Olc+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olc+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vz46
OnRha2VBbnkpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlRhYmxlVHJhaXRzPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojppc1ZhbGlkVmFs
dWUpOgorICAgICAgICAoV1RGOjo9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNoZWNrQ29u
c2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpWPjo6c3dhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlY+OjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNh
cGFjaXR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzRW1wdHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YmVnaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmZp
bmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y29udGFpbnMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6VHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpUcmFpdHM+OjplbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YWRkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZFZvaWQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpUcmFpdHM+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6cmVtb3ZlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZUlmKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnRha2UpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZUFueSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlRyYWl0cz46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6aXNWYWxpZFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Vj46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6YWRkSXRlcmF0b3IpOgorICAgICAg
ICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgIChXVEY6OmludmFsaWRhdGVJdGVyYXRv
cnMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6On5IYXNoVGFibGUpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmlubGluZUxv
b2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Omxvb2t1cEZvcldyaXRpbmcpOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjpmdWxsTG9va3VwRm9yV3JpdGluZyk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2lu
Z0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0
ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRl
cmF0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0
ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRk
ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICog
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5k
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1w
dHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRl
bGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2Vw
dFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91
bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNvbXB1dGVUYWJs
ZUhhc2gpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkU2hyaW5rIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaHJpbmspOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlbGV0ZUJ1Y2tldCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wNC0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjI3NTI2Nyk6IFtHVEtdW1dQRV0gMTIgbmV3IGNyYXNoZXMg
b24gc2VydmljZS13b3JrZXJzIGxheW91dCB0ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE3YWViYWVkMDg3
OGQzYmZkNGM0NWMxOTExMWExZDE0MDI1NDk0OWMuLjg4MDRkYzIxODlkZjU4NjRjZGQ5NmU1YjNk
MWY5NjliYzhlNTFkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAyMS0wNC0wMSAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEludHJv
ZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbCBQaXpsby4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVja2V0TUlNRVR5cGVzKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cG9wdXBWYWx1ZSBjb25zdCk6CisgICAgICAgICogZG9tL0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdCk6Cisg
ICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5w
bDoKKyAgICAgICAgKHByaW50TmFtZXNIZWFkZXJGaWxlKToKKyAgICAgICAgKHByaW50RmFjdG9y
eUNwcEZpbGUpOgorICAgICAgICAocHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUpOgorICAgICAg
ICAqIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
RWxlbWVudEZvckZvcm1hdEJsb2NrKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29t
bWFuZCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZCk6CisgICAgICAgICog
aHRtbC9BdXRvZmlsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWVsZE5hbWVNYXApOgorICAg
ICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZlbnRzUGFyZW50T2JqZWN0RnJv
bUV4cG9zdXJlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2FzZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1
c3RTVkdUYWdOYW1lQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OmFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFk
ZE5hbWVzV2l0aFByZWZpeCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9EZWJ1Z1BhZ2VPdmVy
bGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uT3ZlcmxheTo6ZHJhd1JlY3Qp
OgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5jdGlvbk1hcCk6
CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VCYWNr
c2xhc2hBc1llblNpZ25Gb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnZhbGlkSW5pdERhdGFUeXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvVVRJUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN1cHBvcnRlZElt
YWdlVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVv
Q29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBv
cnRlZEF1ZGlvQ29kZWNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcHBlckZpbHRlck1hc2tlclRhZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6bWFya2VyVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsQW5kU3Ry
b2tlVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpjaGFpbmFibGVSZXNvdXJjZVRhZ3MpOgorICAg
ICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
Omhhc0VmZmVjdGl2ZURpc3BsYXlOb25lRm9yRGlzcGxheUNvbnRlbnRzKToKKyAgICAgICAgKiBz
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRp
b25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVy
dHlJRE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjphbmltYXRhYmxlQXR0cmli
dXRlRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlk
Rm9yU1ZHQXR0cmlidXRlTmFtZSk6CisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjphZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAg
KiBzdmcvU1ZHVGVzdHMuaDoKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBbGxvd2VkRWxlbWVudFNldCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0Rpc2FsbG93ZWRFbGVtZW50KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Ojppc1N1cHBvcnRl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVGdW5jdGlvbk1hcCk6CisgICAgICAgICogeG1sL1hQYXRo
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpjcmVhdGVBeGlzTmFtZXNNYXAp
OgorCiAyMDIxLTA0LTAxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDM4MS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOTc1
ZDQ4OTk5YjE3MWY3Y2M3YzQ1ZDg3ODc2YzY3NDNlOGFjZmNlMy4uOWFiNjc5ODZkZTYzYjYwZGQ2
ZjRlMzA2MjJmZTkwMTJjZDgxNmE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0w
NC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZd
IEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbCBQ
aXpsby4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERv
bWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRV
bmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVk
Q29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVRhYmxlUXVlcmllcyk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL0NvY29h
L0RlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRBcHBCb3Vu
ZERvbWFpbnNUZXN0aW5nKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmU6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vzcyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorCiAyMDIxLTA0LTAxICBCSiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIHYyOiBSRUdSRVNTSU9OKHIyNjY4OTApOiBbQ29jb2Fd
IEZpeCBBUEk6Okluc3BlY3RvckNsaWVudCBsZWFrCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluTmFtZXMuY3BwCmluZGV4IDJhMDg4N2U3M2U1NzFmMDA4ZTg4NGRi
MzQzMDQ4NmQzNDIwMDcyMjAuLjdmOGFlNGYxNDBlZTc0M2QwZmU1ZjM5NTQzODdiZTNjZmQ2ZDVm
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMu
Y3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IENoYXJCdWZmZXJTZWFjaGVyIHsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgUHJpdmF0ZVN5bWJvbElt
cGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0cmluZz4mIHNldCwgY29u
c3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikK
K3N0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBsKGNvbnN0IEJ1
aWx0aW5OYW1lczo6UHJpdmF0ZU5hbWVTZXQmIHNldCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRv
ckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9y
ID0gc2V0LmZpbmQ8Q2hhckJ1ZmZlclNlYWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAg
ICAgaWYgKGl0ZXJhdG9yID09IHNldC5lbmQoKSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMg
UHJpdmF0ZVN5bWJvbEltcGwqIGxvb2tVcFByaXZhdGVOYW1lSW1wbChjb25zdCBIYXNoU2V0PFN0
cmluZz4mIHNldCwgY29ucwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIFN5bWJvbEltcGwqIGxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN5bWJvbEltcGwqPiYgbWFwLCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hh
ckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFN5bWJvbEltcGwqIGxvb2tV
cFdlbGxLbm93blN5bWJvbEltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpXZWxsS25vd25TeW1ib2xN
YXAmIG1hcCwgY29uc3QgV1RGOjpIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4mIGJ1ZmZlcikKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQ8Q2hhckJ1ZmZlclNl
YWNoZXI8Q2hhcmFjdGVyVHlwZT4+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1hcC5l
bmQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaApp
bmRleCAzMTk0NWJmM2UxNmNkMzA0ZThkODgyOWIxOTk3MWRhN2NjY2UzOWEyLi4wMGQ5NmQzYzc0
NDVlYWE2YjQ4M2Q0MDlhZDRmODc4NWRiMzdjNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAi
Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCiAjaW5jbHVkZSAiSlNDQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0xOTksNiArMjAxLDkgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShCdWlsdGluTmFtZXMpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAKIHB1YmxpYzoKKyAgICB1c2luZyBQcml2YXRlTmFtZVNldCA9IE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+OworICAgIHVzaW5nIFdlbGxLbm93blN5
bWJvbE1hcCA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcs
IFN5bWJvbEltcGwqPjsKKwogICAgIEJ1aWx0aW5OYW1lcyhWTSYsIENvbW1vbklkZW50aWZpZXJz
Kik7CiAKICAgICBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWUoY29uc3QgSWRl
bnRpZmllciYpIGNvbnN0OwpAQCAtMjMyLDggKzIzNyw2IEBAIGNsYXNzIEJ1aWx0aW5OYW1lcyB7
CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1OYW1lOwogICAgIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciBtX2RvbGxhclZNUHJpdmF0ZU5hbWU7CiAgICAgY29uc3QgSlNDOjpJZGVu
dGlmaWVyIG1fcG9seVByb3RvUHJpdmF0ZU5hbWU7Ci0gICAgdXNpbmcgUHJpdmF0ZU5hbWVTZXQg
PSBIYXNoU2V0PFN0cmluZz47Ci0gICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFwID0gSGFzaE1h
cDxTdHJpbmcsIFN5bWJvbEltcGwqPjsKICAgICBQcml2YXRlTmFtZVNldCBtX3ByaXZhdGVOYW1l
U2V0OwogICAgIFdlbGxLbm93blN5bWJvbE1hcCBtX3dlbGxLbm93blN5bWJvbHNNYXA7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5LmgKaW5kZXggNWNmNGZhNTVjM2VlZWRlZjRmOGVhOTNjZDYxZDQ2NjFl
YjY3ZjgyYS4uNzg1N2RiYTAxMTU4YTc2ZjdlMDE2YTIzNzkzNTA1ZDZkYTViMzBjMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTIxMiw3ICsyMTMsNyBAQCBjbGFz
cyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5IHsKIAogcHJpdmF0ZToKICAgICBWTSYgbV92bTsK
LSAgICBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIEVudHJ5LCBJZGVudGlmaWVy
UmVwSGFzaD4gbV9ieXRlY29kZUludHJpbnNpY01hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgRW50cnksIElk
ZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmluc2ljTWFwOwogCiAjZGVmaW5lIEpTQ19E
RUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKG5hbWUpIFN0cm9u
ZzxVbmtub3duPiBtXyMjbmFtZTsKICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ19D
T05TVEFOVFNfU0lNUExFX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNf
Q09OU1RBTlRfR0VORVJBVE9SUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lkZW50aWZpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50
aWZpZXIuaAppbmRleCA0NGQxY2ZkYmQ0OTQ5MTZlZGJmZmQ0ZjMxNGY3Y2Q1ZmJmYjZmMTUzLi5h
ZTZkYmIwZjhmNTkyMzUwYTRjZjJlNDEwZGYwYmQyZGFiYzc4YTA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCkBAIC0yOTQsNiArMjk0LDcgQEAgSlNWYWx1
ZSBpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsK
IHN0cnVjdCBJZGVudGlmaWVyUmVwSGFzaCA6IFB0ckhhc2g8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3Ry
aW5nSW1wbD4mIGtleSkgeyByZXR1cm4ga2V5LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9
CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVW5pcXVlZFN0cmluZ0ltcGwqIGtleSkgeyByZXR1
cm4ga2V5LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKIH07CiAKIHN0cnVjdCBJZGVudGlmaWVyTWFw
SW5kZXhIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxpbnQ+IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCmluZGV4IDQ2NTUyNDhmMjgwNDkxMGU0YjRk
Y2MyMGU1YmJlOTE0ZTU4OWYxZWEuLmM4MmZhNjBlYjBjMjY3ZGFlNzAxODNjY2NhZWM4ZTk5YmY5
NTRhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgaWYg
KCFjYXNlRmlyc3RPcHRpb24uaXNOdWxsKCkpCiAgICAgICAgIGxvY2FsZU9wdGlvbnNbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpLZildID0gY2FzZUZpcnN0T3B0
aW9uOwogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxDb2xsYXRvckF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bENvbGxh
dG9yQXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxl
KGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxl
TWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktleTo6Q28sIFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpLZiwgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktuIH0sIGxvY2FsZURh
dGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CkBAIC00NDQsNyArNDQ0LDcg
QEAgYm9vbCBJbnRsQ29sbGF0b3I6OnVwZGF0ZUNhbkRvQVNDSUlVQ0FEVUNFVENvbXBhcmlzb24o
KSBjb25zdAogfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLXZvaWQgSW50bENvbGxhdG9yOjpjaGVj
a0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBsb2NhbGVzKQordm9p
ZCBJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQm
IGxvY2FsZXMpCiB7CiAgICAgZm9yIChhdXRvJiBsb2NhbGUgOiBsb2NhbGVzKSB7CiAgICAgICAg
IGF1dG8gY2hlY2tBU0NJSU9yZGVyaW5nV2l0aERVQ0VUID0gW10oY29uc3QgU3RyaW5nJiBsb2Nh
bGUsIFVDb2xsYXRvciYgY29sbGF0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bENvbGxhdG9yLmgKaW5kZXggMjRkNjE2MTY0OWFkOWZlN2Q0ZjcwYWU2YzI5YzgyYTdl
MmY5NmYyMy4uNWU1MmExYzkyNWMyZWQ0MDNjMTM3NTNjNWMxNzJjOWZjZDNlZjA5NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTI2LDcgKzI2
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUg
IkludGxPYmplY3QuaCIKICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9pY3UvSUNVSGVscGVycy5oPgogCkBAIC03Myw5ICs3Myw5IEBAIGNsYXNzIEludGxD
b2xsYXRvciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB9CiAKICNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIHN0YXRpYyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhj
b25zdCBIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0lDVUxvY2FsZUlu
dmFyaWFudHMoY29uc3QgTG9jYWxlU2V0Jik7CiAjZWxzZQotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjaGVja0lDVUxvY2FsZUludmFyaWFudHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JikgeyB9Cisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2Nh
bGVTZXQmKSB7IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKaW5kZXggZjUyZWJiMjIyYjM0
YmQ2YzBkNDM4MjliNTNiOTc1N2I5YTFmYzNiOS4uZjg5ODA2YzU2YjI2MDUyMmZjN2M3Yjk4YWY4
NTJjZjczM2Y4OTg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bERhdGVUaW1lRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVkPihS
ZWxldmFudEV4dGVuc2lvbktleTo6SGMpXSA9IFN0cmluZygpOwogICAgIH0KIAotICAgIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxEYXRlVGltZUZvcm1hdEF2
YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50
bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSBy
ZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyBSZWxldmFudEV4dGVuc2lvbktl
eTo6Q2EsIFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYywgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51
IH0sIGxvY2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWJiYTFiMDVjMmUzMmFjMGQxOGRkMTQzNmMz
NDg4NjQwZjcwYTRhOS4uYzA5MDliODkxZTk0MzBjMGRhNDM4YTEwNDgzYjBmMzJhMGYxMjk0NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBw
b3J0ZWRMb2NhbGVzT2YsIChKCiAgICAgLy8gMTIuMi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAg
ICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxh
YmxlTG9jYWxlc11dLgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cyA9IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRv
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
OwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxl
TGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlO
YW1lcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVz
LmNwcAppbmRleCAyMmExMTVkMTM5ZjZjNWIyNDVlZGViYTgwOWUyOGU5ODY3NjgwYjgzLi4wZGU1
NzQyOTM0NWFkODFkYWU0MTYwZWFkZGI1MDk3YzY0MjBjMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcApAQCAtODMsNyArODMs
NyBAQCB2b2lkIEludGxEaXNwbGF5TmFtZXM6OmluaXRpYWxpemVEaXNwbGF5TmFtZXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07
CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJs
ZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERpc3Bs
YXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxv
Y2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxv
Y2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xv
Y2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwCmluZGV4IGQx
ZjA2NmYwYTA5MzM3NjkxMWRiMTBiODhmYWE5ZjQ1ZjM1YjU2OGMuLjE3ZTA3OWZlNzdkYTBhMDdj
NDM3ZTBlZTdhNmQ5ODNmYmVjYzM3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcApAQCAt
MTEyLDcgKzExMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsRGlzcGxheU5hbWVz
Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLWludGwtZGlzcGxheW5hbWVzLyNzZWMtSW50bC5EaXNwbGF5TmFtZXMu
c3VwcG9ydGVkTG9jYWxlc09mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAl
RGlzcGxheU5hbWVzJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxl
cygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVz
QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUg
Q2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1
ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bExpc3RGb3JtYXQuY3BwCmluZGV4IDgxN2I5Y2FlNTkzNGFmNzY1NTQ2MzJkZTk5NTc2ODVl
MDkwYTMwOTIuLjg4MGVkMjZlNzNhZmUxY2E5NDQ3NzQ1YmVlZmFmOWI1ZDM2ZjQxODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAg
LTEwMyw3ICsxMDMsNyBAQCB2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1h
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1h
dEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0g
aW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJl
c29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IH0sIGxvY2FsZURhdGEpOwogCiAg
ICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4
IDQ3ZTVlZTIzZGJmMWUwYjAzOWMzY2FmMDc4MGYxYjY0M2Q1YzEyYzkuLjAwOGU5M2Q4Y2JhY2Iy
NjdlMGRmMGU2Nzk4YmRhNzIyMjE1YTNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0x
MTIsNyArMTEyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0Q29u
c3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE8KICAgICAvLyBodHRwczovL3Rj
MzkuZXMvcHJvcG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVMaXN0
Rm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAg
ICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVM
b2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxp
emVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2Fs
ZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuY3BwCmluZGV4IDAwN2M5ZDMwMjcxNWE1ODMyODU3NjBkY2M3MGIyZDRlZjlmMDU4
Y2IuLmYwMzUwYzg0MzhkNzdlYmU3YTVmOTI3NDkwN2UzY2I0MmEzN2U1ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCkBAIC0y
OTIsNyArMjkyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9y
bWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgbG9jYWxlT3B0
aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0gPSBu
dW1iZXJpbmdTeXN0ZW07CiAgICAgfQogCi0gICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxh
YmxlTG9jYWxlcyA9IGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgYXV0
byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7IFJlbGV2
YW50RXh0ZW5zaW9uS2V5OjpOdSB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVz
b2x2ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWM1YjI5M2FmY2Rh
ZTJlYjYyZWJiYzI2NDQzNzlhZjU5MzIxMTBmMC4uZjIxYTY5MjZmMzFlZDdhYWYyNWU4ZmQ0OWQ5
OTdjMWQ1OTFmMTM4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMjYsNyArMTI2
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0cKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAy
LjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5b
W2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJs
ZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0
IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRl
eCA0MGY4OWU4ZmU3NGU4ZGJjZjBlNTgzNTBhYmVjMWY3YTg1ZDhiZGU0Li45ZDUzNmQ3NGMwMTlk
MThkYTc1ODM3ZDU5YWI3Mzg3OTZlZWQ2MDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIFN0cmluZyBsYW5ndWFn
ZVRhZ0ZvckxvY2FsZUlEKGNvbnN0IGNoYXIqIGxvY2FsZUlELCBib29sIGlzSW1tb3J0YWwpCiB9
CiAKIC8vIEVuc3VyZSB3ZSBoYXZlIHh4LVpaIHdoZW5ldmVyIHdlIGhhdmUgeHgtWXl5eS1aWi4K
LXN0YXRpYyB2b2lkIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIFN0cmluZ1ZpZXcgbG9jYWxlKQorc3RhdGljIHZvaWQgYWRkU2Ny
aXB0bGVzc0xvY2FsZUlmTmVlZGVkKExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5n
VmlldyBsb2NhbGUpCiB7CiAgICAgaWYgKGxvY2FsZS5sZW5ndGgoKSA8IDEwKQogICAgICAgICBy
ZXR1cm47CkBAIC0zNzcsOSArMzc3LDkgQEAgc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVzc0xvY2Fs
ZUlmTmVlZGVkKEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW4KICAgICBh
dmFpbGFibGVMb2NhbGVzLmFkZChTdHJpbmdJbXBsOjpjcmVhdGVTdGF0aWNTdHJpbmdJbXBsKGJ1
ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKIH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVM
b2NhbGVzKCkKIHsKLSAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5n
Pj4gYXZhaWxhYmxlTG9jYWxlczsKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2Fs
ZVNldD4gYXZhaWxhYmxlTG9jYWxlczsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlh
bGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7CiAgICAg
ICAgIGF2YWlsYWJsZUxvY2FsZXMuY29uc3RydWN0KCk7CkBAIC00NTUsOSArNDU1LDkgQEAgY29u
c3QgdWludDhfdCBkdWNldFdlaWdodHNbMTI4XSA9IHsKICAgICA5NSwgOTcsIDk5LCAyMSwgMzYs
IDIyLCAzNywgMCwKIH07CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZh
aWxhYmxlTG9jYWxlcygpCitjb25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxv
Y2FsZXMoKQogewotICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+
PiBhdmFpbGFibGVMb2NhbGVzOworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxl
U2V0PiBhdmFpbGFibGVMb2NhbGVzOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFs
aXplT25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZSwgWyZdIHsKICAgICAg
ICAgYXZhaWxhYmxlTG9jYWxlcy5jb25zdHJ1Y3QoKTsKQEAgLTQ3NiwyMiArNDc2LDIxIEBAIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCiAgICAg
cmV0dXJuIGF2YWlsYWJsZUxvY2FsZXM7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50
bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKQorY29uc3QgTG9jYWxlU2V0JiBpbnRsU2VnbWVu
dGVyQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hT
ZXQ8U3RyaW5nPj4gY2FjaGVkQXZhaWxhYmxlTG9jYWxlczsKLSAgICBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMgPSBjYWNoZWRBdmFpbGFibGVMb2NhbGVzLmdldCgpOwotCisgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9v
bmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewotICAgICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxl
cy5pc0VtcHR5KCkpOworICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0cnVjdCgpOworICAg
ICAgICBBU1NFUlQoYXZhaWxhYmxlTG9jYWxlcy0+aXNFbXB0eSgpKTsKICAgICAgICAgY29uc3Rl
eHByIGJvb2wgaXNJbW1vcnRhbCA9IHRydWU7CiAgICAgICAgIGludDMyX3QgY291bnQgPSB1YnJr
X2NvdW50QXZhaWxhYmxlKCk7CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgICAgIFN0cmluZyBsb2NhbGUgPSBsYW5ndWFnZVRhZ0ZvckxvY2Fs
ZUlEKHVicmtfZ2V0QXZhaWxhYmxlKGkpLCBpc0ltbW9ydGFsKTsKICAgICAgICAgICAgIGlmIChs
b2NhbGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
YXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKLSAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NM
b2NhbGVJZk5lZWRlZChhdmFpbGFibGVMb2NhbGVzLCBsb2NhbGUpOworICAgICAgICAgICAgYXZh
aWxhYmxlTG9jYWxlcy0+YWRkKGxvY2FsZSk7CisgICAgICAgICAgICBhZGRTY3JpcHRsZXNzTG9j
YWxlSWZOZWVkZWQoYXZhaWxhYmxlTG9jYWxlcy5nZXQoKSwgbG9jYWxlKTsKICAgICAgICAgfQog
ICAgIH0pOwogICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzOwpAQCAtNjk4LDcgKzY5Nyw3IEBA
IFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhCiAgICAgcmV0dXJuIHNlZW47CiB9CiAKLVN0cmluZyBi
ZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgU3RyaW5nJiBsb2NhbGUpCitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZyYgbG9jYWxlKQogewog
ICAgIHJldHVybiBiZXN0QXZhaWxhYmxlTG9jYWxlKGxvY2FsZSwgWyZdKGNvbnN0IFN0cmluZyYg
Y2FuZGlkYXRlKSB7CiAgICAgICAgIHJldHVybiBhdmFpbGFibGVMb2NhbGVzLmNvbnRhaW5zKGNh
bmRpZGF0ZSk7CkBAIC03NjMsNyArNzYyLDcgQEAgU3RyaW5nIHJlbW92ZVVuaWNvZGVMb2NhbGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNo
ZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1
ZXN0ZWRMb2NhbGVzKQogewogICAgIC8vIExvb2t1cE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAy
LyNzZWMtbG9va3VwbWF0Y2hlcgpAQCAtODA0LDcgKzgwMyw3IEBAIHN0YXRpYyBNYXRjaGVyUmVz
dWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFz
aFNldDxTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVz
dEZpdE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVk
TG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1h
dGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6
Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdG1hdGNoZXIKQEAgLTgyNSw3ICs4
MjQsNyBAQCBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHJlbGV2YW50RXh0ZW5zaW9uS2V5U3RyaW5n
KFJlbGV2YW50RXh0ZW5zaW9uS2V5IGtleSkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxs
KCk7CiB9CiAKLVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciBsb2NhbGVN
YXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxlT3B0aW9ucyYgb3B0aW9ucywgc3RkOjppbml0aWFs
aXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZl
Y3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNp
b25LZXkpKQorUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIs
IGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8UmVsZXZhbnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0
cmluZz4gKCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkp
CiB7CiAgICAgLy8gUmVzb2x2ZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucywgcmVsZXZhbnRFeHRlbnNpb25LZXlzLCBsb2NhbGVEYXRhKQogICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXJlc29sdmVsb2NhbGUKQEAgLTg5
MCw3ICs4ODksNyBAQCBSZXNvbHZlZExvY2FsZSByZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPgogICAgIHJldHVybiByZXNvbHZl
ZDsKIH0KIAotc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0Fy
cmF5KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gTG9va3VwU3VwcG9ydGVkTG9jYWxlcyAoYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0
aHViLmlvL2VjbWE0MDIvI3NlYy1sb29rdXBzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MTksNyArOTE4
LDcgQEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFMKICAgICByZXR1cm4gc3Vic2V0OwogfQogCi1z
dGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBKU0FycmF5KiBiZXN0
Rml0U3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBM
b2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzKQogewogICAgIC8vIEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVM
b2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTQwMi8jc2VjLWJlc3RmaXRzdXBwb3J0ZWRsb2NhbGVzCkBAIC05MjgsNyArOTI3LDcgQEAg
c3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IEhhc2gKICAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxl
cyhnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogfQog
Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCitKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxl
U2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCiB7CiAgICAgLy8gU3VwcG9ydGVkTG9jYWxlcyAo
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKICAgICAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1zdXBwb3J0ZWRsb2NhbGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKaW5kZXggZmEyZTgyODA3OGI3ZTg1
MWE3NzFkYzBhMDgwZmI2YTY4NWExMmFlZC4uNjE0MGMyMGQ2ZmQzZThlOGI1Mjg5NzVkNjM4NDhm
ZjE4M2ZjYWI3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAK
IHN0cnVjdCBVRmllbGRQb3NpdGlvbkl0ZXJhdG9yOwogCkBAIC04MSwxNSArODIsMTYgQEAgY2xh
c3MgSW50bE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIH07CiAKIFN0
cmluZyBkZWZhdWx0TG9jYWxlKEpTR2xvYmFsT2JqZWN0Kik7Ci1jb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGludGxBdmFpbGFibGVMb2NhbGVzKCk7Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxD
b2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxh
YmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGlzcGxh
eU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxOdW1iZXJGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4g
aW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
aW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxv
Y2FsZXMoKTsgfQordXNpbmcgTG9jYWxlU2V0ID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz47Citjb25zdCBMb2NhbGVTZXQmIGludGxBdmFpbGFibGVMb2Nh
bGVzKCk7Citjb25zdCBMb2NhbGVTZXQmIGludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKTsK
K2NvbnN0IExvY2FsZVNldCYgaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKK2lubGlu
ZSBjb25zdCBMb2NhbGVTZXQmIGludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7
IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0
JiBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFi
bGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxOdW1iZXJGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5s
aW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQm
IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2
YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bExpc3RGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQog
CiBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIE9wdGlvbmFsPEpT
T2JqZWN0Jj4gb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0eU5h
bWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFy
KiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpAQCAtMTA3LDEwICsxMDksMTAgQEAg
c3RydWN0IFJlc29sdmVkTG9jYWxlIHsKICAgICBSZWxldmFudEV4dGVuc2lvbnMgZXh0ZW5zaW9u
czsKIH07CiAKLVJlc29sdmVkTG9jYWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyLCBjb25zdCBSZXNvbHZlTG9jYWxl
T3B0aW9ucyYsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4gcmVs
ZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0
cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSk7Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMp
OworUmVzb2x2ZWRMb2NhbGUgcmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IExv
Y2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3Rl
ZExvY2FsZXMsIExvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lv
bktleXMsIFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZh
bnRFeHRlbnNpb25LZXkpKTsKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVj
dCosIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHJlcXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CiBTdHJpbmcgcmVtb3ZlVW5p
Y29kZUxvY2FsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxvY2FsZSk7Ci1TdHJpbmcgYmVzdEF2
YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFN0cmluZyYgcmVxdWVzdGVkTG9jYWxlKTsKK1N0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxl
KGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0
ZWRMb2NhbGUpOwogdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPiBTdHJpbmcgYmVzdEF2YWls
YWJsZUxvY2FsZShjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSwgUHJlZGljYXRlKTsKIFZl
Y3RvcjxTdHJpbmc+IG51bWJlcmluZ1N5c3RlbXNGb3JMb2NhbGUoY29uc3QgU3RyaW5nJiBsb2Nh
bGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzLmNwcAppbmRleCBlNjVmYjBkNzMyNzE1MjliNWNhYTlkOWZhYmVjOWJlYmNiNGM1NmEyLi5j
Y2NmNDk3MTU4MThkZmQzMDI2OGEzMTdhZGFkYjhlOGRjYmFmNTM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTkzLDcgKzkz
LDcgQEAgdm9pZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHUKICAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1h
dGNoZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywg
dm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1h
dGNoZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9
IH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZp
dFwiIl9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVM
b2NhbGVzID0gaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7
CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25z
LCB7IH0sIGxvY2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAg
IGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yLmNwcAppbmRleCBm
ODg1MGIxMGE4YmZlNjU3MDQzZDJhMWVhZDA3MTEwNDFiOTIwNTkxLi4yN2IyMzEwYjM0OGExZTRh
NDVkZjBlZjkxMTUzYTllNDVlOGZmNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCkBAIC0x
MTUsNyArMTE1LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxQbHVyYWxSdWxlc0Nv
bnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEpTR2wKIAogICAgIC8vIDEzLjMuMiBJ
bnRsLlBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiAobG9jYWxlcyBbLCBvcHRpb25zIF0p
CiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW50bC5wbHVyYWxy
dWxlcy5zdXBwb3J0ZWRsb2NhbGVzb2YKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29u
c3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2Fs
ZXMoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQu
Y3BwCmluZGV4IGY3ZDM4YjgxZWFjODI4NjNmNWFkOGJjYzgzMjQ2NTI2OTI4MTc3NmUuLjJiNWQy
OGVmZDhjZThmMjdkNjU3NTg1MDJhMzEwOTgwNWI3MDczZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwCkBA
IC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
UmVsYXRpdmVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgbG9jYWxl
T3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51KV0g
PSBudW1iZXJpbmdTeXN0ZW07CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMo
KTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFJlbGF0aXZlVGltZUZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2Fs
ZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2Fs
ZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxv
Y2FsZURhdGEpOwogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwogICAgIGlmIChtX2xv
Y2FsZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCmlu
ZGV4IDE3NGI2ZmRjZTJjODZiZmMxMWI1ZWIxZWY1MzcyMDk4ZWE4OTg0OTQuLjlhOGM4ZDRjYTZj
NmM0ZWQzNWZmNzBlOTdlN2QzZWNjNGY1OWFlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdENv
bnN0cnVjdG9yLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihJbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
UmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygp
OwogCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsU2VnbWVudGVyLmNwcAppbmRleCAwNGNmMTdkNTA5MzU2MjFjNDI0OGU4
NDhiNzc1MGVkYTM3ZWE4MWU4Li4yYWQ3NGY5NGJiZThjYTE3Yzc3NTg5MmFmYmM2ZmVmNzEyYTYy
YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVu
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVy
LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIEludGxTZWdtZW50ZXI6OmluaXRpYWxpemVTZWdt
ZW50ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsbwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bFNl
Z21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bFNlZ21lbnRlckF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVk
ID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7
CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IGZmZDczZjczNmE5NzQzMzc4ZGZkYjFhMzFkNGJmOTlmOThkZWFlNTIuLjA5Mzk0ZGMxOGVk
ZGYyYTkzMTk1MWU3YzZmYWE5NzIyOGZiZjYzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcApAQCAt
MTExLDcgKzExMSw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsU2VnbWVudGVyQ29u
c3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChKU0dsb2JhbE9iCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLWludGwtc2VnbWVudGVyLyNzZWMtaW50bC5zZWdtZW50ZXIuc3VwcG9y
dGVkbG9jYWxlc29mCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlU2VnbWVu
dGVyJS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2
YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNv
bnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxl
cygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2Fj
aGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKaW5kZXgg
ODI3MzdkOGY5YzY4ZGUxOGU4N2Y1ZTU3Y2VhMGE2MDIxMGU4ODg4Ni4uM2E3MTFmYjkwOWI2OTBl
MGYxOWZlYTUxNzRjNjgwNThjYmU0YzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDYWNoZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgi
CiAjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgUmVnRXhwQ2FjaGUgZmluYWwgOiBwcml2YXRl
IFdlYWtIYW5kbGVPd25lciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKICAgICBm
cmllbmQgY2xhc3MgUmVnRXhwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8
UmVnRXhwPj4gUmVnRXhwQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBNZW1vcnlDb21wYWN0Um9iaW5I
b29kSGFzaE1hcDxSZWdFeHBLZXksIFdlYWs8UmVnRXhwPj4gUmVnRXhwQ2FjaGVNYXA7CiAKIHB1
YmxpYzoKICAgICBSZWdFeHBDYWNoZShWTSogdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBLZXkuaAppbmRleCBlMGY4ODMxMDIwZDZkOTM1YzcwMTkwMWZiNDliMjhjYjZk
YzkzOGZjLi5kMTY2Mjc5ZjZkYjJlY2VlYjJlM2U3MGIwN2Q5NjNiZWU0YWJlMjZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaApAQCAtNzEsNiArNzEsNyBAQCBz
dHJ1Y3QgUmVnRXhwS2V5IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVn
RXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUmVnRXhwS2V5JiBhLCBjb25zdCBSZWdFeHBLZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjZiNDVlNTUzYjA2N2UyNDAzMjdjYzg4Njdl
YzdjOGM4MTQ2N2U1Zi4uNWYzMGM5YTU2MTM3YjNjMzFkMzBkYmFiNTMxOTM5ZWIzYzg5OGE2MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MTcsNyArNzE3
LDkgQEAKIAkJRTMxMUZCMTYxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEdyb3VwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVm
ZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbmN1cnJlbnRC
dWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzFCREUyODIyRTkxM0ND
MDAyOUIxMDUgLyogTWFjaFZNU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY2hWTVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzFDRjBBNTI2MTA1
ODU4MDAzNkU2NzMgLyogUm9iaW5Ib29kSGFzaFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmlu
SG9vZEhhc2hUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFF
OUE1MzZEMDAzQjU5RDIgLyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmluSG9vZEhhc2hTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzJBMjA3MzIzQzU5MDJEMDAzNEEwOTIgLyogTmFrZWRSZWYuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmFrZWRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgsNiArNzQwLDcgQEAKIAkJRTNBMzJCQzMxRkM4
MzBFMjAwN0Q3RTc2IC8qIEpTVmFsdWVNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNWYWx1ZU1hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
M0I4RTQxQzI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVCcmVha0l0ZXJhdG9yUG9v
bElDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQkUwOUE2MjRBNTg1NDUw
MDlERjJCNCAvKiBJQ1VIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElDVUhlbHBlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0M1ODNDODI2MTI3QUREMDBDNTc1
NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNoTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQ0Y3NjkwMjExNUQ2QkEwMDkxREU0
OCAvKiBDb21wYWN0UG9pbnRlclR1cGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbXBhY3RQb2ludGVyVHVwbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFM0U2NEYwQjIyODEzNDI4MDAxRTU1QjQgLyogTm9ubW92YWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOb25tb3ZhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjExLDYg
KzEyMTQsOSBAQAogCQkJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLywK
IAkJCQlGRTM4NDIzNDIzMjVDQzgwMDA5REQ0NDUgLyogUmVzb3VyY2VVc2FnZS5oICovLAogCQkJ
CUE4QTQ3MzA1MTUxQTgyNUIwMDQxMjNGRiAvKiBSZXRhaW5QdHIuaCAqLywKKwkJCQlFM0M1ODND
ODI2MTI3QUREMDBDNTc1NjggLyogUm9iaW5Ib29kSGFzaE1hcC5oICovLAorCQkJCUUzMjU2MTEy
MjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmggKi8sCisJCQkJRTMxQ0YwQTUy
NjEwNTg1ODAwMzZFNjczIC8qIFJvYmluSG9vZEhhc2hUYWJsZS5oICovLAogCQkJCTJDREVEMEYx
MTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCAqLywKIAkJCQkyQ0RFRDBGMjE4MTE1Qzg1
MDA0REJBNzAgLyogUnVuTG9vcC5oICovLAogCQkJCTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAv
KiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGIzNWM3
NTJkMmMwMGUxYTUyMmQxNTQyZGE3ZWI2NWI2ZDJmYzkxNzguLmUxZmE1NDVhNDAxNzhlYTMyMzcw
ODkzOTYzYmI0ZGE4ZWY1ODhlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMTQsNiArMjE0
LDkgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFJlZlB0ci5oCiAgICAgUmVzb3VyY2VV
c2FnZS5oCiAgICAgUmV0YWluUHRyLmgKKyAgICBSb2Jpbkhvb2RIYXNoTWFwLmgKKyAgICBSb2Jp
bkhvb2RIYXNoU2V0LmgKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUuaAogICAgIFJ1bkxvb3AuaAog
ICAgIFNIQTEuaAogICAgIFNhdHVyYXRlZEFyaXRobWV0aWMuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IDQxOThl
ODY4ODk1YzdjZGQxNDU1NzBhMjE5MTJkNjVhYzYzNzg5YzQuLjNkOWViNzhiMzU4ZTczNWFjYmE1
MGE0MDY1MzE4NzY4YTczMmY1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTkzLDkgKzkzLDE1IEBAIHRlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRW51bVRyYWl0czsKIHRlbXBsYXRlPHR5cGVuYW1lIEUsIEUu
Li4+IHN0cnVjdCBFbnVtVmFsdWVzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJh
aXRzOwogCitzdHJ1Y3QgSGFzaFRhYmxlVHJhaXRzOworc3RydWN0IElkZW50aXR5RXh0cmFjdG9y
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPiBzdHJ1
Y3QgS2V5VmFsdWVQYWlyVHJhaXRzOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZywgdHlw
ZW5hbWUgVmFsdWVUeXBlQXJnPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyOwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4gY2xhc3MgSGFz
aFRhYmxlOwogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8
VmFsdWU+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWU+PiBjbGFzcyBIYXNoQ291bnRlZFNl
dDsKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0
eXBlbmFtZSA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4gY2xhc3MgSGFzaE1hcDsKLXRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlw
ZW5hbWUgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4gY2xhc3MgSGFzaFNldDsKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNo
PEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBlbmFtZSA9IEhhc2hU
cmFpdHM8TWFwcGVkQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hN
YXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxW
YWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4sIHR5cGVuYW1lID0gSGFz
aFRhYmxlVHJhaXRzPiBjbGFzcyBIYXNoU2V0OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0hhc2hNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCBiZjZiOGJh
YzRlZGIyZGZhMWY2Y2MwMGYzYmUxZjY0MWExMTg1YmNmLi44OTAxYjVmM2YyNzliOGJlMDM2NTBj
N2MyYWRlYjYxYjBhZWZhOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgK
KysrIGIvU291cmNlL1dURi93dGYvSGFzaE1hcC5oCkBAIC0zMSw3ICszMSw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewogICAgIHN0YXRp
YyBjb25zdCB0eXBlbmFtZSBUOjpLZXlUeXBlJiBleHRyYWN0KGNvbnN0IFQmIHApIHsgcmV0dXJu
IHAua2V5OyB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBl
ZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBN
YXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaE1hcCBm
aW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNTcsNyAr
NTcsNyBAQCBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKIAogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMg
PSBIYXNoQXJnOwogCi0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXlUeXBl
LCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3I8S2V5VmFsdWVQYWly
VHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0cywgS2V5VHJhaXRzPjsKKyAg
ICB1c2luZyBIYXNoVGFibGVUeXBlID0gdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc6OnRlbXBsYXRl
IFRhYmxlVHlwZTxLZXlUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlLCBLZXlWYWx1ZVBhaXJLZXlFeHRy
YWN0b3I8S2V5VmFsdWVQYWlyVHlwZT4sIEhhc2hGdW5jdGlvbnMsIEtleVZhbHVlUGFpclRyYWl0
cywgS2V5VHJhaXRzPjsKIAogICAgIGNsYXNzIEhhc2hNYXBLZXlzUHJveHk7CiAgICAgY2xhc3Mg
SGFzaE1hcFZhbHVlc1Byb3h5OwpAQCAtMjMyLDkxICsyMzIsODkgQEAgc3RydWN0IEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lk
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAoSGFzaE1hcCYgb3RoZXIpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6c3dh
cChIYXNoTWFwJiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNp
emUoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSB1bnNpZ25lZCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LnNpemUoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lu
bGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1p
bmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmJlZ2luKCkg
LT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1f
aW1wbC5iZWdpbigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6ZW5kKCkgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSAtPiBpdGVyYXRvcgog
ewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9y
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6YmVnaW4oKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBt
X2ltcGwuYmVnaW4oKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmVuZCgpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZW5kKCkg
Y29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChj
b25zdCBLZXlUeXBlJiBrZXkpIC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBLZXlUeXBl
JiBrZXkpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNv
bnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNv
bnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKIHsKICAgICByZXR1cm4g
bV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+
Ojpjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5jb250YWlucyhrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5s
aW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yCi1IYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IFRZUEUmIHZhbHVlKQoraW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgLT4gaXRlcmF0b3IK
IHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFw
dGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCi1IYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBX
LCBYLCBZPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IK
IHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFw
dGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBN
YXBwZWRQZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVU
eXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRy
eSkKQEAgLTMyNCw5ICszMjIsOSBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldChj
b25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKICAgICByZXR1cm4gTWFw
cGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVu
YW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldChjb25zdCBU
WVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK2F1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQ
ZWVrVHlwZQogewogICAgIGF1dG8qIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4o
bV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiAgICAgaWYgKCFlbnRy
eSkKQEAgLTMzNCwxNiArMzMyLDE2IEBAIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5s
aW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwCiAgICAgcmV0
dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUWVBFPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29u
dGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxL
ZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8g
SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRU
cmFpdHNBcmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lU2V0KEsmJiBrZXksIFYmJiB2YWx1
ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGlubGluZUFkZChzdGQ6
OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewpAQCAtMzUzLDkxICszNTEsOTEgQEAgYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46Omlu
bGluZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgog
dGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNo
TWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0
c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorQUxXQVlT
X0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0
c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5
LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
YWRkPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+
KHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBl
bmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIEY+Ci1B
TFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjppbmxpbmVFbnN1cmUoSyYmIGtleSwgRiYmIGZ1
bmN0b3IpIC0+IEFkZFJlc3VsdAorQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRy
YWl0c0FyZz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0
b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtl
eSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5jdG9yKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNB
cmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChjb25zdCBLZXlU
eXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1
bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0
CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChLZXlUeXBlJiYga2V5LCBUJiYg
bWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lU2V0KFdURk1vdmUoa2V5
KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJn
PgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1l
IFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0
CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLJiYga2V5LCBWJiYgdmFsdWUp
IC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hh
c2hDb2RlPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hU
cmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1
dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6YWRkKGNvbnN0IEtleVR5cGUm
IGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGluZUFkZChr
ZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0Fy
Zz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEtleVR5cGUmJiBr
ZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIGlubGluZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYm
IG1hcHBlZCkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxl
VHJhaXRzQXJnPjo6ZmFzdEFkZChjb25zdCBLZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFw
cGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcs
IEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFi
bGVUcmFpdHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJl
c3VsdAogewogICAgIHJldHVybiBpbmxpbmVBZGQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8
VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFw
cGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXks
IEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJh
aXRzQXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+
IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoa2V5LCBzdGQ6OmZvcndhcmQ8
RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVu
YW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtl
eSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywg
TWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVU
cmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFk
ZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3RkOjpmb3J3YXJkPEtleVR5cGU+
KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAgICAgCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
LCBZPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKIHsK
ICAgICByZXR1cm4gZ2V0PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0cz4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcs
IE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5cGVuYW1lIFk+CitBTFdBWVNf
SU5MSU5FIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+OjppbmxpbmVH
ZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIEtl
eVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBs
KS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsKICAg
ICBpZiAoIWVudHJ5KQpAQCAtNDQ1LDggKzQ0Myw4IEBAIEFMV0FZU19JTkxJTkUgYXV0byBIYXNo
TWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBr
CiAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OnJlbW92ZShpdGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBs
ID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU1LDI3ICs0NTMs
MjcgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJhdG9y
IGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlw
ZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1pbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihGdW5jdG9yJiYgZnVuY3RvcikKK2lubGluZSBib29s
IEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZUlmKEZ1bmN0b3ImJiBmdW5jdG9yKQog
ewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0
b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgor
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGNvbnN0IEtleVR5
cGUmIGtleSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjbGVhcigpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6
Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBL
ZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMsIHR5
cGVuYW1lIFk+CithdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzLCBZPjo6dGFr
ZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCiB7CiAgICAgaXRlcmF0b3Ig
aXQgPSBmaW5kKGtleSk7CiAgICAgaWYgKGl0ID09IGVuZCgpKQpAQCAtNDg1LDMwICs0ODMsMzAg
QEAgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OnRha2UoY29uc3QgS2V5
VHlwZSYga2V5KSAtPiBNYXBwZWRUYWtlVHkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVs
cGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+
Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xh
dG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVs
cGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNT
bWFydFB0cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZQoraW5saW5lIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0
clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0
aW9ucz4+KGtleSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlw
ZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y29udGFpbnModHlwZW5h
bWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJU
cmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KIHRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1pbmxpbmUgYXV0byBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJU
eXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6
dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYLCBZPjo6aW5saW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBr
ZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVl
LCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRyeSA9
IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9va3Vw
PEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtl
eSk7CiAgICAgaWYgKCFlbnRyeSkKQEAgLTUxNiwyMyArNTE0LDIzIEBAIGlubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46
OlB0clR5cGUKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5h
bWUgSz4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKK2F1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6Z2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBr
ZXkpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVl
LCBNYXBwZWRQZWVrVHlwZT46OnR5cGUKIHsKICAgICByZXR1cm4gaW5saW5lR2V0KGtleSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5h
bWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFt
ZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hNYXA8
VCwgVSwgViwgVywgWCwgWT46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5
cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwg
Ym9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlu
bGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnRha2UodHlwZW5hbWUgR2V0UHRySGVs
cGVyPEs+OjpQdHJUeXBlIGtleSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIE1hcHBlZFRha2VUeXBlPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkVGFrZVR5cGU+Ojp0eXBlCiB7CiAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAg
aWYgKGl0ID09IGVuZCgpKQpAQCAtNTQyLDE0ICs1NDAsMTQgQEAgaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhh
c2hNYXA8VCwgVSwgViwgVywgWD46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WCwgdHlwZW5hbWUgWT4KK2lubGluZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNo
ZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5jaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUg
WT4KK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzVmFsaWRLZXkoY29u
c3QgS2V5VHlwZSYga2V5KQogewogICAgIGlmIChLZXlUcmFpdHM6OmlzRGVsZXRlZFZhbHVlKGtl
eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2NSwxMyArNTYzLDEzIEBAIGlubGluZSBi
b29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlzVmFsaWRLZXkoY29uc3QgS2V5VHlwZSYga2V5
KQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywg
WD4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWCwg
WT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1h
cDxULCBVLCBWLCBXLCBYLCBZPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAKICAg
ICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVuZCgpOwogICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZv
dW5kID0gYi5lbmQoKTsKQEAgLTU4NCw4ICs1ODIsOCBAQCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYg
YgogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYSwgY29uc3QgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5o
CmluZGV4IDY4YTE1ZGMwMzc1YTE3MTljN2FiMzI0NjJjN2FkZjc5ZWQ2MGI0ZWYuLmE0MDJjZTI3
Mzc1YWNlYjBjZWIwNGY5ZWI1YTFlNDFhZDJjNjlmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTI3LDkgKzI3
LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRy
YWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgpAQCAtNDEs
NyArMzksNyBAQCBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICB1c2luZyBWYWx1ZVR5cGUgPSB0
eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBwcml2YXRlOgotICAgIHVzaW5nIEhh
c2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+OworICAgIHVz
aW5nIEhhc2hUYWJsZVR5cGUgPSB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFi
bGVUeXBlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKIAogcHVibGljOgogICAgIC8vIEhhc2hT
ZXQgaXRlcmF0b3JzIGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CkBAIC0xODYsMTA5ICsx
ODQsMTA5IEBAIHN0cnVjdCBIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3IgewogICAgIH0K
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxp
bmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CiAgICAgbV9p
bXBsLnN3YXAob3RoZXIubV9pbXBsKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6
ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OnNpemUoKSBj
b25zdAogewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQs
IFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwg
ViwgVz46OmNhcGFjaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7
IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNFbXB0eSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5pc0VtcHR5KCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YmVnaW4oKSBjb25zdCAtPiBp
dGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmJlZ2luKCkgY29uc3Qg
LT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNl
dDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0
PFQsIFUsIFYsIFc+OjplbmQoKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2lt
cGwuZW5kKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwg
Vz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmZpbmQodmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNv
bnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKHZhbHVlKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK2lubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+
OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0
b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0
cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5l
IGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29u
c3QgVCYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0VHJhbnNsYXRv
ckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5j
dG9yKSAtPiBBZGRSZXN1bHQKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgVGFibGVUcmFpdHM+OjplbnN1cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0
b3IpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hT
ZXRFbnN1cmVUcmFuc2xhdG9yQWRhcHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkKFZhbHVlVHlwZSYmIHZhbHVl
KSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxp
bmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5
cGUmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6YWRkVm9pZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFYsIFc+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQogewogICAgIG1faW1wbC5hZGQo
V1RGTW92ZSh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVU
cmFpdHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLWlu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25z
dCBUJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBB
ZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29k
ZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
Vj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9v
bCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5
cGUgZW5kKQogewogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JU
eXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTI5Niw5ICsyOTQsOSBA
QCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJ
dGVyYXRvclR5cGUgZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZT4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYs
IFc+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQogewogICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdp
bjsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTMwNiw4ICszMDQsOCBAQCBpbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUg
ZW5kKQogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6cmVtb3Zl
KGl0ZXJhdG9yIGl0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShp
dGVyYXRvciBpdCkKIHsKICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE2LDI3ICszMTQsMjcgQEAgaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHJldHVybiB0cnVlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
CiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpyZW1vdmVJZihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIHJldHVybiBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rv
cik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1p
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNl
dDxULCBVLCBWLCBXPjo6Y2xlYXIoKQogewogICAgIG1faW1wbC5jbGVhcigpOyAKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1
dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKIHsK
ICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgIHJldHVybiBWYWx1ZVRyYWl0czo6dGFrZShW
YWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKQEAgLTM0Niw0OCArMzQ0LDQ4IEBAIGlubGluZSBh
dXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+
Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IFRha2VUeXBlCiB7CiAgICAgcmV0dXJu
IHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+
IFRha2VUeXBlCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6dGFrZUFueSgpIC0+
IFRha2VUeXBlCiB7CiAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci1pbmxp
bmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5cGVu
YW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQoraW5saW5l
IGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9y
PFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6Y29udGFp
bnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKIHsK
ICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yPFRy
YWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhh
c2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQ
dHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OnJlbW92ZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiByZW1vdmUo
ZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFp
dHM+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5
cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVl
LCBUYWtlVHlwZT46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojp0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6
dmFsdWUsIFRha2VUeXBlPjo6dHlwZQogewogICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzVmFsaWRWYWx1ZShjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKQogewogICAgIGlmIChWYWx1ZVRyYWl0czo6aXNEZWxldGVkVmFs
dWUodmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDMsOSArNDAxLDkgQEAgaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYg
dmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgot
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxl
Y3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwg
ViwgVz46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTYsMjIgKzQxNCwyMiBAQCBpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xs
ZWN0aW9uKQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVz4KIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4K
LWlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0oY29uc3QgT3RoZXJDb2xs
ZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9u
KSBjb25zdAogewogICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci12b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK3ZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6
YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZh
bHVlVHlwZT4+IGxpc3QpCiB7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGxpc3QpCiAgICAgICAg
IGFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjaGVja0NvbnNpc3RlbmN5KCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3QKIHsKICAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCmluZGV4IDZkNGIyYzhmNzJiMmUwMzZjMTYwMDEwYzBhNjI5NTg3YzVlZGYwYTguLjEy
ZGQ4NDgyMmFhNTMwNjhjMzhkYzlmODQ5NjZiYWQ0YTQwYjNkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBA
IC03OSw0NiArNzksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKIAogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNo
VGFibGVJdGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
ICAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lk
IGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRk
SXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFz
aFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz4qKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlw
ZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxl
VHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4qKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9p
ZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhhc2hUYWJsZVR5cGUqKTsKIAogI2lmICFDSEVD
S19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIGFkZEl0
ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiosCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
KSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lk
IGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqLCBIYXNoVGFibGVDb25zdEl0ZXJhdG9y
PEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KikgeyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIHJlbW92
ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGU+CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKGNvbnN0IEhh
c2hUYWJsZVR5cGUqKSB7IH0KIAogI2VuZGlmCiAKICAgICB0eXBlZGVmIGVudW0geyBIYXNoSXRl
bUtub3duR29vZCB9IEhhc2hJdGVtS25vd25Hb29kVGFnOwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6
IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBz
dGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBp
dGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0
ZXJhdG9yOworICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOworICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOworICAg
ICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3Rf
aXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBl
ZGVmIGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAgICAgdHlwZWRlZiBjb25z
dCBWYWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz47Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgZnJp
ZW5kIEhhc2hUYWJsZVR5cGU7CisgICAgICAgIGZyaWVuZCBpdGVyYXRvcjsKIAogICAgICAgICB2
b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQogICAgICAgICB7CkBAIC0yNDMsMTggKzI0NSwxOCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlm
CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBWYWx1ZSosIFZhbHVlJj4g
ewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2YXRlOgotICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNo
VGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwg
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4g
aXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFi
bGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7
CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlJiBSZWZlcmVuY2VUeXBlOwogICAgICAgICB0eXBl
ZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjsKKyAgICAgICAgZnJpZW5kIEhhc2hUYWJsZVR5cGU7CiAKICAgICAgICAgSGFzaFRhYmxl
SXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRlclR5
cGUgZW5kKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kKSB7IH0KICAgICAgICAgSGFzaFRh
YmxlSXRlcmF0b3IoSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvcywgUG9pbnRl
clR5cGUgZW5kLCBIYXNoSXRlbUtub3duR29vZFRhZyB0YWcpIDogbV9pdGVyYXRvcih0YWJsZSwg
cG9zLCBlbmQsIHRhZykgeyB9CkBAIC0zNDcsOCArMzQ5LDkgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhh
c2hUYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9y
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3Rf
aXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25z
dF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBUcmFpdHMgVmFsdWVUcmFpdHM7CiAgICAgICAg
IHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwpA
QCAtNDA3LDcgKzQxMCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgICAgIEhhc2hUYWJsZSgpOwogICAgICAgICB+SGFzaFRhYmxlKCkg
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsgCisgICAgICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOyAKICAgICAgICAgICAgIGlmIChtX3RhYmxl
KQogICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxlKTsKICNpZiBDSEVDS19I
QVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OCkBAIC00MzUsNyArNDM4LDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAg
IGlmIChpc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwogCi0gICAgICAg
ICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICBhdXRvJiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxlU2l6
ZU1hc2soKV07CiAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T3JEZWxldGVkQnVja2V0KGJ1
Y2tldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlS25vd25Hb29kSXRlcmF0b3Io
JmJ1Y2tldCk7CkBAIC01NTksMTIgKzU2Miw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KICNlbmRpZgogCi0jaWYgQ0hFQ0tfSEFTSFRBQkxF
X0lURVJBVE9SUwotICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSNlbHNlCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KLSNlbmRpZgotCiAg
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7CkBAIC02OTQsNyArNjkxLDcgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0
YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCi0gICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBp
bGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaApAQCAtNzUwLDcgKzc0Nyw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAg
VmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSBudWxscHRyOwogCi0gICAgICAgIHdoaWxlICgxKSB7
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0g
dGFibGUgKyBpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCkBAIC04MTEsNyArODA4LDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAg
ICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IG51bGxwdHI7CiAKLSAgICAgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50
cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIHdlIGNvdW50IG9u
IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKQEAgLTg1Niw3ICs4NTMs
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
CiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKIAog
ICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogCkBAIC04NzYsNyArODcz
LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICNlbmRpZgogCiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsK
IAogICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKQEAgLTkzMiw3ICs5Mjks
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAg
aW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMp
OwogCiAgICAgICAgIGlmICghbV90YWJsZSkKICAgICAgICAgICAgIGV4cGFuZChudWxscHRyKTsK
QEAgLTk1OCw3ICs5NTUsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gbnVsbHB0
cjsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1p
emUgb3V0IHRoaXMgYnJhbmNoCkBAIC0xMDE3LDcgKzEwMTQsNyBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygp
OworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGlmICghbV90
YWJsZSkKICAgICAgICAgICAgIGV4cGFuZCgpOwpAQCAtMTExMCwxNCArMTEwNywxNCBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25z
aXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSogcG9zKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAgICBy
ZW1vdmUocG9zKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1v
dmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSogcG9zKQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogICAgICAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICByZW1vdmUocG9zKTsK
ICAgICB9CkBAIC0xMzczLDcgKzEzNzAsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNs
ZWFyKCkKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52
YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xNDA5LDggKzE0MDYsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OnN3YXAoSGFzaFRhYmxlJiBvdGhlcikKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnMoKTsKLSAgICAgICAgb3RoZXIuaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCZv
dGhlcik7CiAKICAgICAgICAgc3RkOjpzd2FwKG1fdGFibGUsIG90aGVyLm1fdGFibGUpOwogCkBA
IC0xNDM0LDcgKzE0MzEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICAsIG1fbXV0ZXgobWFrZVVuaXF1ZTxMb2NrPigpKQogI2Vu
ZGlmCiAgICAgewotICAgICAgICBvdGhlci5pbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAg
IGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBtX3RhYmxlID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX3RhYmxlLCBudWxscHRyKTsKIApAQCAtMTUwMCwzMCArMTQ5NywyOSBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAj
aWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRh
YmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUpCiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX211dGV4
KTsKLSAgICAgICAgY29uc3RfaXRlcmF0b3IqIG5leHQ7Ci0gICAgICAgIGZvciAoY29uc3RfaXRl
cmF0b3IqIHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jaygqdGFibGUtPm1fbXV0ZXgpOworICAgICAgICB0eXBlbmFtZSBIYXNoVGFi
bGVUeXBlOjpjb25zdF9pdGVyYXRvciogbmV4dDsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBIYXNo
VGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciogcCA9IHRhYmxlLT5tX2l0ZXJhdG9yczsgcDsgcCA9
IG5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBwLT5tX25leHQ7Ci0gICAgICAgICAgICBwLT5t
X3RhYmxlID0gMDsKLSAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBwLT5t
X3ByZXZpb3VzID0gMDsKKyAgICAgICAgICAgIHAtPm1fdGFibGUgPSBudWxscHRyOworICAgICAg
ICAgICAgcC0+bV9uZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSBu
dWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIG1faXRlcmF0b3JzID0gMDsKKyAgICAgICAgdGFi
bGUtPm1faXRlcmF0b3JzID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQg
YWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiB0YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiogaXQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2
b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUqIHRhYmxlLCBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKICAgICB7CiAgICAgICAgIGl0LT5tX3RhYmxl
ID0gdGFibGU7Ci0gICAgICAgIGl0LT5tX3ByZXZpb3VzID0gMDsKKyAgICAgICAgaXQtPm1fcHJl
dmlvdXMgPSBudWxscHRyOwogCiAgICAgICAgIC8vIEluc2VydCBpdGVyYXRvciBhdCBoZWFkIG9m
IGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMuCiAgICAgICAgIGlmICghdGFibGUpIHsK
LSAgICAgICAgICAgIGl0LT5tX25leHQgPSAwOworICAgICAgICAgICAgaXQtPm1fbmV4dCA9IG51
bGxwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKCp0YWJsZS0+bV9tdXRleCk7CiAgICAgICAgICAgICBBU1NFUlQodGFibGUtPm1faXRlcmF0
b3JzICE9IGl0KTsKQEAgLTE1MzYsOCArMTUzMiw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgotICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIHJlbW92ZUl0ZXJhdG9y
KEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qIGl0KQogICAgIHsKICAgICAg
ICAgLy8gRGVsZXRlIGl0ZXJhdG9yIGZyb20gZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9y
cy4KICAgICAgICAgaWYgKCFpdC0+bV90YWJsZSkgewpAQCAtMTU1OSwxMyArMTU1NSwxOCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaXQtPm1fdGFibGUgPSAwOwotICAgICAgICBp
dC0+bV9uZXh0ID0gMDsKLSAgICAgICAgaXQtPm1fcHJldmlvdXMgPSAwOworICAgICAgICBpdC0+
bV90YWJsZSA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX25leHQgPSBudWxscHRyOworICAgICAg
ICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgfQogCiAjZW5kaWYgLy8gQ0hFQ0tfSEFT
SFRBQkxFX0lURVJBVE9SUwogCisgICAgc3RydWN0IEhhc2hUYWJsZVRyYWl0cyB7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CisgICAgICAgIHVzaW5nIFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICB9OworCiAg
ICAgLy8gaXRlcmF0b3IgYWRhcHRlcnMKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJs
ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4gc3RydWN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JB
ZGFwdGVyIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
VmFsdWVUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWVUeXBlKiwgY29uc3QgVmFsdWVU
eXBlJj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oIGIv
U291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaE1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3YmUyMWZjNWI2
OWRhMjI2NjkwYTZiMjgwY2FlMDAwNGQxMjczNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gOTUlIGxvYWQt
ZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNB
cmcgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hU
cmFpdHM8TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcCA9IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hU
YWJsZVRyYWl0cz47CisKKy8vIDkwJSBsb2FkLWZhY3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8
S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+LCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+Cit1c2luZyBNZW1v
cnlDb21wYWN0Um9iaW5Ib29kSGFzaE1hcCA9IEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5I
b29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZh
dWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFy
Zz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8TWFwcGVkQXJnPj4KK3Vz
aW5nIEZhc3RSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEZhc3RSb2Jpbkhvb2RIYXNoVGFi
bGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RS
b2Jpbkhvb2RIYXNoTWFwOwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29kSGFzaE1hcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3Rm
L1JvYmluSG9vZEhhc2hTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGEzZTQ1YjkwYmY1NjhlZjE5ZWJmYjE4
ZTFkYTI0NzRmZGVjYTdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUm9iaW5I
b29kSGFzaFNldC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNo
VGFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIDk1JSBsb2FkLWZhY3Rvci4KK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8VmFs
dWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZhbHVlQXJnPj4KK3VzaW5n
IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVB
cmcsIEhhc2hBcmcsIFRyYWl0c0FyZywgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoVGFibGVUcmFpdHM+OworCisvLyA5MCUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlw
ZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+Cit1c2luZyBNZW1vcnlDb21w
YWN0Um9iaW5Ib29kSGFzaFNldCA9IEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0Fy
ZywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDc1JSBsb2Fk
LWZhY3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0g
RGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPFZh
bHVlQXJnPj4KK3VzaW5nIEZhc3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywg
SGFzaEFyZywgVHJhaXRzQXJnLCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFNldDsK
K3VzaW5nIFdURjo6RmFzdFJvYmluSG9vZEhhc2hTZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hU
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIwNDhhMDdhMGRiZWE3MTY2OTNmNDhkOTY0MGEyMWVlYzkyODc1
YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoVGFibGUu
aApAQCAtMCwwICsxLDkxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworLyoKKyAqIEFkZGluZyBwcm9iZURpc3Rh
bmNlVGhyZXNob2xkIGNvbWVzIGZyb20gb2xkIFJ1c3QncyBSb2Jpbkhvb2QgaGFzaHRhYmxlIHVu
ZGVyIE1JVC1saWNlbnNlLgorICoKKyAqIFJ1c3QuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueQorICogcGVyc29uIG9idGFpbmluZyBh
IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZAorICogZG9jdW1lbnRhdGlvbiBm
aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZQorICogU29mdHdhcmUgd2l0aG91
dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKKyAqIGxpbWl0YXRpb24gdGhlIHJpZ2h0
cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCisgKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBz
dWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YKKyAqIHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlCisgKiBpcyBmdXJuaXNoZWQgdG8g
ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogY29uZGl0aW9uczoKKyAqCisgKiBU
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorICog
c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucwor
ICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GCisgKiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisgKiBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O
SU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJ
R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9S
IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IKKyAqIElOIENPTk5FQ1RJT04gV0lU
SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNP
RlRXQVJFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZTsKKworLy8gOTUl
IGxvYWQgZmFjdG9yLiBUaGlzIGEgYml0IHJlZ3Jlc3MgImluc2VydGlvbiIgcGVyZm9ybWFuY2Us
IHdoaWxlIGl0IGtlZXBzIGxvb2t1cCBwZXJmb3JtYW5jZSBzYW5lLgorLy8gUm9iaW5Ib29kSGFz
aFRhYmxlIGNhbiB3b3JrIHdpdGggOTUlIGxvYWQgZmFjdG9yIGJlY2F1c2Ugb2YgbWFpbnRhaW5l
ZCBwcm9iZSBkaXN0YW5jZS4KK3N0cnVjdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hUYWJsZVNpemVQb2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4
TG9hZE51bWVyYXRvciA9IDE5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9h
ZERlbm9taW5hdG9yID0gMjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2Fk
ID0gNjsKK307CisKKy8vIDkwJSBsb2FkIGZhY3Rvci4gUm9iaW5Ib29kSGFzaFRhYmxlIGNhbiB3
b3JrIHdpdGggc3VjaCBhIGhpZ2ggbG9hZC1mYWN0b3IuCisvLyBPYnNlcnZlZCBwZXJmb3JtYW5j
ZSBpcyBzbGlnaHRseSB3b3JzZSB0aGFuIEhhc2hUYWJsZSAoNzUlIGZvciBzbWFsbCB0YWJsZSwg
NTAlIGZvciBsYXJnZSB0YWJsZSkuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hU
YWJsZVNpemVQb2xpY3kgeworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51
bWVyYXRvciA9IDk7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21p
bmF0b3IgPSAxMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2Owor
fTsKKworLy8gNzUlIGxvYWQgZmFjdG9yLCB0aGlzIG1haW50YWlucyB0aGUgcGVyZm9ybWFuY2Ug
c2FtZSB0byBIYXNoVGFibGUsIHN0aWxsIHRoZSBsb2FkIGZhY3RvcgorLy8gaXMgaGlnaGVyIChI
YXNoVGFibGUgdXNlcyA3NSUgZm9yIHNtYWxsIHRhYmxlLCA1MCBmb3IgbGFyZ2UgdGFibGUpLgor
c3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1pbkxvYWQgPSA2OworfTsKKworLy8gUm9iaW5Ib29kIEhhc2hUYWJsZSBoYXMg
c2V2ZXJhbCBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byB1c3VhbCBIYXNoVGFibGUsIHRoYXQncyB3
aHkgdGhpcyBpcyBub3QgYSBkZWZhdWx0IG9uZS4KKy8vIFJvYmluSG9vZCBIYXNoVGFibGUgY29t
cHV0ZXMgaGFzaCBtdWNoIG1vcmUgZnJlcXVlbnRseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBLZXkg
c2hvdWxkIGNhY2hlIGNvbXB1dGVkIGhhc2guCisvLyBCdXQgb3VyIGRlZmF1bHQgSGFzaFRhYmxl
IGRvZXMgbm90IGNhY2hlIGhhc2ggdmFsdWUgYmVjYXVzZSBvZiBtZW1vcnkgdXNhZ2UuIFRoaXMg
ZGVzaWduIG1lYW5zIHRoYXQgS2V5IHR5cGUKKy8vIHNob3VsZCBoYXZlIGhhc2ggdmFsdWUgaW50
cnVzaXZlbHkgKGUuZy4gV1RGOjpTdHJpbmcgaG9sZHMgaGFzaCB2YWx1ZSBpbnRlcm5hbGx5KS4K
Ky8vCisvLyBJZiB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIG1lZXQgeW91ciB1c2UgY2FzZSwgdGhl
biB5b3UgY2FuIHRyeSBSb2Jpbkhvb2QgSGFzaFRhYmxlLgorLy8gVGhlIGxhcmdlc3QgYmVuZWZp
dCBpcyB0aGF0IHdlIGNhbiB1c2Ugc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQtZmFjdG9yICg5MCUg
LSA5NSUpIQorLy8KKy8vIFRoZSBhbGdvcml0aG0gaXMgUm9iaW5Ib29kLUhhc2hpbmcgKyBiYWNr
d2FyZCBzaGlmdCBkZWxldGlvbiwgZGVzY3JpYmVkIGluIFsxLDJdLgorLy8KKy8vIE5haXZlIFJv
YmluSG9vZEhhc2hUYWJsZSBoYXMgc29tZSBjYXNlcyB3aGljaCBjYXVzZSBPKE5eMikgd2hlbiBp
dGVyYXRpbmcgaXQgYW5kIGluc2VydGluZyBpdCB0byBzb21lIG5ldyBSb2Jpbkhvb2RIYXNoVGFi
bGUKKy8vIHdpdGhvdXQgcmVzZXJ2aW5nIGNhcGFjaXR5IGFuZCB0aGlzIGlzIGJlY2F1c2Ugb2Yg
aGlnaCBsb2FkLWZhY3RvciBhbmQgZXhwb3NlZCBoYXNoLW9yZGVyaW5nIGF0IGl0ZXJhdGlvblsz
XS4gVG8gbWl0aWdhdGUgaXQsCisvLyB3ZSBjYWxjdWxhdGUgaGFzaCBmb3IgZWFjaCB0YWJsZSwg
YW5kIGRvIFhPUiB3aXRoIHRoZSBoYXNoIHZhbHVlIHRvIG1ha2UgaGFzaC1vcmRlcmluZyBkaWZm
ZXJlbnQgZm9yIGVhY2ggdGFibGUuCisvLworLy8gWzFdOiBodHRwczovL2NvZGVjYXBzdWxlLmNv
bS8yMDEzLzExLzExL3JvYmluLWhvb2QtaGFzaGluZy8KKy8vIFsyXTogaHR0cHM6Ly9jb2RlY2Fw
c3VsZS5jb20vMjAxMy8xMS8xNy9yb2Jpbi1ob29kLWhhc2hpbmctYmFja3dhcmQtc2hpZnQtZGVs
ZXRpb24vCisvLyBbM106IGh0dHBzOi8vYWNjaWRlbnRhbGx5cXVhZHJhdGljLnR1bWJsci5jb20v
cG9zdC8xNTM1NDU0NTU5ODcvcnVzdC1oYXNoLWl0ZXJhdGlvbi1yZWluc2VydGlvbgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NsYXNzIFJvYmluSG9vZEhhc2hUYWJsZSB7CitwdWJsaWM6
CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
PjsKKyAgICB1c2luZyBpdGVyYXRvciA9IEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUs
IEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNo
VGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjsKKyAgICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRyYWl0czsKKyAgICB1c2luZyBL
ZXlUeXBlID0gS2V5OworICAgIHVzaW5nIFZhbHVlVHlwZSA9IFZhbHVlOworICAgIHVzaW5nIElk
ZW50aXR5VHJhbnNsYXRvclR5cGUgPSBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRz
LCBIYXNoRnVuY3Rpb25zPjsKKyAgICB1c2luZyBBZGRSZXN1bHQgPSBIYXNoVGFibGVBZGRSZXN1
bHQ8aXRlcmF0b3I+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3Rh
bmNlVGhyZXNob2xkID0gMTI4OworCisgICAgc3RhdGljX2Fzc2VydCghS2V5VHJhaXRzOjpoYXNJ
c1JlbGVhc2VkV2Vha1ZhbHVlRnVuY3Rpb24pOworICAgIHN0YXRpY19hc3NlcnQoSGFzaEZ1bmN0
aW9uczo6aGFzSGFzaEluVmFsdWUpOworCisgICAgUm9iaW5Ib29kSGFzaFRhYmxlKCkgPSBkZWZh
dWx0OworCisgICAgflJvYmluSG9vZEhhc2hUYWJsZSgpCisgICAgeworICAgICAgICBpbnZhbGlk
YXRlSXRlcmF0b3JzKHRoaXMpOworICAgICAgICBpZiAobV90YWJsZSkKKyAgICAgICAgICAgIGRl
YWxsb2NhdGVUYWJsZShtX3RhYmxlLCB0YWJsZVNpemUoKSk7CisgICAgfQorCisgICAgUm9iaW5I
b29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYpOworICAgIHZvaWQgc3dhcChS
b2Jpbkhvb2RIYXNoVGFibGUmKTsKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUmIG9wZXJhdG9yPShj
b25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmKTsKKworICAgIFJvYmluSG9vZEhhc2hUYWJsZShSb2Jp
bkhvb2RIYXNoVGFibGUmJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxlJiBvcGVyYXRvcj0oUm9i
aW5Ib29kSGFzaFRhYmxlJiYpOworCisgICAgLy8gV2hlbiB0aGUgaGFzaCB0YWJsZSBpcyBlbXB0
eSwganVzdCByZXR1cm4gdGhlIHNhbWUgaXRlcmF0b3IgZm9yIGVuZCBhcyBmb3IgYmVnaW4uCisg
ICAgLy8gVGhpcyBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gc2tp
cCBhbGwgdGhlIGVtcHR5IGFuZCBkZWxldGVkCisgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGlu
ZyBhbiBlbXB0eSB0YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5n
LgorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtl
SXRlcmF0b3IobV90YWJsZSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtYWtlS25v
d25Hb29kSXRlcmF0b3IobV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJ
dGVyYXRvcihtX3RhYmxlKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0K
KworICAgIGl0ZXJhdG9yIHJhbmRvbSgpCisgICAgeworICAgICAgICBpZiAoaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICBhdXRvJiBidWNrZXQgPSBtX3RhYmxlW3dlYWtSYW5kb21VaW50MzIoKSAmIHRhYmxl
U2l6ZU1hc2soKV07CisgICAgICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQoYnVja2V0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKCZidWNrZXQpOworICAg
ICAgICB9OworICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJvYmluSG9vZEhhc2hU
YWJsZSo+KHRoaXMpLT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBrZXlDb3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJl
dHVybiB0YWJsZVNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFr
ZXlDb3VudCgpOyB9CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQg
a2V5Q291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOworICAgICAgICBBU1NF
UlQoIXRhYmxlU2l6ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0g
S2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25lZCBuZXdUYWJsZVNp
emUgPSBzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShrZXlD
b3VudCkpOworCisgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7
CisgICAgICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAgICBtX2tleUNvdW50
ID0gMDsKKyAgICAgICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOwor
ICAgICAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6
OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYm
IHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpl
eHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBBIHNwZWNpYWwgdmVy
c2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFy
aW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5
cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBpbiB0aGUgdGFi
bGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4g
QWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmKTsKKworICAgIGl0
ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5kPElkZW50aXR5VHJh
bnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5
cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkp
OyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJu
IGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0
IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4g
Y29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNv
bnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3Zl
KGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2so
aXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhj
b25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgc3RhdGljIGJvb2wgaXNF
bXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0hhc2hUcmFpdHNF
bXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KKyAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
IHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1ZVR5cGUqIGxvb2t1
cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+
KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxvb2t1cChjb25zdCBU
Jik7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNrVGFibGVDb25zaXN0
ZW5jeSgpIGNvbnN0OworI2Vsc2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCkgeyB9CisjZW5kaWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5DWQor
ICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QgeyBjaGVj
a1RhYmxlQ29uc2lzdGVuY3koKTsgfQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNv
bnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0
U2l6ZSgpOyB9CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0X3QgdGFibGVTaXpl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERlbm9taW5hdG9yID49
IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7CisgICAgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOwor
CisgICAgdXNpbmcgTG9va3VwVHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPjsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNo
ZWNrS2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRk
KFZhbHVlVHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFuY2UsIHVuc2lnbmVk
IHNpemUsIHVuc2lnbmVkIHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gpOworCisgICAgdm9p
ZCByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5
cGUqKTsKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKik7CisgICAgdm9p
ZCByZW1vdmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVRhYmxl
SGFzaChWYWx1ZVR5cGUqIHRhYmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxWYWx1ZVR5cGUqPjo6
aGFzaCh0YWJsZSk7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUJl
c3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhpcy0+a2V5Q291bnQo
KTsKKyAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAg
ICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2VlZHMgcHJvYmVEaXN0
YW5jZVRocmVzaG9sZCwgYW5kIDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhlIHRhYmxlLgorICAg
ICAgICByZXR1cm4gbV93aWxsRXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0YWJsZVNpemU7Cisg
ICAgfQorICAgIGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4ga2V5Q291bnQoKSAq
IG1pbkxvYWQgPCB0YWJsZVNpemUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRyYWl0czo6bWluaW11
bVRhYmxlU2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBzaHJpbmsoKSB7IHJl
aGFzaCh0YWJsZVNpemUoKSAvIDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jlc3RTaXplKCk7CisK
KyAgICB2b2lkIHJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAgIHZvaWQgcmVpbnNl
cnQoVmFsdWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1
ZVR5cGUmIGJ1Y2tldCk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQnVja2V0KFZhbHVlVHlwZSYg
YnVja2V0KSB7IGhhc2hUcmFpdHNEZWxldGVCdWNrZXQ8VHJhaXRzPihidWNrZXQpOyB9CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNpZ25lZCBoYXNoLCB1
bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNoICYgc2l6ZU1hc2s7
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9iZURpc3RhbmNlKHVu
c2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXpl
TWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0gZGVzaXJlZEluZGV4
KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBpdGVyYXRvciBtYWtl
SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90
YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1ha2VDb25zdEl0ZXJh
dG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBw
b3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBtYWtlS25vd25Hb29k
SXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90
YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyBy
ZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFibGVTaXplKCksIEhh
c2hJdGVtS25vd25Hb29kKTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgdm9pZCBj
aGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBz
dGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9CisjZW5kaWYK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IFNpemVQ
b2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhMb2FkRGVub21pbmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGljeTo6bWluTG9hZDsK
KworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9
CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXpl
IC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3Vu
dDsgfQorICAgIHVuc2lnbmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVIYXNo
OyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQg
bV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX3RhYmxlSGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4cGFuZCB7IGZhbHNl
IH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6CisgICAgLy8gQWxs
IGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fbXV0ZXguCisg
ICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxscHRyIH07CisgICAg
Ly8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxsIGJlIG1lbW1vdmUn
ZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8TG9jaz4gbV9tdXRl
eCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+
CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNoZWNrS2V5KGNv
bnN0IFQmKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46Omxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoK
K3sKKyAgICByZXR1cm4gaW5saW5lTG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3IsIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNp
emVQb2xpY3k+OjppbmxpbmVMb29rdXAoY29uc3QgVCYga2V5KSAtPiBWYWx1ZVR5cGUqCit7Cisg
ICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBWYWx1ZVR5cGUqIHRhYmxl
ID0gbV90YWJsZTsKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhh
c2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KSBeIHRh
YmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFz
ayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIC8vIFJvYmluSG9vZEhhc2hUYWJsZSBtYWludGFpbnMgdGhpcyBpbnZhcmlhbnQgc28gdGhh
dCB3ZSBjYW4gc3RvcAorICAgICAgICAvLyBwcm9iaW5nIHdoZW4gZGlzdGFuY2UgZXhjZWVkcyBw
cm9iaW5nIGRpc3RhbmNlIG9mIHRoZSBleGlzdGluZyBlbnRyeS4KKyAgICAgICAgYXV0byYgZW50
cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50
cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhh
c2g7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtl
eSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgICAgICBpbmRleCA9IChp
bmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KQoreworICAg
IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRl
bXBsYXRlIGluaXRpYWxpemU8VHJhaXRzPihidWNrZXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4dHJhPgorQUxXQVlTX0lOTElORSBhdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6YWRkKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpIC0+IEFkZFJlc3VsdAorewor
ICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOworCisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKworICAgIC8vIFdlIHNob3VsZCBleHBhbmQgYmVmb3JlIHBvdGVudGlhbGx5
IGluc2VydGluZyBhbiBlbnRyeS4gSWYgd2UgZXhwYW5kIGEgdGFibGUgYWZ0ZXIgaW5zZXJ0aW5n
IGFuIGVudHJ5LAorICAgIC8vIHdlIG5lZWQgdG8gcmUtbG9vayB1cCBlbnRyeSBmcm9tIHRoZSB0
YWJsZSBzaW5jZSB0aGUgaW5zZXJ0ZWQgZW50cnkgcG9zaXRpb24gaXMgbm90IHN0YWJsZSBkdXJp
bmcgcmVoYXNpbmcuCisgICAgaWYgKHNob3VsZEV4cGFuZCgpKQorICAgICAgICBleHBhbmQoKTsK
KworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQobV90
YWJsZSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVTaXplKCk7CisgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5zaWduZWQgdGFibGVIYXNoID0gdGhp
cy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaGFzaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSkgXiB0YWJsZUhhc2g7CisgICAgdW5zaWduZWQgaW5kZXggPSBkZXNpcmVkSW5kZXgoaGFz
aCwgc2l6ZU1hc2spOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gMDsKKworICAgIFZhbHVlVHlw
ZSogZW50cnkgPSBudWxscHRyOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGVudHJ5ID0g
bV90YWJsZSArIGluZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7Cisg
ICAgICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xh
dG9yVHlwZTo6aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVu
dHJ5RGlzdGFuY2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVN
YXNrKTsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAg
ICAgaWYgKGRpc3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAg
ICAgbV93aWxsRXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4
aXN0aW5nIGVudHJ5IHRvIG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAg
ICAgICAgIFZhbHVlVHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAg
ICAgICAgZW50cnktPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQo
KmVudHJ5KTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBz
dGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAg
ICAgICAgbWFpbnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSks
IGluZGV4LCBlbnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNo
ICYmIEhhc2hUcmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5j
ZTsKKyAgICB9CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENoZWNrVGFi
bGVDb25zaXN0ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om1haW50YWlu
UHJvYmVEaXN0YW5jZUZvckFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIGRpc3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaywgdW5zaWdu
ZWQgdGFibGVIYXNoKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisg
ICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGlu
ZGV4OworICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBW
YWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9
IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkp
IF4gdGFibGVIYXNoOworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0
YW5jZShlbnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0
YW5jZSA+IGVudHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9i
ZURpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7
CisgICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2Ug
PSBlbnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBTaXplUG9saWN5PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjphZGRQYXNzaW5nSGFzaENvZGUoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkg
LT4gQWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hvdWxkIGV4cGFuZCBi
ZWZvcmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBleHBhbmQgYSB0YWJs
ZSBhZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0byByZS1sb29rIHVw
IGVudHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRyeSBwb3NpdGlvbiBp
cyBub3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisg
ICAgICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsK
KworICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUo
KTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25l
ZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFz
aFRyYW5zbGF0b3I6Omhhc2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9
IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAw
OworCisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVu
dHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhh
c2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRy
eUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFz
aDsKKyAgICAgICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlI
YXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRy
eURpc3RhbmNlKSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRo
cmVzaG9sZCkKKyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAg
ICAgLy8gU3RhcnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlz
dGFuY2UgaW52YXJpYW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBX
VEZNb3ZlKCplbnRyeSk7CisgICAgICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAg
ICAgICAgaW5pdGlhbGl6ZUJ1Y2tldCgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0
b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8
RXh0cmE+KGV4dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2VG
b3JBZGQoV1RGTW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUs
IHNpemVNYXNrLCB0YWJsZUhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVu
dHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29k
SXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQg
Kz0gMTsKKworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1
cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1c2luZyBz
dGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUo
KTsKKyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25l
ZCB0YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRl
bnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKSBeIHRh
YmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFz
ayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRv
RW1wdHkoKmVudHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JU
eXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNl
KSB7CisgICAgICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFu
Y2UgPSBlbnRyeURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIHNpemVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNv
bnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJl
dHVybiBlbmQoKTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAg
cmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1l
IFNpemVQb2xpY3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1l
IFQ+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBr
ZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAg
ICByZXR1cm4gZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jp
bkhvb2RIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAg
IGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25v
d25Hb29kQ29uc3RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29s
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBj
b25zdAoreworICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNo
VHJhbnNsYXRvcj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQg
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91
dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRl
SXRlcmF0b3JzKHRoaXMpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBT
aXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFu
ZEludmFsaWRhdGUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0
aGlzKTsKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShw
b3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICAvLyBUaGlz
IGlzIHJlbW92YWwgdmlhICJiYWNrd2FyZC1zaGlmdC1kZWxldGlvbiIuIFRoaXMgYmFzaWNhbGx5
IHNoaWZ0IGV4aXN0aW5nIGVudHJpZXMgdG8gcmVtb3ZlZCBlbXB0eSBlbnRyeSBwbGFjZSBzbyB0
aGF0IHdlIG1ha2UKKyAgICAvLyB0aGUgdGFibGUgYXMgaWYgbm8gcmVtb3ZhbCBoYXBwZW5lZCBz
byBmYXIuIFRoaXMgZGVjcmVhc2VzIGRpc3RhbmNlLXRvLWluaXRpYWwtYnVja2V0IChESUIpIG9m
IHRoZSBzdWJzZXF1ZW50IGVudHJpZXMgYnkgMS4gVGhpcyBtYWludGFpbnMKKyAgICAvLyBESUIg
b2YgdGhlIHRhYmxlIGxvdyBhbmQgcmVsYXRpdmVseSBjb25zdGFudCBldmVuIGlmIHdlIGhhdmUg
bWFueSByZW1vdmFscywgY29tcGFyZWQgdG8gdXNpbmcgdG9tYnN0b25lcy4KKyAgICAvLyBodHRw
czovL2NvZGVjYXBzdWxlLmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2Fy
ZC1zaGlmdC1kZWxldGlvbi8KKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgor
ICAgIGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAgICBpbml0aWFsaXplQnVja2V0KCpwb3MpOworICAg
IG1fa2V5Q291bnQgLT0gMTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAg
ICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJs
ZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBpbmRleFByZXZpb3VzID0g
cG9zIC0gbV90YWJsZTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IChpbmRleFByZXZpb3VzICsgMSkg
JiBzaXplTWFzazsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZhbHVlKiBwcmV2aW91
c0VudHJ5ID0gbV90YWJsZSArIGluZGV4UHJldmlvdXM7CisgICAgICAgIFZhbHVlKiBlbnRyeSA9
IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEFTU0VSVChpc0VtcHR5QnVja2V0KCpwcmV2aW91
c0VudHJ5KSk7CisgICAgICAgIGF1dG8mIGVudHJ5S2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KCpl
bnRyeSk7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5
cGU6Omhhc2goZW50cnlLZXkpIF4gdGFibGVIYXNoOworICAgICAgICBpZiAoIXByb2JlRGlzdGFu
Y2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwgc2l6ZU1hc2spKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgc3dhcCgqcHJldmlvdXNFbnRyeSwgKmVudHJ5KTsKKworICAgICAgICBpbmRl
eFByZXZpb3VzID0gaW5kZXg7CisgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFz
azsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCisgICAgICAgIHNocmluaygpOwor
CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5h
bWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9PSBlbmQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+
KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9s
aWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVX
aXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdCA9
PSBlbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhv
dXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0ZXJh
dG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGlu
ZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVudHJ5
Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5k
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50
cnlDb25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9wb3NpdGlvbikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQoreworICAg
IHJlbW92ZShmaW5kKGtleSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgorYXV0
byBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUodW5zaWduZWQg
c2l6ZSkgLT4gVmFsdWVUeXBlKgoreworICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJl
ciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKKyAgICAv
LyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CisgICAgaWYgY29uc3RleHByIChU
cmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJv
ZWRNYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOworCisgICAgVmFsdWVUeXBlKiBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0X3B0cjxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFy
Kj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2Moc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGluaXRpYWxp
emVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmRl
YWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCB1bnNpZ25lZCBzaXplKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHRhYmxlW2ldLn5WYWx1
ZVR5cGUoKTsKKyAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGFibGUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpleHBhbmQoKQoreworICAgIHVuc2lnbmVkIG5ld1Np
emU7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIGlmICghb2xkU2l6
ZSkKKyAgICAgICAgbmV3U2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAgICBl
bHNlCisgICAgICAgIG5ld1NpemUgPSBvbGRTaXplICogMjsKKworICAgIHJlaGFzaChuZXdTaXpl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2NvbnN0ZXhwciB1bnNpZ25lZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmNvbXB1dGVCZXN0VGFibGVTaXplKHVuc2ln
bmVkIGtleUNvdW50KQoreworICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5k
VXBUb1Bvd2VyT2ZUd28oa2V5Q291bnQpOworCisgICAgaWYgKHNob3VsZEV4cGFuZChrZXlDb3Vu
dCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKKworICAgIGF1
dG8gYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbiA9IFtdKGRvdWJsZSBsb2FkRmFjdG9y
LCB1bnNpZ25lZCBrZXlDb3VudCwgdW5zaWduZWQgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAg
Ly8gSGVyZSBpcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNhbGN1bGF0aW9uLCB1c2luZyAz
LzQgbG9hZC1mYWN0b3IuCisgICAgICAgIC8vIFdpdGggbWF4TG9hZCBhdCAzLzQgYW5kIG1pbkxv
YWQgYXQgMS82LCBvdXIgYXZlcmFnZSBsb2FkIGlzIDExLzI0LgorICAgICAgICAvLyBJZiB3ZSBh
cmUgZ2V0dGluZyBoYWxmLXdheSBiZXR3ZWVuIDExLzI0IGFuZCAzLzQsIHdlIGRvdWJsZSB0aGUg
c2l6ZQorICAgICAgICAvLyB0byBhdm9pZCBiZWluZyB0b28gY2xvc2UgdG8gbG9hZE1heCBhbmQg
YnJpbmcgdGhlIHJhdGlvIGNsb3NlIHRvIDExLzI0LiBUaGlzCisgICAgICAgIC8vIGdpdmUgdXMg
YSBsb2FkIGluIHRoZSBib3VuZHMgWzkvMjQsIDE1LzI0KS4KKyAgICAgICAgZG91YmxlIG1heExv
YWRSYXRpbyA9IGxvYWRGYWN0b3I7CisgICAgICAgIGRvdWJsZSBtaW5Mb2FkUmF0aW8gPSAxLjAg
LyBtaW5Mb2FkOworICAgICAgICBkb3VibGUgYXZlcmFnZUxvYWRSYXRpbyA9IChtYXhMb2FkUmF0
aW8gKyBtaW5Mb2FkUmF0aW8pIC8gMjsKKyAgICAgICAgZG91YmxlIGhhbGZXYXlCZXR3ZWVuQXZl
cmFnZUFuZE1heExvYWRSYXRpbyA9IChhdmVyYWdlTG9hZFJhdGlvICsgbWF4TG9hZFJhdGlvKSAv
IDI7CisgICAgICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2Vl
bkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBkb3VibGUg
bG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhM
b2FkRGVub21pbmF0b3I7CisgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24o
bG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVT
aXplICo9IDI7CisgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsKKyAgICByZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11
bVRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6c2hyaW5rVG9CZXN0U2l6ZSgpCit7CisgICAgdW5z
aWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKKyAg
ICByZWhhc2goc3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUo
a2V5Q291bnQoKSkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXpl
KQoreworICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOworCisg
ICAgdW5zaWduZWQgb2xkVGFibGVTaXplID0gdGFibGVTaXplKCk7CisgICAgVmFsdWVUeXBlKiBv
bGRUYWJsZSA9IG1fdGFibGU7CisKKyAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50
KCk7CisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKKyAgICBtX3Rh
YmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKyAgICBtX2tleUNvdW50ID0gb2xkS2V5Q291bnQ7Cisg
ICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4
cGFuZCA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZFRhYmxlU2l6
ZTsgKytpKSB7CisgICAgICAgIGF1dG8mIG9sZEVudHJ5ID0gb2xkVGFibGVbaV07CisgICAgICAg
IGlmICghaXNFbXB0eUJ1Y2tldChvbGRFbnRyeSkpCisgICAgICAgICAgICByZWluc2VydChXVEZN
b3ZlKG9sZEVudHJ5KSk7CisgICAgICAgIG9sZEVudHJ5Ln5WYWx1ZVR5cGUoKTsKKyAgICB9CisK
KyAgICBpZiAob2xkVGFibGUpCisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVy
cHJldF9jYXN0PGNoYXIqPihvbGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJh
dG9ycyh0aGlzKTsKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIG1fdGFibGVTaXplID0gMDsK
KyAgICBtX2tleUNvdW50ID0gMDsKKyAgICBtX3RhYmxlSGFzaCA9IDA7CisgICAgbV93aWxsRXhw
YW5kID0gZmFsc2U7CisgICAgZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90YWJsZSwg
bnVsbHB0ciksIG9sZFRhYmxlU2l6ZSk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJs
ZSYgb3RoZXIpCit7CisgICAgaWYgKCFvdGhlci5tX3RhYmxlU2l6ZSB8fCAhb3RoZXIubV9rZXlD
b3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUob3Ro
ZXIubV90YWJsZVNpemUpOworICAgIG1fdGFibGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7Cisg
ICAgbV9rZXlDb3VudCA9IG90aGVyLm1fa2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21w
dXRlVGFibGVIYXNoKG1fdGFibGUpOworICAgIG1fd2lsbEV4cGFuZCA9IG90aGVyLm1fd2lsbEV4
cGFuZDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFi
bGVTaXplOyArK2luZGV4KSB7CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVy
Lm1fdGFibGVbaW5kZXhdOworICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob3RoZXJFbnRyeSkp
IHsKKyAgICAgICAgICAgIFZhbHVlVHlwZSBlbnRyeShvdGhlckVudHJ5KTsKKyAgICAgICAgICAg
IHJlaW5zZXJ0KFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFz
aFRhYmxlJiBvdGhlcikKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgor
ICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygm
b3RoZXIpOworCisgICAgc3dhcChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1f
dGFibGVTaXplLCBvdGhlci5tX3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhl
ci5tX2tleUNvdW50KTsKKyAgICBzd2FwKG1fdGFibGVIYXNoLCBvdGhlci5tX3RhYmxlSGFzaCk7
CisgICAgc3dhcChtX3dpbGxFeHBhbmQsIG90aGVyLm1fd2lsbEV4cGFuZCk7CisKKyAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJv
YmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhh
c2hUYWJsZSYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RI
YXNoVGFibGUgdG1wKG90aGVyKTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6Um9iaW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90
aGVyKQoreworICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXpl
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV90YWJsZUhhc2ggPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGVIYXNoLCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd2lsbEV4cGFuZCwgZmFsc2UpOworCisgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8g
Um9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRh
YmxlJiYgb3RoZXIpIC0+IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNo
VGFibGUgdGVtcChXVEZNb3ZlKG90aGVyKSk7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNv
bnNpc3RlbmN5KCkgY29uc3QKK3sKKyAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXpl
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIFZh
bHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgaTsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGtleSA9IEV4
dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKKyAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAg
ICArK2NvdW50OworCisgICAgICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShr
ZXkpOworICAgIH0KKworICAgIEFTU0VSVChjb3VudCA9PSBrZXlDb3VudCgpKTsKKyAgICBBU1NF
UlQodGhpcy0+dGFibGVTaXplKCkgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplKTsKKyAg
ICBBU1NFUlQodGFibGVTaXplTWFzaygpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkg
PT0gdGFibGVTaXplTWFzaygpICsgMSk7Cit9CisKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAor
CitzdHJ1Y3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9Owor
CitzdHJ1Y3QgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KKyAgICB1c2luZyBUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5Q29tcGFj
dFJvYmluSG9vZEhhc2hUYWJsZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhv
b2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9i
aW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHMsIEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCmluZGV4
IDkyZDIwOGQzNWUyYWFkNWI4ODI3M2UzNDE4NmMyN2I1ZDA3Y2UxZmQuLmJhZDJjYWIwZDVhZjY5
ODYzYmQwOGEyODkwYjU0M2RhODgzN2U1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQXRvbVN0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdI
YXNoLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0g
dHJ1ZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXVEY6OkF0
b21TdHJpbmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdURjo6QXRvbVN0cmluZz4gewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVm
MTQ2YzNiMmVlODlmZTcxMTdmNWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRl
ZjRjZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyAr
NjMsNyBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdF
Ql9USFJFQUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0
cmluZ0ltcGw+PjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3Ry
aW5nVGFibGVJbXBsOwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0
cmluZ1RhYmxlKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z1RhYmxlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRl
eCBlMGMwYWZiYWVhNDM2ODYxYjhiOGU0MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4
NjY4ZWY1ZTRhNTZhMjQ5NzVkMjAxZmE4ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3Ry
aW5nVGFibGUuY3BwCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3Ry
aW5nVGFibGU6On5BdG9tU3RyaW5nVGFibGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRy
PFN0cmluZ0ltcGw+JiBzdHJpbmcgOiBtX3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
aW5nIDogbV90YWJsZSkKICAgICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNl
L1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1
OGMxYmMxMmM0ZTMwNDUxMTNhNTdlLi5mZmFmODM2NDIyYzUyOWUzOWU2ZDE3MGRiY2I4NGY5OWI2
Nzk0ZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNz
IFN0cmluZ0ltcGw7CiBjbGFzcyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5nIFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0
cmluZ0ltcGw+OworICAgIHVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nRW50
cnk+OworCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAg
IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxl
OyB9CisgICAgU3RyaW5nVGFibGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAog
cHJpdmF0ZToKLSAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAg
ICBTdHJpbmdUYWJsZUltcGwgbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNo
LmgKaW5kZXggNWE4Mzg1ZTA0YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYx
YmRmMjFiNThkYmY2Y2U2MjU0NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKQEAgLTkwLDYgKzkwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0g
dHJ1ZTsKICAgICB9OwogCiAgICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlh
Q2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRp
ZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhkMDRh
MjU2NDM2ZTc3MTVjYzYuLjA5NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQwNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVk
aWFDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBh
YmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNpbmNs
dWRlICJNZWRpYUVuY29kaW5nQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5naW5l
Q29uZmlndXJhdGlvbkZhY3RvcnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0Zi9S
b2Jpbkhvb2RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVz
KCkKIHsKICAgICAvLyBBICJidWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRhaW5l
ciB0eXBlIGRvZXMgbm90IHVuaXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6IGh0
dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8U3RyaW5nPj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+KHsK
LSAgICAgICAgImF1ZGlvLzNncHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAgICJh
dWRpby8zZ3BwMiIsCi0gICAgICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9tcDQi
LAotICAgICAgICAidmlkZW8vbXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0gICAg
ICAgICJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0gICAg
ICAgICJhdWRpby92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBwbGUu
bXBlZ3VybCIsCi0gICAgICAgICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwKLSAg
ICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJp
bmc+PiBidWNrZXRNSU1FVHlwZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAg
ICAgICAiYXVkaW8vM2dwcCJfcywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAgICJh
dWRpby8zZ3BwMiJfcywKKyAgICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVkaW8v
bXA0Il9zLAorICAgICAgICAidmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXA0
Il9zLAorICAgICAgICAidmlkZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRpb24v
bXAyMSJfcywKKyAgICAgICAgImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAgICAi
dmlkZW8vdm5kLmFwcGxlLm1wZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisgICAg
ICAgICJ2aWRlby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAiYXVk
aW8vd2VibSJfcywKICAgICB9KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKaW5kZXggOTA0MzU0ZDYyOGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQzMTAx
ZWRlZjQ1MmFkMDk0ZjAzNWJmODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2ICs4
NCw3IEBACiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNp
YmxlVW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nVmlldy5oPgpAQCAtMjYwNyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdXBwb3J0c0hhc1BvcHVwKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnBvcHVwVmFsdWUoKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
U3RyaW5nPiB7Ci0gICAgICAgICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwgImRp
YWxvZyIKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJfcywg
InRyZWUiX3MsICJncmlkIl9zLCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBoYXNQ
b3B1cCA9IGdldEF0dHJpYnV0ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBiNTlkZWQxYzdhZDliZDMwOGM2OGU4
ZmVjOGRjMWE1OTBhNTBlNTZmLi5hYTg3NjAyMGY2YWZmYTdlMDU2MjVlMmZlNGU1YzE4NzcyOTNk
MjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yMzg4LDcgKzIzODgsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JT
aGFkb3dSb290KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxp
ZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFnLmdl
dCgpLAogICAgICAgICAgICAgJmFzaWRlVGFnLmdldCgpLApAQCAtMjQwOSw3ICsyNDA5LDggQEAg
c3RhdGljIGJvb2wgY2FuQXR0YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgICAgICAgICAgJnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3BhblRh
Zy5nZXQoKQogICAgICAgICB9OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+
IHNldDsKKyAgICAgICAgc2V0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3Qp
KTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNldC5h
ZGQobmFtZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9R
dWFsaWZpZWROYW1lLmgKaW5kZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVkZDM5
MmY0Zi4uNDI5ZmM1NTk2NDM1MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxpZmll
ZE5hbWVIYXNoIHsKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lJiBh
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwgY29u
c3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFs
dWUgPSB0cnVlOwogfTsKIAogaW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhiMDMx
OWNlMjUyYzZjNjZhY2I3OTNmNWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJjOGE3
ZDhlODUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAKICAg
ICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNTUyIs
ICRmYW1pbHlOYW1lc0ZpbGVCYXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApAQCAt
NzA5LDYgKzcxMCw3IEBAIHN1YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGljZW5z
ZUhlYWRlcigkRik7CiAgICAgcHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfSwgPDxFTkQsICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlmaWVk
TmFtZSA6IHB1YmxpYyBRdWFsaWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgog
RU5ECkBAIC05NTYsNyArOTU4LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk5Niw3ICs5OTgsNyBAQCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFsaWZp
ZWROYW1lOyAvLyBVc2UgcG9pbnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVtcHR5
VmFsdWUoKSBpbiBIYXNoTWFwIGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBORVZF
Ul9JTkxJTkUgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1D
b25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1G
YWN0b3J5TWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1
Y3RvckZ1bmN0aW9uTWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5
TWFwKCkKIHsKICAgICBzdHJ1Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWU7CkBAIC0xMDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYgPDxF
TkQKICAgICB9OwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25h
bWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0byYg
ZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeShl
bnRyeS5mdW5jdGlvbiwgZW50cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUu
bG9jYWxOYW1lKCksICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFw
RW50cnkoZW50cnkuZnVuY3Rpb24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwogfQog
CiBzdGF0aWMgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRy
eSBmaW5kJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9uKGNv
bnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlN
YXAoKSk7Ci0gICAgcmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7CisgICAg
cmV0dXJuIG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rvcnk6
OmNyZWF0ZUtub3duRWxlbWVudChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3VtZW50
JiBkb2N1bWVudCRmb3JtRWxlbWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpCkBAIC0xMjI2LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNw
cEZpbGUKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVORAog
OwpAQCAtMTI0Nyw3ICsxMjUwLDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGljIE5F
VkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1XcmFwcGVyTWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFj
ZX1FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3Jh
cHBlck1hcCgpCiB7CiAgICAgc3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lOwpAQCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmludCBG
IDw8RU5ECiAgICAgfTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZvciAo
YXV0byYgZW50cnkgOiB0YWJsZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFt
ZSgpLmltcGwoKSwgZW50cnkuZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUu
bG9jYWxOYW1lKCksIGVudHJ5LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBKU0RP
TU9iamVjdCogY3JlYXRlSlMkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+
JiYgZWxlbWVudCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7Ci0g
ICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGwoKSkpCisgICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCku
Z2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShlbGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRhMzlj
NjMwYmIyZmExYjRkZWJiM2QwLi5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdmNDMw
OTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVmlz
aWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgs
NyArMTE5LDcgQEAgRWxlbWVudCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0
QmxvY2tDb21tYW5kKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRGb3JG
b3JtYXRCbG9jayhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBj
b25zdCBhdXRvIGJsb2NrVGFncyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmll
ZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJEZXN0
cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5h
bWU+IHsKICAgICAgICAgYWRkcmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAgICAg
YXNpZGVUYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1h
dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAppbmRleCA0ZWMwYjRlNTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42NjE0
MDdlMTQ1MjRjZjJhMTNmZWEzNjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3ZlRm9y
bWF0Q29tbWFuZDo6UmVtb3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0
YXRpYyBib29sIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZlckRl
c3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBl
bGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAgICAg
ICBiVGFnLAogICAgICAgICBiZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2YzJl
MDA4ZmY4M2ZhZGEzYTdkYWYuLmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3Y2Uz
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMgYm9v
bCBpc1Byb2hpYml0ZWRQYXJhZ3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAg
ICAgICAgICAgJnVsVGFnLmdldCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAgICAg
ICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAg
IGZvciAoYXV0byYgdGFnIDogdGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2NhbE5h
bWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0F1dG9maWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmluZGV4
IDY3MzVlMjY5ZjI1YWVmN2JjMDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIyMWRj
MjdlOTQyMjgyZjE0ZjkwMzJlOWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQXV0b2ZpbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
Um9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHN0
cnVjdCBBdXRvZmlsbEluZm8gewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9Owog
Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5h
bWVNYXAoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAgIHN0
YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0
cnVjdCBNYXBFbnRyeSB7CkBAIC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8
QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAgIHsg
ImVtYWlsIiwgeyBBdXRvZmlsbEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6OkNv
bnRhY3QgfSB9LAogICAgICAgICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6Oklt
cHAsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2UyOTA5
NDRhNGI3Y2ZhZWRkOGQ3NS4uMDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2MGRl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMjI1LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nhc2VT
ZW5zaXRpdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAg
ICAgICAgICAgICZ2YWx1ZXR5cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0ci5n
ZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBz
ZXQ7CiAgICAgICAgIGZvciAoYXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0LmFk
ZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMyNGI4
YTAzZTZiMTcxNjIwZDZjYmUuLmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUyZjJj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01MSw2
ICs1MSw3IEBACiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhh
c2hTZXQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2ZW50
c1BhcmVudE9iamVjdEZyb21FeHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAgICBz
dGF0aWMgY29uc3QgYXV0byBtb3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsK
LSAgICAgICAgSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAg
IGF1dG8qIHRhZ3MgPSBIVE1MTmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgSFRNTE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAgICAg
ICAgIGF1dG8mIHRhZyA9ICp0YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5NGU5
OWNiZTM5MTY4Zi4uOTJmMjc2ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmlu
SG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgog
CiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtNDc4LDkgKzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNv
bnN0IEhUTUxTdGFja0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywg
UXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNv
bnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1
YWxpZmllZE5hbWU+IHN0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1
YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBIYXNo
TWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbE5hbWUgPSBuYW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNh
c2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChT
VkdOYW1lczo6Z2V0U1ZHVGFncygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05hbWVz
OjpnZXRTVkdUYWdzKCksIFNWR05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGNhc2VkTmFtZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAgICBp
ZiAoY2FzZWROYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAg
dG9rZW4uc2V0TmFtZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRqdXN0QXR0cmlidXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
JiBtYXAsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0
QXR0cmlidXRlcyhjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewogICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0ZS5s
b2NhbE5hbWUoKSk7CkBAIC01MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVz
dEF0dHJpYnV0ZXMoSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG8K
IAogdGVtcGxhdGU8Y29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgp
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1h
cChhdHRyaWJ1dGVzVGFibGUoKSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0
b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNU
YWJsZSgpLCBhdHRyaWJ1dGVzVGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFw
LCB0b2tlbik7CiB9CiAKQEAgLTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRqdXN0
QXR0cmlidXRlczxNYXRoTUxOYW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpNYXRo
TUxBdHRyc0NvdW50Pih0b2tlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFByZWZp
eChIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJp
bmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQg
bGVuZ3RoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxB
dG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21T
dHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQocHJl
Zml4ICsgJzonICsgbG9jYWxOYW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBu
YW1lLm5hbWVzcGFjZVVSSSgpKSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRoUHJl
Zml4ID0gW10oTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJp
bmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0IEF0
b21TdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBtYXAu
YWRkKHByZWZpeCArICc6JyArIGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2Fs
TmFtZSwgbmFtZS5uYW1lc3BhY2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3RhdGlj
IEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0
ZXNNYXAoKQotewotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBR
dWFsaWZpZWROYW1lPiBtYXA7CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJlZml4
KG1hcCwgeGxpbmtOYW1lLCBYTGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFtZXM6
OlhMaW5rQXR0cnNDb3VudCk7CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8QXRv
bVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogCiBz
dGF0aWMgdm9pZCBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxp
ZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVz
TWFwKCk7CiAgICAgYWRqdXN0QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRiYzlk
OGUyNjM1MmQ1ZjYyMGQ3YjU1YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThmYWYx
MWJhNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUwLDEw
IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24oKQog
ICAgIHJldHVybiByZWdpb25DaGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFNSR0JBPHVpbnQ4X3Q+PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMgY29u
c3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8
dWludDhfdD4+JiB0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3Qg
YXV0byByZWdpb25Db2xvcnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICByZXR1
cm4gSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJuIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4
X3Q+PiB7IHsKICAgICAgICAgICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYzLCA1
MCB9IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1MCB9
IH0sCiAgICAgICAgICAgICB7ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0gfSwK
QEAgLTE5NCw0OSArMTk1LDQ5IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5
OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9udC51
cGRhdGUobnVsbHB0cik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiKSk7
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
dG91Y2hzdGFydCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAg
ZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRS
ZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0Il9z
LCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVj
dC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9u
Q29sb3JzKCkuZ2V0KCJ0b3VjaG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91
Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4dC5m
aWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2htb3Zl
IiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRB
bGlnbmVkVGV4dCgidG91Y2htb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0
aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVu
ZCJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0
QWxpZ25lZFRleHQoInRvdWNoZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlv
bigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQsIGZv
bnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzAp
OwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQo
InRvdWNoZm9yY2VjaGFuZ2UiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVu
dFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRleHQu
ZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9y
Y2VjaGFuZ2UiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250LCBs
ZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxl
Z2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyIs
IGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxp
Z25lZFRleHQoInBhc3NpdmUgbGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0
LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0
LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24iKSk7
CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgi
bW91c2Vkb3duIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBk
cmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVj
dC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9zLCBj
b250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5t
b3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29s
b3JzKCkuZ2V0KCJtb3VzZW1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hF
dmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxs
UmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3ZlIiwg
Y29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgibW91c2Vtb3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9u
KCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxD
b2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiX3Mp
KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWdu
ZWRUZXh0KCJtb3VzZXVwIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsK
KyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9ybXMs
IHRoZSAid2hlZWwiIHJlZ2lvbiBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdp
b24uCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdl
dCgid2hlZWwiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNv
bG9ycygpLmdldCgid2hlZWwiX3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3Qp
OwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0LCBm
b250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJu
b24tZmFzdCByZWdpb24iX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7
CiAjZW5kaWYKIAogICAgIGZvciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lvbiA6
IG1fZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hS
ZWdpb25zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNl
clRpbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5j
cHAKaW5kZXggZWQ4ZGQ5MjM4ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAxNTI3
N2UwN2M0M2Q5Zjk4OWExN2VhYmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAoUGVy
Zm9ybWFuY2VUaW1pbmc6OiopKCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRp
b25UaW1pbmdGdW5jdGlvbk1hcCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVz
dHJpY3RlZE1hcmtOYW1lc1RvTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVy
RGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7Cisg
ICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+
KHsKICAgICAgICAgeyAiY29ubmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0
RW5kIH0sCiAgICAgICAgIHsgImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpj
b25uZWN0U3RhcnQgfSwKICAgICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5jZVRp
bWluZzo6ZG9tQ29tcGxldGUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2YxOTc3
MGQ0ODFlNmJlZTRmZWRhZWE2NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlkMmMz
NDFlYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlw
ZVJlZ2lzdHJ5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlN
RVR5cGVSZWdpc3RyeUNvY29hLm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8cGFs
L3NwaS9jb2NvYS9Db3JlU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNV
UkxGaWxlVHlwZU1hcHBpbmdzU1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgorI2ltcG9ydCA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0
cmluZywgSGFzaFNldDxTdHJpbmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0YXRp
YyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNGb3JN
SU1FVHlwZU1hcCgpCiB7CiAgICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFw
ID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hT
ZXQ8U3RyaW5nPj4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
U3RyaW5nPj4gbWFwOwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1hcC5h
ZGQodHlwZSwgSGFzaFNldDxTdHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9u
KTsKKyAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFN0cmluZz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24pOwog
ICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBTdHJp
bmcmIHR5cGUsIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2VhNzQ1
MmQ1ZmYyZTZjYjVmM2UxMTY2NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYxMjg3
ZTJhNzI5Y2M0NzFiYmQxZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNo
QXNZZW5TaWduRm9yRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAoZmFt
aWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBh
dXRvIHNldCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0
cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewogICAg
ICAgICAgICAgdW5zaWduZWQgbmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAg
IHNldC5hZGQoQXRvbVN0cmluZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsIH0pOwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6
Omhhc1ZhbGlkQXZlcmFnZUNoYXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVk
KEhhc2hTZXQ8QXRvbVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VO
ZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4gewogICAgICAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJBcmlh
bCBIZWJyZXciLAogICAgICAgICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBj
Yzg0OWQ5YTcwLi4xNDI0ZDFiZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgSEFW
RShBVkNPTlRFTlRLRVlTRVNTSU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZlY3Rv
cjxSZWY8U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFj
dEtleUlEc1NrCiAgICAgcmV0dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8
QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRh
VHlwZXMoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+
PiB2YWxpZFR5cGVzID0gSGFzaFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5n
Pj4gdmFsaWRUeXBlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAgICAg
ICBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENETVBy
aXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlTVFJF
QU1JTkdfQ0VOQ19JTklUREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVmNzQ3
NThiMTc4MmZjZDk3OTE3Li5hNDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5MjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuY3BwCkBAIC0zMSwxMyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgi
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VU
eXBlcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEhhc2hTZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBlKTsK
ICAgICAgICAgfSwgJnN5c3RlbVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRlZmF1
bHRTdXBwb3J0ZWRJbWFnZVR5cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBl
c10oY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lzdGVt
U3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsKLQot
ICAgICAgICByZXR1cm4gZGVmYXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOworICAg
ICAgICBmb3IgKGF1dG8mIGltYWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKSB7
CisgICAgICAgICAgICBpZiAoc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFn
ZVR5cGUpKQorICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJuIGRl
ZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2ODY3
NDAwZDc2ZWUzYzY2NTc1ZS4uNGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2QwYjli
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdp
c3RyeS5oCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBw
b3J0ZWRJbWFnZVR5cGVzKCk7CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNV
dGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0hFVkNVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4MWRi
YTAyOGIzZWU5MjMzLi42MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRp
bGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJIRVZD
VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2ltcG9y
dCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lv
bi5oPgorI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNpbXBv
cnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJvb2wg
dmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRp
YUNhcGFiaWxpdGllc0luZm8mCiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBj
b2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKIHsK
LSAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcs
IENNVmlkZW9Db2RlY1R5cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVjVHlw
ZV9IMjY0IH0sCi0gICAgICAgIHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0g
ICAgICAgIHsgImh2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhl
djEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFr
ZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxT
dHJpbmcsIENNVmlkZW9Db2RlY1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVv
Q29kZWNUeXBlX0gyNjQgfSwKKyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVf
SDI2NCB9LAorICAgICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisg
ICAgICAgIHsgImhldjEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsKIAog
ICAgIGF1dG8gZmluZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRiMGNh
Y2Q2N2RmYmI5NWMxMmQ5OS4uZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0Mjlm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEzNzEs
MTUgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJlYWRD
YWxsYmFjayhDYWxsT25DbGllbnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3QgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnN1cHBvcnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBj
b2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIsICJW
X1ZQOSIgfSk7CisgICAgc3RhdGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCJf
cywgIlZfVlA5Il9zIH0pOwogICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQor
Y29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBzdGF0
aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJB
X1ZPUkJJUyIsICJBX09QVVMiIH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5n
Pj4oeyAiQV9WT1JCSVMiX3MsICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIzODRm
OTJmNzQ4ZjRjOWJhNWQ5MWI4ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0NmQ1
YzcyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBw
cml2YXRlCiAKICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90
KTsKIAotICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29k
ZWNzKCk7Ci0gICAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9D
b2RlY3MoKTsKKyAgICBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGljIGNv
bnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBw
b3J0ZWRBdWRpb0NvZGVjcygpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpT
dGF0dXMgT25FbGVtZW50QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6
QWN0aW9uKikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291
cmNlcy5jcHAKaW5kZXggODgwY2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFhZi4u
ZmUwZWQzMTQ0MTE0OGVlMTUzYjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0ZGlv
Lmg+CkBAIC00Myw5ICs0NCw5IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsKIH0K
IAotc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkK
K3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRv
bVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxBdG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHNfdGFnTGlzdDsKICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyAiY29udGFpbmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH
MTEvaW50cm8uaHRtbCNUZXJtQ29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhpY3Mg
ZWxlbWVudHMiIDogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3Jh
cGhpY3NFbGVtZW50CkBAIC05Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+
JiBjbGlwcGVyRmlsdGVyTWFza2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAot
c3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0IE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2Vy
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChT
VkdOYW1lczo6bGluZVRhZy0+bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCku
YWRkKFNWR05hbWVzOjpwYXRoVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkgQEAg
c3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBzX3Rh
Z0xpc3Q7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFn
cygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJp
bmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLT5s
b2NhbE5hbWUoKSk7CkBAIC0xMjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmlu
Zz4mIGZpbGxBbmRTdHJva2VUYWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0
aWMgSGFzaFNldDxBdG9tU3RyaW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRpYyBj
b25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4m
IGNoYWluYWJsZVJlc291cmNlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3Rh
Z0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190
YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFtZSgp
KTsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5sb2Nh
bE5hbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3NThh
Mjc4MzlhMmI4MTg2NDRhY2VjMmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMzNDAx
Mjc2ZTUzNmZhZjQwMGMyZDZmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIu
Y3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUg
ewpAQCAtNDk3LDcgKzQ5OCw3IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMgYm9v
bCBoYXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50
JiBlbGVtZW50KQogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxh
eS0zLyN1bmJveC1odG1sCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0g
W10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xp
c3RbXSA9IHsKICAgICAgICAgICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJUYWcu
Z2V0KCksCkBAIC01MTcsNyArNTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxh
eU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAg
ICAgICZ0ZXh0YXJlYVRhZy5nZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCksCiAg
ICAgICAgIH07Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAg
ICAgICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIG5hbWUgOiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5s
b2NhbE5hbWUoKSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5jcHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0Mjhm
OTllMjhhMTc4Ny4uNzEyNjgwYTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3ICsx
MjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGlu
ZXMoU3RyaW5nVmlldyBzdHJpbmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0YXRp
YyBjb25zdCBhdXRvIHN1cHBvcnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10g
ewotICAgICAgICBIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAg
ICAgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0LmFk
ZCh7CiAgICAgICAgICAgICBTVkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAppbmRleCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4MTdl
YjU0Li45YzE0MGNjMWQ0ZTAzOGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJfSU5M
SU5FIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1
dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5SUQ+
IGNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAtMTQx
LDE2ICsxNDIsMTYgQEAgc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBs
KiwgQ1NTUHJvcGVydHlJRD4gY3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRyLmdl
dCgpLAogICAgIH07CiAKLSAgICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJ
RD4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9t
U3RyaW5nLCBDU1NQcm9wZXJ0eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRy
aWJ1dGVOYW1lcykgewogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1l
LT5sb2NhbE5hbWUoKTsKLSAgICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQcm9w
ZXJ0eUlEKGxvY2FsTmFtZSkpOworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJvcGVy
dHlJRChsb2NhbE5hbWUpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3VwcG9y
dHMgInRyYW5zZm9ybS1vcmlnaW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVkLAog
ICAgIC8vIGFuZCB3ZSBjYW4gYWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJsZSBh
Ym92ZSBpbnN0ZWFkLgotICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFt
ZSgpLmltcGwoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQodHJh
bnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdp
bik7CiAKICAgICByZXR1cm4gbWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmllZE5h
bWUgU1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxOYW1lCiAgICAgICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAgICAg
ICAgICAgJlNWR05hbWVzOjpocmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1hcC5hZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03
ODAsNyArNzgxLDcgQEAgQ1NTUHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9y
U1ZHQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4gQ1NT
UHJvcGVydHlJbnZhbGlkOwogCiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9IG1h
a2VOZXZlckRlc3Ryb3llZChjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkp
OwotICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKS5p
bXBsKCkpOworICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5h
bWUoKSk7CiB9CiAKIGJvb2wgU1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmluZGV4
IDFkMmNkOTc4ZWQxMzIzNmQ2YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFkY2U1
ZjJiNjU3MDk5NmE1ZmE0NDU1NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUZXN0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApAQCAt
MTYzLDcgKzE2Myw3IEBAIHZvaWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlkYXRl
U3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmli
dXRlcykKK3ZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRy
aWJ1dGVzKQogewogICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNB
dHRyKTsKICAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1Mjk3
NmM1MjJhOGM1Yi4uMGMyNTIxNjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1Rlc3RzLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxpZmll
ZE5hbWUuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmlu
SG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBA
IGNsYXNzIFNWR1Rlc3RzIHsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFF1YWxpZmllZE5hbWU+Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBoYXNG
ZWF0dXJlRm9yTGVnYWN5QmluZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggZTA1
ZmI1M2MwMTk5NzE2YjM0NTZmNzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0M2Qz
YTI0MjIyYjhmNGZiMzc3MTExMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJY
TGlua05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3
NywxNCArMTc4LDE0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3Ry
aW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0
KCkKIHsKICAgICAvLyBTcGVjOiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGljcyBl
bGVtZW50IG9yIG90aGVyICd1c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0IHRo
YXQgY2FuIGJlIHJlLXVzZWQKICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBTVkcg
ZG9jdW1lbnQgdmlhIGEgJ3VzZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1lbnQi
IGlzIGRlZmluZWQgYXMgJ2NpcmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAncGF0
aCcsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNsdWRl
ZCBhcmUgYW55dGhpbmcgdGhhdCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkgbWFr
ZSBzZW5zZSB0byBhcHBlYXIgb25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVzcGFj
ZSBTVkdOYW1lczsKLSAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZvciAo
YXV0byYgdGFnIDogeyBhVGFnLmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0KCks
IGVsbGlwc2VUYWcuZ2V0KCksIGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFnLmdl
dCgpLCBtZXRhZGF0YVRhZy5nZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQoKSwg
cG9seWxpbmVUYWcuZ2V0KCksIHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNoVGFn
LmdldCgpLCBzeW1ib2xUYWcuZ2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdldCgp
LCB0aXRsZVRhZy5nZXQoKSwgdHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRhZy5n
ZXQoKSB9KQogICAgICAgICBzZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNl
dDsKQEAgLTE5Miw3ICsxOTMsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVB
bGxvd2VkRWxlbWVudFNldCgpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRFbGVt
ZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxBdG9tU3RyaW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsK
ICAgICByZXR1cm4gIXNldC5nZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApp
bmRleCA2ODE5MWI5NGE0MDAxMDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFlNzZk
YTRhZmQ2MDQ5ZGJjYTYwYjkwZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00NjIsNyArNDYzLDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9y
RW5kKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9vbCBT
VkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9
IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMg
Y29uc3QgYXV0byBzdXBwb3J0ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAg
ICAgIFNWR05hbWVzOjpiZWdpbkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAogICAg
ICAgICBTVkdOYW1lczo6ZHVyQXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3Bw
CmluZGV4IDlmZGZiYThiMTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBjMjJk
NGI2N2NlNWZmYTNiODMwNjljYmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
RnVuY3Rpb25zLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCArNjY5
LDQ0IEBAIHN0cnVjdCBGdW5jdGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVudENv
dW50SW50ZXJ2YWw7CiB9OwogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFs
dWU+IGNyZWF0ZUZ1bmN0aW9uTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8U3RyaW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1h
cCgpCiB7CiAgICAgc3RydWN0IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1hcFZh
bHVlIGZ1bmN0aW9uOwogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5n
IGZ1bmN0aW9uc1tdID0gewotICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlvbkJv
b2xlYW4sIDEgfSB9LAotICAgICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNlaWxp
bmcsIDEgfSB9LAotICAgICAgICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJ
bnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwgeyBj
cmVhdGVGdW5jdGlvbkNvbnRhaW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNyZWF0
ZUZ1bmN0aW9uQ291bnQsIDEgfSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVuY3Rp
b25GYWxzZSwgMCB9IH0sCi0gICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZsb29y
LCAxIH0gfSwKLSAgICAgICAgeyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAotICAg
ICAgICB7ICJsYW5nIiwgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7ICJs
YXN0IiwgeyBjcmVhdGVGdW5jdGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1uYW1l
IiwgeyBjcmVhdGVGdW5jdGlvbkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAg
ICB7ICJuYW1lIiwgeyBjcmVhdGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAg
ICAgICAgeyAibmFtZXNwYWNlLXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkksIElu
dGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVhdGVG
dW5jdGlvbk5vcm1hbGl6ZVNwYWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5v
dCIsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7IGNy
ZWF0ZUZ1bmN0aW9uTnVtYmVyLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBvc2l0
aW9uIiwgeyBjcmVhdGVGdW5jdGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91bmQi
LCB7IGNyZWF0ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0aCIs
IHsgY3JlYXRlRnVuY3Rpb25TdGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5nIiwg
eyBjcmVhdGVGdW5jdGlvblN0cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJz
dHJpbmctbGVuZ3RoIiwgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwg
MSkgfSB9LAotICAgICAgICB7ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5n
LCBJbnRlcnZhbCgyLCAzKSB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgY3Jl
YXRlRnVuY3Rpb25TdWJzdHJpbmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1i
ZWZvcmUiLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAgICAg
eyAic3VtIiwgeyBjcmVhdGVGdW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5zbGF0
ZSIsIHsgY3JlYXRlRnVuY3Rpb25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVlIiwg
eyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uQm9vbGVhbiwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsgY3Jl
YXRlRnVuY3Rpb25DZWlsaW5nLCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNyZWF0
ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgICAg
IHsgImNvbnRhaW5zIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAgICAg
ICB7ICJjb3VudCJfcywgeyBjcmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAgeyAi
ZmFsc2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZsb29y
Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywgeyBj
cmVhdGVGdW5jdGlvbklkLCAxIH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVGdW5j
dGlvbkxhbmcsIDEgfSB9LAorICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTGFz
dCwgMCB9IH0sCisgICAgICAgIHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25Mb2Nh
bE5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVhdGVG
dW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNlLXVy
aSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAor
ICAgICAgICB7ICJub3JtYWxpemUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVT
cGFjZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRlRnVu
Y3Rpb25Ob3QsIDEgfSB9LAorICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rpb25O
dW1iZXIsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsgY3Jl
YXRlRnVuY3Rpb25Qb3NpdGlvbiwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uUm91bmQsIDEgfSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBjcmVh
dGVGdW5jdGlvblN0YXJ0c1dpdGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsgY3Jl
YXRlRnVuY3Rpb25TdHJpbmcsIEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3RyaW5n
LWxlbmd0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkg
fSB9LAorICAgICAgICB7ICJzdWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcs
IEludGVydmFsKDIsIDMpIH0gfSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmct
YmVmb3JlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICAg
ICAgeyAic3VtIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAidHJh
bnNsYXRlIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAgeyAi
dHJ1ZSJfcywgeyBjcmVhdGVGdW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgRnVuY3Rpb25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsKICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1bmN0
aW9uLm5hbWUsIGZ1bmN0aW9uLmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFBhcnNlci5jcHAKaW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQwYzc5
MGQ1ODk1MC4uODlmN2VkOWQ3MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiWFBh
dGhQYXRoLmgiCiAjaW5jbHVkZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBA
IC03NiwyOCArNzcsMjggQEAgc3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3RlcikK
ICAgICByZXR1cm4gTm90UGFydE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBT
dGVwOjpBeGlzPiBjcmVhdGVBeGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1l
c01hcCgpCiB7CiAgICAgc3RydWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKKyAgICAgICAgQVNDSUlMaXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsK
ICAgICB9OwogICAgIGNvbnN0IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAgICB7
ICJhbmNlc3RvciIsIFN0ZXA6OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rvci1v
ci1zZWxmIiwgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJpYnV0
ZSIsIFN0ZXA6OkF0dHJpYnV0ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGls
ZEF4aXMgfSwKLSAgICAgICAgeyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0s
Ci0gICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZB
eGlzIH0sCi0gICAgICAgIHsgImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKLSAg
ICAgICAgeyAiZm9sbG93aW5nLXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9
LAotICAgICAgICB7ICJuYW1lc3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAgICAg
IHsgInBhcmVudCIsIFN0ZXA6OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5nIiwg
U3RlcDo6UHJlY2VkaW5nQXhpcyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0
ZXA6OlByZWNlZGluZ1NpYmxpbmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxm
QXhpcyB9CisgICAgICAgIHsgImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAg
ICAgICAgeyAiYW5jZXN0b3Itb3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0s
CisgICAgICAgIHsgImF0dHJpYnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAg
ICB7ICJjaGlsZCJfcywgU3RlcDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQi
X3MsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2Vs
ZiJfcywgU3RlcDo6RGVzY2VuZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5n
Il9zLCBTdGVwOjpGb2xsb3dpbmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5n
Il9zLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2Ui
X3MsIFN0ZXA6Ok5hbWVzcGFjZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVwOjpQ
YXJlbnRBeGlzIH0sCisgICAgICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5nQXhp
cyB9LAorICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5nU2li
bGluZ0F4aXMgfSwKKyAgICAgICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAgIH07
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAgICAg
Zm9yIChhdXRvJiBheGlzTmFtZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChheGlz
TmFtZS5uYW1lLCBheGlzTmFtZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggODdi
ZDI4ZWI0OGFlMjQwMDY1NThlOGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMyNjRl
MGM1YTA5YzdlYmJlM2RjZGNlN2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVk
ZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENv
cGllci5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBTdHJp
bmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcg
T2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJuICJD
UkVBVEUgVEFCTEUgXCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZ
IEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1Qg
RkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIg
Tk9UIE5VTEwsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdy
YW5kZmF0aGVyZWQgSU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVM
TCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJ
TlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFCTEUg
XCJPYnNlcnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0
cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNl
ZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQg
SU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJl
dmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBO
VUxMLHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJ
IElOVEVHRVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJ
TlRFR0VSIE5PVCBOVUxMKSJfczsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYg
ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBj
b2x1bW5zID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVE
b21haW5JRCIsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1lT2ZB
ZENsaWNrIiwgInRva2VuIiwgInNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGljIGNv
bnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJz
b3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJj
ZUlEIl9zLCAidGltZU9mQWRDbGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5
SUQiX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBF
eHBlY3RlZENvbHVtbnMmIGV4cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRp
YyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4g
eyAic291cmNlU2l0ZURvbWFpbklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJj
ZUlEIiwgImF0dHJpYnV0aW9uVHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRDbGlj
ayIsICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUiLCAi
a2V5SUQiLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3RhdGlj
IGNvbnN0IGF1dG8gY29sdW1ucyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7
ICJzb3VyY2VTaXRlRG9tYWluSUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNv
dXJjZUlEIl9zLCAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGlt
ZU9mQWRDbGljayJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3Ms
ICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRp
b24iX3MgfSk7CiAgICAgcmV0dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsyOTQs
OSBAQCBzdGF0aWMgYm9vbCBuZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYg
c2NoZW1hKQogICAgIHJldHVybiBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zIik7CiB9CiAKLXN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3Jl
YXRlVGFibGVRdWVyaWVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQogewot
ICAgIHN0YXRpYyBhdXRvIGNyZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVy
aWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3Ms
IGNyZWF0ZU9ic2VydmVkRG9tYWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBj
cmVhdGVUb3BMZXZlbERvbWFpbnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnMiX3MsIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc30s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5o
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBlNDhl
ODMyNmEyYTczNWVmOTI0Zjg3MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3MmFj
YzFhZTMzYzk1ODdjNDgyM2JmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmgKQEAgLTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
PiA6IFZlY3RvckFyZ3VtZW50Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hB
cmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJn
LCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNo
TWFwVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZywgdHlwZW5hbWUgSGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZywgSGFzaFRhYmxlVHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hU
YWJsZVRyYWl0cz4gSGFzaE1hcFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0LDYg
KzUxNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhhc2hN
YXAucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25h
bDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDggKzU1
Miw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0
cnVjdCBBcmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+
PiB7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBI
YXNoU2V0VHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBB
cmd1bWVudENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hU
YWJsZVRyYWl0cz4+IHsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAg
ICAgewpAQCAtNTc5LDYgKzU4MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hTZXQ7
CisgICAgICAgIGhhc2hTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7CiAg
ICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dz
ZXJDaGVja3MubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3Nl
ckNoZWNrcy5tbQppbmRleCA0OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFiZDZk
Li45YTRkNzgwOWU2M2U0ODUyNDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAjaW1w
b3J0IDx3dGYvSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1w
b3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNp
bXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAt
NTgsNyArNTksNyBAQCBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
PiBnZXRBcHBCb3VuZERvbWFpbnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJRC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBhdXRv
IGFwcEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRvIGFw
cEJvdW5kRG9tYWluTGlzdCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+PiB7CiAgICAgICAgIHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVyIl9z
LCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygiMTI3
LjAuMC4xIikgfX0sCiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNTdG9yZS5jcHAKaW5kZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZkZDgx
ZDBkNy4uY2U1NmY5Y2Q0NjI4NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1Miwx
MyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAKIGJvb2wgV2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlciwgV2ViUHJlZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlvbmFs
PEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4g
dmFsdWVzOwogICAgIGRlY29kZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVzKTsK
IAotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZhdWx0
czsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRlY29k
ZXIgPj4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
c1N0b3JlLmgKaW5kZXggYzVmZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYwOC4u
NGEzZDhmMmE0ZTRjZjBjNzgxZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j
bHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC02Niw3ICs2Niw3IEBAIHN0cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVzaW5n
IFZhbHVlID0gVmFyaWFudDxTdHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZhbHVl
TWFwID0gTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAgICAg
VmFsdWVNYXAgbV92YWx1ZXM7CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94
eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5
Q29jb2EubW0KaW5kZXggMmYwYWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4Ny4u
MDQxNzQ4YjkwNDRhZDI1MzY4OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAg
LTY1LDkgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRz
IHVuZXhwZWN0ZWRBY3Rpdml0eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3Mo
KQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4m
IFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCiB7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRo
c1dpdGhBc3N1bWVkUmVhZEFjY2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxTdHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJ
ZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFu
ZGFyZGl6aW5nUGF0aCwKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYktpdCJdLnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRo
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApp
bmRleCA1YTY2MjAyMjkxMzA0YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBhZmI0
M2I3NDUwMzliMGI0ODMzNTFlNDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5Ojp1cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAKICNp
ZiAhUExBVEZPUk0oQ09DT0EpCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5Ojpw
bGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNj
ZXNzOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2Vz
czsKICAgICByZXR1cm4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCBlZjA1
YjQxNDcwY2VlNWZlY2FmNzVjYmZiZTM2ZTFmMDhiZmQ3ZTY1Li5hNjhhOWMxNTFiM2MyZDAxN2Jm
MGQ3ZmQwYWI0ZjZhYjMyODQ5OTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5o
PgogCiAjaWYgSEFWRShWSVNJQklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzgsNyArNDc5
LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHVibGljIFJlc3BvbnNpdmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWluZ0Rl
YnVnZ2VkKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRDb2Rl
KCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBh
dGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFz
c3VtZWRSZWFkQWNjZXNzKCk7CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZl
bmVzc1RpbWVyKCkgeyByZXR1cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9pZCB1
cGRhdGVCYWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdmZGU0MjI3MmQ0YWM1OTU5MmU5Mzg2
NmZjOGE3MDNhZWViNTRhYjEuLjJkZWIyZTQ1MTQ4MTNlYTA2MWUwNTIzZjVhNTZlZDczNzQ3NjRl
MDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEZpbCBQaXpsby4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
RGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNp
bmdFbnN1cmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpaZXJvSGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpPYmplY3RXaXRoUmVmTG9nZ2VyOjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnRlc3RNb3ZpbmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdBZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVy
ZWZPYnNlcnZlcjo6cmVmKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6
OmRlcmVmKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVz
dHJ1Y3Rvcjo6VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRo
Q3VzdG9tRGVzdHJ1Y3Rvcik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9i
aW5Ib29kSGFzaFNldC5jcHA6IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0hhc2hTZXQuY3BwLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2FwYWNpdHlGb3JTaXpl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RJbml0aWFsQ2FwYWNpdHkpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZP
YnNlcnZlcjo6cmVmKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRl
cmVmKToKKwogMjAyMS0wNC0wMSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRW5hYmxlIGV3cyBzdGF0dXMgYnViYmxlIGZvciBzdHJlc3MgdGVzdHMgZXdz
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCA5YzU1ZTRmNmVhYThlNWJhYWFkYTEy
MjU2NjIwNTllZGY2MjVjZDBlLi4zZjdjZmZkZTI5MWMyZDgyZGQxMjUxYmJlYzhjODEzMTEyN2Zi
ZWZlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTc5LDYgKzc5LDggQEAgc2V0
KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dURi9SZWZDb3VudGVyLmNwcAogICAgIFRlc3Rz
L1dURi9SZWZMb2dnZXIuY3BwCiAgICAgVGVzdHMvV1RGL1JlZlB0ci5jcHAKKyAgICBUZXN0cy9X
VEYvUm9iaW5Ib29kSGFzaE1hcC5jcHAKKyAgICBUZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5j
cHAKICAgICBUZXN0cy9XVEYvUnVuTG9vcC5jcHAKICAgICBUZXN0cy9XVEYvU0hBMS5jcHAKICAg
ICBUZXN0cy9XVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDM4ZTE1ZmI0NjBiYWVhMTgxZTFlYmU2YjJiYTRjYWIxOWFhMmMwMmEu
LjU2ZWNlZmVlNjFkNmQyYzY1Mzc4NDA4YmZlN2VlZjk0NTY2ODJlOTIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTEzLDYgKzExMTMsOCBAQAogCQlFMzI1QzkwNzIzRTM4NzAyMDBCQzdE
M0IgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzI1QzkwNjIzRTM4NzAyMDBCQzdEM0IgLyogUGljdHVy
ZUluUGljdHVyZVN1cHBvcnQubW0gKi87IH07CiAJCUUzMkI1NDkyMjI4MTBBQzQwMDhBRDcwMiAv
KiBQYWNrZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTMyQjU0OTEyMjgxMEFDMDAwOEFENzAyIC8qIFBhY2tlZC5jcHAgKi87IH07CiAJCUUzNEE2
RDE5MjQxMkRFMzkwMDEyQUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0QTZEMTgy
NDEyREUzOTAwMTJBQjZFIC8qIEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZpY2UubW0gKi87
IH07CisJCUUzNTVBNjMwMjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVBNjJGMjYx
NTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAqLzsgfTsKKwkJRTM1NUE2MzIy
NjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1NUE2MzEyNjE1NzE4RjAwMUMxMTI5IC8q
IFJvYmluSG9vZEhhc2hNYXAuY3BwICovOyB9OwogCQlFMzVCOTA4MjIzRjYwREQwMDAwMDExRkYg
LyogTG9jYWxpemVkRGV2aWNlTW9kZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzVCOTA4MTIzRjYwREQwMDAwMDExRkYgLyogTG9jYWxpemVkRGV2
aWNlTW9kZWwubW0gKi87IH07CiAJCUUzNUZDN0IyMjJCODJBNzMwMEYzMkY5OCAvKiBKU0xvY2tU
YWtlc1dlYlRocmVhZExvY2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzVGQzdCMTIyQjgyQTZEMDBGMzJGOTggLyogSlNMb2NrVGFrZXNXZWJUaHJl
YWRMb2NrLm1tICovOyB9OwogCQlFMzczRDc5MTFGMkNGMzUyMDBDNkZBQUYgLyogU2lnbmFscy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzk1M0Y5
NTFGMkNGMzIxMDBBNzZBMkUgLyogU2lnbmFscy5jcHAgKi87IH07CkBAIC0yOTAzLDYgKzI5MDUs
OCBAQAogCQlFMzI1QzkwNjIzRTM4NzAyMDBCQzdEM0IgLyogUGljdHVyZUluUGljdHVyZVN1cHBv
cnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQjU0OTEyMjgxMEFDMDAwOEFENzAyIC8q
IFBhY2tlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWNrZWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzRBNkQxODI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NU
b1ByZWZlcmVuY2VzU2VydmljZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyYW50QWNjZXNz
VG9QcmVmZXJlbmNlc1NlcnZpY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
NTVBNjJGMjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMzU1QTYzMTI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5I
b29kSGFzaE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSb2Jp
bkhvb2RIYXNoTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1QjkwODEy
M0Y2MEREMDAwMDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTG9jYWxpemVkRGV2aWNlTW9kZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzNUZDN0IxMjJCODJBNkQwMEYzMkY5OCAvKiBKU0xvY2tUYWtlc1dlYlRocmVhZExv
Y2subW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0xvY2tUYWtl
c1dlYlRocmVhZExvY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODg4ODcw
MjBDOTA5ODEwMEU2MzJCQyAvKiBXb3JrZXJQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdvcmtlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDQwOCw2ICs0NDEyLDggQEAKIAkJCQk0NDJCQkY2ODFDOTFDQUQ5MDAxNzA4N0YgLyog
UmVmTG9nZ2VyLmNwcCAqLywKIAkJCQk5M0E0MjdBRDE4MERBNjBGMDBDRDI0RDcgLyogUmVmTG9n
Z2VyLmggKi8sCiAJCQkJOTNBNDI3QTgxODBEOUIwNzAwQ0QyNEQ3IC8qIFJlZlB0ci5jcHAgKi8s
CisJCQkJRTM1NUE2MzEyNjE1NzE4RjAwMUMxMTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwICov
LAorCQkJCUUzNTVBNjJGMjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCAq
LywKIAkJCQlFNEM5QUJDNzFCM0RCMTcxMDA0MEE5ODcgLyogUnVuTG9vcC5jcHAgKi8sCiAJCQkJ
MTRGM0IxMTIxNUU0NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25z
LmNwcCAqLywKIAkJCQkxQTM1MjRBQzFENjNBNEZCMDAzMTcyOUIgLyogU2NvcGUuY3BwICovLApA
QCAtNTE1NSw2ICs1MTYxLDggQEAKIAkJCQk3QzgzREYxNjFEMEE1OTBDMDBGRUJDRjMgLyogUmVm
UHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0QUM4QkM2MjFEMDI0NUEwMENBRkIzNCAvKiBS
ZXRhaW5QdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjQxRDBBNTkwQzAwRkVCQ0Yz
IC8qIFJldGFpblB0ci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUzNTVBNjMyMjYxNTcxOEYwMDFD
MTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzNTVBNjMw
MjYxNTcxNzQwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERjA1MUQwQTU5MEMwMEZFQkNGMyAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERjI2MUQwQTU5MEMwMEZFQkNGMyAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM1MjRBRTFENjNBNEZCMDAzMTcyOUIg
LyogU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCmluZGV4IDQ1Y2NmYTQw
MzBlMTJhZDNjNWE2ZGMzNzRjMTViZDllZDMxMDkwMmEuLmZkZmFiZWVjNGJmNGUwZDA3Y2Y4NTBj
NDIyYzQxMjRiNDdlNDcxYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0RlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oCkBAIC03Nyw2ICs3Nyw3IEBAIHRl
bXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPERlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvcj4gewog
ICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0
cnVlOyAvLyBUaGlzIGlzIG5vdCBjb3JyZWN0LCBidXQgZm9yIGRlYnVnZ2luZyBvZiBSb2Jpbkhv
b2RIYXNoU2V0LgogfTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFw
LmNwcAppbmRleCBhYWJlN2RkYWMyNzczYjZmNzk2ZTIwNDBiMzIyYmU1OWUxZjA3ODZkLi5jODQz
ZTdjNTVhYjEzNDNlODAyYWI3ODQ3MDQ3ZjlmODZhNTI0N2I4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcApAQCAtNjY4LDE0ICs2NjgsMTQgQEAgY2xhc3MgT2Jq
ZWN0V2l0aFJlZkxvZ2dlciB7CiB9OwogCiAKLXZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJlKFJl
ZjxSZWZMb2dnZXI+JiYgbG9nZ2VyKQorc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nRW5zdXJl
KFJlZjxSZWZMb2dnZXI+JiYgbG9nZ2VyKQogewogICAgIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6
dW5pcXVlX3B0cjxPYmplY3RXaXRoUmVmTG9nZ2VyPj4gbWFwOwogICAgIAogICAgIG1hcC5lbnN1
cmUoMSwgWyZdIHsgcmV0dXJuIG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxvZ2dlcj4oV1RGTW92
ZShsb2dnZXIpKTsgfSk7CiB9CiAKLXZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dn
ZXI+JiYgbG9nZ2VyKQorc3RhdGljIHZvaWQgdGVzdE1vdmluZ1VzaW5nQWRkKFJlZjxSZWZMb2dn
ZXI+JiYgbG9nZ2VyKQogewogICAgIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxP
YmplY3RXaXRoUmVmTG9nZ2VyPj4gbWFwOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0hhc2hTZXQuY3BwCmluZGV4IGU3Y2ZiY2NhZDFkNDU5Y2Q2NGNhMjEyODg4YTdhOTYyY2Q1ZTMw
MzEuLmIwYzY0OTIyNmVlYTNiY2YzMWUwYjAyODY0ODU3ZWJkNjY0YjdkNDkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCkBAIC03MCwxMSArNzAsMTEgQEAgdm9p
ZCB0ZXN0SW5pdGlhbENhcGFjaXR5KCkKICAgICBFWFBFQ1RfR1Qoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRlc3RTZXQuY2FwYWNpdHkoKSksIGluaXRpYWxDYXBhY2l0eSk7CiB9CiAKLXRlbXBsYXRl
PHVuc2lnbmVkIHNpemU+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpOwotdGVt
cGxhdGU8PiB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4oKQordGVtcGxhdGU8
dW5zaWduZWQgc2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgp
OwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+
KCkKIHsKIH0KLXRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNp
dHlVcFRvU2l6ZSgpCit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBpbmxpbmUgdm9pZCBnZW5lcmF0
ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCkKIHsKICAgICBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9T
aXplPHNpemUgLSAxPigpOwogICAgIHRlc3RJbml0aWFsQ2FwYWNpdHk8c2l6ZT4oKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVPbmx5LmggYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25seS5oCmluZGV4IGQ5YzIwNmMyOGVjNDlkY2Nk
MGNmOWQ0MDdhZDM3MmZhYzAyNDRiYWQuLmExMGM1ZThmODY1MWU3ZGE2NDJmYzRmZGYwMWQyZTBl
OGY1MzU3MDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01vdmVP
bmx5LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaApAQCAt
OTQsNyArOTQsOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxNb3ZlT25seT4gewog
ICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7IC8vIFRoaXMgaXMgbm90IGNvcnJl
Y3QsIGJ1dCBmb3IgZGVidWdnaW5nIG9mIFJvYmluSG9vZEhhc2hTZXQuCiB9OwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Jv
YmluSG9vZEhhc2hNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5I
b29kSGFzaE1hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTc3ZjdiNDhiNThmYjhhMjk5MmZmNGZjNTNiNWJl
NDAzNDI4YTBiZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCkBAIC0wLDAgKzEsMTI3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1
ZGUgIkRlbGV0ZWRBZGRyZXNzT2ZPcGVyYXRvci5oIgorI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisj
aW5jbHVkZSAiUmVmTG9nZ2VyLmgiCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgUm9iaW5Ib29kSGFzaCA6IHB1YmxpYyBEZWZhdWx0SGFzaDxUPiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK3R5cGVkZWYgV1RGOjpN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBpbnQsIFJvYmluSG9v
ZEhhc2g8aW50Pj4gSW50SGFzaE1hcDsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgSGFz
aFRhYmxlSXRlcmF0b3JDb21wYXJpc29uKQoreworICAgIEludEhhc2hNYXAgbWFwOworICAgIG1h
cC5hZGQoMSwgMik7CisgICAgQVNTRVJUX1RSVUUobWFwLmJlZ2luKCkgIT0gbWFwLmVuZCgpKTsK
KyAgICBBU1NFUlRfRkFMU0UobWFwLmJlZ2luKCkgPT0gbWFwLmVuZCgpKTsKKworICAgIEludEhh
c2hNYXA6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbWFwLmJlZ2luKCk7CisgICAgQVNTRVJUX1RS
VUUoYmVnaW4gPT0gbWFwLmJlZ2luKCkpOworICAgIEFTU0VSVF9UUlVFKG1hcC5iZWdpbigpID09
IGJlZ2luKTsKKyAgICBBU1NFUlRfVFJVRShiZWdpbiAhPSBtYXAuZW5kKCkpOworICAgIEFTU0VS
VF9UUlVFKG1hcC5lbmQoKSAhPSBiZWdpbik7CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luICE9IG1h
cC5iZWdpbigpKTsKKyAgICBBU1NFUlRfRkFMU0UobWFwLmJlZ2luKCkgIT0gYmVnaW4pOworICAg
IEFTU0VSVF9GQUxTRShiZWdpbiA9PSBtYXAuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRShtYXAu
ZW5kKCkgPT0gYmVnaW4pOworfQorCitzdHJ1Y3QgVGVzdERvdWJsZUhhc2hUcmFpdHMgOiBIYXNo
VHJhaXRzPGRvdWJsZT4geworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9
IDg7Cit9OworCit0eXBlZGVmIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxkb3VibGUsIGludDY0X3QsIFJvYmluSG9vZEhhc2g8ZG91YmxlPiwgVGVzdERvdWJsZUhhc2hU
cmFpdHM+IERvdWJsZUhhc2hNYXA7CisKK3N0YXRpYyBpbnQgYnVja2V0Rm9yS2V5KGRvdWJsZSBr
ZXkpCit7CisgICAgcmV0dXJuIERlZmF1bHRIYXNoPGRvdWJsZT46Omhhc2goa2V5KSAmIChUZXN0
RG91YmxlSGFzaFRyYWl0czo6bWluaW11bVRhYmxlU2l6ZSAtIDEpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQmlnVGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUcmFpdHM8
VD4geworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRh
YmxlQ2FwYWNpdHlGb3JTaXplPDQwOTY+Ojp2YWx1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBaZXJvSGFzaCA6IHB1YmxpYyBJbnRIYXNoPFQ+IHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBUJikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7Cit9OworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBEb3VibGVIYXNoQ29sbGlzaW9ucykKK3sKKyAgICAvLyBUaGUgImNsb2JiZXIiIGtleSBo
ZXJlIGlzIG9uZSB0aGF0IGVuZHMgdXAgc3RlYWxpbmcgdGhlIGJ1Y2tldCB0aGF0IHRoZSAtMCBr
ZXkKKyAgICAvLyBvcmlnaW5hbGx5IHdhbnRzIHRvIGJlIGluLiBUaGlzIG1ha2VzIHRoZSAwIGFu
ZCAtMCBrZXlzIGNvbGxpZGUgYW5kIHRoZSB0ZXN0IHRoZW4KKyAgICAvLyBmYWlscyB1bmxlc3Mg
dGhlIEZsb2F0SGFzaDo6ZXF1YWxzKCkgaW1wbGVtZW50YXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRo
ZW0uCisgICAgY29uc3QgZG91YmxlIGNsb2JiZXJLZXkgPSA2OworICAgIGNvbnN0IGRvdWJsZSB6
ZXJvS2V5ID0gMDsKKyAgICBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvS2V5ID0gLXplcm9LZXk7
CisKKyAgICBEb3VibGVIYXNoTWFwIG1hcDsKKyAgICBtYXAuYWRkKGNsb2JiZXJLZXksIDEpOwor
ICAgIG1hcC5hZGQoemVyb0tleSwgMik7CisgICAgbWFwLmFkZChuZWdhdGl2ZVplcm9LZXksIDMp
OworCisgICAgQVNTRVJUX0VRKGJ1Y2tldEZvcktleShjbG9iYmVyS2V5KSwgYnVja2V0Rm9yS2V5
KG5lZ2F0aXZlWmVyb0tleSkpOworICAgIEFTU0VSVF9FUShtYXAuZ2V0KGNsb2JiZXJLZXkpLCAx
KTsKKyAgICBBU1NFUlRfRVEobWFwLmdldCh6ZXJvS2V5KSwgMik7CisgICAgQVNTRVJUX0VRKG1h
cC5nZXQobmVnYXRpdmVaZXJvS2V5KSwgMyk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIE1vdmVPbmx5VmFsdWVzKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDx1bnNpZ25lZCwgTW92ZU9ubHksIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBt
b3ZlT25seVZhbHVlczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsK
KyAgICAgICAgTW92ZU9ubHkgbW92ZU9ubHkoaSArIDEpOworICAgICAgICBtb3ZlT25seVZhbHVl
cy5zZXQoaSArIDEsIFdURk1vdmUobW92ZU9ubHkpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtb3ZlT25seVZhbHVl
cy5maW5kKGkgKyAxKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5VmFsdWVz
LmVuZCgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDUwOyArK2kpCisg
ICAgICAgIEFTU0VSVF9FUShtb3ZlT25seVZhbHVlcy50YWtlKGkgKyAxKS52YWx1ZSgpLCBpICsg
MSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gNTA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNT
RVJUX1RSVUUobW92ZU9ubHlWYWx1ZXMucmVtb3ZlKGkgKyAxKSk7CisKKyAgICBBU1NFUlRfVFJV
RShtb3ZlT25seVZhbHVlcy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBNb3ZlT25seUtleXMpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPE1vdmVPbmx5LCB1bnNpZ25lZD4gbW92ZU9ubHlLZXlzOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShp
ICsgMSk7CisgICAgICAgIG1vdmVPbmx5S2V5cy5zZXQoV1RGTW92ZShtb3ZlT25seSksIGkgKyAx
KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAg
ICAgIGF1dG8gaXQgPSBtb3ZlT25seUtleXMuZmluZChNb3ZlT25seShpICsgMSkpOworICAgICAg
ICBBU1NFUlRfRkFMU0UoaXQgPT0gbW92ZU9ubHlLZXlzLmVuZCgpKTsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfRkFMU0UobW92
ZU9ubHlLZXlzLmFkZChNb3ZlT25seShpICsgMSksIGkgKyAxKS5pc05ld0VudHJ5KTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9UUlVFKG1v
dmVPbmx5S2V5cy5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBBU1NFUlRfVFJVRSht
b3ZlT25seUtleXMuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
SW5pdGlhbGl6ZXJMaXN0KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDx1bnNpZ25lZCwgc3RkOjpzdHJpbmcsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBt
YXAgPSB7CisgICAgICAgIHsgMSwgIm9uZSIgfSwKKyAgICAgICAgeyAyLCAidHdvIiB9LAorICAg
ICAgICB7IDMsICJ0aHJlZSIgfSwKKyAgICAgICAgeyA0LCAiZm91ciIgfSwKKyAgICB9OworCisg
ICAgRVhQRUNUX0VRKDR1LCBtYXAuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgib25lIiwgbWFw
LmdldCgxKSk7CisgICAgRVhQRUNUX0VRKCJ0d28iLCBtYXAuZ2V0KDIpKTsKKyAgICBFWFBFQ1Rf
RVEoInRocmVlIiwgbWFwLmdldCgzKSk7CisgICAgRVhQRUNUX0VRKCJmb3VyIiwgbWFwLmdldCg0
KSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCksIG1hcC5nZXQoNSkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFZmZpY2llbnRHZXR0ZXIpCit7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBDb3B5TW92ZUNvdW50ZXIs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLnNldCgxLCBDb3B5TW92ZUNv
dW50ZXIoKSk7CisKKyAgICB7CisgICAgICAgIENvcHlNb3ZlQ291bnRlcjo6VGVzdGluZ1Njb3Bl
IHNjb3BlOworICAgICAgICBtYXAuZ2V0KDEpOworICAgICAgICBFWFBFQ1RfRVEoMFUsIENvcHlN
b3ZlQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgICAgICBFWFBFQ1RfRVEoMVUsIENv
cHlNb3ZlQ291bnRlcjo6Y29weUNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDBVLCBDb3B5TW92
ZUNvdW50ZXI6Om1vdmVDb3VudCk7CisgICAgfQorCisgICAgeworICAgICAgICBDb3B5TW92ZUNv
dW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAgICAgbWFwLmdldCgyKTsKKyAgICAgICAg
RVhQRUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICAg
ICAgRVhQRUNUX0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCk7CisgICAgICAgIEVY
UEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQpOworICAgIH0KK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9
IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBtYXAuYWRk
KFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisgICAg
bWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfQ3VzdG9tRGVsZXRlcikKK3sKKyAgICBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgY29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlclNjb3BlOworICAgIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI+OjpUZXN0aW5nU2NvcGUgZGVsZXRlckNvdW50ZXJTY29wZTsKKworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI+Pj4+IG1hcDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4g
dW5pcXVlUHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKCksIERlbGV0ZXJDb3Vu
dGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCkpOworICAgIG1hcC5hZGQoV1RGTW92
ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisKKyAgICBFWFBFQ1Rf
RVEoMHUsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+OjpkZWxl
dGVyQ291bnQoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7
CisKKyAgICBFWFBFQ1RfRVEoMXUsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI+OjpkZWxldGVyQ291bnQoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hN
YXAsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiwgaW50LCBS
b2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4gbWFwOworCisgICAgYXV0byB1bmlx
dWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGlu
dCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIp
LCAyKTsKKworICAgIGF1dG8gaXQgPSBtYXAuZmluZChwdHIpOworICAgIEFTU0VSVF9UUlVFKGl0
ICE9IG1hcC5lbmQoKSk7CisgICAgRVhQRUNUX0VRKHB0ciwgaXQtPmtleS5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKDIsIGl0LT52YWx1ZSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAs
IFVuaXF1ZVB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludCwg
Um9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IG1hcDsKKworICAgIGF1dG8gdW5p
cXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBp
bnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRy
KSwgMik7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbWFwLmNvbnRhaW5zKHB0cikpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfR2V0VXNpbmdSYXdQb2ludGVy
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVu
aXF1ZV9wdHI8aW50PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Pj4g
bWFwOworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2ND
aGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIG1hcC5h
ZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIGludCB2YWx1ZSA9IG1hcC5nZXQocHRy
KTsKKyAgICBFWFBFQ1RfRVEoMiwgdmFsdWUpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBVbmlxdWVQdHJLZXlfUmVtb3ZlVXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisKKyAgICBhdXRvIHVuaXF1ZVB0
ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFw
LmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VR
KDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKwor
ICAgIGJvb2wgcmVzdWx0ID0gbWFwLnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCBy
ZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
Ojpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaE1hcCwgVW5pcXVlUHRyS2V5X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVtb3J5
Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVl
UHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBt
YXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwor
CisgICAgaW50IHJlc3VsdCA9IG1hcC50YWtlKHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHJlc3Vs
dCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNv
bnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBVbmlxdWVSZWZWYWx1ZSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8aW50LCBVbmlxdWVSZWY8aW50PiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7
CisgICAgVW5pcXVlUmVmPGludD4gZml2ZSA9IG1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrPGludD4oNSk7CisgICAgbWFwLmFkZCg1LCBXVEZNb3ZlKGZpdmUpKTsKKyAgICBFWFBF
Q1RfVFJVRShtYXAuY29udGFpbnMoNSkpOworICAgIGludCogc2hvdWxkQmVGaXZlID0gbWFwLmdl
dCg1KTsKKyAgICBFWFBFQ1RfRVEoKnNob3VsZEJlRml2ZSwgNSk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPGludD4gdGFrZW5GaXZlID0gbWFwLnRha2UoNSk7CisgICAgRVhQRUNUX0VRKCp0YWtlbkZp
dmUsIDUpOworICAgIG1hcC5lbnN1cmUoNiwgW10geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig2KTsKKyAgICB9KTsKKyAgICBFWFBFQ1Rf
RkFMU0UobWFwLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAuY29udGFpbnMoNikp
OworICAgIGZvciAoVW5pcXVlUmVmPGludD4mIGEgOiBtYXAudmFsdWVzKCkpCisgICAgICAgIEVY
UEVDVF9FUShhLmdldCgpLCA2KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVm
UHRyS2V5X0FkZCkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8
UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOwor
CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRy
LCAwKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAg
RGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8
UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRy
KCZhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92ZSkKK3sK
KyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShwdHIpLCAwKTsK
KyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9B
ZGRVc2luZ1JhdykKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8
UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOwor
CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRy
LmdldCgpLCAwKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAg
RGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQ
dHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4g
cHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1hcC5hZGQocHRyMiwgMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAg
ICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmVsZWFzZUtleUFs
cmVhZHlQcmVzZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBp
bnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsK
KyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBw
dHIyKCZhKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKFdURk1vdmUocHRyMiks
IDApOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
KworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAs
IFJlZlB0cktleV9BZGRVc2luZ01vdmVLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVk
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZM
b2dnZXI+Pj4gbWFwOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEp
OworICAgICAgICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJy
ZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbWFwLmFkZChXVEZNb3ZlKHB0cjIpLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKwor
ICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0KQoreworICAgIHsKKyAg
ICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dl
cj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworICAgIH0KKworICAgIEFTU0VS
VF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9TZXRV
c2luZ1JlbGVhc2UpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRy
PFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KFdU
Rk1vdmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ01vdmUpCit7CisgICAgeworICAgICAgICBEZXJpdmVk
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8
UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOwor
ICAgICAgICBtYXAuc2V0KFdURk1vdmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSYXcpCit7CisgICAgewor
ICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5I
b29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9n
Z2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ci5nZXQoKSwgMCk7CisgICAgfQorCisg
ICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRy
S2V5X1NldEtleUFscmVhZHlQcmVzZW50KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxv
Z2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAg
ICAgbWFwLnNldChwdHIsIDApOworCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1h
cC5zZXQocHRyMiwgMSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICAgICAgRVhQRUNUX0VRKDEsIG1hcC5nZXQocHRyLmdldCgpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFJlZlB0cktleV9TZXRVc2luZ1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sK
KyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50
LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAg
ICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgICAgIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAg
ICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuc2V0KFdURk1vdmUocHRyMiksIDEpOworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUSgxLCBtYXAuZ2V0KHB0ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAg
RVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
ICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlf
U2V0VXNpbmdNb3ZlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVk
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8
UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOwor
ICAgICAgICBtYXAuc2V0KHB0ciwgMCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbWFwLnNldChXVEZNb3ZlKHB0cjIpLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChw
dHIuZ2V0KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RS
RVEoImRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRW5zdXJlKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmluSG9vZEhhc2g8
dW5zaWduZWQ+PiBtYXA7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1
cmUoMSwgW10geyByZXR1cm4gMTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJh
dG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgICAgIGF1dG8gYWRkUmVzdWx0MiA9IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gMjsgfSk7
CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Mi5pdGVyYXRvci0+dmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShhZGRSZXN1bHQyLmlzTmV3RW50cnkpOworICAgIH0KK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgRW5zdXJlX01vdmVPbmx5VmFsdWVzKQoreworICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgTW92ZU9ubHksIFJvYmlu
SG9vZEhhc2g8dW5zaWduZWQ+PiBtb3ZlT25seVZhbHVlczsKKyAgICB7CisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbW92ZU9ubHlWYWx1ZXMuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIE1vdmVPbmx5
KDEpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LnZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBh
dXRvIGFkZFJlc3VsdDIgPSBtb3ZlT25seVZhbHVlcy5lbnN1cmUoMSwgW10geyByZXR1cm4gTW92
ZU9ubHkoMik7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3It
PnZhbHVlLnZhbHVlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0
b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQyLmlzTmV3RW50cnkpOwor
ICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRW5zdXJlX1VuaXF1ZVBvaW50
ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2ln
bmVkLCBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQ+LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4g
bWFwOworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuZW5zdXJlKDEsIFtdIHsg
cmV0dXJuIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPHVuc2lnbmVkPigxKTsgfSk7
CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKm1hcC5nZXQoMSkpOworICAgICAgICBFWFBFQ1RfRVEo
MXUsICphZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDF1LCBhZGRSZXN1bHQuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbWFwLmVuc3VyZSgx
LCBbXSB7IHJldHVybiBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazx1bnNpZ25lZD4o
Mik7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsICptYXAuZ2V0KDEpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDF1LCAqYWRkUmVzdWx0Mi5pdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworICAgICAgICBF
WFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShhZGRSZXN1bHQyLmlzTmV3RW50cnkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5I
b29kSGFzaE1hcCwgRW5zdXJlX1JlZlB0cikKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEi
KTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBtYXA7CisKKyAg
ICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBSZWZQdHI8UmVmTG9nZ2VyPigmYSk7IH0pOwor
ICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAg
IG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIFJlZlB0cjxSZWZMb2dnZXI+KCZhKTsgfSk7Cisg
ICAgRVhQRUNUX1NUUkVRKCIiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xl
YXIoKTsKKworICAgIEVYUEVDVF9TVFJFUSgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitjbGFzcyBPYmplY3RXaXRoUmVmTG9nZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmplY3RXaXRoUmVmTG9nZ2VyKFJlZjxSZWZMb2dn
ZXI+JiYgbG9nZ2VyKQorICAgICAgICA6IG1fbG9nZ2VyKFdURk1vdmUobG9nZ2VyKSkKKyAgICB7
CisgICAgfQorCisgICAgUmVmPFJlZkxvZ2dlcj4gbV9sb2dnZXI7Cit9OworCisKK3N0YXRpYyB2
b2lkIHRlc3RNb3ZpbmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3sKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6
dW5pcXVlX3B0cjxPYmplY3RXaXRoUmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+
IG1hcDsKKworICAgIG1hcC5lbnN1cmUoMSwgWyZdIHsgcmV0dXJuIG1ha2VVbmlxdWU8T2JqZWN0
V2l0aFJlZkxvZ2dlcj4oV1RGTW92ZShsb2dnZXIpKTsgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RNb3ZpbmdVc2luZ0FkZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3sKKyAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0
cjxPYmplY3RXaXRoUmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IG1hcDsKKwor
ICAgIGF1dG8mIHNsb3QgPSBtYXAuYWRkKDEsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBzbG90ID0gbWFrZVVuaXF1ZTxPYmplY3RXaXRoUmVmTG9nZ2VyPihXVEZNb3ZlKGxvZ2dlcikp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBFbnN1cmVfTGFtYmRhc0NhcHR1cmlu
Z0J5UmVmZXJlbmNlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgdGVzdE1vdmluZ1VzaW5n
RW5zdXJlKFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
RGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsK
KyAgICAgICAgdGVzdE1vdmluZ1VzaW5nQWRkKFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgRVhQ
RUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAg
IH0KK30KKworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBWYWx1ZUlzRGVzdHJ1Y3RlZE9u
UmVtb3ZlKQoreworICAgIHN0cnVjdCBEZXN0cnVjdG9yT2JzZXJ2ZXIgeworICAgICAgICBEZXN0
cnVjdG9yT2JzZXJ2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVy
KGJvb2wqIGRlc3RydWN0ZWQpCisgICAgICAgICAgICA6IGRlc3RydWN0ZWQoZGVzdHJ1Y3RlZCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgfkRlc3RydWN0b3JPYnNlcnZlcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkZXN0cnVjdGVkKQorICAgICAgICAgICAgICAgICpk
ZXN0cnVjdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIERlc3RydWN0b3JPYnNlcnZl
cihEZXN0cnVjdG9yT2JzZXJ2ZXImJiBvdGhlcikKKyAgICAgICAgICAgIDogZGVzdHJ1Y3RlZChv
dGhlci5kZXN0cnVjdGVkKQorICAgICAgICB7CisgICAgICAgICAgICBvdGhlci5kZXN0cnVjdGVk
ID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIERlc3RydWN0b3JPYnNlcnZlciYgb3Bl
cmF0b3I9KERlc3RydWN0b3JPYnNlcnZlciYmIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAg
ICBkZXN0cnVjdGVkID0gb3RoZXIuZGVzdHJ1Y3RlZDsKKyAgICAgICAgICAgIG90aGVyLmRlc3Ry
dWN0ZWQgPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCogZGVzdHJ1Y3RlZCB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgRGVzdHJ1Y3Rvck9ic2Vy
dmVyLCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgIGJvb2wgZGVzdHJ1Y3RlZCA9IGZh
bHNlOworICAgIG1hcC5hZGQoNSwgRGVzdHJ1Y3Rvck9ic2VydmVyIHsgJmRlc3RydWN0ZWQgfSk7
CisKKyAgICBFWFBFQ1RfRkFMU0UoZGVzdHJ1Y3RlZCk7CisKKyAgICBib29sIHJlbW92ZVJlc3Vs
dCA9IG1hcC5yZW1vdmUoNSk7CisKKyAgICBFWFBFQ1RfVFJVRShyZW1vdmVSZXN1bHQpOworICAg
IEVYUEVDVF9UUlVFKGRlc3RydWN0ZWQpOworfQorCitzdHJ1Y3QgRGVyZWZPYnNlcnZlciB7Cisg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIE5FVkVSX0lOTElORSB2b2lk
IHJlZigpCisgICAgeworICAgICAgICArK2NvdW50OworICAgIH0KKyAgICBORVZFUl9JTkxJTkUg
dm9pZCBkZXJlZigpCisgICAgeworICAgICAgICAtLWNvdW50OworICAgICAgICBvYnNlcnZlZEJ1
Y2tldCA9IGJ1Y2tldEFkZHJlc3MtPmdldCgpOworICAgIH0KKyAgICB1bnNpZ25lZCBjb3VudCB7
IDEgfTsKKyAgICBjb25zdCBSZWZQdHI8RGVyZWZPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgeyBu
dWxscHRyIH07CisgICAgY29uc3QgRGVyZWZPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgeyBudWxs
cHRyIH07Cit9OworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJOb3RaZXJvZWRC
ZWZvcmVEZXJlZikKK3sKKyAgICBhdXRvIG9ic2VydmVyID0gbWFrZVVuaXF1ZTxEZXJlZk9ic2Vy
dmVyPigpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJl
ZlB0cjxEZXJlZk9ic2VydmVyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxEZXJlZk9ic2Vy
dmVyPj4+IG1hcDsKKyAgICBtYXAuYWRkKGFkb3B0UmVmKG9ic2VydmVyLmdldCgpKSwgNSk7CisK
KyAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQob2JzZXJ2ZXIuZ2V0KCkpOworICAgIEVYUEVD
VF9UUlVFKGl0ZXJhdG9yICE9IG1hcC5lbmQoKSk7CisKKyAgICBvYnNlcnZlci0+YnVja2V0QWRk
cmVzcyA9ICZpdGVyYXRvci0+a2V5OworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2Vy
dmVkQnVja2V0ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUob2JzZXJ2
ZXIuZ2V0KCkpKTsKKworICAgIC8vIEl0IGlmIGZpbmUgdG8gZWl0aGVyIGxlYXZlIHRoZSBvbGQg
dmFsdWUgaW50YWN0IGF0IGRlbGV0aW9uIG9yIGFscmVhZHkgc2V0IGl0IHRvIHRoZSBkZWxldGVk
CisgICAgLy8gdmFsdWUuCisgICAgLy8gQSB6ZXJvIHdvdWxkIGJlIGEgaW5jb3JyZWN0IG91dGNv
bWUgYXMgaXQgd291bGQgbWVhbiB3ZSBudWxsZWQgdGhlIGJ1Y2tldCBiZWZvcmUgYW4gb3BhcXVl
CisgICAgLy8gY2FsbC4KKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQg
PT0gb2JzZXJ2ZXIuZ2V0KCkgfHwgb2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IFJlZlB0cjxE
ZXJlZk9ic2VydmVyPjo6UHRyVHJhaXRzOjpoYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAg
RVhQRUNUX0VRKG9ic2VydmVyLT5jb3VudCwgMHUpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZfS2V5KQoreworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxv
Z2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAg
ICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAx
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dn
ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAg
UmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuc2V0KFdURk1vdmUocmVmKSwgMSk7
CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJl
ZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWZBKSwgMSk7
CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQTIoYSk7CisgICAgICAgIG1hcC5zZXQoV1RG
TW92ZShyZWZBMiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVm
PFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuZW5zdXJlKFdURk1vdmUocmVmKSwgW10oKSB7CisgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFw
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZN
b3ZlKHJlZiksIDEpOworCisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmluZCgmYSk7CisgICAgICAg
IEFTU0VSVF9UUlVFKGl0ICE9IG1hcC5lbmQoKSk7CisKKyAgICAgICAgQVNTRVJUX0VRKGl0LT5r
ZXkucHRyKCksICZhKTsKKyAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIDEpOworCisgICAgICAg
IG1hcC5yZW1vdmUoJmEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1h
cDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RG
TW92ZShyZWYpLCAxKTsKKworICAgICAgICBpbnQgaSA9IG1hcC50YWtlKCZhKTsKKyAgICAgICAg
QVNTRVJUX0VRKGksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBtYXA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjQ7ICsraSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dn
ZXIgb2JqZWN0cyBsZWFrLiBObyBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAg
ICAgICBSZWY8UmVmTG9nZ2VyPiByZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsK
KyAgICAgICAgICAgIGF1dG8qIHBvaW50ZXIgPSByZWYucHRyKCk7CisgICAgICAgICAgICBtYXAu
YWRkKFdURk1vdmUocmVmKSwgaSArIDEpOworICAgICAgICAgICAgQVNTRVJUX1RSVUUobWFwLmNv
bnRhaW5zKHBvaW50ZXIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBSZWZfVmFsdWUpCit7CisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJl
ZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4s
IFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihh
KTsKKyAgICAgICAgbWFwLnNldCgxLCBXVEZNb3ZlKHJlZikpOworICAgIH0KKworICAgIEFTU0VS
VF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAg
IHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAgICAgUmVmTG9nZ2VyIGIoImIiKTsK
KworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBS
ZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJl
ZkxvZ2dlcj4gcmVmQShhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZkEpKTsKKwor
ICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZCKGIpOworICAgICAgICBtYXAuc2V0KDEsIFdURk1v
dmUocmVmQikpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihiKSBkZXJl
ZihhKSBkZXJlZihiKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAg
IFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFw
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBX
VEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYUdldCA9IG1hcC5nZXQoMSk7CisgICAgICAg
IEFTU0VSVF9FUShhR2V0LCAmYSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
ZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwg
Um9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgYXV0byBlbXB0eUdldCA9IG1hcC5n
ZXQoMSk7CisgICAgICAgIEFTU0VSVF9UUlVFKGVtcHR5R2V0ID09IG51bGxwdHIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBtYXAuYWRkKDEsIFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgYXV0byBhT3V0ID0gbWFw
LnRha2UoMSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsK
KyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJl
ZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBhdXRvIGVt
cHR5VGFrZSA9IG1hcC50YWtlKDEpOworICAgICAgICBBU1NFUlRfRkFMU0Uoc3RhdGljX2Nhc3Q8
Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgi
YSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxp
bnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBS
ZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsK
KyAgICAgICAgbWFwLnJlbW92ZSgxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOwor
CisgICAgICAgIG1hcC5lbnN1cmUoMSwgWyZdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBSZWY8
UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgICAgICByZXR1cm4gcmVmOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1h
cDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxlYWsuIE5vIGJpZyBkZWFs
IGZvciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZiA9IGFk
b3B0UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAgbWFwLmFkZChpICsgMSwg
V1RGTW92ZShyZWYpKTsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKG1hcC5jb250YWlucyhpICsg
MSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIERlbGV0
ZWRBZGRyZXNzT2ZPcGVyYXRvcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8aW50LCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IsIFJvYmluSG9vZEhhc2g8
aW50Pj4gbWFwMTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbWFwMS52YWx1ZXMoKSkKKyAgICAg
ICAgKHZvaWQpdmFsdWU7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZk1hcHBl
ZFRvTm9uWmVyb0VtcHR5VmFsdWUpCit7CisgICAgY2xhc3MgVmFsdWUgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVmFsdWUoKSA9IGRlZmF1bHQ7CisgICAgICAgIFZhbHVlKFZhbHVlJiYpID0gZGVm
YXVsdDsKKyAgICAgICAgVmFsdWUoY29uc3QgVmFsdWUmKSA9IGRlZmF1bHQ7CisgICAgICAgIFZh
bHVlJiBvcGVyYXRvcj0oVmFsdWUmJikgPSBkZWZhdWx0OworCisgICAgICAgIFZhbHVlKGludDMy
X3QgZikKKyAgICAgICAgICAgIDogbV9maWVsZChmKQorICAgICAgICB7IH0KKworICAgICAgICBp
bnQzMl90IGZpZWxkKCkgeyByZXR1cm4gbV9maWVsZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgaW50MzJfdCBtX2ZpZWxkIHsgMHhiYWRiZWVmIH07CisgICAgfTsKKworICAgIGNsYXNzIEtl
eSA6IHB1YmxpYyBSZWZDb3VudGVkPEtleT4geworICAgICAgICBLZXkoKSA9IGRlZmF1bHQ7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPEtleT4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBLZXkpOyB9CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoIVdURjo6SGFz
aFRyYWl0czxWYWx1ZT46OmVtcHR5VmFsdWVJc1plcm8sICIiKTsKKworICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8S2V5PiwgVmFsdWUsIFJvYmluSG9vZEhh
c2g8UmVmPEtleT4+PiBtYXA7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWY8S2V5PiwgaW50MzJf
dD4+IHZlY3Rvck1hcDsKKworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IDE2MDsgKytpKSB7
CisgICAgICAgIFJlZjxLZXk+IGtleSA9IEtleTo6Y3JlYXRlKCk7CisgICAgICAgIG1hcC5hZGQo
UmVmPEtleT4oa2V5LmdldCgpKSwgVmFsdWUgeyBpIH0pOworICAgICAgICB2ZWN0b3JNYXAuYXBw
ZW5kKHsgV1RGTW92ZShrZXkpLCBpIH0pOworICAgIH0KKworICAgIGZvciAoYXV0byYgcGFpciA6
IHZlY3Rvck1hcCkKKyAgICAgICAgQVNTRVJUX0VRKHBhaXIuc2Vjb25kLCBtYXAuZ2V0KHBhaXIu
Zmlyc3QpLmZpZWxkKCkpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogdmVjdG9yTWFwKQorICAg
ICAgICBBU1NFUlRfVFJVRShtYXAucmVtb3ZlKHBhaXIuZmlyc3QpKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX0VtcHR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIFJvYmluSG9vZEhhc2g8
dW5zaWduZWQ+PiBtYXA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5yYW5kb20oKTsKKyAgICBB
U1NFUlRfRVEocmVzdWx0LCBtYXAuZW5kKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBSYW5kb21fV3JhcEFyb3VuZCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBaZXJvSGFzaDx1bnNpZ25lZD4sIEJp
Z1RhYmxlSGFzaFRyYWl0czx1bnNpZ25lZD4+IG1hcDsKKyAgICBtYXAuYWRkKDEsIDEpOworCisg
ICAgYXV0byByZXN1bHQgPSBtYXAucmFuZG9tKCk7CisgICAgQVNTRVJUX0VRKHJlc3VsdCwgbWFw
LmJlZ2luKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSYW5kb21fSXNFdmVu
bHlEaXN0cmlidXRlZCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1hcDsKKyAgICBtYXAuYWRk
KDAsIDApOworICAgIG1hcC5hZGQoMSwgMSk7CisKKyAgICB1bnNpZ25lZCB6ZXJvcyA9IDA7Cisg
ICAgdW5zaWduZWQgb25lcyA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAw
MDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAucmFuZG9tKCk7CisgICAgICAgIGlmICgh
aXQtPnZhbHVlKQorICAgICAgICAgICAgKyt6ZXJvczsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlRfRVEoaXQtPnZhbHVlLCAxdSk7CisgICAgICAgICAgICArK29uZXM7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfRVEoemVyb3MgKyBvbmVzLCAxMDAwdSk7CisgICAg
QVNTRVJUX0xFKHplcm9zLCA2MDB1KTsKKyAgICBBU1NFUlRfTEUob25lcywgNjAwdSk7Cit9CisK
K1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlc2VydmVJbml0aWFsQ2FwYWNpdHkpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtYXA7CisgICAgRVhQRUNUX0VRKDB1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMHUs
IG1hcC5jYXBhY2l0eSgpKTsKKworICAgIG1hcC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkp
OworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwg
bWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisg
ICAgICAgIG1hcC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSksIG1ha2VTdHJpbmcoImJhciIsIGkp
KTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4
NHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAuY29udGFpbnMoImZvbzMi
X3N0cikpOworICAgIEVYUEVDVF9TVFJFUSgiYmFyMyIsIG1hcC5nZXQoImZvbzMiX3N0cikudXRm
OCgpLmRhdGEoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAg
ICAgbWFwLmFkZChtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSwgbWFrZVN0cmluZygiYmF6IiwgaSkp
OworICAgIEVYUEVDVF9FUSg5OTk5dSArIDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMzI3Njh1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5
OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwLnJlbW92ZShtYWtlU3RyaW5nKCJmb28i
LCBpKSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworICAgIEVYUEVDVF9TVFJFUSgiYmF6MyIsIG1hcC5n
ZXQoImV4Y2VzczMiX3N0cikudXRmOCgpLmRhdGEoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwLnJlbW92ZShtYWtlU3RyaW5n
KCJleGNlc3MiLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKDh1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDI7CisgICAgbWFwMi5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAgIEVYUEVDVF9GQUxTRShtYXAyLnJlbW92ZSgiZm9v
MSJfcykpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDAwOyArK2kpCisgICAgICAgIG1h
cDIuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtlU3RyaW5nKCJiYXIiLCBpKSk7CisgICAg
RVhQRUNUX0VRKDIwMDB1LCBtYXAyLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgbWFw
Mi5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAg
ICAgICBFWFBFQ1RfVFJVRShtYXAyLnJlbW92ZShtYWtlU3RyaW5nKCJmb28iLCBpKSkpOworICAg
IEVYUEVDVF9FUSgwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVDVF9FUSg4dSwgbWFwMi5jYXBh
Y2l0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX0lzRXZlbmx5
RGlzdHJpYnV0ZWRBZnRlclJlbW92ZSkKK3sKKyAgICBmb3IgKHNpemVfdCB0YWJsZVNpemUgPSAy
OyB0YWJsZVNpemUgPD0gMiAqIDY7ICsrdGFibGVTaXplKSB7IC8vIE91ciBoYXNoIHRhYmxlcyBz
aHJpbmsgYXQgYSBsb2FkIGZhY3RvciBvZiAxIC8gNi4KKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+
PiBtYXA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFibGVTaXplOyArK2kpCisg
ICAgICAgICAgICBtYXAuYWRkKGksIGkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMjsgaSA8
IHRhYmxlU2l6ZTsgKytpKQorICAgICAgICAgICAgbWFwLnJlbW92ZShpKTsKKworICAgICAgICB1
bnNpZ25lZCB6ZXJvcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIG9uZXMgPSAwOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8g
aXQgPSBtYXAucmFuZG9tKCk7CisgICAgICAgICAgICBpZiAoIWl0LT52YWx1ZSkKKyAgICAgICAg
ICAgICAgICArK3plcm9zOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAgICAgICAgICsrb25lczsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9FUSh6ZXJvcyArIG9uZXMsIDEwMDB1
KTsKKyAgICAgICAgQVNTRVJUX0xFKHplcm9zLCA2MDB1KTsKKyAgICAgICAgQVNTRVJUX0xFKG9u
ZXMsIDYwMHUpOworICAgIH0KK30KKworY2xhc3MgVGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVj
dG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUZXN0T2Jq
ZWN0V2l0aEN1c3RvbURlc3RydWN0b3IoRnVuY3Rpb248dm9pZCgpPiYmIHJ1bkluRGVzdHJ1Y3Rv
cikKKyAgICAgICAgOiBtX3J1bkluRGVzdHJ1Y3RvcihXVEZNb3ZlKHJ1bkluRGVzdHJ1Y3Rvcikp
CisgICAgeyB9CisKKyAgICB+VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKCkKKyAgICB7
CisgICAgICAgIG1fcnVuSW5EZXN0cnVjdG9yKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1
bmN0aW9uPHZvaWQoKT4gbV9ydW5JbkRlc3RydWN0b3I7Cit9OworCitURVNUKFdURl9Sb2Jpbkhv
b2RIYXNoTWFwLCBDbGVhcl9SZWVudGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPFRlc3RPYmplY3RXaXRo
Q3VzdG9tRGVzdHJ1Y3Rvcj4sIFJvYmluSG9vZEhhc2g8dWludDY0X3Q+PiBtYXA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSAxMDsgKytpKSB7CisgICAgICAgIG1hcC5hZGQoaSwgbWFr
ZVVuaXF1ZTxUZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3I+KFsmbWFwXSB7CisgICAgICAg
ICAgICBtYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwVSwgbWFwLnNpemUoKSk7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtYXAuaXNFbXB0eSgpKTsKKyAgICAgICAgfSkpOwor
ICAgIH0KKyAgICBFWFBFQ1RfRVEoMTBVLCBtYXAuc2l6ZSgpKTsKKyAgICBtYXAuY2xlYXIoKTsK
KyAgICBFWFBFQ1RfRVEoMFUsIG1hcC5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKG1hcC5pc0Vt
cHR5KCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBBZGRBbmRJZGVudGl0eSkK
K3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFN0
cmluZ0ltcGw+LCB1bnNpZ25lZD4gbWFwOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IDFlMzsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKGluZGV4KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuc2V0KHN0cmluZy5pbXBsKCks
IGluZGV4KTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICBFWFBFQ1RfRVEocmVzdWx0Lml0ZXJhdG9yLT5rZXksIHN0cmluZy5pbXBsKCkpOworICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTM7ICsraW5kZXgpIHsKKyAg
ICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gbWFwLmFkZChzdHJpbmcuaW1wbCgpLCBpbmRleCArIDEpOworICAgICAgICBFWFBF
Q1RfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBFWFBFQ1RfRVEocmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSwgaW5kZXgpOworICAgICAgICBFWFBFQ1RfTkUocmVzdWx0Lml0ZXJhdG9y
LT5rZXksIHN0cmluZy5pbXBsKCkpOworICAgIH0KK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFz
aE1hcCwgTGFyZ2VSZW1vdmFsKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVuc2lnbmVkPiBtYXA7CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8g
c3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBtYXAuc2V0KHN0cmluZy5p
bXBsKCksIGluZGV4KTsKKyAgICB9CisgICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDFlNCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAg
ICAgIGlmIChpbmRleCAmIDB4MSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6
Om51bWJlcihpbmRleCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVtb3ZlKHN0
cmluZy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgRVhQRUNUX0VRKG1hcC5zaXplKCksIDFlNCAvIDIpOworICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRv
IHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgx
KQorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKG1hcC5jb250YWlucyhzdHJpbmcuaW1wbCgpKSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSBtYXAuZ2V0KHN0
cmluZy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBpbmRleCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7
ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCEoaW5kZXggJiAweDEpKSB7CisgICAgICAgICAgICBh
dXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVt
b3ZlZCA9IG1hcC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEobWFwLnNpemUoKSwg
MHUpOworICAgIEVYUEVDVF9FUShtYXAuY2FwYWNpdHkoKSwgOHUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Sb2Jpbkhvb2RIYXNoU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1JvYmluSG9vZEhhc2hTZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzOTM5M2U2OWM3NjFmMTdjZmY0MzI1
YjMxMzYyMmQ5ZDMxNThiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoU2V0LmNwcApAQCAtMCwwICsxLDU5OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ291bnRlcnMuaCIK
KyNpbmNsdWRlICJEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJNb3ZlT25s
eS5oIgorI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdG9wd2F0Y2guaD4KKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCit0ZW1wbGF0ZTxpbnQgaW5pdGlhbENhcGFjaXR5Pgorc3RydWN0IEluaXRp
YWxDYXBhY2l0eVRlc3RIYXNoVHJhaXRzIDogcHVibGljIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8aW50PiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXpl
ID0gaW5pdGlhbENhcGFjaXR5OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBS
b2Jpbkhvb2RIYXNoIDogcHVibGljIERlZmF1bHRIYXNoPFQ+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKworc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBj
YXBhY2l0eSA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhzaXplKTsKKyAgICBpZiAoc2l6ZSAq
IDEwMCA+PSBjYXBhY2l0eSAqIDk1KQorICAgICAgICByZXR1cm4gY2FwYWNpdHkgKiAyOworICAg
IHJldHVybiBjYXBhY2l0eTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4KK3ZvaWQgdGVz
dEluaXRpYWxDYXBhY2l0eSgpCit7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSA9IGNhcGFjaXR5Rm9yU2l6ZShzaXplKTsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8aW50LCBSb2Jpbkhvb2RIYXNoPGludD4sIEluaXRpYWxDYXBhY2l0
eVRlc3RIYXNoVHJhaXRzPGluaXRpYWxDYXBhY2l0eT4+IHRlc3RTZXQ7CisKKyAgICAvLyBJbml0
aWFsIGNhcGFjaXR5IGlzIG51bGwuCisgICAgQVNTRVJUX0VRKDB1LCB0ZXN0U2V0LmNhcGFjaXR5
KCkpOworCisgICAgLy8gQWRkaW5nIGl0ZW1zIHVwIHRvIHNpemUgc2hvdWxkIG5ldmVyIGNoYW5n
ZSB0aGUgY2FwYWNpdHkuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgdGVzdFNldC5hZGQoaSk7CisgICAgICAgIEFTU0VSVF9FUShpbml0aWFsQ2FwYWNp
dHksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpKTsKKyAgICB9CisK
KyAgICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gbW9yZSB0aGFuIDk1JSBvZiB0aGUgY2FwYWNpdHkg
c2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGNhcGFjaXR5LgorICAgIHVuc2lnbmVkIGNhcGFjaXR5TGlt
aXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpjZWlsKGluaXRpYWxDYXBhY2l0eSAqIDAu
OTUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc2l6ZTsgaSA8IGNhcGFjaXR5TGltaXQ7ICsraSkg
eworICAgICAgICB0ZXN0U2V0LmFkZChpKTsKKyAgICAgICAgQVNTRVJUX0VRKGluaXRpYWxDYXBh
Y2l0eSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRlc3RTZXQuY2FwYWNpdHkoKSkpOworICAgIH0K
KworICAgIC8vIEFkZGluZyBvbmUgbW9yZSBpdGVtIGluY3JlYXNlIHRoZSBjYXBhY2l0eS4KKyAg
ICB0ZXN0U2V0LmFkZChpbml0aWFsQ2FwYWNpdHkpOworICAgIEVYUEVDVF9HVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgpKSwgaW5pdGlhbENhcGFjaXR5KTsKK30KKwor
dGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlV
cFRvU2l6ZSgpOwordGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVw
VG9TaXplPDA+KCkKK3sKK30KK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdl
bmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQoreworICAgIGdlbmVyYXRlVGVzdENhcGFjaXR5
VXBUb1NpemU8c2l6ZSAtIDE+KCk7CisgICAgdGVzdEluaXRpYWxDYXBhY2l0eTxzaXplPigpOwor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBJbml0aWFsQ2FwYWNpdHkpCit7CisgICAg
Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwxMjg+KCk7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hTZXQsIE1vdmVPbmx5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxNb3ZlT25seT4gaGFzaFNldDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgTW92ZU9ubHkgbW92ZU9ubHkoaSArIDEpOworICAg
ICAgICBoYXNoU2V0LmFkZChXVEZNb3ZlKG1vdmVPbmx5KSk7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5j
b250YWlucyhNb3ZlT25seShpICsgMSkpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQucmVtb3ZlKE1vdmVPbmx5KGkg
KyAxKSkpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5KCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgaGFzaFNldC5hZGQoTW92ZU9u
bHkoaSArIDEpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAg
ICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQudGFrZShNb3ZlT25seShpICsgMSkpID09IE1vdmVPbmx5
KGkgKyAxKSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBoYXNoU2V0LmFkZChNb3Zl
T25seShpICsgMSkpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PE1vdmVPbmx5PiBzZWNvbmRTZXQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEw
MDsgKytpKQorICAgICAgICBzZWNvbmRTZXQuYWRkKGhhc2hTZXQudGFrZUFueSgpKTsKKworICAg
IEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHNlY29uZFNldC5jb250YWlucyhN
b3ZlT25seShpICsgMSkpKTsKK30KKworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlx
dWVQdHJLZXkpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Nj
b3BlIHNjb3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgUm9iaW5Ib29k
SGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBzZXQ7
CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4oKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3Ry
dWN0aW9uQ291bnQpOworCisgICAgc2V0LmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJLZXlfRmluZFVzaW5n
UmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGlu
dD4+PiBzZXQ7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1h
bGxvY0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAg
c2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgYXV0byBpdCA9IHNldC5maW5kKHB0
cik7CisgICAgQVNTRVJUX1RSVUUoaXQgIT0gc2V0LmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRy
LCBpdC0+Z2V0KCkpOworICAgIEVYUEVDVF9FUSg1LCAqaXQtPmdldCgpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5X0NvbnRhaW5zVXNpbmdSYXdQb2ludGVy
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVu
aXF1ZV9wdHI8aW50PiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IHNldDsK
KworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8
aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdU
Rk1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgc2V0LmNvbnRhaW5zKHB0
cikpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJLZXlfUmVtb3Zl
VXNpbmdSYXdQb2ludGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRl
c3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIFJv
YmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
Pj4gc2V0OworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9
IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlv
bkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmRlc3RydWN0aW9uQ291bnQpOworCisgICAgYm9vbCByZXN1bHQgPSBzZXQucmVtb3ZlKHB0cik7
CisgICAgRVhQRUNUX0VRKHRydWUsIHJlc3VsdCk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwor
fQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJLZXlfVGFrZVVzaW5nUmF3
UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2Nv
cGUgc2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBSb2Jpbkhvb2RI
YXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IHNldDsK
KworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPigpOworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIqIHB0ciA9IHVuaXF1
ZVB0ci5nZXQoKTsKKyAgICBzZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3Ry
dWN0aW9uQ291bnQpOworCisgICAgYXV0byByZXN1bHQgPSBzZXQudGFrZShwdHIpOworICAgIEVY
UEVDVF9FUShwdHIsIHJlc3VsdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworCisg
ICAgcmVzdWx0ID0gbnVsbHB0cjsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hTZXQsIENvcHlFbXB0eSkKK3sKKyAgICB7CisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IGZvbzsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gYmFyKGZvbyk7CisK
KyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgICAgIEVYUEVDVF9F
USgwdSwgYmFyLnNpemUoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVk
Pj4gZm9vKHsgMSwgNSwgNjQsIDQyIH0pOworICAgICAgICBFWFBFQ1RfRVEoNHUsIGZvby5zaXpl
KCkpOworICAgICAgICBmb28ucmVtb3ZlKDEpOworICAgICAgICBmb28ucmVtb3ZlKDUpOworICAg
ICAgICBmb28ucmVtb3ZlKDQyKTsKKyAgICAgICAgZm9vLnJlbW92ZSg2NCk7CisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IGJhcihmb28pOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgYmFyLmNh
cGFjaXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGJhci5zaXplKCkpOworICAgIH0KK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQ29weUFsbG9jYXRlQXRMZWFzdE1pbmltdW1D
YXBhY2l0eSkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBmb28oeyA0MiB9KTsKKyAgICBFWFBF
Q1RfRVEoMXUsIGZvby5zaXplKCkpOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+IGJhcihmb28pOwor
CisgICAgRVhQRUNUX0VRKDh1LCBiYXIuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBi
YXIuc2l6ZSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgQ29weUNhcGFjaXR5
SXNOb3RPbkJvdW5kYXJ5KQoreworICAgIGZvciAodW5zaWduZWQgc2l6ZSA9IDQ7IHNpemUgPCAx
MDA7ICsrc2l6ZSkgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBzb3VyY2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplICsgMTsgKytpKQorICAgICAgICAgICAgc291
cmNlLmFkZChpKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBjb3B5MShzb3VyY2UpOwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBjb3B5Mihzb3VyY2UpOworICAgICAgICBNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8
dW5zaWduZWQ+PiBjb3B5Myhzb3VyY2UpOworCisgICAgICAgIEVYUEVDVF9FUShzaXplLCBjb3B5
MS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZSwgY29weTIuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNpemUsIGNvcHkzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBzaXplICsgMTsgKytpKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb3B5
MS5jb250YWlucyhpKSkgPDwgaTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkyLmNvbnRh
aW5zKGkpKSA8PCBpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29weTMuY29udGFpbnMoaSkp
IDw8IGk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkxLmNvbnRhaW5zKHNp
emUgKyAyKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5Mi5jb250YWlucyhzaXplICsgMikp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTMuY29udGFpbnMoc2l6ZSArIDIpKTsKKworICAg
ICAgICBFWFBFQ1RfVFJVRShjb3B5Mi5yZW1vdmUoMSkpOworICAgICAgICBFWFBFQ1RfRVEoY29w
eTEuY2FwYWNpdHkoKSwgY29weTIuY2FwYWNpdHkoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShj
b3B5Mi5jb250YWlucygxKSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoY29weTMuYWRkKHNpemUg
KyAyKS5pc05ld0VudHJ5KTsKKyAgICAgICAgaWYgKChjb3B5MS5jYXBhY2l0eSgpICogMC45NSkg
PD0gY29weTEuc2l6ZSgpKQorICAgICAgICAgICAgRVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5KCkg
KiAyLCBjb3B5My5jYXBhY2l0eSgpKSA8PCBjb3B5MS5zaXplKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShjb3B5MS5jYXBhY2l0eSgpLCBjb3B5My5jYXBhY2l0eSgpKSA8
PCBjb3B5MS5zaXplKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkzLmNvbnRhaW5zKHNpemUg
KyAyKSk7CisgICAgfQorfQorCitzdHJ1Y3QgRGVyZWZPYnNlcnZlciB7CisgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIE5FVkVSX0lOTElORSB2b2lkIHJlZigpCisgICAg
eworICAgICAgICArK2NvdW50OworICAgIH0KKyAgICBORVZFUl9JTkxJTkUgdm9pZCBkZXJlZigp
CisgICAgeworICAgICAgICAtLWNvdW50OworICAgICAgICBvYnNlcnZlZEJ1Y2tldCA9IGJ1Y2tl
dEFkZHJlc3MtPmdldCgpOworICAgIH0KKyAgICB1bnNpZ25lZCBjb3VudCB7IDEgfTsKKyAgICBj
b25zdCBSZWZQdHI8RGVyZWZPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgeyBudWxscHRyIH07Cisg
ICAgY29uc3QgRGVyZWZPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgeyBudWxscHRyIH07Cit9Owor
CitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBSZWZQdHJOb3RaZXJvZWRCZWZvcmVEZXJlZikK
K3sKKyAgICBhdXRvIG9ic2VydmVyID0gbWFrZVVuaXF1ZTxEZXJlZk9ic2VydmVyPigpOworCisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZlB0cjxEZXJlZk9i
c2VydmVyPiwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4+PiBzZXQ7CisgICAg
c2V0LmFkZChhZG9wdFJlZihvYnNlcnZlci5nZXQoKSkpOworCisgICAgYXV0byBpdGVyYXRvciA9
IHNldC5maW5kKG9ic2VydmVyLmdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShpdGVyYXRvciAhPSBz
ZXQuZW5kKCkpOworCisgICAgb2JzZXJ2ZXItPmJ1Y2tldEFkZHJlc3MgPSBpdGVyYXRvci5nZXQo
KTsKKworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRy
KTsKKyAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICAv
LyBJdCBpZiBmaW5lIHRvIGVpdGhlciBsZWF2ZSB0aGUgb2xkIHZhbHVlIGludGFjdCBhdCBkZWxl
dGlvbiBvciBhbHJlYWR5IHNldCBpdCB0byB0aGUgZGVsZXRlZAorICAgIC8vIHZhbHVlLgorICAg
IC8vIEEgemVybyB3b3VsZCBiZSBhIGluY29ycmVjdCBvdXRjb21lIGFzIGl0IHdvdWxkIG1lYW4g
d2UgbnVsbGVkIHRoZSBidWNrZXQgYmVmb3JlIGFuIG9wYXF1ZQorICAgIC8vIGNhbGwuCisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8
IG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBSZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRy
YWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOworICAgIEVYUEVDVF9FUShvYnNlcnZlci0+
Y291bnQsIDB1KTsKK30KKworCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBVbmlxdWVQdHJO
b3RaZXJvZWRCZWZvcmVEZXN0cnVjdG9yKQoreworICAgIHN0cnVjdCBEZXN0cnVjdG9yT2JzZXJ2
ZXIgeworICAgICAgICB+RGVzdHJ1Y3Rvck9ic2VydmVyKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgb2JzZXJ2ZSgpOworICAgICAgICB9CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBv
YnNlcnZlOworICAgIH07CisKKyAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8RGVzdHJ1Y3Rvck9i
c2VydmVyPiogYnVja2V0QWRkcmVzcyA9IG51bGxwdHI7CisgICAgY29uc3QgRGVzdHJ1Y3Rvck9i
c2VydmVyKiBvYnNlcnZlZEJ1Y2tldCA9IG51bGxwdHI7CisgICAgYm9vbCBkZXN0cnVjdG9yQ2Fs
bGVkID0gZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZlcj4gb2Jz
ZXJ2ZXIobmV3IERlc3RydWN0b3JPYnNlcnZlciB7IFsmXSgpIHsKKyAgICAgICAgb2JzZXJ2ZWRC
dWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICAgICAgZGVzdHJ1Y3RvckNhbGxlZCA9
IHRydWU7CisgICAgfX0pOworCisgICAgY29uc3QgRGVzdHJ1Y3Rvck9ic2VydmVyKiBvYnNlcnZl
ckFkZHJlc3MgPSBvYnNlcnZlci5nZXQoKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8RGVzdHJ1Y3Rvck9ic2VydmVyPiwgUm9i
aW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8RGVzdHJ1Y3Rvck9ic2VydmVyPj4+IHNldDsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IHNldC5hZGQoV1RGTW92ZShvYnNlcnZlcikpOworCisgICAgRVhQ
RUNUX1RSVUUoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVk
QnVja2V0ID09IG51bGxwdHIpOworICAgIEVYUEVDVF9GQUxTRShkZXN0cnVjdG9yQ2FsbGVkKTsK
KworICAgIGJ1Y2tldEFkZHJlc3MgPSBhZGRSZXN1bHQuaXRlcmF0b3IuZ2V0KCk7CisKKyAgICBF
WFBFQ1RfVFJVRShvYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
ZGVzdHJ1Y3RvckNhbGxlZCk7CisgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZSgqYWRkUmVzdWx0
Lml0ZXJhdG9yKSk7CisKKyAgICBFWFBFQ1RfVFJVRShkZXN0cnVjdG9yQ2FsbGVkKTsKKyAgICBF
WFBFQ1RfVFJVRShvYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlckFkZHJlc3MgfHwgb2JzZXJ2ZWRC
dWNrZXQgPT0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBEZXN0cnVjdG9yT2JzZXJ2ZXIqPigtMSkp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBSZWYpCit7CisgICAgeworICAgICAg
ICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2Vy
Pj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5h
ZGQoV1RGTW92ZShyZWYpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJl
ZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dl
ciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gc2V0Owor
CisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgc2V0LmFkZChyZWYuY29w
eVJlZigpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBS
ZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+
IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQo
V1RGTW92ZShyZWYpKTsKKyAgICAgICAgc2V0LnJlbW92ZSgmYSk7CisgICAgfQorCisgICAgQVNT
RVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxS
ZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7Cisg
ICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFPdXQgPSBzZXQu
dGFrZSgmYSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsK
KyAgICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
U1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxS
ZWZMb2dnZXI+Pj4gc2V0OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAg
ICAgc2V0LmFkZChXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1dG8gYU91dCA9IHNldC50YWtl
QW55KCk7CisgICAgICAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KGFPdXQpKTsKKyAg
ICAgICAgQVNTRVJUX0VRKCZhLCBhT3V0LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7Cisg
ICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9n
Z2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKyAgICAgICAgYXV0byBl
bXB0eVRha2UgPSBzZXQudGFrZUFueSgpOworICAgICAgICBBU1NFUlRfRkFMU0Uoc3RhdGljX2Nh
c3Q8Ym9vbD4oZW1wdHlUYWtlKSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNl
dDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKwor
ICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShy
ZWYpKTsKKworICAgICAgICBBU1NFUlRfVFJVRShzZXQuY29udGFpbnMoJmEpKTsKKyAgICB9CisK
KyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisKKyAgICB7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogQWxsIG9mIHRoZXNlIFJlZkxvZ2dlciBvYmplY3RzIGxlYWsuIE5vIGJpZyBkZWFsIGZv
ciBhIHRlc3QgSSBndWVzcy4KKyAgICAgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZiA9IGFkb3B0
UmVmKCpuZXcgUmVmTG9nZ2VyKCJhIikpOworICAgICAgICAgICAgYXV0byogcG9pbnRlciA9IHJl
Zi5wdHIoKTsKKyAgICAgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9UUlVFKHNldC5jb250YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgQVNTRVJUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihh
KSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSBkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxS
ZWZMb2dnZXI+Pj4gc2V0OworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAg
IHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dn
ZXI+Pj4gc2V0MihzZXQpOworICAgIH0KKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoU2V0LCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PERlbGV0ZWRBZGRyZXNzT2ZPcGVy
YXRvcj4gc2V0MTsKKyAgICBzZXQxLmFkZCgxMCk7CisKKyAgICBzZXQxLnJlbW92ZSgxMCk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlbW92ZVJhbmRvbSkKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+PiBzZXQxIHsgMSwgMiwgMyB9OworICAgIHNldDEucmVtb3ZlKHNldDEucmFu
ZG9tKCkpOworICAgIHNldDEucmVtb3ZlKHNldDEucmFuZG9tKCkpOworICAgIHNldDEucmVtb3Zl
KHNldDEucmFuZG9tKCkpOworICAgIEFTU0VSVF9UUlVFKHNldDEuaXNFbXB0eSgpKTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgUmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSkKK3sKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPiBzZXQ7Cisg
ICAgRVhQRUNUX0VRKDB1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldC5jYXBh
Y2l0eSgpKTsKKworICAgIHNldC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDk5OTkpOworICAgIEVY
UEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNhcGFj
aXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIHNl
dC5hZGQobWFrZVN0cmluZygiZm9vIiwgaSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgc2V0LnNp
emUoKSk7CisgICAgRVhQRUNUX0VRKDE2Mzg0dSwgc2V0LmNhcGFjaXR5KCkpOworICAgIEVYUEVD
VF9UUlVFKHNldC5jb250YWlucygiZm9vMyJfc3RyKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDk5OTk7ICsraSkKKyAgICAgICAgc2V0LmFkZChtYWtlU3RyaW5nKCJleGNlc3MiLCBpKSk7
CisgICAgRVhQRUNUX0VRKDk5OTl1ICsgOTk5OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9F
USgzMjc2OHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5
OTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZXQucmVtb3ZlKG1ha2VTdHJpbmcoImZvbyIs
IGkpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBzZXQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEo
MzI3Njh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDk5OTk7
ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZShtYWtlU3RyaW5nKCJleGNlc3Mi
LCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDh1
LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hTZXQ8U3RyaW5nPiBzZXQyOworICAgIHNldDIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5
OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0Mi5yZW1vdmUoImZvbzEiX3MpKTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytpKQorICAgICAgICBzZXQyLmFkZChtYWtlU3RyaW5n
KCJmb28iLCBpKSk7CisgICAgRVhQRUNUX0VRKDIwMDB1LCBzZXQyLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKDE2Mzg0dSwgc2V0Mi5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjAwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZXQyLnJlbW92ZShtYWtlU3RyaW5n
KCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9FUSgwdSwgc2V0Mi5zaXplKCkpOworICAgIEVYUEVD
VF9FUSg4dSwgc2V0Mi5jYXBhY2l0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNl
dCwgQWRkQW5kSWRlbnRpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gc2V0OworICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IDFlMzsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0
cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHN0cmlu
Zy5pbXBsKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqcmVzdWx0Lml0ZXJhdG9yLCBzdHJpbmcuaW1wbCgpKTsKKyAgICB9Cisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWUzOyArK2luZGV4KSB7CisgICAg
ICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICBhdXRvIHJl
c3VsdCA9IHNldC5hZGQoc3RyaW5nLmltcGwoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShyZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9ORSgqcmVzdWx0Lml0ZXJhdG9yLCBzdHJp
bmcuaW1wbCgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIExhcmdl
UmVtb3ZhbCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8
UmVmUHRyPFN0cmluZ0ltcGw+PiBzZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoaW5kZXgpOworICAgICAgICBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgIH0KKyAgICBF
WFBFQ1RfRVEoc2V0LnNpemUoKSwgMWU0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKSB7CisgICAg
ICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAg
IGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0
LnNpemUoKSwgMWU0IC8gMik7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
MWU0OyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5k
ZXgpOworICAgICAgICBpZiAoaW5kZXggJiAweDEpCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
c2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
RVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHN0cmluZy5pbXBsKCkpKTsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsKKyAgICAgICAg
aWYgKCEoaW5kZXggJiAweDEpKSB7CisgICAgICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6
bnVtYmVyKGluZGV4KTsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlZCA9IHNldC5yZW1vdmUoc3Ry
aW5nLmltcGwoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZW1vdmVkKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgMHUpOworICAgIEVYUEVDVF9FUShz
ZXQuY2FwYWNpdHkoKSwgOHUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424992</attachid>
            <date>2021-04-01 23:40:24 -0700</date>
            <delta_ts>2021-04-02 00:36:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223895-20210401234023.patch</filename>
            <type>text/plain</type>
            <size>302282</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MzE1YWVlYjI3YTZmYWM5MjQ3YTA3MjllYjlmNjE0ZDMzMTFiYWRhLi44Y2JiZTA5ZDYzMzk3ZDIx
Zjc2MDE3YmY2MmM1ZGQzMGQ1MDRjZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbCBQaXpsby4KKworICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1l
cy5jcHA6CisgICAgICAgIChKU0M6Omxvb2tVcFByaXZhdGVOYW1lSW1wbCk6CisgICAgICAgIChK
U0M6Omxvb2tVcFdlbGxLbm93blN5bWJvbEltcGwpOgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aDoKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpjaGVja0lDVUxvY2FsZUludmFy
aWFudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bENvbGxhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50bERpc3BsYXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bExpc3RGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6aW5pdGlh
bGl6ZUxpc3RGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAg
ICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZCk6CisgICAgICAgIChKU0M6Omlu
dGxBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bENvbGxhdG9yQXZhaWxhYmxl
TG9jYWxlcyk6CisgICAgICAgIChKU0M6OmludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1
cE1hdGNoZXIpOgorICAgICAgICAoSlNDOjpiZXN0Rml0TWF0Y2hlcik6CisgICAgICAgIChKU0M6
OnJlc29sdmVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToK
KyAgICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpz
dXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50
bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsUGx1cmFs
UnVsZXNBdmFpbGFibGVMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6aW50bFJlbGF0aXZlVGltZUZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRsTGlzdEZvcm1hdEF2YWls
YWJsZUxvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFJl
bGF0aXZlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxSZWxhdGl2ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsU2VnbWVudGVyOjppbml0aWFsaXplU2VnbWVudGVyKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBD
YWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwS2V5Lmg6CisKIDIwMjEtMDQtMDEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
NzQ3MjQpOiBKSVRDYWdlIHRyYW1wb2xpbmUgbmVlZHMgdG8gYmUgYWRqdXN0ZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYTJl
ZWJmNTM1N2FmNWM1NjE4MWIxMmQ4N2EzMGMwZGRhM2Q3MWUwNi4uNzdhNzNiMDY2ZGQ2ZTI3MGI2
YmU2ZjhiNmE4MjM5MzkxZGNjZDdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNTAgQEAKKzIwMjEtMDQtMDEg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRy
b2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWwgUGl6bG8u
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIFJvYmluSG9vZEhhc2hUYWJsZVsxXS4g
V2UgZG9uJ3QgdXNlIGl0IGFzIGEgZGVmYXVsdCBoYXNodGFibGUgc2luY2UgaXQgaGFzIGRpZmZl
cmVudCBwZXJmb3JtYW5jZSB2LnMuIG1lbW9yeS1zYXZpbmcgY2hhcmFjdGVyaXN0aWNzLAorICAg
ICAgICBhbmQgdGhpcyBwYXRjaCdzIGdvYWwgaXMgbm90IHRhY2tsaW5nIG9uIG1ha2luZyB0aGlz
IGRlZmF1bHQuIFJhdGhlciwgdGhlIGdvYWwgb2YgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBp
dCB0byBub24tcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGFyZWEgcXVpY2tseQorICAgICAgICBzbyB0
aGF0IHdlIGNhbiBzYXZlIG1lbW9yeS4gUm9iaW5Ib29kSGFzaFRhYmxlIG1vcmUgZnJlcXVlbnRs
eSBjb21wdXRlcyBoYXNoIHZhbHVlIGNvbXBhcmVkIHRvIEhhc2hUYWJsZSwgc28gdGhpcyBpcyBu
b3QgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIGV4aXN0aW5nCisgICAgICAgIG9uZS4gQnV0
IHN0aWxsLCB0aGlzIGlzIHVzZWZ1bCBzaW5jZSB3ZSBrbm93IHRoYXQgIndoaWxlIHRoZXJlIGFy
ZSBtYW55IHNtYWxsIEhhc2hUYWJsZXMgYW5kIHRoZXkgaG9sZHMgbXVjaCBtZW1vcnksIHRoZXJl
IGFyZSBzdXBlciBsYXJnZSBIYXNoVGFibGVzIGFuZAorICAgICAgICB0aGV5IGhvbGRzIGFsbW9z
dCBzYW1lIGFtb3VudCBvZiBtZW1vcnkgd2hpbGUgdGhleSBhcmUgYSBmZXcuIi4gVGhpcyBwYXRj
aCdzIGdvYWwgaXMgYXBwbHlpbmcgdGhpcyBSb2Jpbkhvb2RIYXNoVGFibGUgdG8gdGhlc2UgImxh
cmdlLCBidXQgYSBmZXciIHNpbmdsZXRvbiB0YWJsZXMuCisKKyAgICAgICAgUm9iaW5Ib29kSGFz
aFRhYmxlIG1haW50YWlucyBkaXN0YW5jZS1mcm9tLWluaXRpYWwtYnVja2V0IChESUIpIHNtYWxs
IGJ5IGFkanVzdGluZyBleGlzdGluZyBlbnRyaWVzIHdoZW4gaW5zZXJ0aW5nLiBXaGVuIGluc2Vy
dGluZywgaWYgd2UgZm91bmQgdGhhdCB0aGUKKyAgICAgICAgZXhpc3RpbmcgZW50cnkgaGFzIGxl
c3MgRElCIHRoYW4gdGhlIGN1cnJlbnQgaW5zZXJ0aW5nIGVudHJ5J3MgRElCLCB0aGVuIHdlIHN3
YXAgZW50cmllcywgYW5kIGluc2VydCB0aGUgZXhpc3RpbmcgZW50cnkgdG8gdGhlIG90aGVyIHBs
YWNlLiBUaGlzIGlzIGdpdmluZworICAgICAgICBzb21lIGdvb2QgRElCIGZyb20gcmljaCBlbnRy
eSB0byBwb29yIGVudHJ5ICh0aGF0J3Mgd2h5IGl0IGlzIGNhbGxlZCBSb2Jpbkhvb2QgSGFzaGlu
ZyksIGFuZCBtYWtpbmcgYXZlcmFnZSBESUIgbG93ZXIuIEFuZCB0aGlzIGFsZ29yaXRobSBhZGRz
IGdvb2QgaW52YXJpYW50CisgICAgICAgIHRoYXQsIHdoZW4gbG9va2luZyB1cCBhbiBlbnRyeSwg
YW5kIHdlIGZvdW5kIHRoYXQgZXhpc3RpbmcgZW50cnkgaGFzIHNtYWxsZXIgRElCLCB0aGVuIHdl
IGNhbiBzdG9wIHNlYXJjaGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjaGFpbiBzaW5jZSB3ZSBr
bm93IHRoYXQKKyAgICAgICAgd2Ugc2hvdWxkIHN3YXAgZW50cmllcyB3aGVuIHRoaXMgaGFwcGVu
ZWQgd2hlbiBpbnNlcnRpbmcuIFRoZXNlIHR3byB0cmlja3MgbWFpbnRhaW4gSGFzaFRhYmxlIHBl
cmZvcm1hbmNlIGV2ZW4gdW5kZXIgc2lnbmlmaWNhbnRseSBoaWdoIGxvYWQgZmFjdG9yOiA5MCUg
bG9hZC1mYWN0b3IKKyAgICAgICAganVzdCB3b3Jrcy4gOTUlIGxvYWQtZmFjdG9yIHJlZ3Jlc3Mg
YWRkaW5nIHBlcmZvcm1hbmNlLCBidXQgc3RpbGwgaXQgZG9lcyBub3QgYmVjb21lIGNhdGFzdHJv
cGhpYyBjb21wYXJlZCB0byBub3JtYWwgb3Blbi1hZGRyZXNzaW5nIEhhc2hUYWJsZS4KKworICAg
ICAgICBXZSBpbnRyb2R1Y2UgUm9iaW5Ib29kSGFzaFRhYmxlLCBhbmQgYWRkaW5nIHNldmVyYWwg
a2luZHMgb2YgdGFibGVzIGJhc2VkIG9uIGxvYWQtZmFjdG9ycy4KKworICAgICAgICAxLiBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQgLyBIYXNoTWFwCisKKyAgICAgICAg
ICAgIFRoaXMgaGFzIDk1JSBsb2FkLWZhY3Rvci4gVGhpcyBpcyBzdWl0YWJsZSBmb3Igc2V0cyBh
bmQgbWFwcyB3aGljaCBpcyBtb3N0bHktY29uc3RhbnQ6IGNvbnN0cnVjdGluZyBvbmNlLCBhbmQg
bG9va2luZyB1cCByZXBlYXRlZGx5LiBJbiBXZWJLaXQsIHRoZXJlIGFyZSBzbworICAgICAgICAg
ICAgbWFueSB0aGlzIGtpbmQgb2YgdGFibGVzIGUuZy4gc2luZ2xldG9uIEhhc2hNYXAgZm9yIHZh
cmlvdXMga2luZHMgb2YgdGhpbmdzLiBXZSBjYW4gdXNlIHRoaXMgc3VwZXIgaGlnaCBsb2FkLWZh
Y3RvciB0YWJsZSBzbyB0aGF0IHdlIGNhbiBzYXZlIG1lbW9yeSBldmVuIHdoaWxlCisgICAgICAg
ICAgICB3ZSBhcmUgbWFpbnRhaW5zIGZhc3QgSGFzaFRhYmxlIGxvb2t1cC4KKworICAgICAgICAy
LiBNZW1vcnlDb21wYWN0Um9iaW5Ib29kSGFzaFNldCAvIEhhc2hNYXAKKworICAgICAgICAgICAg
VGhpcyBoYXMgOTAlIGxvYWQtZmFjdG9yLiBJdCBqdXN0IHdvcmtzLCBhbmQgd2UgY2FuIHRyeSB1
c2luZyBpdCBpZiBzZXRzIGFuZCBtYXBzIGFyZSBzaWduaWZpY2FudGx5IHBlcmZvcm1hbmNlIGlu
dGVuc2l2ZS4KKworICAgICAgICAzLiBGYXN0Um9iaW5Ib29kSGFzaFNldCAvIEhhc2hNYXAKKwor
ICAgICAgICAgICAgVGhpcyBoYXMgNzUlIGxvYWQtZmFjdG9yLiBUaGlzIGlzIHN0aWxsIGdvb2Qg
Y29tcGFyZWQgdG8gSGFzaFNldCBhbmQgSGFzaE1hcCBzaW5jZSB0aGV5IGFyZSB1c2luZyA1MCUg
bG9hZC1mYWN0b3IgZm9yIGxhcmdlIHNpemVkIHRhYmxlcy4gVGhpcyBoYXMgdmVyeSBzbGlnaHRs
eSBwZXJmb3JtYW5jZSByZWdyZXNzZWQKKyAgICAgICAgICAgIGNvbXBhcmVkIHRvIDUwJSBsb2Fk
LWZhY3RvciBsYXJnZSBIYXNoU2V0IGFuZCBIYXNoTWFwLCBidXQgaWYgdGhhdCBpcyBub3QgcGVy
Zm9ybWFuY2UgaW50ZW5zaXZlIChlLmcuIEF0b21TdHJpbmdUYWJsZSBpcyBvbmUgb2YgdGhlIG1v
c3QgcGVyZm9ybWFuY2UgaW50ZW5zaXZlIHRhYmxlKSwgdGhpcyBpcyBnb29kLgorCisgICAgICAg
IEluIHRoaXMgcGF0Y2gsIHdlIHJlcGxhY2UgbWFueSBzaW5nbGV0b24gSGFzaFNldCAvIEhhc2hN
YXAgd2l0aCBSb2Jpbkhvb2RIYXNoVGFibGUuCisKKyAgICAgICAgWzFdOiBodHRwczovL3d3dy5z
ZWJhc3RpYW5zeWx2YW4uY29tL3Bvc3Qvcm9iaW4taG9vZC1oYXNoaW5nLXNob3VsZC1iZS15b3Vy
LWRlZmF1bHQtaGFzaC10YWJsZS1pbXBsZW1lbnRhdGlvbi8KKworICAgICAgICAqIFdURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0Zi9IYXNoTWFwLmg6CisgICAgICAg
IChXVEY6Olk+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6WT46OnNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpZPjo6Y2FwYWNpdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXVEY6Olk+OjpiZWdpbik6CisgICAgICAgIChXVEY6Olk+OjplbmQp
OgorICAgICAgICAoV1RGOjpZPjo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdURjo6WT46OmZpbmQpOgorICAgICAgICAoV1RGOjpZPjo6Zmlu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6Olk+Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
VEY6Olk+OjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpZPjo6aW5saW5lR2V0IGNvbnN0KToK
KyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjppbmxpbmVTZXQpOgorICAgICAgICAoV1RG
OjpUYWJsZVRyYWl0c0FyZz46OmlubGluZUFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRz
QXJnPjo6aW5saW5lRW5zdXJlKToKKyAgICAgICAgKFdURjo6VGFibGVUcmFpdHNBcmc+OjpzZXQp
OgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0c0FyZz46OmFkZCk6CisgICAgICAgIChXVEY6OlRh
YmxlVHJhaXRzQXJnPjo6ZmFzdEFkZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzQXJnPjo6
ZW5zdXJlKToKKyAgICAgICAgKFdURjo6WT46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olk+Ojpy
ZW1vdmVJZik6CisgICAgICAgIChXVEY6Olk+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olk+Ojp0
YWtlKToKKyAgICAgICAgKFdURjo6WT46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAg
ICAoV1RGOjpZPjo6aXNWYWxpZEtleSk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6WD46OnN3YXApOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpYPjo6c2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Olg+OjpjYXBhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+Ojppc0VtcHR5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmJlZ2luKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6WD46OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpiZWdpbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjplbmQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpYPjo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpmaW5k
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmNvbnRhaW5zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmdldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Olg+OjppbmxpbmVHZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRU
cmFpdHNBcmc+OjppbmxpbmVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFp
dHNBcmc+OjppbmxpbmVBZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjppbmxpbmVFbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNB
cmc+OjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjphZGQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNYXBwZWRUcmFpdHNBcmc+OjpmYXN0QWRkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzQXJnPjo6ZW5zdXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6Z2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6TWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6WD46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpyZW1vdmVJ
Zik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ok1hcHBlZFRyYWl0cz46OnRha2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpYPjo6
dGFrZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Olg+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6WD46OmlzVmFsaWRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+Ojpzd2FwKToKKyAgICAgICAg
KFdURjo6Vz46OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpXPjo6Y2FwYWNpdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpXPjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Olc+OjplbmQgY29uc3QpOgorICAgICAgICAoV1RG
OjpXPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6Olc+Ojpjb250YWlucyBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlRh
YmxlVHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46
OmVuc3VyZSk6CisgICAgICAgIChXVEY6Olc+OjphZGQpOgorICAgICAgICAoV1RGOjpXPjo6YWRk
Vm9pZCk6CisgICAgICAgIChXVEY6OlRhYmxlVHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6
Vz46OnJlbW92ZSk6CisgICAgICAgIChXVEY6Olc+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6
Olc+OjpjbGVhcik6CisgICAgICAgIChXVEY6Olc+Ojp0YWtlKToKKyAgICAgICAgKFdURjo6Vz46
OnRha2VBbnkpOgorICAgICAgICAoV1RGOjpUYWJsZVRyYWl0cz46OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlRhYmxlVHJhaXRzPjo6dGFrZSk6CisgICAgICAgIChXVEY6Olc+Ojppc1ZhbGlkVmFs
dWUpOgorICAgICAgICAoV1RGOjo9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Vz46OmNoZWNrQ29u
c2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpWPjo6c3dhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlY+OjpzaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmNh
cGFjaXR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmlzRW1wdHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YmVnaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpWPjo6ZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmZp
bmQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6Y29udGFpbnMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpUcmFpdHM+OjpmaW5kIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6VHJhaXRzPjo6Y29udGFpbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpUcmFpdHM+OjplbnN1cmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6YWRkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OmFkZFZvaWQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpUcmFpdHM+OjphZGQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6cmVtb3ZlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZUlmKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Vj46OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Vj46OnRha2UpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpWPjo6dGFrZUFueSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlRyYWl0cz46OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRyYWl0cz46OnRha2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpWPjo6aXNWYWxpZFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6Vj46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6YWRkSXRlcmF0b3IpOgorICAgICAg
ICAoV1RGOjpyZW1vdmVJdGVyYXRvcik6CisgICAgICAgIChXVEY6OmludmFsaWRhdGVJdGVyYXRv
cnMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6On5IYXNoVGFibGUpOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGU6OnJhbmRvbSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmlubGluZUxv
b2t1cCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46Omxvb2t1cEZvcldyaXRpbmcpOgorICAg
ICAgICAoV1RGOjpLZXlUcmFpdHM+OjpmdWxsTG9va3VwRm9yV3JpdGluZyk6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmFkZFVuaXF1ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2lu
Z0hhc2hDb2RlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0
ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2spOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjpyZW1vdmVBbmRJbnZhbGlkYXRlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2xlYXIp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpzd2FwKToKKyAgICAgICAgKFdURjo6S2V5VHJh
aXRzPjo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjppbnZhbGlkYXRlSXRl
cmF0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6aW52YWxpZGF0ZUl0
ZXJhdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hNYXAuaDogQWRk
ZWQuCisgICAgICAgICogd3RmL1JvYmluSG9vZEhhc2hTZXQuaDogQWRkZWQuCisgICAgICAgICog
d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjp+Um9iaW5Ib29kSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29k
SGFzaFRhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5k
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpiZWdpbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpyYW5kb20pOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6OnJhbmRvbSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2FwYWNpdHkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmFkZCk6CisgICAgICAgIChX
VEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6ZmluZCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhh
c2hUYWJsZTo6ZmluZCBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1w
dHlCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmlzRW1wdHlPckRl
bGV0ZWRCdWNrZXQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6Omxvb2t1cCk6
CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5
KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6aW50
ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjppbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2Vw
dFNpemUpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaG91
bGRFeHBhbmQpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmNvbXB1dGVUYWJs
ZUhhc2gpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnNob3VsZEV4cGFuZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlJvYmluSG9vZEhhc2hUYWJsZTo6c2hvdWxkU2hyaW5rIGNv
bnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjpzaHJpbmspOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmRlbGV0ZUJ1Y2tldCk6CisgICAgICAgIChXVEY6
OlJvYmluSG9vZEhhc2hUYWJsZTo6ZGVzaXJlZEluZGV4KToKKyAgICAgICAgKFdURjo6Um9iaW5I
b29kSGFzaFRhYmxlOjpwcm9iZURpc3RhbmNlKToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFz
aFRhYmxlOjptYWtlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6
Om1ha2VDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRh
YmxlOjptYWtlS25vd25Hb29kSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpSb2Jpbkhvb2RIYXNo
VGFibGU6Om1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6
Um9iaW5Ib29kSGFzaFRhYmxlOjpjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKToKKyAg
ICAgICAgKFdURjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OnRhYmxlU2l6ZU1hc2sgY29uc3QpOgorICAgICAg
ICAoV1RGOjpSb2Jpbkhvb2RIYXNoVGFibGU6OmtleUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6Um9iaW5Ib29kSGFzaFRhYmxlOjp0YWJsZUhhc2ggY29uc3QpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6Y2hlY2tLZXkpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6bG9va3Vw
KToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmlubGluZUxvb2t1cCk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+Ojppbml0aWFsaXplQnVja2V0KToKKyAgICAgICAgKFdURjo6U2l6ZVBv
bGljeT46OmFkZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjptYWludGFpblByb2JlRGlz
dGFuY2VGb3JBZGQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6YWRkUGFzc2luZ0hhc2hD
b2RlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdU
Rjo6U2l6ZVBvbGljeT46OmZpbmQpOgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6ZmluZCBj
b25zdCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OlNpemVQb2xpY3k+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKToKKyAg
ICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpT
aXplUG9saWN5Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46
OmV4cGFuZCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6
ZSk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpzaHJpbmtUb0Jlc3RTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZVBvbGljeT46OnJlaGFzaCk6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+
OjpjbGVhcik6CisgICAgICAgIChXVEY6OlNpemVQb2xpY3k+OjpSb2Jpbkhvb2RIYXNoVGFibGUp
OgorICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6Oj0pOgor
ICAgICAgICAoV1RGOjpTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6U2l6ZVBvbGljeT46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUgY29uc3QpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5jcHA6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdUYWJsZTo6fkF0b21TdHJp
bmdUYWJsZSk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmg6CisgICAgICAg
IChXVEY6OkF0b21TdHJpbmdUYWJsZTo6dGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKwogMjAyMS0wNC0wMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFw
cGxlLmNvbT4KIAogICAgICAgICBDbGVhciBuZXR3b3JrIHdlYnNpdGUgZGF0YSB3aGVuIGEgdXNl
ciBjbGVhcnMgaGlzdG9yeS93ZWJzaXRlIGRhdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMDE4MjQxZjM5M2Ni
MjE0N2E2ZWFkNmJlMTIwYWEzZTA4ZTQ3ZmM3Li5lZmNhNThmZmU5NjE2N2U4ZDNlNzE3MTIwNWUz
MTZkMjdiZThhY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMjEtMDQtMDEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBJbnRyb2R1
Y2UgUm9iaW5Ib29kSGFzaFRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjM4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBGaWwgUGl6bG8uCisK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1Y2tldE1JTUVUeXBlcyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnBvcHVwVmFsdWUgY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkF0dGFjaEF1dGhvclNoYWRvd1Jvb3QpOgorICAg
ICAgICAqIGRvbS9RdWFsaWZpZWROYW1lLmg6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6
CisgICAgICAgIChwcmludE5hbWVzSGVhZGVyRmlsZSk6CisgICAgICAgIChwcmludEZhY3RvcnlD
cHBGaWxlKToKKyAgICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAg
KiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0Vs
ZW1lbnRGb3JGb3JtYXRCbG9jayk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1h
bmQpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNQcm9oaWJpdGVkUGFyYWdyYXBoQ2hpbGQpOgorICAgICAgICAqIGh0
bWwvQXV0b2ZpbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmllbGROYW1lTWFwKToKKyAgICAg
ICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnQ6OmlzQ2FzZVNlbnNpdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2ZW50c1BhcmVudE9iamVjdEZyb21F
eHBvc3VyZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhc2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
U1ZHVGFnTmFtZUNhc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCk6CisgICAgICAgIChX
ZWJDb3JlOjphZGp1c3RGb3JlaWduQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjphZGRO
YW1lc1dpdGhQcmVmaXgpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAg
ICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToK
KyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZXN0cmljdGVkTWFya05hbWVzVG9OYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb25NYXApOgor
ICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVnaXN0cnlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlQmFja3Ns
YXNoQXNZZW5TaWduRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpo
YXNWYWxpZEF2ZXJhZ2VDaGFyV2lkdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp2YWxpZEluaXREYXRhVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1VUSVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0ZWRWaWRlb0Nv
ZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzdXBwb3J0
ZWRBdWRpb0NvZGVjcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1hcmtlclRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9r
ZVRhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Y2hhaW5hYmxlUmVzb3VyY2VUYWdzKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpo
YXNFZmZlY3RpdmVEaXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyk6CisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9u
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF0dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5
SURNYXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YW5pbWF0YWJsZUF0dHJpYnV0
ZUZvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZv
clNWR0F0dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIHN2Zy9TVkdUZXN0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRlcyk6CisgICAgICAgICog
c3ZnL1NWR1Rlc3RzLmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6
aXNEaXNhbGxvd2VkRWxlbWVudCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIHhtbC9YUGF0aFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6Y3JlYXRlQXhpc05hbWVzTWFwKToK
KwogMjAyMS0wNC0wMSAgQ2FtZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSByZWR1bmRhbnQgI2lmIGluIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAzYWFkZjJhYTRmNjZkZTRkMDg1Y2IzOWU1Mzg1ZjFkZTJiNTIzM2JiLi43
Mjk1YjNhMDEwY2IzNjVlMGExYWE1NzNjOWUxODcxZjI5NDczYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDIxLTA0LTAxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFJvYmluSG9vZEhhc2hUYWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRmlsIFBpemxvLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUpOgorICAgICAgICAo
V2ViS2l0OjpleHBlY3RlZFVuYXR0cmlidXRlZENvbHVtbnMpOgorICAgICAgICAoV2ViS2l0Ojpl
eHBlY3RlZEF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlVGFibGVR
dWVyaWVzKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDoKKyAgICAg
ICAgKiBTaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW06CisgICAgICAgIChX
ZWJLaXQ6OmdldEFwcEJvdW5kRG9tYWluc1Rlc3RpbmcpOgorICAgICAgICAqIFNoYXJlZC9XZWJQ
cmVmZXJlbmNlc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9y
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNj
ZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNj
ZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisKIDIwMjEtMDQt
MDEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
bWFjcm8gdG8gaGVscCBzdGFnaW5nIGxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aERvbWFpbiBpbiBT
YWZhcmkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5j
cHAKaW5kZXggMmEwODg3ZTczZTU3MWYwMDhlODg0ZGIzNDMwNDg2ZDM0MjAwNzIyMC4uN2Y4YWU0
ZjE0MGVlNzQzZDBmZTVmMzk1NDM4N2JlM2NmZDZkNWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5jcHAKQEAgLTExMyw3ICsxMTMsNyBAQCBz
dHJ1Y3QgQ2hhckJ1ZmZlclNlYWNoZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1VwUHJpdmF0ZU5hbWVJbXBs
KGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc2V0LCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hh
ckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQorc3RhdGljIFByaXZhdGVTeW1ib2xJbXBs
KiBsb29rVXBQcml2YXRlTmFtZUltcGwoY29uc3QgQnVpbHRpbk5hbWVzOjpQcml2YXRlTmFtZVNl
dCYgc2V0LCBjb25zdCBXVEY6Okhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBl
PiYgYnVmZmVyKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBzZXQuZmluZDxDaGFyQnVmZmVyU2Vh
Y2hlcjxDaGFyYWN0ZXJUeXBlPj4oYnVmZmVyKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gc2V0LmVu
ZCgpKQpAQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBQcml2YXRlU3ltYm9sSW1wbCogbG9va1Vw
UHJpdmF0ZU5hbWVJbXBsKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc2V0LCBjb25zCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgU3ltYm9sSW1wbCogbG9va1Vw
V2VsbEtub3duU3ltYm9sSW1wbChjb25zdCBIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+JiBt
YXAsIGNvbnN0IFdURjo6SGFzaFRyYW5zbGF0b3JDaGFyQnVmZmVyPENoYXJhY3RlclR5cGU+JiBi
dWZmZXIpCitzdGF0aWMgU3ltYm9sSW1wbCogbG9va1VwV2VsbEtub3duU3ltYm9sSW1wbChjb25z
dCBCdWlsdGluTmFtZXM6OldlbGxLbm93blN5bWJvbE1hcCYgbWFwLCBjb25zdCBXVEY6Okhhc2hU
cmFuc2xhdG9yQ2hhckJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyKQogewogICAgIGF1dG8g
aXRlcmF0b3IgPSBtYXAuZmluZDxDaGFyQnVmZmVyU2VhY2hlcjxDaGFyYWN0ZXJUeXBlPj4oYnVm
ZmVyKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbWFwLmVuZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDMxOTQ1YmYzZTE2Y2QzMDRlOGQ4
ODI5YjE5OTcxZGE3Y2NjZTM5YTIuLjAwZDk2ZDNjNzQ0NWVhYTZiNDgzZDQwOWFkNGY4Nzg1ZGIz
N2M0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmgKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlu
cy5oIgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE5OSw2ICsyMDEsOSBA
QCBjbGFzcyBCdWlsdGluTmFtZXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1aWx0aW5O
YW1lcyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAogcHVibGljOgorICAgIHVzaW5n
IFByaXZhdGVOYW1lU2V0ID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0
PFN0cmluZz47CisgICAgdXNpbmcgV2VsbEtub3duU3ltYm9sTWFwID0gTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+OworCiAgICAgQnVp
bHRpbk5hbWVzKFZNJiwgQ29tbW9uSWRlbnRpZmllcnMqKTsKIAogICAgIFByaXZhdGVTeW1ib2xJ
bXBsKiBsb29rVXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7CkBAIC0yMzIs
OCArMjM3LDYgQEAgY2xhc3MgQnVpbHRpbk5hbWVzIHsKICAgICBjb25zdCBKU0M6OklkZW50aWZp
ZXIgbV9kb2xsYXJWTU5hbWU7CiAgICAgY29uc3QgSlNDOjpJZGVudGlmaWVyIG1fZG9sbGFyVk1Q
cml2YXRlTmFtZTsKICAgICBjb25zdCBKU0M6OklkZW50aWZpZXIgbV9wb2x5UHJvdG9Qcml2YXRl
TmFtZTsKLSAgICB1c2luZyBQcml2YXRlTmFtZVNldCA9IEhhc2hTZXQ8U3RyaW5nPjsKLSAgICB1
c2luZyBXZWxsS25vd25TeW1ib2xNYXAgPSBIYXNoTWFwPFN0cmluZywgU3ltYm9sSW1wbCo+Owog
ICAgIFByaXZhdGVOYW1lU2V0IG1fcHJpdmF0ZU5hbWVTZXQ7CiAgICAgV2VsbEtub3duU3ltYm9s
TWFwIG1fd2VsbEtub3duU3ltYm9sc01hcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAppbmRleCA1
Y2Y0ZmE1NWMzZWVlZGVmNGY4ZWE5M2NkNjFkNDY2MWViNjdmODJhLi43ODU3ZGJhMDExNThhNzZm
N2UwMTZhMjM3OTM1MDVkNmRhNWIzMGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMjEyLDcgKzIxMyw3IEBAIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkgewogCiBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwotICAgIEhhc2hNYXA8UmVmUHRyPFVuaXF1
ZWRTdHJpbmdJbXBsPiwgRW50cnksIElkZW50aWZpZXJSZXBIYXNoPiBtX2J5dGVjb2RlSW50cmlu
c2ljTWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBFbnRyeSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNv
ZGVJbnRyaW5zaWNNYXA7CiAKICNkZWZpbmUgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lD
X0NPTlNUQU5UX0dFTkVSQVRPUlMobmFtZSkgU3Ryb25nPFVua25vd24+IG1fIyNuYW1lOwogICAg
IEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19TSU1QTEVfRUFDSF9OQU1F
KEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCmluZGV4IDQ0ZDFjZmRiZDQ5
NDkxNmVkYmZmZDRmMzE0ZjdjZDVmYmZiNmYxNTMuLmFlNmRiYjBmOGY1OTIzNTBhNGNmMmU0MTBk
ZjBiZDJkYWJjNzhhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgKQEAgLTI5NCw2ICsyOTQsNyBAQCBKU1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJsaWNK
U1ZhbHVlKFZNJiwgY29uc3QgSWRlbnRpZmllciYpOwogc3RydWN0IElkZW50aWZpZXJSZXBIYXNo
IDogUHRySGFzaDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiB7CiAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYga2V5KSB7IHJldHVybiBr
ZXktPmV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCk7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChVbmlxdWVkU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmV4aXN0aW5nU3ltYm9sQXdh
cmVIYXNoKCk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0
cnVlOwogfTsKIAogc3RydWN0IElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPGludD4gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5jcHAKaW5kZXggNDY1NTI0OGYyODA0OTEwZTRiNGRjYzIwZTViYmU5MTRlNTg5ZjFlYS4uYzgy
ZmE2MGViMGMyNjdkYWU3MDE4M2NjY2FlYzhlOTliZjk1NGE3MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAg
dm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2EKICAgICBpZiAoIWNhc2VGaXJzdE9wdGlvbi5pc051bGwo
KSkKICAgICAgICAgbG9jYWxlT3B0aW9uc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUmVsZXZhbnRF
eHRlbnNpb25LZXk6OktmKV0gPSBjYXNlRmlyc3RPcHRpb247CiAKLSAgICBhdXRvJiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CiAg
ICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVM
b2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2NhbGVPcHRpb25zLCB7
IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDbywgUmVsZXZhbnRFeHRlbnNpb25LZXk6OktmLCBSZWxl
dmFudEV4dGVuc2lvbktleTo6S24gfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJl
c29sdmVkLmxvY2FsZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBib29sIEludGxDb2xsYXRvcjo6dXBk
YXRlQ2FuRG9BU0NJSVVDQURVQ0VUQ29tcGFyaXNvbigpIGNvbnN0CiB9CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAotdm9pZCBJbnRsQ29sbGF0b3I6OmNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGxvY2FsZXMpCit2b2lkIEludGxDb2xsYXRvcjo6Y2hlY2tJQ1VM
b2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNldCYgbG9jYWxlcykKIHsKICAgICBmb3IgKGF1
dG8mIGxvY2FsZSA6IGxvY2FsZXMpIHsKICAgICAgICAgYXV0byBjaGVja0FTQ0lJT3JkZXJpbmdX
aXRoRFVDRVQgPSBbXShjb25zdCBTdHJpbmcmIGxvY2FsZSwgVUNvbGxhdG9yJiBjb2xsYXRvcikg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAppbmRleCAy
NGQ2MTYxNjQ5YWQ5ZmU3ZDRmNzBhZTZjMjljODJhN2UyZjk2ZjIzLi41ZTUyYTFjOTI1YzJlZDQw
M2MxMzc1M2M1YzE3MmM5ZmNkM2VmMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuaApAQCAtMjYsNyArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSW50bE9iamVjdC5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdWNvbC5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL2ljdS9JQ1VIZWxwZXJzLmg+
CiAKQEAgLTczLDkgKzczLDkgQEAgY2xhc3MgSW50bENvbGxhdG9yIGZpbmFsIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgIH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc3RhdGlj
IHZvaWQgY2hlY2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpOwor
ICAgIHN0YXRpYyB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50cyhjb25zdCBMb2NhbGVTZXQm
KTsKICNlbHNlCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGNoZWNrSUNVTG9jYWxlSW52YXJpYW50
cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mKSB7IH0KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2hl
Y2tJQ1VMb2NhbGVJbnZhcmlhbnRzKGNvbnN0IExvY2FsZVNldCYpIHsgfQogI2VuZGlmCiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAppbmRleCBmNTJlYmIyMjJiMzRiZDZjMGQ0MzgyOWI1M2I5NzU3YjlhMWZj
M2I5Li5mODk4MDZjNTZiMjYwNTIyZmM3YzdiOThhZjg1MmNmNzMzZjg5ODVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAK
QEAgLTU2Niw3ICs1NjYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURh
dGVUaW1lRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIGxvY2Fs
ZU9wdGlvbnNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpIYyld
ID0gU3RyaW5nKCk7CiAgICAgfQogCi0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFi
bGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNv
bnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVM
b2NhbGVzKCk7CiAgICAgYXV0byByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBsb2NhbGVNYXRjaGVyLCBsb2Nh
bGVPcHRpb25zLCB7IFJlbGV2YW50RXh0ZW5zaW9uS2V5OjpDYSwgUmVsZXZhbnRFeHRlbnNpb25L
ZXk6OkhjLCBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBt
X2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApp
bmRleCAxYmJhMWIwNWMyZTMyYWMwZDE4ZGQxNDM2YzM0ODg2NDBmNzBhNGE5Li5jMDkwOWI4OTFl
OTQzMGMwZGE0MzhhMTA0ODNiMGYzMmEwZjEyOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxE
YXRlVGltZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwgKEoKICAgICAv
LyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBb
LCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2Nh
bGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bERhdGVUaW1lRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRs
RGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3Rv
cjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwCmluZGV4IDIyYTExNWQxMzlmNmM1
YjI0NWVkZWJhODA5ZTI4ZTk4Njc2ODBiODMuLjBkZTU3NDI5MzQ1YWQ4MWRhZTQxNjBlYWRkYjUw
OTdjNjQyMGMxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXMuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgSW50bERpc3BsYXlOYW1l
czo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygp
OwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9u
cywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEaXNw
bGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZDFmMDY2ZjBhMDkzMzc2OTExZGIxMGI4OGZh
YTlmNDVmMzViNTY4Yy4uMTdlMDc5ZmU3N2RhMGEwN2M0MzdlMGVlN2E2ZDk4M2ZiZWNjMzdiOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGlzcGxheU5hbWVzQ29uc3RydWN0b3IuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2Fs
ZXNPZiwgKEpTR2xvYmEKICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1kaXNw
bGF5bmFtZXMvI3NlYy1JbnRsLkRpc3BsYXlOYW1lcy5zdXBwb3J0ZWRMb2NhbGVzT2YKIAogICAg
IC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVEaXNwbGF5TmFtZXMlLltbYXZhaWxhYmxl
TG9jYWxlc11dLgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9
IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZh
aWxhYmxlTG9jYWxlcyA9IGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAg
ICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxv
Y2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKaW5kZXgg
ODE3YjljYWU1OTM0YWY3NjU1NDYzMmRlOTk1NzY4NWUwOTBhMzA5Mi4uODgwZWQyNmU3M2FmZTFj
YTk0NDc3NDViZWVmYWY5YjVkMzZmNDE4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgSW50
bExpc3RGb3JtYXQ6OmluaXRpYWxpemVMaXN0Rm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9OwogCi0gICAgYXV0byYg
YXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3Qs
IGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2Fs
ZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxv
Y2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNDdlNWVlMjNkYmYxZTBiMDM5YzNjYWYw
NzgwZjFiNjQzZDVjMTJjOS4uMDA4ZTkzZDhjYmFjYjI2N2UwZGYwZTY3OThiZGE3MjIyMTVhM2M2
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2FsZXNP
ZiwgKEpTR2xvYmFsTwogICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3Qt
Zm9ybWF0LyNzZWMtSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgogCiAgICAgLy8g
MS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJUxpc3RGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxl
c11dLgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxM
aXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxv
Y2FsZXMgPSBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKaW5kZXggMDA3Yzlk
MzAyNzE1YTU4MzI4NTc2MGRjYzcwYjJkNGVmOWYwNThjYi4uZjAzNTBjODQzOGQ3N2ViZTdhNWY5
Mjc0OTA3ZTNjYjQyYTM3ZTVkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYQogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9CiAK
LSAgICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gaW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2Fs
ZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2Fs
ZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgUmVsZXZhbnRFeHRlbnNpb25LZXk6Ok51IH0sIGxv
Y2FsZURhdGEpOwogCiAgICAgbV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENv
bnN0cnVjdG9yLmNwcAppbmRleCAxYzViMjkzYWZjZGFlMmViNjJlYmJjMjY0NDM3OWFmNTkzMjEx
MGYwLi5mMjFhNjkyNmYzMWVkN2FhZjI1ZThmZDQ5ZDk5N2MxZDU5MWYxMzhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZiwg
KEpTRwogICAgIC8vIDExLjIuMiBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
bG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFp
bGFibGVMb2NhbGVzIGJlICVOdW1iZXJGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxOdW1iZXJGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9
IGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVx
dWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZl
Y3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IDQwZjg5ZThmZTc0ZThkYmNmMGU1ODM1
MGFiZWMxZjdhODVkOGJkZTQuLjlkNTM2ZDc0YzAxOWQxOGRhNzU4MzdkNTlhYjczODc5NmVlZDYw
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBA
IC0zNTIsNyArMzUyLDcgQEAgU3RyaW5nIGxhbmd1YWdlVGFnRm9yTG9jYWxlSUQoY29uc3QgY2hh
ciogbG9jYWxlSUQsIGJvb2wgaXNJbW1vcnRhbCkKIH0KIAogLy8gRW5zdXJlIHdlIGhhdmUgeHgt
Wlogd2hlbmV2ZXIgd2UgaGF2ZSB4eC1ZeXl5LVpaLgotc3RhdGljIHZvaWQgYWRkU2NyaXB0bGVz
c0xvY2FsZUlmTmVlZGVkKEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgU3RyaW5n
VmlldyBsb2NhbGUpCitzdGF0aWMgdm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoTG9j
YWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJpbmdWaWV3IGxvY2FsZSkKIHsKICAgICBpZiAo
bG9jYWxlLmxlbmd0aCgpIDwgMTApCiAgICAgICAgIHJldHVybjsKQEAgLTM3Nyw5ICszNzcsOSBA
QCBzdGF0aWMgdm9pZCBhZGRTY3JpcHRsZXNzTG9jYWxlSWZOZWVkZWQoSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzLCBTdHJpbgogICAgIGF2YWlsYWJsZUxvY2FsZXMuYWRkKFN0cmlu
Z0ltcGw6OmNyZWF0ZVN0YXRpY1N0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSkpOwogfQogCi1jb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxBdmFpbGFibGVMb2NhbGVzKCkK
K2NvbnN0IExvY2FsZVNldCYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKQogewotICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhdmFpbGFibGVMb2NhbGVzOworICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9jYWxlU2V0PiBhdmFpbGFibGVMb2NhbGVzOwog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKICAgICBzdGQ6OmNhbGxf
b25jZShpbml0aWFsaXplT25jZSwgWyZdIHsKICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcy5jb25z
dHJ1Y3QoKTsKQEAgLTQ1NSw5ICs0NTUsOSBAQCBjb25zdCB1aW50OF90IGR1Y2V0V2VpZ2h0c1sx
MjhdID0gewogICAgIDk1LCA5NywgOTksIDIxLCAzNiwgMjIsIDM3LCAwLAogfTsKIAotY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK2NvbnN0IExv
Y2FsZVNldCYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpCiB7Ci0gICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGF2YWlsYWJsZUxvY2FsZXM7CisgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NhbGVTZXQ+IGF2YWlsYWJsZUxvY2FsZXM7CiAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwogICAgIHN0ZDo6Y2FsbF9v
bmNlKGluaXRpYWxpemVPbmNlLCBbJl0gewogICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmNvbnN0
cnVjdCgpOwpAQCAtNDc2LDIyICs0NzYsMjEgQEAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRs
Q29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKICAgICByZXR1cm4gYXZhaWxhYmxlTG9jYWxlczsK
IH0KIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxl
cygpCitjb25zdCBMb2NhbGVTZXQmIGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBjYWNoZWRBdmFpbGFi
bGVMb2NhbGVzOwotICAgIEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGNhY2hl
ZEF2YWlsYWJsZUxvY2FsZXMuZ2V0KCk7Ci0KKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVk
PExvY2FsZVNldD4gYXZhaWxhYmxlTG9jYWxlczsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZU9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2UsIFsmXSB7
Ci0gICAgICAgIEFTU0VSVChhdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSk7CisgICAgICAgIGF2
YWlsYWJsZUxvY2FsZXMuY29uc3RydWN0KCk7CisgICAgICAgIEFTU0VSVChhdmFpbGFibGVMb2Nh
bGVzLT5pc0VtcHR5KCkpOwogICAgICAgICBjb25zdGV4cHIgYm9vbCBpc0ltbW9ydGFsID0gdHJ1
ZTsKICAgICAgICAgaW50MzJfdCBjb3VudCA9IHVicmtfY291bnRBdmFpbGFibGUoKTsKICAgICAg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgU3Ry
aW5nIGxvY2FsZSA9IGxhbmd1YWdlVGFnRm9yTG9jYWxlSUQodWJya19nZXRBdmFpbGFibGUoaSks
IGlzSW1tb3J0YWwpOwogICAgICAgICAgICAgaWYgKGxvY2FsZS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLmFkZChsb2Nh
bGUpOwotICAgICAgICAgICAgYWRkU2NyaXB0bGVzc0xvY2FsZUlmTmVlZGVkKGF2YWlsYWJsZUxv
Y2FsZXMsIGxvY2FsZSk7CisgICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzLT5hZGQobG9jYWxl
KTsKKyAgICAgICAgICAgIGFkZFNjcmlwdGxlc3NMb2NhbGVJZk5lZWRlZChhdmFpbGFibGVMb2Nh
bGVzLmdldCgpLCBsb2NhbGUpOwogICAgICAgICB9CiAgICAgfSk7CiAgICAgcmV0dXJuIGF2YWls
YWJsZUxvY2FsZXM7CkBAIC02OTgsNyArNjk3LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2EK
ICAgICByZXR1cm4gc2VlbjsKIH0KIAotU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIGxvY2FsZSkK
K1N0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9j
YWxlcywgY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7CiAgICAgcmV0dXJuIGJlc3RBdmFpbGFibGVM
b2NhbGUobG9jYWxlLCBbJl0oY29uc3QgU3RyaW5nJiBjYW5kaWRhdGUpIHsKICAgICAgICAgcmV0
dXJuIGF2YWlsYWJsZUxvY2FsZXMuY29udGFpbnMoY2FuZGlkYXRlKTsKQEAgLTc2Myw3ICs3NjIs
NyBAQCBTdHJpbmcgcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGxv
Y2FsZSkKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0aWMgTWF0Y2hl
clJlc3VsdCBsb29rdXBNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgTWF0Y2hlclJlc3VsdCBsb29rdXBNYXRjaGVyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9j
YWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8g
TG9va3VwTWF0Y2hlciAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1sb29rdXBtYXRjaGVyCkBAIC04
MDQsNyArODAzLDcgQEAgc3RhdGljIE1hdGNoZXJSZXN1bHQgbG9va3VwTWF0Y2hlcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFMKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgTWF0Y2hlclJlc3VsdCBiZXN0Rml0TWF0Y2hlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIE1hdGNoZXJS
ZXN1bHQgYmVzdEZpdE1hdGNoZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
TG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVz
dGVkTG9jYWxlcykKIHsKICAgICAvLyBCZXN0Rml0TWF0Y2hlciAoYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIv
I3NlYy1iZXN0Zml0bWF0Y2hlcgpAQCAtODI1LDcgKzgyNCw3IEBAIGNvbnN0ZXhwciBBU0NJSUxp
dGVyYWwgcmVsZXZhbnRFeHRlbnNpb25LZXlTdHJpbmcoUmVsZXZhbnRFeHRlbnNpb25LZXkga2V5
KQogICAgIHJldHVybiBBU0NJSUxpdGVyYWw6Om51bGwoKTsKIH0KIAotUmVzb2x2ZWRMb2NhbGUg
cmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzLCBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2Nh
bGVPcHRpb25zJiBvcHRpb25zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZhbnRFeHRlbnNp
b25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCpsb2NhbGVEYXRh
KShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpCitSZXNvbHZlZExvY2FsZSBy
ZXNvbHZlTG9jYWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNl
dCYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2Fs
ZXMsIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciwgY29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlv
bnMmIG9wdGlvbnMsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWxldmFudEV4dGVuc2lvbktleT4g
cmVsZXZhbnRFeHRlbnNpb25LZXlzLCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0
IFN0cmluZyYsIFJlbGV2YW50RXh0ZW5zaW9uS2V5KSkKIHsKICAgICAvLyBSZXNvbHZlTG9jYWxl
IChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zLCByZWxldmFudEV4
dGVuc2lvbktleXMsIGxvY2FsZURhdGEpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hNDAyLyNzZWMtcmVzb2x2ZWxvY2FsZQpAQCAtODkwLDcgKzg4OSw3IEBAIFJlc29sdmVkTG9j
YWxlIHJlc29sdmVMb2NhbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFz
aFNldDxTdHJpbmc+CiAgICAgcmV0dXJuIHJlc29sdmVkOwogfQogCi1zdGF0aWMgSlNBcnJheSog
bG9va3VwU3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFi
bGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAg
ICAvLyBMb29rdXBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1
cHN1cHBvcnRlZGxvY2FsZXMKQEAgLTkxOSw3ICs5MTgsNyBAQCBzdGF0aWMgSlNBcnJheSogbG9v
a3VwU3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBI
YXNoUwogICAgIHJldHVybiBzdWJzZXQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzKQorc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IExvY2FsZVNldCYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVz
dEZpdFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMp
CiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdHN1cHBv
cnRlZGxvY2FsZXMKQEAgLTkyOCw3ICs5MjcsNyBAQCBzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1
cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaAog
ICAgIHJldHVybiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CiB9CiAKLUpTVmFsdWUgc3VwcG9ydGVkTG9jYWxl
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2
YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnNWYWx1ZSkKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBMb2NhbGVTZXQmIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1
ZSkKIHsKICAgICAvLyBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzLCBvcHRpb25zKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQw
Mi8jc2VjLXN1cHBvcnRlZGxvY2FsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAppbmRleCBmYTJlODI4MDc4YjdlODUxYTc3MWRjMGEwODBmYjZhNjg1YTEyYWVk
Li42MTQwYzIwZDZmZDNlOGU4YjUyODk3NWQ2Mzg0OGZmMTgzZmNhYjcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogc3RydWN0IFVGaWVsZFBvc2l0aW9uSXRl
cmF0b3I7CiAKQEAgLTgxLDE1ICs4MiwxNiBAQCBjbGFzcyBJbnRsT2JqZWN0IGZpbmFsIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogfTsKIAogU3RyaW5nIGRlZmF1bHRMb2NhbGUoSlNHbG9i
YWxPYmplY3QqKTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bEF2YWlsYWJsZUxvY2FsZXMo
KTsKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygp
OwotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygp
OwotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KLWlubGluZSBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVMb2NhbGVzKCkg
eyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRs
QXZhaWxhYmxlTG9jYWxlcygpOyB9Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRs
UGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2Fs
ZXMoKTsgfQotaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFJlbGF0aXZlVGltZUZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9
Ci1pbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Cit1c2luZyBMb2NhbGVT
ZXQgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPjsKK2Nv
bnN0IExvY2FsZVNldCYgaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsKK2NvbnN0IExvY2FsZVNldCYg
aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworY29uc3QgTG9jYWxlU2V0JiBpbnRsU2Vn
bWVudGVyQXZhaWxhYmxlTG9jYWxlcygpOworaW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bERh
dGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2Nh
bGVzKCk7IH0KK2lubGluZSBjb25zdCBMb2NhbGVTZXQmIGludGxEaXNwbGF5TmFtZXNBdmFpbGFi
bGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNv
bnN0IExvY2FsZVNldCYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVy
biBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CitpbmxpbmUgY29uc3QgTG9jYWxlU2V0JiBpbnRs
UGx1cmFsUnVsZXNBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2Fs
ZXMoKTsgfQoraW5saW5lIGNvbnN0IExvY2FsZVNldCYgaW50bFJlbGF0aXZlVGltZUZvcm1hdEF2
YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9Citpbmxp
bmUgY29uc3QgTG9jYWxlU2V0JiBpbnRsTGlzdEZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKSB7IHJl
dHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CiAKIFRyaVN0YXRlIGludGxCb29sZWFuT3B0
aW9uKEpTR2xvYmFsT2JqZWN0KiwgT3B0aW9uYWw8SlNPYmplY3QmPiBvcHRpb25zLCBQcm9wZXJ0
eU5hbWUpOwogU3RyaW5nIGludGxTdHJpbmdPcHRpb24oSlNHbG9iYWxPYmplY3QqLCBPcHRpb25h
bDxKU09iamVjdCY+IG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0
PGNvbnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBm
YWxsYmFjayk7CkBAIC0xMDcsMTAgKzEwOSwxMCBAQCBzdHJ1Y3QgUmVzb2x2ZWRMb2NhbGUgewog
ICAgIFJlbGV2YW50RXh0ZW5zaW9ucyBleHRlbnNpb25zOwogfTsKIAotUmVzb2x2ZWRMb2NhbGUg
cmVzb2x2ZUxvY2FsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZh
aWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIExv
Y2FsZU1hdGNoZXIsIGNvbnN0IFJlc29sdmVMb2NhbGVPcHRpb25zJiwgc3RkOjppbml0aWFsaXpl
cl9saXN0PFJlbGV2YW50RXh0ZW5zaW9uS2V5PiByZWxldmFudEV4dGVuc2lvbktleXMsIFZlY3Rv
cjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgUmVsZXZhbnRFeHRlbnNpb25L
ZXkpKTsKLUpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJl
cXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CitSZXNvbHZlZExvY2FsZSByZXNvbHZl
TG9jYWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFibGVMb2NhbGVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgTG9jYWxlTWF0Y2hlciwg
Y29uc3QgUmVzb2x2ZUxvY2FsZU9wdGlvbnMmLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVsZXZh
bnRFeHRlbnNpb25LZXk+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCps
b2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBSZWxldmFudEV4dGVuc2lvbktleSkpOworSlNWYWx1
ZSBzdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgTG9jYWxlU2V0JiBhdmFp
bGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNW
YWx1ZSBvcHRpb25zKTsKIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgbG9jYWxlKTsKLVN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRMb2Nh
bGUpOworU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgTG9jYWxlU2V0JiBhdmFpbGFi
bGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RlZExvY2FsZSk7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBQcmVkaWNhdGU+IFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IFN0cmluZyYg
cmVxdWVzdGVkTG9jYWxlLCBQcmVkaWNhdGUpOwogVmVjdG9yPFN0cmluZz4gbnVtYmVyaW5nU3lz
dGVtc0ZvckxvY2FsZShjb25zdCBTdHJpbmcmIGxvY2FsZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCmluZGV4IGU2NWZiMGQ3MzI3
MTUyOWI1Y2FhOWQ5ZmFiZWM5YmViY2I0YzU2YTIuLmNjY2Y0OTcxNTgxOGRmZDMwMjY4YTMxN2Fk
YWRiOGU4ZGNiYWY1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxQbHVyYWxSdWxlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bFBsdXJhbFJ1bGVzLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEludGxQbHVyYWxSdWxl
czo6aW5pdGlhbGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdQogICAgIExvY2FsZU1hdGNoZXIgbG9jYWxlTWF0Y2hlciA9IGludGxPcHRpb248TG9jYWxl
TWF0Y2hlcj4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVN
YXRjaGVyLCB7IHsgImxvb2t1cCJfcywgTG9jYWxlTWF0Y2hlcjo6TG9va3VwIH0sIHsgImJlc3Qg
Zml0Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0IH0gfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBi
ZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiX3MsIExvY2FsZU1hdGNoZXI6OkJl
c3RGaXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUGx1cmFsUnVsZXNB
dmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGlu
dGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBhdXRvIHJlc29sdmVkID0gcmVz
b2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2Fs
ZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CiAgICAg
bV9sb2NhbGUgPSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1
bGVzQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBs
dXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCmluZGV4IGY4ODUwYjEwYThiZmU2NTcwNDNkMmExZWFk
MDcxMTA0MWI5MjA1OTEuLjI3YjIzMTBiMzQ4YTFlNGE0NWRmMGVmOTExNTNhOWU0NWU4ZmY1N2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxl
c0NvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
UGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9j
YWxlc09mLCAoSlNHbAogCiAgICAgLy8gMTMuMy4yIEludGwuUGx1cmFsUnVsZXMuc3VwcG9ydGVk
TG9jYWxlc09mIChsb2NhbGVzIFssIG9wdGlvbnMgXSkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0
aHViLmlvL2VjbWE0MDIvI3NlYy1pbnRsLnBsdXJhbHJ1bGVzLnN1cHBvcnRlZGxvY2FsZXNvZgot
ICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxQbHVyYWxS
dWxlc0F2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBjb25zdCBhdXRvJiBhdmFpbGFibGVMb2NhbGVz
ID0gaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxSZWxhdGl2ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKaW5kZXggZjdkMzhiODFlYWM4Mjg2
M2Y1YWQ4YmNjODMyNDY1MjY5MjgxNzc2ZS4uMmI1ZDI4ZWZkOGNlOGYyN2Q2NTc1ODUwMmEzMTA5
ODA1YjcwNzNkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bFJlbGF0aXZlVGltZUZvcm1hdC5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIElu
dGxSZWxhdGl2ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVSZWxhdGl2ZVRpbWVGb3JtYXQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbAogICAgICAgICBsb2NhbGVPcHRpb25zW3N0YXRpY19jYXN0PHVuc2ln
bmVkPihSZWxldmFudEV4dGVuc2lvbktleTo6TnUpXSA9IG51bWJlcmluZ1N5c3RlbTsKICAgICB9
CiAKLSAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsUmVs
YXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwog
ICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9ucywg
eyBSZWxldmFudEV4dGVuc2lvbktleTo6TnUgfSwgbG9jYWxlRGF0YSk7CiAgICAgbV9sb2NhbGUg
PSByZXNvbHZlZC5sb2NhbGU7CiAgICAgaWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0aXZlVGltZUZvcm1h
dENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxSZWxh
dGl2ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMTc0YjZmZGNlMmM4NmJmYzExYjVl
YjFlZjUzNzIwOThlYTg5ODQ5NC4uOWE4YzhkNGNhNmM2YzRlZDM1ZmY3MGU5N2U3ZDNlY2M0ZjU5
YWU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFJlbGF0
aXZlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsUmVsYXRpdmVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xMTEsNyAr
MTExLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxSZWxhdGl2ZVRpbWVGb3JtYXRD
b25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxSZWxh
dGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICBhdXRvIHJlcXVlc3RlZExv
Y2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsU2Vn
bWVudGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIu
Y3BwCmluZGV4IDA0Y2YxN2Q1MDkzNTYyMWM0MjQ4ZTg0OGI3NzUwZWRhMzdlYTgxZTguLjJhZDc0
Zjk0YmJlOGNhMTdjNzc1ODkyYWZiYzZmZWY3MTJhNjJiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxTZWdtZW50ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZv
aWQgSW50bFNlZ21lbnRlcjo6aW5pdGlhbGl6ZVNlZ21lbnRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGxvCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAg
IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxhYmxlTG9jYWxlcygp
OworICAgIGNvbnN0IGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsU2VnbWVudGVyQXZhaWxh
YmxlTG9jYWxlcygpOwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9i
amVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwg
bG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2
ZWQubG9jYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFNlZ21lbnRlckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxTZWdtZW50ZXJDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZmZkNzNmNzM2YTk3NDMzNzhkZmRi
MWEzMWQ0YmY5OWY5OGRlYWU1Mi4uMDkzOTRkYzE4ZWRkZjJhOTMxOTUxZTdjNmZhYTk3MjI4ZmJm
NjM2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFNlZ21l
bnRlckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsU2VnbWVudGVyQ29uc3RydWN0b3IuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKEludGxTZWdtZW50ZXJDb25zdHJ1Y3RvclN1cHBvcnRlZExvY2FsZXNP
ZiwgKEpTR2xvYmFsT2IKICAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1zZWdt
ZW50ZXIvI3NlYy1pbnRsLnNlZ21lbnRlci5zdXBwb3J0ZWRsb2NhbGVzb2YKIAogICAgIC8vIDEu
IExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVTZWdtZW50ZXIlLltbYXZhaWxhYmxlTG9jYWxlc11d
LgotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxTZWdt
ZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgYXV0byYgYXZhaWxhYmxlTG9jYWxl
cyA9IGludGxTZWdtZW50ZXJBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVx
dWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZl
Y3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAppbmRleCA4MjczN2Q4ZjljNjhkZTE4ZTg3ZjVlNTdj
ZWEwYTYwMjEwZTg4ODg2Li4zYTcxMWZiOTA5YjY5MGUwZjE5ZmVhNTE3NGM2ODA1OGNiZTRjNDcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKQEAgLTMz
LDcgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJXZWFrLmgiCiAjaW5j
bHVkZSA8YXJyYXk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9i
aW5Ib29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBSZWdFeHBDYWNoZSBmaW5hbCA6IHByaXZhdGUgV2Vha0hhbmRsZU93bmVyIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogICAgIGZyaWVuZCBjbGFzcyBSZWdFeHA7Ci0gICAg
dHlwZWRlZiBIYXNoTWFwPFJlZ0V4cEtleSwgV2VhazxSZWdFeHA+PiBSZWdFeHBDYWNoZU1hcDsK
KyAgICB0eXBlZGVmIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFwPFJlZ0V4cEtleSwgV2Vh
azxSZWdFeHA+PiBSZWdFeHBDYWNoZU1hcDsKIAogcHVibGljOgogICAgIFJlZ0V4cENhY2hlKFZN
KiB2bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBL
ZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCmluZGV4IGUw
Zjg4MzEwMjBkNmQ5MzVjNzAxOTAxZmI0OWIyOGNiNmRjOTM4ZmMuLmQxNjYyNzlmNmRiMmVjZWVi
MmUzZTcwYjA3ZDk2M2JlZTRhYmUyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEtleS5oCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBSZWdFeHBLZXkgewogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWdFeHBLZXkmIGtleSkgeyByZXR1cm4ga2V5
LnBhdHRlcm4tPmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWdF
eHBLZXkmIGEsIGNvbnN0IFJlZ0V4cEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVl
OwogICAgIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAyNmI0NWU1NTNiMDY3ZTI0MDMyN2NjODg2N2VjN2M4YzgxNDY3ZTVmLi41ZjMwYzlhNTYx
MzdiM2MzMWQzMGRiYWI1MzE5MzllYjNjODk4YTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTcxNyw3ICs3MTcsOSBAQAogCQlFMzExRkIxNjFGMEE1NjhC
MDAzQzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxNDlBM0Ey
MjhCRENBQjAwQkZBNkM3IC8qIENvbmN1cnJlbnRCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uY3VycmVudEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzMUJERTI4MjJFOTEzQ0MwMDI5QjEwNSAvKiBNYWNoVk1TUEkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjaFZNU1BJLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMUNGMEE1MjYxMDU4NTgwMDM2RTY3MyAvKiBSb2Jpbkhvb2RI
YXNoVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUm9iaW5Ib29kSGFzaFRhYmxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9y
bVJlZ2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJl
Z2lzdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzI1NjExMjI2MTFCNUI2
MDBBNzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RI
YXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkEyMDczMjNDNTkwMkQw
MDM0QTA5MiAvKiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YWtlZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzM5QzE2MzI0NEI0RTg3
MDAzNTlEQTkgLyogRGF0YVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
YXRhUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Q1Rjg3MUZCRUQ2Njcw
MEJGNjI1RSAvKiBSZWN1cnNhYmxlTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlY3Vyc2FibGVMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTczOCw2ICs3NDAsNyBAQAogCQlFM0EzMkJDMzFGQzgzMEUyMDA3RDdFNzYgLyogSlNWYWx1ZU1h
bGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhbHVlTWFsbG9jLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzQjhFNDFDMjRFN0NFOTIwMDM2NTVEOCAv
KiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTNCRTA5QTYyNEE1ODU0NTAwOURGMkI0IC8qIElDVUhlbHBlcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSUNVSGVscGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jpbkhvb2RIYXNoTWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTNDRjc2OTAyMTE1RDZCQTAwOTFERTQ4IC8qIENvbXBhY3RQb2ludGVyVHVwbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFBvaW50ZXJUdXBsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFM0UxNTgyNTFFQURBNTNDMDA0QTA3OUQg
LyogU3lzdGVtRnJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1G
cmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzRTY0RjBCMjI4MTM0MjgwMDFF
NTVCNCAvKiBOb25tb3ZhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vbm1vdmFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTEsNiArMTIxNCw5IEBACiAJCQkJQThBNDczMDMx
NTFBODI1QjAwNDEyM0ZGIC8qIFJlZlB0ci5oICovLAogCQkJCUZFMzg0MjM0MjMyNUNDODAwMDlE
RDQ0NSAvKiBSZXNvdXJjZVVzYWdlLmggKi8sCiAJCQkJQThBNDczMDUxNTFBODI1QjAwNDEyM0ZG
IC8qIFJldGFpblB0ci5oICovLAorCQkJCUUzQzU4M0M4MjYxMjdBREQwMEM1NzU2OCAvKiBSb2Jp
bkhvb2RIYXNoTWFwLmggKi8sCisJCQkJRTMyNTYxMTIyNjExQjVCNjAwQTcyQ0M1IC8qIFJvYmlu
SG9vZEhhc2hTZXQuaCAqLywKKwkJCQlFMzFDRjBBNTI2MTA1ODU4MDAzNkU2NzMgLyogUm9iaW5I
b29kSGFzaFRhYmxlLmggKi8sCiAJCQkJMkNERUQwRjExODExNUM4NTAwNERCQTcwIC8qIFJ1bkxv
b3AuY3BwICovLAogCQkJCTJDREVEMEYyMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmggKi8s
CiAJCQkJMTRGM0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYjM1Yzc1MmQyYzAwZTFhNTIyZDE1NDJkYTdlYjY1
YjZkMmZjOTE3OC4uZTFmYTU0NWE0MDE3OGVhMzIzNzA4OTM5NjNiYjRkYThlZjU4OGUxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKQEAgLTIxNCw2ICsyMTQsOSBAQCBzZXQoV1RGX1BVQkxJQ19IRUFE
RVJTCiAgICAgUmVmUHRyLmgKICAgICBSZXNvdXJjZVVzYWdlLmgKICAgICBSZXRhaW5QdHIuaAor
ICAgIFJvYmluSG9vZEhhc2hNYXAuaAorICAgIFJvYmluSG9vZEhhc2hTZXQuaAorICAgIFJvYmlu
SG9vZEhhc2hUYWJsZS5oCiAgICAgUnVuTG9vcC5oCiAgICAgU0hBMS5oCiAgICAgU2F0dXJhdGVk
QXJpdGhtZXRpYy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggNDE5OGU4Njg4OTVjN2NkZDE0NTU3MGEyMTkxMmQ2
NWFjNjM3ODljNC4uM2Q5ZWI3OGIzNThlNzM1YWNiYTUwYTQwNjUzMTg3NjhhNzMyZjVkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zv
cndhcmQuaApAQCAtOTMsOSArOTMsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBFbnVt
VHJhaXRzOwogdGVtcGxhdGU8dHlwZW5hbWUgRSwgRS4uLj4gc3RydWN0IEVudW1WYWx1ZXM7CiB0
ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7CiAKK3N0cnVjdCBIYXNoVGFibGVU
cmFpdHM7CitzdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0cmFjdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+IHN0cnVjdCBLZXlWYWx1ZVBhaXJUcmFpdHM7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+IHN0cnVj
dCBLZXlWYWx1ZVBhaXI7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPiBjbGFzcyBIYXNoVGFibGU7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgPSBEZWZhdWx0SGFzaDxWYWx1ZT4sIHR5cGVuYW1lID0gSGFzaFRy
YWl0czxWYWx1ZT4+IGNsYXNzIEhhc2hDb3VudGVkU2V0OwotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwg
dHlwZW5hbWUgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBw
ZWRBcmc+PiBjbGFzcyBIYXNoTWFwOwotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8VmFsdWVB
cmc+PiBjbGFzcyBIYXNoU2V0OwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+LCB0eXBlbmFt
ZSA9IEhhc2hUYWJsZVRyYWl0cz4gY2xhc3MgSGFzaE1hcDsKK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlQXJnLCB0eXBlbmFtZSA9IERlZmF1bHRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNo
VHJhaXRzPFZhbHVlQXJnPiwgdHlwZW5hbWUgPSBIYXNoVGFibGVUcmFpdHM+IGNsYXNzIEhhc2hT
ZXQ7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaE1hcC5oIGIvU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCmluZGV4IGJmNmI4YmFjNGVkYjJkZmExZjZjYzAwZjNiZTFmNjQx
YTExODViY2YuLjg5MDFiNWYzZjI3OWI4YmUwMzY1MGM3YzJhZGViNjFiMGFlZmE5ZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmgKQEAgLTMxLDcgKzMxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEtleVZh
bHVlUGFpcktleUV4dHJhY3RvciB7CiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5
cGUmIGV4dHJhY3QoY29uc3QgVCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
VGFibGVUcmFpdHNBcmc+CiBjbGFzcyBIYXNoTWFwIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHByaXZhdGU6CkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEhhc2hNYXAgZmlu
YWwgewogCiAgICAgdXNpbmcgSGFzaEZ1bmN0aW9ucyA9IEhhc2hBcmc7CiAKLSAgICB1c2luZyBI
YXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPEtleVR5cGUsIEtleVZhbHVlUGFpclR5cGUsIEtleVZh
bHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwgSGFzaEZ1bmN0aW9ucywgS2V5
VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+OworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSB0
eXBlbmFtZSBUYWJsZVRyYWl0c0FyZzo6dGVtcGxhdGUgVGFibGVUeXBlPEtleVR5cGUsIEtleVZh
bHVlUGFpclR5cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwg
SGFzaEZ1bmN0aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+OwogCiAgICAgY2xh
c3MgSGFzaE1hcEtleXNQcm94eTsKICAgICBjbGFzcyBIYXNoTWFwVmFsdWVzUHJveHk7CkBAIC0y
MzIsOTEgKzIzMiw4OSBAQCBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
c3dhcChIYXNoTWFwJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgdm9p
ZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpzd2FwKEhhc2hNYXAmIG90aGVyKQogewogICAg
IG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdW5z
aWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0
eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OnNp
emUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHVuc2lnbmVkIEhhc2hNYXA8VCwg
VSwgViwgVywgWCwgWT46OmNhcGFjaXR5KCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIG1faW1wbC5j
YXBhY2l0eSgpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmlzRW1wdHkoKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmlzRW1wdHkoKSBjb25zdAogewogICAg
IHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGF1dG8g
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YmVnaW4oKSAtPiBpdGVyYXRvcgordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwg
dHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmJlZ2lu
KCkgLT4gaXRlcmF0b3IKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSAtPiBpdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWCwgWT46OmVuZCgpIC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQo
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmJlZ2luKCkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+
CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpiZWdpbigpIGNvbnN0IC0+
IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgY29uc3Qg
LT4gY29uc3RfaXRlcmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBI
YXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjplbmQoKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgog
ewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0
byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRl
cmF0b3IKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gaXRlcmF0b3IKIHsKICAg
ICByZXR1cm4gbV9pbXBsLmZpbmQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRv
IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAt
PiBjb25zdF9pdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGluZSBhdXRvIEhh
c2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAt
PiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZChrZXkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMo
Y29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4KK2lubGlu
ZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKGtleSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6aXRlcmF0b3IKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3Qg
VFlQRSYgdmFsdWUpCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5k
KGNvbnN0IFRZUEUmIHZhbHVlKSAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBI
YXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQ
RT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRv
ciAKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0
CitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKGNvbnN0IFRZUEUm
IHZhbHVlKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgZmluZDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBI
YXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5
cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQ
RT4KLWF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBj
b25zdCAtPiBNYXBwZWRQZWVrVHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpn
ZXQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0
byogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGxv
b2t1cDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJh
bnNsYXRvcj4+KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzI0LDkgKzMyMiw5IEBAIGF1
dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Z2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAt
PiBNYXBwZWRQZWVrVHlwZQogICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWF1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6aW5saW5lR2V0KGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdCAtPiBNYXBw
ZWRQZWVrVHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQoY29u
c3QgVFlQRSYgdmFsdWUpIGNvbnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgYXV0byogZW50
cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxv
b2t1cDxIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJh
bnNsYXRvcj4+KHZhbHVlKTsKICAgICBpZiAoIWVudHJ5KQpAQCAtMzM0LDE2ICszMzIsMTYgQEAg
YXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVHZXQoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0IC0+IE1hcHBlZFBlZWtUeXAKICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVu
dHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgog
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1pbmxpbmUg
Ym9vbCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb250YWlucyhjb25zdCBUWVBFJiB2YWx1ZSkg
Y29uc3QKK2lubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWCwgWT46OmNvbnRhaW5zKGNv
bnN0IFRZUEUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29u
dGFpbnM8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRy
YW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5h
bWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZVNldChLJiYg
a2V5LCBWJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNB
cmc+OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsKICAgICBB
ZGRSZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZv
cndhcmQ8Vj4odmFsdWUpKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CkBAIC0zNTMs
OTEgKzM1MSw5MSBAQCBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lUwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPgotQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6aW5saW5lQWRkKEsmJiBrZXks
IFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CitBTFdBWVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlB
cmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRh
YmxlVHJhaXRzQXJnPjo6aW5saW5lQWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5
VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0
ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgRj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFw
PEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0Fy
Zz46OmlubGluZUVuc3VyZShLJiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CitBTFdB
WVNfSU5MSU5FIGF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJhaXRzQXJnPjo6aW5saW5lRW5zdXJlKEsm
JiBrZXksIEYmJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGFkZDxIYXNoTWFwRW5zdXJlVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhh
c2hGdW5jdGlvbnM+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPEY+KGZ1bmN0
b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywg
TWFwcGVkVHJhaXRzQXJnPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OnNldChjb25zdCBLZXlU
eXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBpbmxpbmVT
ZXQoa2V5LCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVkKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OnNldChLZXlUeXBl
JiYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJh
aXRzQXJnPjo6c2V0KEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAogewog
ICAgIHJldHVybiBpbmxpbmVTZXQoV1RGTW92ZShrZXkpLCBzdGQ6OmZvcndhcmQ8VD4obWFwcGVk
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRy
YWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQo
SyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK2F1dG8gSGFzaE1hcDxLZXlBcmcsIE1h
cHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIFRhYmxlVHJh
aXRzQXJnPjo6YWRkKEsmJiBrZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0
dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaE1hcFRyYW5zbGF0b3JB
ZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8
Sz4oa2V5KSwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4KK3RlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFp
dHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVk
QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmFkZChjb25zdCBL
ZXlUeXBlJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFy
ZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFi
bGVUcmFpdHNBcmc+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRS
ZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBl
ZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywg
dHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRU
cmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVz
dWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
ZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmFkZChLZXlUeXBlJiYga2V5LCBU
JiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKIHsKICAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUo
a2V5KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5
VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
QXJnPgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtl
eUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46
OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKK0FM
V0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjpmYXN0QWRkKGNvbnN0
IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlu
bGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJs
ZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFp
dHNBcmc+OjpmYXN0QWRkKEtleVR5cGUmJiBrZXksIFQmJiBtYXBwZWQpIC0+IEFkZFJlc3VsdAor
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmZhc3RBZGQoS2V5
VHlwZSYmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlubGlu
ZUFkZChXVEZNb3ZlKGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnLCB0eXBlbmFt
ZSBUYWJsZVRyYWl0c0FyZz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1hdXRvIEhhc2hN
YXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRz
QXJnPjo6ZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFk
ZFJlc3VsdAorYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgVGFibGVUcmFpdHNBcmc+OjplbnN1cmUoY29uc3QgS2V5
VHlwZSYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJu
IGlubGluZUVuc3VyZShrZXksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4K
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywg
dHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotYXV0
byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz46OmVuc3VyZShLZXlUeXBlJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4g
QWRkUmVzdWx0CithdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRy
YWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnLCBUYWJsZVRyYWl0c0FyZz46OmVuc3VyZShLZXlUeXBl
JiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAgcmV0dXJuIGlu
bGluZUVuc3VyZShzdGQ6OmZvcndhcmQ8S2V5VHlwZT4oa2V5KSwgc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKIH0KICAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Citp
bmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQoY29uc3QgS2V5VHlwZSYg
a2V5KSBjb25zdCAtPiBNYXBwZWRQZWVrVHlwZQogewogICAgIHJldHVybiBnZXQ8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotQUxXQVlT
X0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6aW5saW5lR2V0
KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1h
cHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK0FMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cywgWT46OmlubGluZUdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0IC0+IE1hcHBlZFBlZWtUeXBlCiB7CiAgICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBj
b25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOwogICAgIGlmICghZW50cnkpCkBAIC00NDUsOCAr
NDQzLDggQEAgQUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6aW5saW5lR2V0KGNvbnN0IEtleVR5cGUmIGsKICAgICByZXR1cm4gTWFwcGVkVHJhaXRz
OjpwZWVrKGVudHJ5LT52YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3ZlKGl0
ZXJhdG9yIGl0KQogewogICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00NTUsMjcgKzQ1MywyNyBAQCBpbmxpbmUgYm9vbCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLWlubGluZSBib29sIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZUlm
KEZ1bmN0b3ImJiBmdW5jdG9yKQoraW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZ
Pjo6cmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCiB7CiAgICAgcmV0dXJuIG1faW1wbC5yZW1v
dmVJZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUm
IGtleSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+OjpyZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIHJldHVybiBy
ZW1vdmUoZmluZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB2b2lkIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitpbmxpbmUg
dm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpjbGVhcigpCiB7CiAgICAgbV9pbXBsLmNs
ZWFyKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLWF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4gTWFwcGVkVGFr
ZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cywgdHlwZW5hbWUgWT4KK2F1dG8gSGFzaE1hcDxU
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHMsIFk+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkgLT4g
TWFwcGVkVGFrZVR5cGUKIHsKICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAo
aXQgPT0gZW5kKCkpCkBAIC00ODUsMzAgKzQ4MywzMCBAQCBhdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgTWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VU
eQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpmaW5kKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PElzU21hcnRQdHI8Sz46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBI
YXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25z
dCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3Rf
aXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpm
aW5kKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIGNvbnN0IC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBjb25zdF9pdGVyYXRvcj46
OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0
b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5h
bWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5s
aW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRy
SGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQs
IFUsIFYsIFcsIFgsIFk+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5
cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2
YWx1ZSwgYm9vbD46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
PEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtl
eSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgogdGVtcGxhdGU8
dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUdl
dCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0
eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjppbmxpbmVHZXQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQog
ewogICAgIEtleVZhbHVlUGFpclR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBl
Jj4obV9pbXBsKS50ZW1wbGF0ZSBpbmxpbmVMb29rdXA8SGFzaE1hcFRyYW5zbGF0b3I8S2V5VmFs
dWVQYWlyVHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4oa2V5KTsKICAgICBpZiAoIWVudHJ5KQpAQCAt
NTE2LDIzICs1MTQsMjMgQEAgaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5s
aW5lR2V0KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZQogICAgIHJldHVybiBNYXBw
ZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+OjpnZXQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29u
c3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBl
ZFBlZWtUeXBlPjo6dHlwZQorYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+OjpnZXQodHlw
ZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3QgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIE1hcHBlZFBlZWtUeXBlPjo6dHlwZQog
ewogICAgIHJldHVybiBpbmxpbmVHZXQoa2V5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFgsIHR5cGVuYW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlw
ZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBi
b29sPjo6dHlwZQoraW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6cmVtb3Zl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVy
biByZW1vdmUoZmluZChrZXkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkVGFrZVR5
cGU+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojp0YWtlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUKIHsKICAg
ICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICBpZiAoaXQgPT0gZW5kKCkpCkBAIC01NDIs
MTQgKzU0MCwxNCBAQCBpbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojp0YWtlKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSBrZXkpCiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y2hl
Y2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIHZv
aWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7
CiAgICAgbV9pbXBsLmNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXNWYWxpZEtleShjb25zdCBLZXlU
eXBlJiBrZXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYLCBZPjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiB7CiAgICAg
aWYgKEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUoa2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNTY1LDEzICs1NjMsMTMgQEAgaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6aXNWYWxpZEtleShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBY
PiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVu
YW1lIFk+Citib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYg
YSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYLCBZPiYgYikKIHsKICAgICBpZiAoYS5zaXpl
KCkgIT0gYi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+Ojpjb25z
dF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEu
ZW5kKCk7CiAgICAgY29uc3RfaXRlcmF0b3Igbm90Rm91bmQgPSBiLmVuZCgpOwpAQCAtNTg0LDgg
KzU4Miw4IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBh
LCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hNYXA8VCwgVSwg
ViwgVywgWD4mIGEsIGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGIpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
LCB0eXBlbmFtZSBZPgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFgsIFk+JiBhLCBjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFgsIFk+JiBiKQogewog
ICAgIHJldHVybiAhKGEgPT0gYik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggNjhhMTVkYzAzNzVhMTcxOWM3
YWIzMjQ2MmM3YWRmNzllZDYwYjRlZi4uYTQwMmNlMjczNzVhY2ViMGNlYjA0ZjllYjVhMWU0MWFk
MmM2OWYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaApAQCAtMjcsOSArMjcsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsK
IAotc3RydWN0IElkZW50aXR5RXh0cmFjdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZywgdHlwZW5h
bWUgVGFibGVUcmFpdHNBcmc+CiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CkBAIC00MSw3ICszOSw3IEBAIGNsYXNzIEhhc2hTZXQg
ZmluYWwgewogICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFp
dFR5cGU7CiAKIHByaXZhdGU6Ci0gICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxW
YWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFZh
bHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz47CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IHR5cGVu
YW1lIFRhYmxlVHJhaXRzQXJnOjp0ZW1wbGF0ZSBUYWJsZVR5cGU8VmFsdWVUeXBlLCBWYWx1ZVR5
cGUsIElkZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVU
cmFpdHM+OwogCiBwdWJsaWM6CiAgICAgLy8gSGFzaFNldCBpdGVyYXRvcnMgaGF2ZSB0aGUgZm9s
bG93aW5nIHN0cnVjdHVyZToKQEAgLTE4NiwxMDkgKzE4NCwxMDkgQEAgc3RydWN0IEhhc2hTZXRF
bnN1cmVUcmFuc2xhdG9yQWRhcHRvciB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46
OnN3YXAoSGFzaFNldCYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWLCBXPjo6
c3dhcChIYXNoU2V0JiBvdGhlcikKIHsKICAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOyAK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGlu
ZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWdu
ZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1w
bC5zaXplKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotaW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46OmNhcGFjaXR5KCkgY29uc3QK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+
CitpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2FwYWNpdHkoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc0VtcHR5KCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojppc0Vt
cHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsgCiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNo
U2V0PFQsIFUsIFY+OjpiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWLCBXPjo6YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVy
biBtX2ltcGwuYmVnaW4oKTsgCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjplbmQoKSBjb25zdCAt
PiBpdGVyYXRvcgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVz4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC5lbmQoKTsgCiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0byBIYXNoU2V0
PFQsIFUsIFY+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0IC0+IGl0ZXJhdG9y
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWLCBXPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUm
IHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgogewogICAgIHJldHVybiBtX2ltcGwuZmluZCh2YWx1
ZSk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpjb250YWlucyhj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFp
bnModmFsdWUpOyAKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRz
PgogdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUg
YXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQm
IHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46OmZpbmQoY29uc3QgVCYgdmFsdWUpIGNv
bnN0IC0+IGl0ZXJhdG9yCiB7CiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hT
ZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKK2lubGlu
ZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVUcmFpdHM+
Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+
KHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJhaXRzPgog
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1
bmN0b3I+Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
OjplbnN1cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAoraW5saW5l
IGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0CiB7CiAgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaFNldEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9y
PFRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFYsIFc+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5hZGQodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRk
KFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQs
IFUsIFYsIFc+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJl
dHVybiBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46
OmFkZFZvaWQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFYsIFc+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAgICAgbV9pbXBs
LmFkZCh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Ci1pbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKFZhbHVlVHlwZSYm
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFkZFZvaWQoVmFsdWVU
eXBlJiYgdmFsdWUpCiB7CiAgICAgbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQK
K2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgVGFibGVU
cmFpdHM+OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAogewogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hDb2RlPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
cjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlLCB2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JU
eXBlPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdp
biwgSXRlcmF0b3JUeXBlIGVuZCkKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmFk
ZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CiAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQpAQCAtMjk2LDkgKzI5NCw5IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0
dXJuIGNoYW5nZWQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXPgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6cmVtb3ZlKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVu
ZCkKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZShJdGVyYXRvclR5cGUg
YmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiB7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAg
ICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQpA
QCAtMzA2LDggKzMwNCw4IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShJ
dGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCiAgICAgcmV0dXJuIGNoYW5nZWQ7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJv
b2wgSGFzaFNldDxULCBVLCBWLCBXPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogewogICAgIGlmIChp
dC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTYs
MjcgKzMxNCwyNyBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0
b3IgaXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFYsIFc+
OjpyZW1vdmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gcmVtb3ZlKGZp
bmQodmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFc+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK2lubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgViwgVz46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAg
ICAgcmV0dXJuIG1faW1wbC5yZW1vdmVJZihmdW5jdG9yKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwg
Vj46OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFc+CitpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjbGVhcigpCiB7
CiAgICAgbV9pbXBsLmNsZWFyKCk7IAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVy
YXRvciBpdCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFYsIFc+Ojp0
YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtlVHlwZQogewogICAgIGlmIChpdCA9PSBlbmQoKSkKICAg
ICAgICAgcmV0dXJuIFZhbHVlVHJhaXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0eVZhbHVlKCkp
OwpAQCAtMzQ2LDQ4ICszNDQsNDggQEAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFr
ZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBUYWtlVHlwZQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4K
K2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgViwgVz46OnRha2UoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgLT4gVGFrZVR5cGUKIHsKICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgYXV0
byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFQsIFUsIFYsIFc+Ojp0YWtlQW55KCkgLT4gVGFrZVR5cGUKIHsKICAgICByZXR1cm4g
dGFrZShiZWdpbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFRhYmxlVHJh
aXRzPgogdGVtcGxhdGU8dHlwZW5hbWUgVj4KLWlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+
Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIFRhYmxlVHJhaXRzPjo6ZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElz
U21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUKIHsKICAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4o
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBl
IHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2
YWx1ZSwgYm9vbD46OnR5cGUKK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgVGFibGVUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21h
cnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQogewogICAgIHJldHVybiBtX2ltcGwudGVtcGxh
dGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFs
dWUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVGFibGVUcmFpdHM+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWPgotaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1
ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+
Ojp0eXBlCitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IFRhYmxlVHJhaXRzPjo6cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2
YWx1ZSkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCiB7CiAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBUYWJsZVRyYWl0cz4KIHRlbXBsYXRlPHR5cGVuYW1lIFY+
Ci1pbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojp0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZQoraW5saW5l
IGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBUYWJsZVRyYWl0cz46
OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCiB7
CiAgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6
aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiB7CiAg
ICAgaWYgKFZhbHVlVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQwMyw5ICs0MDEsOSBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
Ojppc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+Ci1pbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBj
b25zdAoraW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6b3BlcmF0b3I9PShjb25zdCBP
dGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKIHsKICAgICBpZiAoc2l6ZSgp
ICE9IG90aGVyQ29sbGVjdGlvbi5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQx
NiwyMiArNDE0LDIyIEBAIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0o
Y29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogdGVt
cGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6b3BlcmF0b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikg
Y29uc3QKK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46Om9wZXJhdG9yIT0oY29uc3Qg
T3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXJDb2xsZWN0aW9uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLXZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxp
c3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgordm9pZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjphZGQoc3RkOjppbml0aWFsaXplcl9saXN0
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVmFsdWVUeXBlPj4gbGlzdCkKIHsKICAgICBm
b3IgKGF1dG8mIHZhbHVlIDogbGlzdCkKICAgICAgICAgYWRkKHZhbHVlKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgViwgVz46OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIG1faW1wbC5j
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKaW5kZXggNmQ0YjJjOGY3MmIy
ZTAzNmMxNjAwMTBjMGE2Mjk1ODdjNWVkZjBhOC4uMTJkZDg0ODIyYWE1MzA2OGMzOGRjOWY4NDk2
NmJhZDRhNDBiM2QzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysr
IGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTc5LDQ2ICs3OSw0OCBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAjZW5kaWYKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+Ci0gICAgY2xhc3MgSGFzaFRhYmxlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFibGVU
eXBlKiwgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3Io
SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29u
c3QgSGFzaFRhYmxlVHlwZSopOwogCiAjaWYgIUNIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwK
LSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CisgICAgaW5saW5lIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFzaFRh
YmxlVHlwZSosIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKSB7IH0KIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiopIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgaW5s
aW5lIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxIYXNoVGFibGVU
eXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiopIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB2
b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoY29uc3QgSGFzaFRhYmxlVHlwZSopIHsgfQogCiAjZW5k
aWYKIAogICAgIHR5cGVkZWYgZW51bSB7IEhhc2hJdGVtS25vd25Hb29kIH0gSGFzaEl0ZW1Lbm93
bkdvb2RUYWc7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwg
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAg
ICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3Rk
Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1
ZSosIGNvbnN0IFZhbHVlJj4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBIYXNoVGFibGVUeXBlOwotICAg
ICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVm
IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHVzaW5nIEhh
c2hUYWJsZVR5cGUgPSBIYXNoVGFibGU7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0
b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRl
ZiBWYWx1ZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZl
cmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSogUG9pbnRlclR5cGU7
CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLSAgICAgICAgZnJpZW5kIGNsYXNz
IEhhc2hUYWJsZUl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFzaFRhYmxlVHlwZTsKKyAgICAg
ICAgZnJpZW5kIGl0ZXJhdG9yOwogCiAgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpCiAg
ICAgICAgIHsKQEAgLTI0MywxOCArMjQ1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3Ig
OiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZSwg
c3RkOjpwdHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hU
YWJsZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAg
ICAgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKKyAgICAgICAgdHlwZWRlZiBI
YXNoVGFibGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwog
ICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZVR5
cGUmIFJlZmVyZW5jZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVyVHlw
ZTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworICAgICAgICBmcmllbmQgSGFz
aFRhYmxlVHlwZTsKIAogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBlKiB0
YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQpIDogbV9pdGVyYXRvcih0YWJs
ZSwgcG9zLCBlbmQpIHsgfQogICAgICAgICBIYXNoVGFibGVJdGVyYXRvcihIYXNoVGFibGVUeXBl
KiB0YWJsZSwgUG9pbnRlclR5cGUgcG9zLCBQb2ludGVyVHlwZSBlbmQsIEhhc2hJdGVtS25vd25H
b29kVGFnIHRhZykgOiBtX2l0ZXJhdG9yKHRhYmxlLCBwb3MsIGVuZCwgdGFnKSB7IH0KQEAgLTM0
Nyw4ICszNDksOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdXNpbmcg
SGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVy
YXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVD
b25zdEl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICB0eXBl
ZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkgS2V5VHlwZTsKICAg
ICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7CkBAIC00MDcsNyArNDEwLDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgSGFz
aFRhYmxlKCk7CiAgICAgICAgIH5IYXNoVGFibGUoKSAKICAgICAgICAgewotICAgICAgICAgICAg
aW52YWxpZGF0ZUl0ZXJhdG9ycygpOyAKKyAgICAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMo
dGhpcyk7IAogICAgICAgICAgICAgaWYgKG1fdGFibGUpCiAgICAgICAgICAgICAgICAgZGVhbGxv
Y2F0ZVRhYmxlKG1fdGFibGUpOwogI2lmIENIRUNLX0hBU0hUQUJMRV9VU0VfQUZURVJfREVTVFJV
Q1RJT04KQEAgLTQzNSw3ICs0MzgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZW5kKCk7CiAKLSAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGJ1Y2tldCA9IG1fdGFi
bGVbd2Vha1JhbmRvbVVpbnQzMigpICYgdGFibGVTaXplTWFzaygpXTsKICAgICAgICAgICAgICAg
ICBpZiAoIWlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoYnVja2V0KSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcigmYnVja2V0KTsKQEAgLTU1OSwxMiArNTYy
LDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIHsg
fQogI2VuZGlmCiAKLSNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAgICAgIHZvaWQg
aW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotI2Vsc2UKLSAgICAgICAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpIHsgfQotI2VuZGlmCi0KICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9y
IHNtYWxsIHRhYmxlIGlzIDc1JS4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBz
bWFsbE1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWRO
dW1lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2Fk
RGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWREZW5vbWluYXRv
cjsKQEAgLTY5NCw3ICs2OTEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlm
CiAKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMg
YnJhbmNoCkBAIC03NTAsNyArNzQ3LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9
IG51bGxwdHI7CiAKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQg
dGhpcyBicmFuY2gKQEAgLTgxMSw3ICs4MDgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVu
dHJ5ID0gbnVsbHB0cjsKIAotICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXpl
IG91dCB0aGlzIGJyYW5jaApAQCAtODU2LDcgKzg1Myw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgY2hlY2tLZXk8SGFzaFRy
YW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAg
ICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CiAKQEAgLTg3Niw3ICs4NzMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwogCiAgICAgICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKQpAQCAtOTMyLDcgKzkyOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxI
YXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Cisg
ICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxl
KQogICAgICAgICAgICAgZXhwYW5kKG51bGxwdHIpOwpAQCAtOTU4LDcgKzk1NSw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAg
VmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSBudWxscHRyOwogICAgICAgICBWYWx1ZVR5cGUqIGVu
dHJ5OwotICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICAgICAgZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIHdl
IGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKQEAgLTEw
MTcsNyArMTAxNCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgewogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsK
IAotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CiAKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgZXhwYW5k
KCk7CkBAIC0xMTEwLDE0ICsxMTA3LDE0IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBw
b3MpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFs
aWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBl
KiBwb3MpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGlu
dmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CiAgICAgICAgIHJlbW92ZShwb3MpOwogICAgIH0KQEAgLTEzNzMsNyArMTM3MCw3
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKLSAgICAgICAgaW52
YWxpZGF0ZUl0ZXJhdG9ycygpOworICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOwog
ICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE0MDksOCAr
MTQwNiw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUmIG90aGVy
KQogICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgICAgICBvdGhlci5p
bnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7
CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKIAogICAgICAgICBzdGQ6OnN3
YXAobV90YWJsZSwgb3RoZXIubV90YWJsZSk7CiAKQEAgLTE0MzQsNyArMTQzMSw3IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICwg
bV9tdXRleChtYWtlVW5pcXVlPExvY2s+KCkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIG90aGVy
LmludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3Ro
ZXIpOwogCiAgICAgICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFibGUsIG51
bGxwdHIpOwogCkBAIC0xNTAwLDMwICsxNDk3LDI5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFU
T1JTCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9ycyhjb25zdCBIYXNoVGFibGVUeXBlKiB0YWJsZSkKICAgICB7Ci0gICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soKm1fbXV0ZXgpOwotICAgICAgICBjb25zdF9pdGVyYXRv
ciogbmV4dDsKLSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciogcCA9IG1faXRlcmF0b3JzOyBw
OyBwID0gbmV4dCkgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCp0YWJsZS0+bV9t
dXRleCk7CisgICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yKiBu
ZXh0OworICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9y
KiBwID0gdGFibGUtPm1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewogICAgICAgICAgICAgbmV4
dCA9IHAtPm1fbmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAg
cC0+bV9uZXh0ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOworICAgICAgICAg
ICAgcC0+bV90YWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICBwLT5tX25leHQgPSBudWxscHRy
OworICAgICAgICAgICAgcC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9pdGVyYXRvcnMgPSAwOworICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBudWxscHRy
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qIHRhYmxlLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgYWRkSXRlcmF0b3IoY29uc3QgSGFz
aFRhYmxlVHlwZSogdGFibGUsIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwg
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
IGl0KQogICAgIHsKICAgICAgICAgaXQtPm1fdGFibGUgPSB0YWJsZTsKLSAgICAgICAgaXQtPm1f
cHJldmlvdXMgPSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IG51bGxwdHI7CiAKICAgICAg
ICAgLy8gSW5zZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0
ZXJhdG9ycy4KICAgICAgICAgaWYgKCF0YWJsZSkgewotICAgICAgICAgICAgaXQtPm1fbmV4dCA9
IDA7CisgICAgICAgICAgICBpdC0+bV9uZXh0ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKnRhYmxlLT5tX211dGV4KTsKICAg
ICAgICAgICAgIEFTU0VSVCh0YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwpAQCAtMTUzNiw4ICsx
NTMyLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCByZW1vdmVJdGVyYXRv
cihIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VGFibGVUeXBlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgorICAgIHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxI
YXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPiogaXQpCiAgICAgewogICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJv
bSBkb3VibHktbGlua2VkIGxpc3Qgb2YgaXRlcmF0b3JzLgogICAgICAgICBpZiAoIWl0LT5tX3Rh
YmxlKSB7CkBAIC0xNTU5LDEzICsxNTU1LDE4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBpdC0+bV90YWJsZSA9IDA7Ci0gICAgICAgIGl0LT5tX25leHQgPSAwOwotICAgICAgICBp
dC0+bV9wcmV2aW91cyA9IDA7CisgICAgICAgIGl0LT5tX3RhYmxlID0gbnVsbHB0cjsKKyAgICAg
ICAgaXQtPm1fbmV4dCA9IG51bGxwdHI7CisgICAgICAgIGl0LT5tX3ByZXZpb3VzID0gbnVsbHB0
cjsKICAgICB9CiAKICNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAKKyAgICBz
dHJ1Y3QgSGFzaFRhYmxlVHJhaXRzIHsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICAgICAgdXNpbmcgVGFi
bGVUeXBlID0gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+OworICAgIH07CisKICAgICAvLyBpdGVyYXRvciBhZGFwdGVycwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBl
PiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVy
YXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90
LCBjb25zdCBWYWx1ZVR5cGUqLCBjb25zdCBWYWx1ZVR5cGUmPiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RI
YXNoTWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdiZTIxZmM1YjY5ZGEyMjY2OTBhNmIyODBjYWUwMDA0ZDEy
NzM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hNYXAu
aApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyA5NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRI
YXNoPEtleUFyZz4sIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwID0gSGFzaE1hcDxLZXlBcmcs
IE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFRhYmxlVHJhaXRzPjsKKworLy8gOTAlIGxv
YWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmcgPSBIYXNoVHJhaXRzPEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhh
c2hUcmFpdHM8TWFwcGVkQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoTWFw
ID0gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmcsIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCisv
LyA3NSUgbG9hZC1mYWN0b3IuCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1h
cHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1l
IEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRz
QXJnID0gSGFzaFRyYWl0czxNYXBwZWRBcmc+PgordXNpbmcgRmFzdFJvYmluSG9vZEhhc2hNYXAg
PSBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZywgRmFzdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6Ok1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDsKK3VzaW5nIFdURjo6TWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hNYXA7Cit1c2luZyBX
VEY6OkZhc3RSb2Jpbkhvb2RIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUm9i
aW5Ib29kSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFNldC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkYTNlNDViOTBiZjU2OGVmMTllYmZiMThlMWRhMjQ3NGZkZWNhN2YKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Sb2Jpbkhvb2RIYXNoU2V0LmgKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworLy8gOTUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5cGVuYW1lIFRyYWl0c0Fy
ZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0ID0gSGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cz47CisKKy8vIDkw
JSBsb2FkLWZhY3Rvci4KK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNo
QXJnID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBIYXNoVHJh
aXRzPFZhbHVlQXJnPj4KK3VzaW5nIE1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0ID0gSGFz
aFNldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnLCBNZW1vcnlDb21wYWN0Um9iaW5Ib29k
SGFzaFRhYmxlVHJhaXRzPjsKKworLy8gNzUlIGxvYWQtZmFjdG9yLgordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz4sIHR5
cGVuYW1lIFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8VmFsdWVBcmc+PgordXNpbmcgRmFzdFJvYmlu
SG9vZEhhc2hTZXQgPSBIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmcsIEZhc3RS
b2Jpbkhvb2RIYXNoVGFibGVUcmFpdHM+OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ7Cit1c2luZyBXVEY6
Ok1lbW9yeUNvbXBhY3RSb2Jpbkhvb2RIYXNoU2V0OwordXNpbmcgV1RGOjpGYXN0Um9iaW5Ib29k
SGFzaFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5o
IGIvU291cmNlL1dURi93dGYvUm9iaW5Ib29kSGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTllZTlm
ODJhOWI5MzQ0MTUyN2Y4MjNmODc4ZmIyZWE3ZGFmMDUyZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JvYmluSG9vZEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsOTM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisvKgorICogQWRkaW5nIHByb2JlRGlzdGFuY2VUaHJlc2hvbGQgY29tZXMgZnJvbSBv
bGQgUnVzdCdzIFJvYmluSG9vZCBoYXNodGFibGUgdW5kZXIgTUlULWxpY2Vuc2UuCisgKgorICog
Q29weXJpZ2h0IDIwMTggVGhlIFJ1c3QgUHJvamVjdCBEZXZlbG9wZXJzLgorICoKKyAqIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkKKyAqIHBlcnNv
biBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQKKyAqIGRv
Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUKKyAqIFNv
ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0CisgKiBsaW1pdGF0
aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwg
ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCisgKiB0aGUgU29m
dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZQorICogaXMg
ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlv
bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2UKKyAqIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp
YWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRgorICogQU5ZIEtJTkQsIEVYUFJF
U1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorICogVE8gVEhFIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBBVVRI
T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFN
QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05U
UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SCisgKiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJ
TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9IYXNoVGFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitjbGFzcyBSb2Jpbkhvb2RIYXNoVGFi
bGU7CisKKy8vIDk1JSBsb2FkIGZhY3Rvci4gVGhpcyBhIGJpdCByZWdyZXNzICJpbnNlcnRpb24i
IHBlcmZvcm1hbmNlLCB3aGlsZSBpdCBrZWVwcyBsb29rdXAgcGVyZm9ybWFuY2Ugc2FuZS4KKy8v
IFJvYmluSG9vZEhhc2hUYWJsZSBjYW4gd29yayB3aXRoIDk1JSBsb2FkIGZhY3RvciBiZWNhdXNl
IG9mIG1haW50YWluZWQgcHJvYmUgZGlzdGFuY2UuCitzdHJ1Y3QgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAxOTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWluTG9hZCA9IDY7Cit9OworCisvLyA5MCUgbG9hZCBmYWN0b3IuIFJvYmluSG9vZEhh
c2hUYWJsZSBjYW4gd29yayB3aXRoIHN1Y2ggYSBoaWdoIGxvYWQtZmFjdG9yLgorLy8gT2JzZXJ2
ZWQgcGVyZm9ybWFuY2UgaXMgc2xpZ2h0bHkgd29yc2UgdGhhbiBIYXNoVGFibGUgKDc1JSBmb3Ig
c21hbGwgdGFibGUsIDUwJSBmb3IgbGFyZ2UgdGFibGUpLgorc3RydWN0IE1lbW9yeUNvbXBhY3RS
b2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWROdW1lcmF0b3IgPSA5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bWF4TG9hZERlbm9taW5hdG9yID0gMTA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
aW5Mb2FkID0gNjsKK307CisKKy8vIDc1JSBsb2FkIGZhY3RvciwgdGhpcyBtYWludGFpbnMgdGhl
IHBlcmZvcm1hbmNlIHNhbWUgdG8gSGFzaFRhYmxlLCBzdGlsbCB0aGUgbG9hZCBmYWN0b3IKKy8v
IGlzIGhpZ2hlciAoSGFzaFRhYmxlIHVzZXMgNzUlIGZvciBzbWFsbCB0YWJsZSwgNTAgZm9yIGxh
cmdlIHRhYmxlKS4KK3N0cnVjdCBGYXN0Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeSB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKK307CisKKy8vIFJvYmluSG9vZCBI
YXNoVGFibGUgaGFzIHNldmVyYWwgbGltaXRhdGlvbnMgY29tcGFyZWQgdG8gdXN1YWwgSGFzaFRh
YmxlLCB0aGF0J3Mgd2h5IHRoaXMgaXMgbm90IGEgZGVmYXVsdCBvbmUuCisvLyBSb2Jpbkhvb2Qg
SGFzaFRhYmxlIGNvbXB1dGVzIGhhc2ggbXVjaCBtb3JlIGZyZXF1ZW50bHkuIFRoaXMgbWVhbnMg
dGhhdCB0aGUgS2V5IHNob3VsZCBjYWNoZSBjb21wdXRlZCBoYXNoLgorLy8gQnV0IG91ciBkZWZh
dWx0IEhhc2hUYWJsZSBkb2VzIG5vdCBjYWNoZSBoYXNoIHZhbHVlIGJlY2F1c2Ugb2YgbWVtb3J5
IHVzYWdlLiBUaGlzIGRlc2lnbiBtZWFucyB0aGF0IEtleSB0eXBlCisvLyBzaG91bGQgaGF2ZSBo
YXNoIHZhbHVlIGludHJ1c2l2ZWx5IChlLmcuIFdURjo6U3RyaW5nIGhvbGRzIGhhc2ggdmFsdWUg
aW50ZXJuYWxseSkuCisvLworLy8gSWYgdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBtZWV0IHlvdXIg
dXNlIGNhc2UsIHRoZW4geW91IGNhbiB0cnkgUm9iaW5Ib29kIEhhc2hUYWJsZS4KKy8vIFRoZSBs
YXJnZXN0IGJlbmVmaXQgaXMgdGhhdCB3ZSBjYW4gdXNlIHNpZ25pZmljYW50bHkgaGlnaCBsb2Fk
LWZhY3RvciAoOTAlIC0gOTUlKSEKKy8vCisvLyBUaGUgYWxnb3JpdGhtIGlzIFJvYmluSG9vZC1I
YXNoaW5nICsgYmFja3dhcmQgc2hpZnQgZGVsZXRpb24sIGRlc2NyaWJlZCBpbiBbMSwyXS4KKy8v
CisvLyBOYWl2ZSBSb2Jpbkhvb2RIYXNoVGFibGUgaGFzIHNvbWUgY2FzZXMgd2hpY2ggY2F1c2Ug
TyhOXjIpIHdoZW4gaXRlcmF0aW5nIGl0IGFuZCBpbnNlcnRpbmcgaXQgdG8gc29tZSBuZXcgUm9i
aW5Ib29kSGFzaFRhYmxlCisvLyB3aXRob3V0IHJlc2VydmluZyBjYXBhY2l0eSBhbmQgdGhpcyBp
cyBiZWNhdXNlIG9mIGhpZ2ggbG9hZC1mYWN0b3IgYW5kIGV4cG9zZWQgaGFzaC1vcmRlcmluZyBh
dCBpdGVyYXRpb25bM10uIFRvIG1pdGlnYXRlIGl0LAorLy8gd2UgY2FsY3VsYXRlIGhhc2ggZm9y
IGVhY2ggdGFibGUsIGFuZCBkbyBYT1Igd2l0aCB0aGUgaGFzaCB2YWx1ZSB0byBtYWtlIGhhc2gt
b3JkZXJpbmcgZGlmZmVyZW50IGZvciBlYWNoIHRhYmxlLgorLy8KKy8vIFsxXTogaHR0cHM6Ly9j
b2RlY2Fwc3VsZS5jb20vMjAxMy8xMS8xMS9yb2Jpbi1ob29kLWhhc2hpbmcvCisvLyBbMl06IGh0
dHBzOi8vY29kZWNhcHN1bGUuY29tLzIwMTMvMTEvMTcvcm9iaW4taG9vZC1oYXNoaW5nLWJhY2t3
YXJkLXNoaWZ0LWRlbGV0aW9uLworLy8gWzNdOiBodHRwczovL2FjY2lkZW50YWxseXF1YWRyYXRp
Yy50dW1ibHIuY29tL3Bvc3QvMTUzNTQ1NDU1OTg3L3J1c3QtaGFzaC1pdGVyYXRpb24tcmVpbnNl
cnRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitjbGFzcyBSb2Jpbkhvb2RIYXNoVGFi
bGUgeworcHVibGljOgorICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cywgU2l6ZVBvbGljeT47CisgICAgdXNpbmcgaXRlcmF0b3IgPSBIYXNoVGFibGVJdGVyYXRvcjxI
YXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz47CisgICAgdXNpbmcgVmFsdWVUcmFpdHMgPSBUcmFpdHM7
CisgICAgdXNpbmcgS2V5VHlwZSA9IEtleTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSBWYWx1ZTsK
KyAgICB1c2luZyBJZGVudGl0eVRyYW5zbGF0b3JUeXBlID0gSWRlbnRpdHlIYXNoVHJhbnNsYXRv
cjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz47CisgICAgdXNpbmcgQWRkUmVzdWx0ID0gSGFz
aFRhYmxlQWRkUmVzdWx0PGl0ZXJhdG9yPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCA9IDEyODsKKworICAgIHN0YXRpY19hc3NlcnQoIUtl
eVRyYWl0czo6aGFzSXNSZWxlYXNlZFdlYWtWYWx1ZUZ1bmN0aW9uKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEhhc2hGdW5jdGlvbnM6Omhhc0hhc2hJblZhbHVlKTsKKworICAgIFJvYmluSG9vZEhhc2hU
YWJsZSgpID0gZGVmYXVsdDsKKworICAgIH5Sb2Jpbkhvb2RIYXNoVGFibGUoKQorICAgIHsKKyAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICAgICAgaWYgKG1fdGFibGUpCisg
ICAgICAgICAgICBkZWFsbG9jYXRlVGFibGUobV90YWJsZSwgdGFibGVTaXplKCkpOworICAgIH0K
KworICAgIFJvYmluSG9vZEhhc2hUYWJsZShjb25zdCBSb2Jpbkhvb2RIYXNoVGFibGUmKTsKKyAg
ICB2b2lkIHN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJik7CisgICAgUm9iaW5Ib29kSGFzaFRhYmxl
JiBvcGVyYXRvcj0oY29uc3QgUm9iaW5Ib29kSGFzaFRhYmxlJik7CisKKyAgICBSb2Jpbkhvb2RI
YXNoVGFibGUoUm9iaW5Ib29kSGFzaFRhYmxlJiYpOworICAgIFJvYmluSG9vZEhhc2hUYWJsZSYg
b3BlcmF0b3I9KFJvYmluSG9vZEhhc2hUYWJsZSYmKTsKKworICAgIC8vIFdoZW4gdGhlIGhhc2gg
dGFibGUgaXMgZW1wdHksIGp1c3QgcmV0dXJuIHRoZSBzYW1lIGl0ZXJhdG9yIGZvciBlbmQgYXMg
Zm9yIGJlZ2luLgorICAgIC8vIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSB3ZSBkb24n
dCBoYXZlIHRvIHNraXAgYWxsIHRoZSBlbXB0eSBhbmQgZGVsZXRlZAorICAgIC8vIGJ1Y2tldHMs
IGFuZCBpdGVyYXRpbmcgYW4gZW1wdHkgdGFibGUgaXMgYSBjb21tb24gY2FzZSB0aGF0J3Mgd29y
dGggb3B0aW1pemluZy4KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGlzRW1wdHkoKSA/
IGVuZCgpIDogbWFrZUl0ZXJhdG9yKG1fdGFibGUpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gbWFrZUtub3duR29vZEl0ZXJhdG9yKG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgp
IDogbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihtX3RhYmxlICsgdGFi
bGVTaXplKCkpOyB9CisKKyAgICBpdGVyYXRvciByYW5kb20oKQorICAgIHsKKyAgICAgICAgaWYg
KGlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgYXV0byYgYnVja2V0ID0gbV90YWJsZVt3ZWFrUmFuZG9tVWlu
dDMyKCkgJiB0YWJsZVNpemVNYXNrKCldOworICAgICAgICAgICAgaWYgKCFpc0VtcHR5QnVja2V0
KGJ1Y2tldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VLbm93bkdvb2RJdGVyYXRvcigm
YnVja2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0X2l0ZXJhdG9yIHJhbmRvbSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yPihjb25zdF9jYXN0PFJv
YmluSG9vZEhhc2hUYWJsZSo+KHRoaXMpLT5yYW5kb20oKSk7IH0KKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBrZXlDb3VudCgpOyB9CisgICAgdW5zaWduZWQgY2FwYWNpdHko
KSBjb25zdCB7IHJldHVybiB0YWJsZVNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFrZXlDb3VudCgpOyB9CisKKyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodW5zaWduZWQga2V5Q291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdGFibGUpOwor
ICAgICAgICBBU1NFUlQoIXRhYmxlU2l6ZSgpKTsKKworICAgICAgICB1bnNpZ25lZCBtaW5pbXVt
VGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgICAgICB1bnNpZ25l
ZCBuZXdUYWJsZVNpemUgPSBzdGQ6Om1heChtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRh
YmxlU2l6ZShrZXlDb3VudCkpOworCisgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5l
d1RhYmxlU2l6ZSk7CisgICAgICAgIG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOworICAgICAg
ICBtX2tleUNvdW50ID0gMDsKKyAgICAgICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNo
KG1fdGFibGUpOworICAgICAgICBtX3dpbGxFeHBhbmQgPSBmYWxzZTsKKyAgICAgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKyAgICB9CisKKyAgICBBZGRSZXN1bHQgYWRkKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBl
PihFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpLCB2YWx1ZSk7IH0KKyAgICBBZGRSZXN1bHQgYWRk
KFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4o
RXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgV1RGTW92ZSh2YWx1ZSkpOyB9CisKKyAgICAvLyBB
IHNwZWNpYWwgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGlu
ZyBhbmQgY29tcGFyaW5nCisgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRo
ZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAv
LyBpbiB0aGUgdGFibGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBBZGRSZXN1bHQgYWRkKFQmJiBrZXksIEV4dHJhJiYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYm
KTsKKworICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5k
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBmaW5k
KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4gZmluZDxJZGVudGl0eVRyYW5zbGF0
b3JUeXBlPihrZXkpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNv
bnN0IHsgcmV0dXJuIGNvbnRhaW5zPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRv
ciBmaW5kKGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwg
dHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMo
Y29uc3QgVCYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAg
IHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB2b2lkIHJlbW92ZVdpdGhvdXRFbnRyeUNvbnNp
c3RlbmN5Q2hlY2soaXRlcmF0b3IpOworICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lz
dGVuY3lDaGVjayhjb25zdF9pdGVyYXRvcik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgc3Rh
dGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBp
c0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVl
KSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5T3JEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpIHsgcmV0dXJuIGlzRW1wdHlCdWNrZXQodmFsdWUpOyB9CisKKyAgICBWYWx1
ZVR5cGUqIGxvb2t1cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPElkZW50aXR5VHJh
bnNsYXRvclR5cGU+KGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4gVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgVCYpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGluZUxv
b2t1cChjb25zdCBUJik7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICB2b2lkIGNoZWNr
VGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vsc2UKKyAgICAgICAgc3RhdGljIHZvaWQgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9CisjZW5kaWYKKworI2lmIENIRUNLX0hBU0hUQUJMRV9D
T05TSVNURU5DWQorICAgICAgICB2b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkg
Y29uc3QgeyBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsgfQorICAgICAgICB2b2lkIGludGVybmFs
Q2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNp
c3RlbmN5RXhjZXB0U2l6ZSgpOyB9CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSB7IH0KKyAgICAgICAgc3RhdGljIHZv
aWQgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlDb3VudCwgdWludDY0
X3QgdGFibGVTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUNvdW50ICogbWF4TG9hZERl
bm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQgc2l6ZSk7
CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2ln
bmVkIHNpemUpOworCisgICAgdXNpbmcgTG9va3VwVHlwZSA9IHN0ZDo6cGFpcjxWYWx1ZVR5cGUq
LCBib29sPjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPiB2b2lkIGNoZWNrS2V5KGNvbnN0IFQmKTsKKworICAgIHZvaWQgbWFpbnRhaW5Qcm9iZURp
c3RhbmNlRm9yQWRkKFZhbHVlVHlwZSYmLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgZGlzdGFu
Y2UsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIHNpemVNYXNrLCB1bnNpZ25lZCB0YWJsZUhhc2gp
OworCisgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lD
aGVjayhWYWx1ZVR5cGUqKTsKKyAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBl
Kik7CisgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBlKik7CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZVRhYmxlSGFzaChWYWx1ZVR5cGUqIHRhYmxlKSB7IHJldHVybiBEZWZhdWx0SGFzaDxW
YWx1ZVR5cGUqPjo6aGFzaCh0YWJsZSk7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpOworICAgIGJvb2wgc2hv
dWxkRXhwYW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtleUNvdW50ID0gdGhp
cy0+a2V5Q291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVT
aXplKCk7CisgICAgICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIHRhYmxlU2l6ZSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gSWYgcHJvYmUtbGVuZ3RoIGV4Y2Vl
ZHMgcHJvYmVEaXN0YW5jZVRocmVzaG9sZCwgYW5kIDUwJX4gaXMgZmlsbGVkLCBleHBhbmQgdGhl
IHRhYmxlLgorICAgICAgICByZXR1cm4gbV93aWxsRXhwYW5kICYmIGtleUNvdW50ICogMiA+PSB0
YWJsZVNpemU7CisgICAgfQorICAgIGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4g
a2V5Q291bnQoKSAqIG1pbkxvYWQgPCB0YWJsZVNpemUoKSAmJiB0YWJsZVNpemUoKSA+IEtleVRy
YWl0czo6bWluaW11bVRhYmxlU2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKCk7CisgICAgdm9pZCBz
aHJpbmsoKSB7IHJlaGFzaCh0YWJsZVNpemUoKSAvIDIpOyB9CisgICAgdm9pZCBzaHJpbmtUb0Jl
c3RTaXplKCk7CisKKyAgICB2b2lkIHJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUpOworICAg
IHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJiYpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQnVja2V0
KFZhbHVlVHlwZSYgYnVja2V0KSB7IGhhc2hUcmFpdHNEZWxldGVCdWNrZXQ8VHJhaXRzPihidWNr
ZXQpOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlc2lyZWRJbmRleCh1bnNp
Z25lZCBoYXNoLCB1bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNo
ICYgc2l6ZU1hc2s7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBwcm9i
ZURpc3RhbmNlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplLCB1
bnNpZ25lZCBzaXplTWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggKyBzaXplIC0g
ZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKSkgJiBzaXplTWFzazsKKyAgICB9CisKKyAgICBp
dGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRo
aXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIG1h
a2VDb25zdEl0ZXJhdG9yKFZhbHVlVHlwZSogcG9zKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVy
YXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUoKSk7IH0KKyAgICBpdGVyYXRvciBt
YWtlS25vd25Hb29kSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRo
aXMsIHBvcywgbV90YWJsZSArIHRhYmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBv
cykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgdGFi
bGVTaXplKCksIEhhc2hJdGVtS25vd25Hb29kKTsgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICAgICAgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgY29uc3Q7CisjZWxz
ZQorICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkg
eyB9CisjZW5kaWYKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVy
YXRvciA9IFNpemVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSBTaXplUG9saWN5OjptYXhMb2FkRGVub21p
bmF0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gU2l6ZVBvbGlj
eTo6bWluTG9hZDsKKworICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFibGVTaXplOyB9CisgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFibGVTaXplIC0gMTsgfQorICAgIHVuc2lnbmVkIGtleUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9rZXlDb3VudDsgfQorICAgIHVuc2lnbmVkIHRhYmxlSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFibGVIYXNoOyB9CisKKyAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV90YWJsZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9rZXlDb3VudCB7
IDAgfTsKKyAgICB1bnNpZ25lZCBtX3RhYmxlSGFzaCB7IDAgfTsKKyAgICBib29sIG1fd2lsbEV4
cGFuZCB7IGZhbHNlIH07CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCitwdWJsaWM6
CisgICAgLy8gQWxsIGFjY2VzcyB0byBtX2l0ZXJhdG9ycyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRo
IG1fbXV0ZXguCisgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9pdGVyYXRvcnMgeyBudWxs
cHRyIH07CisgICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0aWxs
IGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
TG9jaz4gbV9tdXRleCB7IG1ha2VVbmlxdWU8TG9jaz4oKSB9OworI2VuZGlmCit9OworCisjaWYg
IUFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCit7Cit9CisKKyNlbHNl
IC8vIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK3ZvaWQgUm9iaW5Ib29kSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHMsIFNpemVQb2xpY3k+OjpjaGVja0tleShjb25zdCBUJiBrZXkpCit7CisgICAgaWYgKCFI
YXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCghSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEtleVRyYWl0czo6ZW1wdHlW
YWx1ZSgpLCBrZXkpKTsKKyAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2Yo
VmFsdWVUeXBlKSwgc3RkOjphbGlnbm1lbnRfb2Y8VmFsdWVUeXBlPjo6dmFsdWU+Ojp0eXBlIGRl
bGV0ZWRWYWx1ZUJ1ZmZlcjsKKyAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRWYWx1ZVB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPFZhbHVlVHlwZSo+KCZkZWxldGVkVmFsdWVCdWZmZXIpOworICAgIFZh
bHVlVHlwZSYgZGVsZXRlZFZhbHVlID0gKmRlbGV0ZWRWYWx1ZVB0cjsKKyAgICBUcmFpdHM6OmNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShkZWxldGVkVmFsdWUpOworICAgIEFTU0VSVCghSGFzaFRyYW5z
bGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdChkZWxldGVkVmFsdWUpLCBrZXkpKTsKK30K
KworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSBh
dXRvIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6bG9va3VwKGNvbnN0IFQmIGtleSkg
LT4gVmFsdWVUeXBlKgoreworICAgIHJldHVybiBpbmxpbmVMb29rdXA8SGFzaFRyYW5zbGF0b3I+
KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgYXV0byBSb2Jpbkhv
b2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmlubGluZUxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZh
bHVlVHlwZSoKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKworICAgIFZh
bHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2ln
bmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9
IHRoaXMtPnRhYmxlSGFzaCgpOworICAgIHVuc2lnbmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpIF4gdGFibGVIYXNoOworICAgIHVuc2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4
KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IDA7CisKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4Owor
ICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgLy8gUm9iaW5Ib29kSGFzaFRhYmxlIG1haW50YWlucyB0aGlzIGlu
dmFyaWFudCBzbyB0aGF0IHdlIGNhbiBzdG9wCisgICAgICAgIC8vIHByb2Jpbmcgd2hlbiBkaXN0
YW5jZSBleGNlZWRzIHByb2JpbmcgZGlzdGFuY2Ugb2YgdGhlIGV4aXN0aW5nIGVudHJ5LgorICAg
ICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAg
ICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5
S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKGRpc3RhbmNlID4gcHJvYmVEaXN0YW5jZShl
bnRyeUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzaykpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBpZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6
OmVxdWFsKGVudHJ5S2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAg
ICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBi
dWNrZXQpCit7CisgICAgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8VHJhaXRzOjplbXB0eVZh
bHVlSXNaZXJvPjo6dGVtcGxhdGUgaW5pdGlhbGl6ZTxUcmFpdHM+KGJ1Y2tldCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitBTFdBWVNfSU5MSU5FIGF1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphZGQoVCYmIGtleSwgRXh0cmEmJiBleHRyYSkgLT4g
QWRkUmVzdWx0Cit7CisgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CisKKyAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKHRoaXMpOworCisgICAgLy8gV2Ugc2hvdWxkIGV4cGFuZCBiZWZv
cmUgcG90ZW50aWFsbHkgaW5zZXJ0aW5nIGFuIGVudHJ5LiBJZiB3ZSBleHBhbmQgYSB0YWJsZSBh
ZnRlciBpbnNlcnRpbmcgYW4gZW50cnksCisgICAgLy8gd2UgbmVlZCB0byByZS1sb29rIHVwIGVu
dHJ5IGZyb20gdGhlIHRhYmxlIHNpbmNlIHRoZSBpbnNlcnRlZCBlbnRyeSBwb3NpdGlvbiBpcyBu
b3Qgc3RhYmxlIGR1cmluZyByZWhhc2luZy4KKyAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCisgICAg
ICAgIGV4cGFuZCgpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKKwor
ICAgIEFTU0VSVChtX3RhYmxlKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsK
KyAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0
YWJsZUhhc2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSGFzaFRy
YW5zbGF0b3I6Omhhc2goa2V5KSBeIHRhYmxlSGFzaDsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGRl
c2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSAwOwor
CisgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0
KCplbnRyeSkpIHsKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSBwcm9iZURpc3RhbmNlVGhy
ZXNob2xkKQorICAgICAgICAgICAgICAgIG1fd2lsbEV4cGFuZCA9IHRydWU7CisgICAgICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byYgZW50cnlLZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5
KTsKKyAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6
aGFzaChlbnRyeUtleSkgXiB0YWJsZUhhc2g7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5RGlzdGFu
Y2UgPSBwcm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKTsKKyAg
ICAgICAgaWYgKGRpc3RhbmNlID4gZW50cnlEaXN0YW5jZSkgeworICAgICAgICAgICAgaWYgKGRp
c3RhbmNlID49IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV93aWxs
RXhwYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHN3YXBwaW5nIGV4aXN0aW5nIGVu
dHJ5IHRvIG1haW50YWluIHByb2JlLWRpc3RhbmNlIGludmFyaWFudC4KKyAgICAgICAgICAgIFZh
bHVlVHlwZSBleGlzdGluZ0VudHJ5ID0gV1RGTW92ZSgqZW50cnkpOworICAgICAgICAgICAgZW50
cnktPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmVudHJ5KTsK
KyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndh
cmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICAgICAgbWFp
bnRhaW5Qcm9iZURpc3RhbmNlRm9yQWRkKFdURk1vdmUoZXhpc3RpbmdFbnRyeSksIGluZGV4LCBl
bnRyeURpc3RhbmNlLCBzaXplLCBzaXplTWFzaywgdGFibGVIYXNoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5SGFzaCA9PSBoYXNoICYmIEhhc2hU
cmFuc2xhdG9yOjplcXVhbChlbnRyeUtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiBBZGRS
ZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworCisgICAgICAgIGlu
ZGV4ID0gKGluZGV4ICsgMSkgJiBzaXplTWFzazsKKyAgICAgICAgKytkaXN0YW5jZTsKKyAgICB9
CisKKyAgICBtX2tleUNvdW50ICs9IDE7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOworCisgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50
cnkpLCB0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46Om1haW50YWluUHJvYmVEaXN0
YW5jZUZvckFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGRp
c3RhbmNlLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBzaXplTWFzaywgdW5zaWduZWQgdGFibGVI
YXNoKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsgLy8gRm9yIEMrKyBBREwuCisgICAgaW5kZXgg
PSAoaW5kZXggKyAxKSAmIHNpemVNYXNrOworICAgICsrZGlzdGFuY2U7CisKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGluZGV4OworICAg
ICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICBWYWx1ZVRyYWl0
czo6YXNzaWduVG9FbXB0eSgqZW50cnksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IElkZW50aXR5
VHJhbnNsYXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSkpIF4gdGFibGVI
YXNoOworICAgICAgICB1bnNpZ25lZCBlbnRyeURpc3RhbmNlID0gcHJvYmVEaXN0YW5jZShlbnRy
eUhhc2gsIGluZGV4LCBzaXplLCBzaXplTWFzayk7CisgICAgICAgIGlmIChkaXN0YW5jZSA+IGVu
dHJ5RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIHN3YXAodmFsdWUsICplbnRyeSk7CisgICAgICAg
ICAgICBkaXN0YW5jZSA9IGVudHJ5RGlzdGFuY2U7CisgICAgICAgIH0KKworICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAgICAgICsrZGlzdGFuY2U7CisgICAgfQor
fQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+CitpbmxpbmUgYXV0byBSb2Jp
bkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OmFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBF
eHRyYSYmIGV4dHJhKSAtPiBBZGRSZXN1bHQKK3sKKyAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKKworICAgIGludmFsaWRhdGVJdGVyYXRvcnModGhpcyk7CisKKyAgICAvLyBXZSBz
aG91bGQgZXhwYW5kIGJlZm9yZSBwb3RlbnRpYWxseSBpbnNlcnRpbmcgYW4gZW50cnkuIElmIHdl
IGV4cGFuZCBhIHRhYmxlIGFmdGVyIGluc2VydGluZyBhbiBlbnRyeSwKKyAgICAvLyB3ZSBuZWVk
IHRvIHJlLWxvb2sgdXAgZW50cnkgZnJvbSB0aGUgdGFibGUgc2luY2UgdGhlIGluc2VydGVkIGVu
dHJ5IHBvc2l0aW9uIGlzIG5vdCBzdGFibGUgZHVyaW5nIHJlaGFzaW5nLgorICAgIGlmIChzaG91
bGRFeHBhbmQoKSkKKyAgICAgICAgZXhwYW5kKCk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOworCisgICAgQVNTRVJUKG1fdGFibGUpOworCisgICAgdW5zaWduZWQgc2l6
ZSA9IHRhYmxlU2l6ZSgpOworICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygp
OworICAgIHVuc2lnbmVkIHRhYmxlSGFzaCA9IHRoaXMtPnRhYmxlSGFzaCgpOworICAgIHVuc2ln
bmVkIGhhc2ggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpIF4gdGFibGVIYXNoOworICAgIHVu
c2lnbmVkIGluZGV4ID0gZGVzaXJlZEluZGV4KGhhc2gsIHNpemVNYXNrKTsKKyAgICB1bnNpZ25l
ZCBkaXN0YW5jZSA9IDA7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0cjsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAg
aWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49
IHByb2JlRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgbV93aWxsRXhwYW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6
OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGhhc2gpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4
dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAg
ICAgdW5zaWduZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRl
eCwgc2l6ZSwgc2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNl
KSB7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvYmVEaXN0YW5jZVRocmVzaG9sZCkK
KyAgICAgICAgICAgICAgICBtX3dpbGxFeHBhbmQgPSB0cnVlOworICAgICAgICAgICAgLy8gU3Rh
cnQgc3dhcHBpbmcgZXhpc3RpbmcgZW50cnkgdG8gbWFpbnRhaW4gcHJvYmUtZGlzdGFuY2UgaW52
YXJpYW50LgorICAgICAgICAgICAgVmFsdWVUeXBlIGV4aXN0aW5nRW50cnkgPSBXVEZNb3ZlKCpl
bnRyeSk7CisgICAgICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOworICAgICAgICAgICAgaW5p
dGlhbGl6ZUJ1Y2tldCgqZW50cnkpOworICAgICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5z
bGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4
dHJhKSwgaGFzaCk7CisgICAgICAgICAgICBtYWludGFpblByb2JlRGlzdGFuY2VGb3JBZGQoV1RG
TW92ZShleGlzdGluZ0VudHJ5KSwgaW5kZXgsIGVudHJ5RGlzdGFuY2UsIHNpemUsIHNpemVNYXNr
LCB0YWJsZUhhc2gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZW50cnlIYXNoID09IGhhc2ggJiYgSGFzaFRyYW5zbGF0b3I6OmVxdWFsKGVudHJ5S2V5LCBr
ZXkpKQorICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3Io
ZW50cnkpLCBmYWxzZSk7CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNpemVNYXNr
OworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KKworICAgIG1fa2V5Q291bnQgKz0gMTsKKwor
ICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisKKyAgICByZXR1cm4gQWRkUmVz
dWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBl
bmFtZSBTaXplUG9saWN5PgoraW5saW5lIHZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xp
Y3k+OjpyZWluc2VydChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICB1c2luZyBzdGQ6OnN3YXA7
IC8vIEZvciBDKysgQURMLgorICAgIHVuc2lnbmVkIHNpemUgPSB0YWJsZVNpemUoKTsKKyAgICB1
bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICB1bnNpZ25lZCB0YWJsZUhh
c2ggPSB0aGlzLT50YWJsZUhhc2goKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpdHlUcmFu
c2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QodmFsdWUpKSBeIHRhYmxlSGFzaDsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGRlc2lyZWRJbmRleChoYXNoLCBzaXplTWFzayk7CisgICAg
dW5zaWduZWQgZGlzdGFuY2UgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgVmFs
dWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBpbmRleDsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNr
ZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkoKmVu
dHJ5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNo
KEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpKSBeIHRhYmxlSGFzaDsKKyAgICAgICAgdW5zaWdu
ZWQgZW50cnlEaXN0YW5jZSA9IHByb2JlRGlzdGFuY2UoZW50cnlIYXNoLCBpbmRleCwgc2l6ZSwg
c2l6ZU1hc2spOworICAgICAgICBpZiAoZGlzdGFuY2UgPiBlbnRyeURpc3RhbmNlKSB7CisgICAg
ICAgICAgICBzd2FwKHZhbHVlLCAqZW50cnkpOworICAgICAgICAgICAgZGlzdGFuY2UgPSBlbnRy
eURpc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHNp
emVNYXNrOworICAgICAgICArK2Rpc3RhbmNlOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUg
U2l6ZVBvbGljeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KK2F1dG8gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpmaW5kKGNvbnN0IFQmIGtl
eSkgLT4gaXRlcmF0b3IKK3sKKyAgICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQo
KTsKKworICAgIFZhbHVlVHlwZSogZW50cnkgPSBsb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7
CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworCisgICAgcmV0dXJuIG1h
a2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xp
Y3k+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CithdXRv
IFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0
IC0+IGNvbnN0X2l0ZXJhdG9yCit7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4g
ZW5kKCk7CisKKyAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxSb2Jpbkhvb2RIYXNo
VGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgIGlmICghZW50
cnkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKworICAgIHJldHVybiBtYWtlS25vd25Hb29kQ29u
c3RJdGVyYXRvcihlbnRyeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Citib29sIFJvYmluSG9v
ZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y29udGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAorewor
ICAgIGlmICghbV90YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8Um9iaW5Ib29kSGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpyZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29u
c2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICBpbnZhbGlkYXRlSXRlcmF0b3Jz
KHRoaXMpOworICAgIHJlbW92ZShwb3MpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5
Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZUFuZEludmFsaWRh
dGUoVmFsdWVUeXBlKiBwb3MpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworICAgIHJlbW92ZShwb3MpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6
ZVBvbGljeT46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykKK3sKKyAgICAvLyBUaGlzIGlzIHJlbW92
YWwgdmlhICJiYWNrd2FyZC1zaGlmdC1kZWxldGlvbiIuIFRoaXMgYmFzaWNhbGx5IHNoaWZ0IGV4
aXN0aW5nIGVudHJpZXMgdG8gcmVtb3ZlZCBlbXB0eSBlbnRyeSBwbGFjZSBzbyB0aGF0IHdlIG1h
a2UKKyAgICAvLyB0aGUgdGFibGUgYXMgaWYgbm8gcmVtb3ZhbCBoYXBwZW5lZCBzbyBmYXIuIFRo
aXMgZGVjcmVhc2VzIGRpc3RhbmNlLXRvLWluaXRpYWwtYnVja2V0IChESUIpIG9mIHRoZSBzdWJz
ZXF1ZW50IGVudHJpZXMgYnkgMS4gVGhpcyBtYWludGFpbnMKKyAgICAvLyBESUIgb2YgdGhlIHRh
YmxlIGxvdyBhbmQgcmVsYXRpdmVseSBjb25zdGFudCBldmVuIGlmIHdlIGhhdmUgbWFueSByZW1v
dmFscywgY29tcGFyZWQgdG8gdXNpbmcgdG9tYnN0b25lcy4KKyAgICAvLyBodHRwczovL2NvZGVj
YXBzdWxlLmNvbS8yMDEzLzExLzE3L3JvYmluLWhvb2QtaGFzaGluZy1iYWNrd2FyZC1zaGlmdC1k
ZWxldGlvbi8KKyAgICBkZWxldGVCdWNrZXQoKnBvcyk7CisgICAgaW5pdGlhbGl6ZUJ1Y2tldCgq
cG9zKTsKKyAgICBtX2tleUNvdW50IC09IDE7CisKKyAgICB1bnNpZ25lZCBzaXplID0gdGFibGVT
aXplKCk7CisgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgdW5z
aWduZWQgdGFibGVIYXNoID0gdGhpcy0+dGFibGVIYXNoKCk7CisgICAgdW5zaWduZWQgaW5kZXhQ
cmV2aW91cyA9IHBvcyAtIG1fdGFibGU7CisgICAgdW5zaWduZWQgaW5kZXggPSAoaW5kZXhQcmV2
aW91cyArIDEpICYgc2l6ZU1hc2s7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBWYWx1
ZSogcHJldmlvdXNFbnRyeSA9IG1fdGFibGUgKyBpbmRleFByZXZpb3VzOworICAgICAgICBWYWx1
ZSogZW50cnkgPSBtX3RhYmxlICsgaW5kZXg7CisgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBBU1NFUlQoaXNFbXB0eUJ1Y2tl
dCgqcHJldmlvdXNFbnRyeSkpOworICAgICAgICBhdXRvJiBlbnRyeUtleSA9IEV4dHJhY3Rvcjo6
ZXh0cmFjdCgqZW50cnkpOworICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBJZGVudGl0eVRy
YW5zbGF0b3JUeXBlOjpoYXNoKGVudHJ5S2V5KSBeIHRhYmxlSGFzaDsKKyAgICAgICAgaWYgKCFw
cm9iZURpc3RhbmNlKGVudHJ5SGFzaCwgaW5kZXgsIHNpemUsIHNpemVNYXNrKSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KCpwcmV2aW91
c0VudHJ5LCBXVEZNb3ZlKCplbnRyeSkpOworICAgICAgICBlbnRyeS0+flZhbHVlVHlwZSgpOwor
ICAgICAgICBpbml0aWFsaXplQnVja2V0KCplbnRyeSk7CisKKyAgICAgICAgaW5kZXhQcmV2aW91
cyA9IGluZGV4OworICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgc2l6ZU1hc2s7CisgICAg
fQorCisgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICBzaHJpbmsoKTsKKworICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQ
b2xpY3k+CitpbmxpbmUgdm9pZCBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92
ZShpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbW92ZUFuZEludmFsaWRhdGUoY29uc3RfY2FzdDxWYWx1ZVR5cGUqPihpdC5tX2l0
ZXJhdG9yLm1fcG9zaXRpb24pKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lu
bGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVtb3ZlV2l0aG91dEVu
dHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvciBpdCkKK3sKKyAgICBpZiAoaXQgPT0gZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bv
c2l0aW9uKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CitpbmxpbmUgdm9pZCBS
b2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cywgU2l6ZVBvbGljeT46OnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3Rl
bmN5Q2hlY2soY29uc3RfaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZW1vdmVBbmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lz
dGVuY3lDaGVjayhjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0Lm1fcG9zaXRpb24pKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2lubGluZSB2b2lkIFJvYmluSG9vZEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
LCBTaXplUG9saWN5Pjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKK3sKKyAgICByZW1vdmUo
ZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK2F1dG8gUm9iaW5I
b29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjphbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+
IFZhbHVlVHlwZSoKK3sKKyAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rp
b24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CisgICAgLy8gZ2NjIGRv
ZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAorICAgIGlmIGNvbnN0ZXhwciAoVHJhaXRzOjpl
bXB0eVZhbHVlSXNaZXJvKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFs
dWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9j
KHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hU
YWJsZU1hbGxvYzo6bWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICBpbml0aWFsaXplQnVja2V0
KHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgU2l6
ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rvciwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQb2xpY3k+OjpkZWFsbG9jYXRl
VGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7
CisgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzLCBTaXplUG9saWN5Pjo6ZXhwYW5kKCkKK3sKKyAgICB1bnNpZ25lZCBuZXdTaXplOworICAg
IHVuc2lnbmVkIG9sZFNpemUgPSB0YWJsZVNpemUoKTsKKyAgICBpZiAoIW9sZFNpemUpCisgICAg
ICAgIG5ld1NpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgZWxzZQorICAg
ICAgICBuZXdTaXplID0gb2xkU2l6ZSAqIDI7CisKKyAgICByZWhhc2gobmV3U2l6ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rv
ciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlU
cmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Citjb25zdGV4cHIgdW5zaWduZWQgUm9iaW5Ib29k
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHMsIFNpemVQb2xpY3k+Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlD
b3VudCkKK3sKKyAgICB1bnNpZ25lZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dl
ck9mVHdvKGtleUNvdW50KTsKKworICAgIGlmIChzaG91bGRFeHBhbmQoa2V5Q291bnQsIGJlc3RU
YWJsZVNpemUpKQorICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisKKyAgICBhdXRvIGFib3Zl
VGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24gPSBbXShkb3VibGUgbG9hZEZhY3RvciwgdW5zaWdu
ZWQga2V5Q291bnQsIHVuc2lnbmVkIHRhYmxlU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEhlcmUg
aXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjYWxjdWxhdGlvbiwgdXNpbmcgMy80IGxvYWQt
ZmFjdG9yLgorICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMy80IGFuZCBtaW5Mb2FkIGF0IDEv
Niwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAxMS8yNC4KKyAgICAgICAgLy8gSWYgd2UgYXJlIGdldHRp
bmcgaGFsZi13YXkgYmV0d2VlbiAxMS8yNCBhbmQgMy80LCB3ZSBkb3VibGUgdGhlIHNpemUKKyAg
ICAgICAgLy8gdG8gYXZvaWQgYmVpbmcgdG9vIGNsb3NlIHRvIGxvYWRNYXggYW5kIGJyaW5nIHRo
ZSByYXRpbyBjbG9zZSB0byAxMS8yNC4gVGhpcworICAgICAgICAvLyBnaXZlIHVzIGEgbG9hZCBp
biB0aGUgYm91bmRzIFs5LzI0LCAxNS8yNCkuCisgICAgICAgIGRvdWJsZSBtYXhMb2FkUmF0aW8g
PSBsb2FkRmFjdG9yOworICAgICAgICBkb3VibGUgbWluTG9hZFJhdGlvID0gMS4wIC8gbWluTG9h
ZDsKKyAgICAgICAgZG91YmxlIGF2ZXJhZ2VMb2FkUmF0aW8gPSAobWF4TG9hZFJhdGlvICsgbWlu
TG9hZFJhdGlvKSAvIDI7CisgICAgICAgIGRvdWJsZSBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRN
YXhMb2FkUmF0aW8gPSAoYXZlcmFnZUxvYWRSYXRpbyArIG1heExvYWRSYXRpbykgLyAyOworICAg
ICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdl
QW5kTWF4TG9hZFJhdGlvOworICAgIH07CisKKyAgICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0
b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9t
aW5hdG9yOworICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0
b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAy
OworICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJs
ZVNpemU7CisgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNp
emUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cywgU2l6ZVBvbGljeT46OnNocmlua1RvQmVzdFNpemUoKQoreworICAgIHVuc2lnbmVkIG1p
bmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgcmVoYXNo
KHN0ZDo6bWF4KG1pbmltdW1UYWJsZVNpemUsIGNvbXB1dGVCZXN0VGFibGVTaXplKGtleUNvdW50
KCkpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzLCBTaXplUG9saWN5Pjo6cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSkKK3sKKyAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKKworICAgIHVuc2ln
bmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOworICAgIFZhbHVlVHlwZSogb2xkVGFibGUg
PSBtX3RhYmxlOworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsK
KyAgICBtX3RhYmxlU2l6ZSA9IG5ld1RhYmxlU2l6ZTsKKyAgICBtX3RhYmxlSGFzaCA9IGNvbXB1
dGVUYWJsZUhhc2gobV90YWJsZSk7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2xkVGFibGVTaXplOyArK2kpIHsKKyAgICAgICAgYXV0
byogb2xkRW50cnkgPSBvbGRUYWJsZSArIGk7CisgICAgICAgIGlmICghaXNFbXB0eUJ1Y2tldCgq
b2xkRW50cnkpKQorICAgICAgICAgICAgcmVpbnNlcnQoV1RGTW92ZSgqb2xkRW50cnkpKTsKKyAg
ICAgICAgb2xkRW50cnktPn5WYWx1ZVR5cGUoKTsKKyAgICB9CisKKyAgICBpZiAob2xkVGFibGUp
CisgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPihv
bGRUYWJsZSkpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgU2l6ZVBvbGljeT4KK3ZvaWQgUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwg
VmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIFNpemVQ
b2xpY3k+OjpjbGVhcigpCit7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycyh0aGlzKTsKKyAgICBp
ZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6
ZSA9IHRhYmxlU2l6ZSgpOworICAgIG1fdGFibGVTaXplID0gMDsKKyAgICBtX2tleUNvdW50ID0g
MDsKKyAgICBtX3RhYmxlSGFzaCA9IDA7CisgICAgbV93aWxsRXhwYW5kID0gZmFsc2U7CisgICAg
ZGVhbGxvY2F0ZVRhYmxlKHN0ZDo6ZXhjaGFuZ2UobV90YWJsZSwgbnVsbHB0ciksIG9sZFRhYmxl
U2l6ZSk7CisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgU2l6ZVBvbGljeT4KK1JvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9i
aW5Ib29kSGFzaFRhYmxlKGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpCit7CisgICAg
aWYgKCFvdGhlci5tX3RhYmxlU2l6ZSB8fCAhb3RoZXIubV9rZXlDb3VudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUob3RoZXIubV90YWJsZVNpemUpOwor
ICAgIG1fdGFibGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7CisgICAgbV9rZXlDb3VudCA9IG90
aGVyLm1fa2V5Q291bnQ7CisgICAgbV90YWJsZUhhc2ggPSBjb21wdXRlVGFibGVIYXNoKG1fdGFi
bGUpOworICAgIG1fd2lsbEV4cGFuZCA9IG90aGVyLm1fd2lsbEV4cGFuZDsKKworICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG90aGVyLm1fdGFibGVTaXplOyArK2luZGV4KSB7
CisgICAgICAgIFZhbHVlVHlwZSYgb3RoZXJFbnRyeSA9IG90aGVyLm1fdGFibGVbaW5kZXhdOwor
ICAgICAgICBpZiAoIWlzRW1wdHlCdWNrZXQob3RoZXJFbnRyeSkpIHsKKyAgICAgICAgICAgIFZh
bHVlVHlwZSBlbnRyeShvdGhlckVudHJ5KTsKKyAgICAgICAgICAgIHJlaW5zZXJ0KFdURk1vdmUo
ZW50cnkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFtZSBTaXplUG9saWN5Pgordm9pZCBSb2Jpbkhvb2RI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cywgU2l6ZVBvbGljeT46OnN3YXAoUm9iaW5Ib29kSGFzaFRhYmxlJiBvdGhlcikKK3sK
KyAgICB1c2luZyBzdGQ6OnN3YXA7IC8vIEZvciBDKysgQURMLgorICAgIGludmFsaWRhdGVJdGVy
YXRvcnModGhpcyk7CisgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygmb3RoZXIpOworCisgICAgc3dh
cChtX3RhYmxlLCBvdGhlci5tX3RhYmxlKTsKKyAgICBzd2FwKG1fdGFibGVTaXplLCBvdGhlci5t
X3RhYmxlU2l6ZSk7CisgICAgc3dhcChtX2tleUNvdW50LCBvdGhlci5tX2tleUNvdW50KTsKKyAg
ICBzd2FwKG1fdGFibGVIYXNoLCBvdGhlci5tX3RhYmxlSGFzaCk7CisgICAgc3dhcChtX3dpbGxF
eHBhbmQsIG90aGVyLm1fd2lsbEV4cGFuZCk7CisKKyAgICBpbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOworICAgIG90aGVyLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+CithdXRvIFJvYmluSG9vZEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBT
aXplUG9saWN5Pjo6b3BlcmF0b3I9KGNvbnN0IFJvYmluSG9vZEhhc2hUYWJsZSYgb3RoZXIpIC0+
IFJvYmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdG1wKG90aGVy
KTsKKyAgICBzd2FwKHRtcCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0eXBlbmFt
ZSBTaXplUG9saWN5PgoraW5saW5lIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Um9i
aW5Ib29kSGFzaFRhYmxlKFJvYmluSG9vZEhhc2hUYWJsZSYmIG90aGVyKQoreworICAgIGludmFs
aWRhdGVJdGVyYXRvcnMoJm90aGVyKTsKKworICAgIG1fdGFibGUgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fdGFibGUsIG51bGxwdHIpOworICAgIG1fdGFibGVTaXplID0gc3RkOjpleGNoYW5nZShv
dGhlci5tX3RhYmxlU2l6ZSwgMCk7CisgICAgbV9rZXlDb3VudCA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9rZXlDb3VudCwgMCk7CisgICAgbV90YWJsZUhhc2ggPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fdGFibGVIYXNoLCAwKTsKKyAgICBtX3dpbGxFeHBhbmQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fd2lsbEV4cGFuZCwgZmFsc2UpOworCisgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKKyAgICBvdGhlci5pbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzLCB0eXBlbmFtZSBTaXplUG9saWN5PgoraW5saW5lIGF1dG8gUm9iaW5Ib29kSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMs
IFNpemVQb2xpY3k+OjpvcGVyYXRvcj0oUm9iaW5Ib29kSGFzaFRhYmxlJiYgb3RoZXIpIC0+IFJv
YmluSG9vZEhhc2hUYWJsZSYKK3sKKyAgICBSb2Jpbkhvb2RIYXNoVGFibGUgdGVtcChXVEZNb3Zl
KG90aGVyKSk7CisgICAgc3dhcCh0ZW1wKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKKworI2lm
IEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmlu
SG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QK
K3sKKyAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5
cGVuYW1lIFNpemVQb2xpY3k+Cit2b2lkIFJvYmluSG9vZEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzLCBTaXplUG9saWN5Pjo6
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Rh
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgdW5z
aWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhYmxlU2l6ZTsgKytpKSB7CisgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBt
X3RhYmxlICsgaTsKKyAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGtleSA9IEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpOworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKKyAgICAgICAg
QVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOworICAgICAgICArK2NvdW50OworCisgICAg
ICAgIFZhbHVlQ2hlY2s8S2V5Pjo6Y2hlY2tDb25zaXN0ZW5jeShrZXkpOworICAgIH0KKworICAg
IEFTU0VSVChjb3VudCA9PSBrZXlDb3VudCgpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXpl
KCkgPj0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplKTsKKyAgICBBU1NFUlQodGFibGVTaXpl
TWFzaygpKTsKKyAgICBBU1NFUlQodGhpcy0+dGFibGVTaXplKCkgPT0gdGFibGVTaXplTWFzaygp
ICsgMSk7Cit9CisKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorCitzdHJ1Y3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAg
dXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFRhYmxlU2l6ZVBvbGljeT47Cit9OworCitzdHJ1Y3QgTWVtb3J5Q29t
cGFjdFJvYmluSG9vZEhhc2hUYWJsZVRyYWl0cyB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB1c2luZyBUYWJs
ZVR5cGUgPSBSb2Jpbkhvb2RIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cywgTWVtb3J5Q29tcGFjdFJvYmluSG9vZEhhc2hUYWJs
ZVNpemVQb2xpY3k+OworfTsKKworc3RydWN0IEZhc3RSb2Jpbkhvb2RIYXNoVGFibGVUcmFpdHMg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CisgICAgdXNpbmcgVGFibGVUeXBlID0gUm9iaW5Ib29kSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHMsIEZh
c3RSb2Jpbkhvb2RIYXNoVGFibGVTaXplUG9saWN5PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oIGIvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oCmluZGV4IDkyZDIwOGQzNWUyYWFkNWI4
ODI3M2UzNDE4NmMyN2I1ZDA3Y2UxZmQuLmJhZDJjYWIwZDVhZjY5ODYzYmQwOGEyODkwYjU0M2Rh
ODgzN2U1NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmgKQEAgLTQ1LDYgKzQ1
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogCiAg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXVEY6OkF0b21TdHJpbmc+IDogU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPFdURjo6QXRvbVN0cmluZz4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21T
dHJpbmdJbXBsLmNwcAppbmRleCAyZjc2NzBiNDgxMmRmMGJjZmVmMTQ2YzNiMmVlODlmZTcxMTdm
NWZhLi5hMThiM2NiZDg4MDAyZDM5ZGZjYjJlYzE3NDNhOTc1ZDRlZjRjZGI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBBdG9t
U3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCiAKLXVzaW5n
IFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKK3VzaW5n
IFN0cmluZ1RhYmxlSW1wbCA9IEF0b21TdHJpbmdUYWJsZTo6U3RyaW5nVGFibGVJbXBsOwogCiBz
dGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcAppbmRleCBlMGMwYWZiYWVhNDM2ODYx
YjhiOGU0MWVlMDc2YWUyYzc0MjI0YmNmLi44NmVkMjVmMjhlYzA4NjY4ZWY1ZTRhNTZhMjQ5NzVk
MjAxZmE4ZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJs
ZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCkBAIC0y
OSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBBdG9tU3RyaW5nVGFibGU6On5BdG9tU3Ry
aW5nVGFibGUoKQogewotICAgIGZvciAoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBzdHJp
bmcgOiBtX3RhYmxlKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogbV90YWJsZSkKICAg
ICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nVGFibGUuaAppbmRleCAyZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMwNDUxMTNh
NTdlLi5mZmFmODM2NDIyYzUyOWUzOWU2ZDE3MGRiY2I4NGY5OWI2Nzk0ZmI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMzMsMTIgKzM0LDE1IEBAIGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFz
cyBBdG9tU3RyaW5nVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgorICAgIHVzaW5nIFN0cmluZ0VudHJ5ID0gUGFja2VkUHRyPFN0cmluZ0ltcGw+OworICAgIHVz
aW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nRW50cnk+OworCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIH5BdG9tU3RyaW5nVGFibGUoKTsKIAotICAgIEhhc2hTZXQ8UGFja2VkUHRy
PFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CisgICAgU3RyaW5nVGFi
bGVJbXBsJiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNo
U2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKKyAgICBTdHJpbmdUYWJsZUltcGwg
bV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggNWE4Mzg1ZTA0
YTk1OTA0ZTA2YmExMjhkNmVhYTEzZDkxZWI5MGZiOS4uZjAzMmYxYmRmMjFiNThkYmY2Y2U2MjU0
NTQ0NmM0ODc2NWZhYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTkwLDYgKzkw
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKICAgICB9OwogCiAg
ICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRp
ZXMuY3BwCmluZGV4IDc0OTA3MzM4ODA3ZWE5NzVlMDcyMjhkMDRhMjU2NDM2ZTc3MTVjYzYuLjA5
NDNkN2I4NWEzYjMzYzljMTY2OTkwOGVmODMzMjNmY2UyMmQwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBh
YmlsaXRpZXMuY3BwCkBAIC0zOSwzMSArMzksMzEgQEAKICNpbmNsdWRlICJNZWRpYUVuY29kaW5n
Q29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3Rv
cnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL0xvZ2dlci5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YnVja2V0TUlNRVR5cGVzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPiYgYnVja2V0TUlNRVR5cGVzKCkKIHsKICAgICAvLyBBICJi
dWNrZXQiIE1JTUUgdHlwZXMgaXMgb25lIHdob3NlIGNvbnRhaW5lciB0eXBlIGRvZXMgbm90IHVu
aXF1ZWx5IHNwZWNpZnkgYSBjb2RlYy4KICAgICAvLyBTZWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmM2MzgxCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5n
Pj4gYnVja2V0TUlNRVR5cGVzID0gSGFzaFNldDxTdHJpbmc+KHsKLSAgICAgICAgImF1ZGlvLzNn
cHAiLAotICAgICAgICAidmlkZW8vM2dwcCIsCi0gICAgICAgICJhdWRpby8zZ3BwMiIsCi0gICAg
ICAgICJ2aWRlby8zZ3BwMiIsCi0gICAgICAgICJhdWRpby9tcDQiLAotICAgICAgICAidmlkZW8v
bXA0IiwKLSAgICAgICAgImFwcGxpY2F0aW9uL21wNCIsCi0gICAgICAgICJ2aWRlby9xdWlja3Rp
bWUiLAotICAgICAgICAiYXBwbGljYXRpb24vbXAyMSIsCi0gICAgICAgICJhdWRpby92bmQuYXBw
bGUubXBlZ3VybCIsCi0gICAgICAgICJ2aWRlby92bmQuYXBwbGUubXBlZ3VybCIsCi0gICAgICAg
ICJhdWRpby9vZ2ciLAotICAgICAgICAidmlkZW8vb2dnIiwKLSAgICAgICAgInZpZGVvL3dlYm0i
LAotICAgICAgICAiYXVkaW8vd2VibSIsCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+PiBidWNrZXRNSU1FVHlw
ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFN0cmluZz4geworICAgICAgICAiYXVkaW8vM2dwcCJf
cywKKyAgICAgICAgInZpZGVvLzNncHAiX3MsCisgICAgICAgICJhdWRpby8zZ3BwMiJfcywKKyAg
ICAgICAgInZpZGVvLzNncHAyIl9zLAorICAgICAgICAiYXVkaW8vbXA0Il9zLAorICAgICAgICAi
dmlkZW8vbXA0Il9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXA0Il9zLAorICAgICAgICAidmlk
ZW8vcXVpY2t0aW1lIl9zLAorICAgICAgICAiYXBwbGljYXRpb24vbXAyMSJfcywKKyAgICAgICAg
ImF1ZGlvL3ZuZC5hcHBsZS5tcGVndXJsIl9zLAorICAgICAgICAidmlkZW8vdm5kLmFwcGxlLm1w
ZWd1cmwiX3MsCisgICAgICAgICJhdWRpby9vZ2ciX3MsCisgICAgICAgICJ2aWRlby9vZ2ciX3Ms
CisgICAgICAgICJ2aWRlby93ZWJtIl9zLAorICAgICAgICAiYXVkaW8vd2VibSJfcywKICAgICB9
KTsKICAgICByZXR1cm4gYnVja2V0TUlNRVR5cGVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTA0MzU0ZDYy
OGFiNTRmNzdiYWM4ZTFmMDY2NWVmY2U3YWQ1NTg0OC4uODQzMTAxZWRlZjQ1MmFkMDk0ZjAzNWJm
ODQyNDI1YmJmNjY2OTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVkZSAi
VXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpAQCAtMjYw
Nyw4ICsyNjA4LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0hhc1BvcHVw
KCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvcHVwVmFsdWUoKSBjb25z
dAogewotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IGFs
bG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7Ci0gICAgICAg
ICJtZW51IiwgImxpc3Rib3giLCAidHJlZSIsICJncmlkIiwgImRpYWxvZyIKKyAgICBzdGF0aWMg
Y29uc3QgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PFN0cmluZz4+IGFsbG93ZWRQb3B1cFZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3Ry
aW5nPiB7CisgICAgICAgICJtZW51Il9zLCAibGlzdGJveCJfcywgInRyZWUiX3MsICJncmlkIl9z
LCAiZGlhbG9nIl9zLAogICAgIH0pOwogCiAgICAgYXV0byBoYXNQb3B1cCA9IGdldEF0dHJpYnV0
ZShhcmlhX2hhc3BvcHVwQXR0cikuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAppbmRleCBiNTlkZWQxYzdhZDliZDMwOGM2OGU4ZmVjOGRjMWE1OTBhNTBlNTZm
Li5hYTg3NjAyMGY2YWZmYTdlMDU2MjVlMmZlNGU1YzE4NzcyOTNkMjY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCkBAIC0yMzg4LDcgKzIzODgsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNoYWRv
d1Jvb3QoKQogCiBzdGF0aWMgYm9vbCBjYW5BdHRhY2hBdXRob3JTaGFkb3dSb290KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHRhZ05hbWVzID0gW10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVz
ID0gW10gewogICAgICAgICBzdGF0aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRh
Z0xpc3RbXSA9IHsKICAgICAgICAgICAgICZhcnRpY2xlVGFnLmdldCgpLAogICAgICAgICAgICAg
JmFzaWRlVGFnLmdldCgpLApAQCAtMjQwOSw3ICsyNDA5LDggQEAgc3RhdGljIGJvb2wgY2FuQXR0
YWNoQXV0aG9yU2hhZG93Um9vdChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgICAgICAgICAg
JnNlY3Rpb25UYWcuZ2V0KCksCiAgICAgICAgICAgICAmc3BhblRhZy5nZXQoKQogICAgICAgICB9
OwotICAgICAgICBIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICAgICAgc2V0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZW9mKHRhZ0xpc3QpKTsKICAgICAgICAgZm9yIChh
dXRvJiBuYW1lIDogdGFnTGlzdCkKICAgICAgICAgICAgIHNldC5hZGQobmFtZS0+bG9jYWxOYW1l
KCkpOwogICAgICAgICByZXR1cm4gc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1F1YWxpZmllZE5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKaW5k
ZXggMjY0YzQ3OTE1MGNjYmY3YTA2NWRlYTU1YWNlYmE0NGVkZDM5MmY0Zi4uNDI5ZmM1NTk2NDM1
MWYxMjQ5YmMxYzhmMjg5ZTM3N2E0ZGQzZTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1F1YWxpZmllZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFt
ZS5oCkBAIC0xMzcsNyArMTM3LDggQEAgc3RydWN0IFF1YWxpZmllZE5hbWVIYXNoIHsKICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lJiBhLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBR
dWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCogYSwgY29uc3QgUXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZUltcGwqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogCi0gICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOwogfTsKIAog
aW5saW5lIFN0cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9t
YWtlX25hbWVzLnBsCmluZGV4IDY0MTRlMWU2YWI1NTYwYzhiMDMxOWNlMjUyYzZjNjZhY2I3OTNm
NWIuLjQyODU0Mjg4ZWE4MWUyODYzMDQ5MzBlYmUzMGJlYTJjOGE3ZDhlODUgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCkBAIC0xMDAsNiArMTAwLDcgQEAKICAgICBwcmludExpY2Vuc2VIZWFk
ZXIoJEYpOwogICAgIHByaW50SGVhZGVySGVhZCgkRiwgIkNTUyIsICRmYW1pbHlOYW1lc0ZpbGVC
YXNlLCA8PEVORCwgIiIpOwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIEVORApAQCAtNzA5LDYgKzcxMCw3IEBAIHN1
YiBwcmludE5hbWVzSGVhZGVyRmlsZQogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7CiAgICAg
cHJpbnRIZWFkZXJIZWFkKCRGLCAiRE9NIiwgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSwgPDxFTkQs
ICJjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9UXVhbGlmaWVkTmFtZSA6IHB1YmxpYyBRdWFs
aWZpZWROYW1lIHsgfTtcblxuIik7CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+CiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogRU5ECkBAIC05NTYsNyArOTU4
LDcgQEAgRU5ECiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5Niw3ICs5OTgsNyBA
QCBFTkQKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBxdWFsaWZpZWROYW1lOyAvLyBVc2UgcG9p
bnRlciBpbnN0ZWFkIG9mIHJlZmVyZW5jZSBzbyB0aGF0IGVtcHR5VmFsdWUoKSBpbiBIYXNoTWFw
IGlzIGNoZWFwIHRvIGNyZWF0ZS4KIH07CiAKLXN0YXRpYyBORVZFUl9JTkxJTkUgSGFzaE1hcDxB
dG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9u
TWFwRW50cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkKK3N0YXRp
YyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0
b21TdHJpbmcsICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50
cnk+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1GYWN0b3J5TWFwKCkKIHsKICAgICBzdHJ1
Y3QgVGFibGVFbnRyeSB7CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWU7CkBAIC0x
MDEyLDE2ICsxMDE0LDE2IEBAIEVORAogICAgIHByaW50IEYgPDxFTkQKICAgICB9OwogCi0gICAg
SGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosICRwYXJhbWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3Rv
ckZ1bmN0aW9uTWFwRW50cnk+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8QXRvbVN0cmluZywgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9y
RnVuY3Rpb25NYXBFbnRyeT4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkgOiB0YWJsZSkKLSAg
ICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeShlbnRyeS5mdW5jdGlvbiwgZW50
cnkubmFtZSkpOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCksICRwYXJh
bWV0ZXJze25hbWVzcGFjZX1Db25zdHJ1Y3RvckZ1bmN0aW9uTWFwRW50cnkoZW50cnkuZnVuY3Rp
b24sIGVudHJ5Lm5hbWUpKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBzdGF0aWMgJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUNvbnN0cnVjdG9yRnVuY3Rpb25NYXBFbnRyeSBmaW5kJHBhcmFtZXRlcnN7
bmFtZXNwYWNlfUVsZW1lbnRDb25zdHJ1Y3RvckZ1bmN0aW9uKGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsTmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95
ZWQoY3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUZhY3RvcnlNYXAoKSk7Ci0gICAgcmV0dXJu
IG1hcC5nZXQoKS5nZXQobG9jYWxOYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIG1hcC5nZXQoKS5n
ZXQobG9jYWxOYW1lKTsKIH0KIAogUmVmUHRyPCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50
PiAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUtub3duRWxlbWVu
dChjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIERvY3VtZW50JiBkb2N1bWVudCRmb3JtRWxl
bWVudEFyZ3VtZW50Rm9yRGVmaW5pdGlvbiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCkBAIC0xMjI2
LDYgKzEyMjgsNyBAQCBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIEVORAogOwpAQCAtMTI0Nyw3ICsxMjUw
LDcgQEAgRU5ECiAKIHByaW50IEYgPDxFTkQKIAotc3RhdGljIE5FVkVSX0lOTElORSBIYXNoTWFw
PEF0b21TdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFw
cGVyRnVuY3Rpb24+IGNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyTWFwKCkKK3N0
YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PEF0b21TdHJpbmcsIENyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3JhcHBlckZ1
bmN0aW9uPiBjcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlck1hcCgpCiB7CiAgICAg
c3RydWN0IFRhYmxlRW50cnkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lOwpA
QCAtMTI4NSwxNiArMTI4OCwxNiBAQCBFTkQKICAgICBwcmludCBGIDw8RU5ECiAgICAgfTsKIAot
ICAgIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOwogICAgIGZvciAoYXV0byYgZW50cnkgOiB0YWJs
ZSkKLSAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgZW50cnku
ZnVuY3Rpb24pOworICAgICAgICBtYXAuYWRkKGVudHJ5Lm5hbWUubG9jYWxOYW1lKCksIGVudHJ5
LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwogfQogCiBKU0RPTU9iamVjdCogY3JlYXRlSlMk
cGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ+JiYgZWxlbWVudCkKIHsKICAg
ICBzdGF0aWMgY29uc3QgYXV0byBmdW5jdGlvbnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXJNYXAoKSk7Ci0gICAgaWYgKGF1dG8gZnVuY3Rp
b24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSkpCisg
ICAgaWYgKGF1dG8gZnVuY3Rpb24gPSBmdW5jdGlvbnMuZ2V0KCkuZ2V0KGVsZW1lbnQtPmxvY2Fs
TmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgV1RGTW92ZShl
bGVtZW50KSk7CiBFTkQKIDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAppbmRleCBjNzhkMWViZjg2ZWIwYjQ5MGRhMzljNjMwYmIyZmExYjRkZWJiM2Qw
Li5iODJlMmU2Yzk1ZTU2MzZiNWEzMjhlODgxYmYxZTdhNTdmNDMwOTY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hT
ZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTgsNyArMTE5LDcgQEAgRWxlbWVu
dCogRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVIKIAogYm9vbCBpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGJsb2NrVGFn
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0
aWMgY29uc3QgYXV0byBibG9ja1RhZ3MgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKICAgICAgICAgYWRk
cmVzc1RhZywKICAgICAgICAgYXJ0aWNsZVRhZywKICAgICAgICAgYXNpZGVUYWcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAppbmRleCA0ZWMwYjRl
NTVjM2VhZjY0MDhmMjUwNTk5NmNhMWRjZGFhNWYyMzUzLi42NjE0MDdlMTQ1MjRjZjJhMTNmZWEz
NjU1MTNkNzlhYmU1M2U2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3Zl
Rm9ybWF0Q29tbWFuZC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ3LDcgQEAgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6UmVtb3Zl
Rm9ybWF0Q29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGlzRWxlbWVu
dEZvclJlbW92ZUZvcm1hdENvbW1hbmQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBz
dGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoU2V0PFF1
YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBlbGVtZW50cyA9IG1ha2VOZXZl
ckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UXVhbGlm
aWVkTmFtZT4gewogICAgICAgICBhY3JvbnltVGFnLAogICAgICAgICBiVGFnLAogICAgICAgICBi
ZG9UYWcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IDAxOTE5ZWIzNWM3OWM1NDk4ZWI2YzJlMDA4ZmY4M2ZhZGEzYTdkYWYu
LmNjMzNkZjcyYTJjN2E4YmZmMTFmODY2MTc0MjQ2NTQxZWU3Y2UzMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC02Nyw2
ICs2Nyw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9v
ZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTczOSw3ICs3NDAsNyBAQCBzdGF0aWMgYm9vbCBpc1Byb2hpYml0ZWRQYXJh
Z3JhcGhDaGlsZChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAgICAgICAgICAgJnVsVGFnLmdl
dCgpLAogICAgICAgICAgICAgJnhtcFRhZy5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFz
aFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGZvciAoYXV0byYgdGFnIDog
dGFncykKICAgICAgICAgICAgIHNldC5hZGQodGFnLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIHJl
dHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0F1dG9maWxsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCmluZGV4IDY3MzVlMjY5ZjI1YWVmN2Jj
MDkxMjc1NTM5MjE0ODFjZGUzZThlYjUuLjhmNzEyZjcxZDIyMWRjMjdlOTQyMjgyZjE0ZjkwMzJl
OWE4OTExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQXV0b2ZpbGwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oPgogCkBAIC00OCw3ICs0OSw3IEBAIHN0cnVjdCBBdXRvZmlsbEluZm8g
ewogICAgIEF1dG9maWxsQ2F0ZWdvcnkgY2F0ZWdvcnk7CiB9OwogCi1zdGF0aWMgY29uc3QgSGFz
aE1hcDxBdG9tU3RyaW5nLCBBdXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQorc3RhdGljIGNv
bnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBB
dXRvZmlsbEluZm8+JiBmaWVsZE5hbWVNYXAoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIG1h
cCA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBA
IC0xMTMsNyArMTE0LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2Zp
bGxJbmZvPiYgZmllbGROYW1lTWFwKCkKICAgICAgICAgICAgIHsgImVtYWlsIiwgeyBBdXRvZmls
bEZpZWxkTmFtZTo6RW1haWwsIEF1dG9maWxsQ2F0ZWdvcnk6OkNvbnRhY3QgfSB9LAogICAgICAg
ICAgICAgeyAiaW1wcCIsIHsgQXV0b2ZpbGxGaWVsZE5hbWU6OkltcHAsIEF1dG9maWxsQ2F0ZWdv
cnk6OkNvbnRhY3QgfSB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPEF0b21TdHJpbmcs
IEF1dG9maWxsSW5mbz4gbWFwOworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8QXRvbVN0cmluZywgQXV0b2ZpbGxJbmZvPiBtYXA7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBlbnRyaWVzKQogICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBl
bnRyeS52YWx1ZSk7CiAgICAgICAgIHJldHVybiBtYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKaW5kZXggOGRmNjJjNmJiNDkxZjg0OGVlY2UyOTA5NDRhNGI3Y2ZhZWRkOGQ3NS4u
MDBiZjY3YWVkNTY1YWM5MGY0NmQ4ZmE3MzhkZjdhNTI5Mzc2MGRlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI1
LDcgKzIyNiw3IEBAIGJvb2wgSFRNTERvY3VtZW50Ojppc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKICAgICAgICAgICAgICZ2YWx1ZXR5
cGVBdHRyLmdldCgpLAogICAgICAgICAgICAgJnZsaW5rQXR0ci5nZXQoKSwKICAgICAgICAgfTsK
LSAgICAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiBzZXQ7CiAgICAgICAgIGZvciAo
YXV0byogbmFtZSA6IG5hbWVzKQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2NhbE5hbWUo
KSk7CiAgICAgICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuY3BwCmluZGV4IGRjMWYxMGNiMmNmMDg0MjE4ODMyNGI4YTAzZTZiMTcxNjIwZDZjYmUu
LmE2ZjNjMGYxMmQyNzE1Njk1OTE4Yjc2M2Q5MjQ2MjY1ZmUyZjJjNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVk
ZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgi
CkBAIC0zNjEsNyArMzYyLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJh
Y2tDb250ZW50KCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmV2ZW50c1BhcmVudE9iamVjdEZyb21F
eHBvc3VyZShjb25zdCBFbGVtZW50JiBjaGlsZCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byBt
b3N0S25vd25UYWdzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKLSAgICAgICAgSGFzaFNldDxR
dWFsaWZpZWROYW1lPiBzZXQ7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiBzZXQ7CiAgICAgICAgIGF1dG8qIHRhZ3MgPSBIVE1M
TmFtZXM6OmdldEhUTUxUYWdzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRN
TE5hbWVzOjpIVE1MVGFnc0NvdW50OyBpKyspIHsKICAgICAgICAgICAgIGF1dG8mIHRhZyA9ICp0
YWdzW2ldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKaW5kZXggYjE5MzBlNDYzZGE0NGQ5N2RiNzQ1NDVjZTY5NGU5OWNiZTM5MTY4Zi4uOTJmMjc2
ZjM4Yjc0NGQ1MWVjNTFjOGZjZjlhYjQ2ZmU3MmQyZWQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiAjaWYgRU5BQkxFKFRFTEVQ
SE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDc4LDkg
KzQ3OSw5IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFja0l0ZW0m
KT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVh
bGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gY3Jl
YXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0IG5hbWVzW10sIHVuc2ln
bmVkIGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+IHN0YXRp
YyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVh
bGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0
IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFF1
YWxpZmllZE5hbWU+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lID0gKm5hbWVzW2ldOwogICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBu
YW1lLmxvY2FsTmFtZSgpOwpAQCAtNDkzLDE0ICs0OTQsMTQgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4KIAogc3RhdGljIHZvaWQgYWRqdXN0U1ZHVGFnTmFtZUNhc2UoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9tU3RyaW5n
LCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChTVkdOYW1lczo6Z2V0U1ZHVGFn
cygpLCBTVkdOYW1lczo6U1ZHVGFnc0NvdW50KTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxp
ZmllZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKFNWR05hbWVzOjpnZXRTVkdUYWdzKCksIFNW
R05hbWVzOjpTVkdUYWdzQ291bnQpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhc2VkTmFt
ZSA9IG1hcC5nZXQoKS5nZXQodG9rZW4ubmFtZSgpKTsKICAgICBpZiAoY2FzZWROYW1lLmxvY2Fs
TmFtZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgdG9rZW4uc2V0TmFtZShjYXNl
ZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0QXR0cmli
dXRlcyhIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0QXR0cmlidXRlcyhjb25zdCBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4mIG1hcCwgQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBmb3IgKGF1dG8m
IGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgewogICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBjYXNlZE5hbWUgPSBtYXAuZ2V0KGF0dHJpYnV0ZS5sb2NhbE5hbWUoKSk7CkBAIC01
MTEsNyArNTEyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoSGFzaE1h
cDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBdG8KIAogdGVtcGxhdGU8Y29uc3Qg
UXVhbGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgpLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzVGFibGVMZW5ndGg+IHN0YXRpYyB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxBdG9tU3Ry
aW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUo
KSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVt
b3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmll
ZE5hbWU+PiBtYXAgPSBjcmVhdGVDYXNlTWFwKGF0dHJpYnV0ZXNUYWJsZSgpLCBhdHRyaWJ1dGVz
VGFibGVMZW5ndGgpOwogICAgIGFkanVzdEF0dHJpYnV0ZXMobWFwLCB0b2tlbik7CiB9CiAKQEAg
LTUyNSwxOCArNTI2LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RNYXRoTUxBdHRyaWJ1
dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgYWRqdXN0QXR0cmlidXRlczxNYXRoTUxO
YW1lczo6Z2V0TWF0aE1MQXR0cnMsIE1hdGhNTE5hbWVzOjpNYXRoTUxBdHRyc0NvdW50Pih0b2tl
bik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE5hbWVzV2l0aFByZWZpeChIYXNoTWFwPEF0b21TdHJp
bmcsIFF1YWxpZmllZE5hbWU+JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZp
ZWROYW1lPiBjcmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpCiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUgPSAqbmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSA9
IG5hbWUubG9jYWxOYW1lKCk7Ci0gICAgICAgIG1hcC5hZGQocHJlZml4ICsgJzonICsgbG9jYWxO
YW1lLCBRdWFsaWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBuYW1lLm5hbWVzcGFjZVVSSSgp
KSk7Ci0gICAgfQotfQorICAgIGF1dG8gYWRkTmFtZXNXaXRoUHJlZml4ID0gW10oTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+
JiBtYXAsIGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCwgY29uc3QgUXVhbGlmaWVkTmFtZSogY29u
c3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSA9ICpuYW1lc1tpXTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFt
ZSA9IG5hbWUubG9jYWxOYW1lKCk7CisgICAgICAgICAgICBtYXAuYWRkKHByZWZpeCArICc6JyAr
IGxvY2FsTmFtZSwgUXVhbGlmaWVkTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbmFtZS5uYW1lc3Bh
Y2VVUkkoKSkpOworICAgICAgICB9CisgICAgfTsKIAotc3RhdGljIEhhc2hNYXA8QXRvbVN0cmlu
ZywgUXVhbGlmaWVkTmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQotewotICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVkTmFtZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7
CiAKICAgICBBdG9tU3RyaW5nIHhsaW5rTmFtZSgieGxpbmsiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CiAgICAgYWRkTmFtZXNXaXRoUHJlZml4KG1hcCwgeGxpbmtOYW1lLCBY
TGlua05hbWVzOjpnZXRYTGlua0F0dHJzKCksIFhMaW5rTmFtZXM6OlhMaW5rQXR0cnNDb3VudCk7
CkBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlmaWVk
TmFtZT4gY3JlYXRlRm9yZWlnbkF0dHJpYnV0ZXNNYXAoKQogCiBzdGF0aWMgdm9pZCBhZGp1c3RG
b3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoTWFwPEF0b21TdHJpbmcsIFF1YWxpZmllZE5hbWU+PiBtYXAgPSBj
cmVhdGVGb3JlaWduQXR0cmlidXRlc01hcCgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8QXRvbVN0cmluZywgUXVhbGlm
aWVkTmFtZT4+IG1hcCA9IGNyZWF0ZUZvcmVpZ25BdHRyaWJ1dGVzTWFwKCk7CiAgICAgYWRqdXN0
QXR0cmlidXRlcyhtYXAsIHRva2VuKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFn
ZU92ZXJsYXlzLmNwcAppbmRleCBmYTNlMmZhYTQ4Yjk2YWRiYzlkOGUyNjM1MmQ1ZjYyMGQ3YjU1
YWExLi5iNTk2NWY1NmE0OWE5NWUwMmM4ZjA3OTVkZWNjZThmYWYxMWJhNmFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE0OSwxMCArMTUwLDEwIEBAIGJvb2wgTm9uRmFzdFNj
cm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGRhdGVSZWdpb24oKQogICAgIHJldHVybiByZWdpb25D
aGFuZ2VkOwogfQogCi1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+
PiYgdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU1JHQkE8dWludDhfdD4+JiB0b3VjaEV2
ZW50UmVnaW9uQ29sb3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byByZWdpb25Db2xvcnMg
PSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcs
IFNSR0JBPHVpbnQ4X3Q+PiB7IHsKKyAgICAgICAgcmV0dXJuIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFNSR0JBPHVpbnQ4X3Q+PiB7IHsKICAgICAgICAg
ICAgIHsgInRvdWNoc3RhcnQiX3MsIHsgMTkxLCAxOTEsIDYzLCA1MCB9IH0sCiAgICAgICAgICAg
ICB7ICJ0b3VjaG1vdmUiX3MsIHsgODAsIDIwNCwgMjQ1LCA1MCB9IH0sCiAgICAgICAgICAgICB7
ICJ0b3VjaGVuZCJfcywgeyAxOTEsIDYzLCAxMjcsIDUwIH0gfSwKQEAgLTE5NCw0OSArMTk1LDQ5
IEBAIHZvaWQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5OjpkcmF3UmVjdChQYWdlT3Zl
cmxheSYgcGFnZU92ZXJsYXksIEdyYXBoaWNzCiAgICAgZm9udC51cGRhdGUobnVsbHB0cik7CiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvdWNo
RXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoc3RhcnQiKSk7CisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgidG91Y2hzdGFydCJfcykpOwog
ICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRl
eHQoInRvdWNoc3RhcnQiLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwor
ICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJ0b3VjaHN0YXJ0Il9zLCBjb250ZXh0LCBmb250LCBs
ZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3Vj
aG1vdmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9y
cygpLmdldCgidG91Y2htb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0
KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2htb3ZlIiwgY29udGV4dCwgZm9udCwg
bGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgidG91Y2ht
b3ZlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVn
ZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50
UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCIpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJ0b3VjaGVuZCJfcykpOwogICAgIGNvbnRl
eHQuZmlsbFJlY3QobGVnZW5kUmVjdCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNo
ZW5kIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3Umln
aHRBbGlnbmVkVGV4dCgidG91Y2hlbmQiX3MsIGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9j
YXRpb24oKSk7CiAKICAgICBsZWdlbmRSZWN0Lm1vdmUoMCwgMzApOwotICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoInRvdWNoZm9yY2VjaGFuZ2Ui
KSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdl
dCgidG91Y2hmb3JjZWNoYW5nZSJfcykpOwogICAgIGNvbnRleHQuZmlsbFJlY3QobGVnZW5kUmVj
dCk7Ci0gICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInRvdWNoZm9yY2VjaGFuZ2UiLCBjb250ZXh0
LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0
KCJ0b3VjaGZvcmNlY2hhbmdlIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9u
KCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihtX2NvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRy
YXdSaWdodEFsaWduZWRUZXh0KCJwYXNzaXZlIGxpc3RlbmVycyIsIGNvbnRleHQsIGZvbnQsIGxl
Z2VuZFJlY3QubG9jYXRpb24oKSk7CisgICAgZHJhd1JpZ2h0QWxpZ25lZFRleHQoInBhc3NpdmUg
bGlzdGVuZXJzIl9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAg
ICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3Vj
aEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZWRvd24iKSk7CisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgibW91c2Vkb3duIl9zKSk7CiAg
ICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsKLSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4
dCgibW91c2Vkb3duIiwgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAg
ICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vkb3duIl9zLCBjb250ZXh0LCBmb250LCBsZWdl
bmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5kUmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBj
b250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkuZ2V0KCJtb3VzZW1v
dmUiKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygp
LmdldCgibW91c2Vtb3ZlIl9zKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChsZWdlbmRSZWN0KTsK
LSAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3ZlIiwgY29udGV4dCwgZm9udCwgbGVn
ZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGlnbmVkVGV4dCgibW91c2Vtb3Zl
Il9zLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgbGVnZW5k
UmVjdC5tb3ZlKDAsIDMwKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b3VjaEV2ZW50UmVn
aW9uQ29sb3JzKCkuZ2V0KCJtb3VzZXVwIikpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
dWNoRXZlbnRSZWdpb25Db2xvcnMoKS5nZXQoIm1vdXNldXAiX3MpKTsKICAgICBjb250ZXh0LmZp
bGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJtb3VzZXVwIiwg
Y29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigpKTsKKyAgICBkcmF3UmlnaHRBbGln
bmVkVGV4dCgibW91c2V1cCJfcywgY29udGV4dCwgZm9udCwgbGVnZW5kUmVjdC5sb2NhdGlvbigp
KTsKICNlbHNlCiAgICAgLy8gT24gZGVza3RvcCBwbGF0Zm9ybXMsIHRoZSAid2hlZWwiIHJlZ2lv
biBpbmNsdWRlcyB0aGUgbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdpb24uCi0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgid2hlZWwiKSk7CisgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IodG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmdldCgid2hlZWwi
X3MpKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KGxlZ2VuZFJlY3QpOwotICAgIGRyYXdSaWdodEFs
aWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iLCBjb250ZXh0LCBmb250LCBsZWdlbmRSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIGRyYXdSaWdodEFsaWduZWRUZXh0KCJub24tZmFzdCByZWdpb24iX3Ms
IGNvbnRleHQsIGZvbnQsIGxlZ2VuZFJlY3QubG9jYXRpb24oKSk7CiAjZW5kaWYKIAogICAgIGZv
ciAoY29uc3QgYXV0byYgc3luY2hyb25vdXNFdmVudFJlZ2lvbiA6IG1fZXZlbnRUcmFja2luZ1Jl
Z2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKaW5kZXggZWQ4ZGQ5MjM4
ZDMzNzNjMDE4MmIyZjMwOGVkYTAwMjdlNGFmYjkwMi4uNDAxNTI3N2UwN2M0M2Q5Zjk4OWExN2Vh
YmFlMTUyMGI5ZWM4YTE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3Jt
YW5jZVVzZXJUaW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VV
c2VyVGltaW5nLmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5I
b29kSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIE5hdmlnYXRpb25U
aW1pbmdGdW5jdGlvbiA9IHVuc2lnbmVkIGxvbmcgbG9uZyAoUGVyZm9ybWFuY2VUaW1pbmc6Oiop
KCkgY29uc3Q7Ci1zdGF0aWMgY29uc3QgSGFzaE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdG
dW5jdGlvbj4mIHJlc3RyaWN0ZWRNYXJrTmFtZXNUb05hdmlnYXRpb25UaW1pbmdGdW5jdGlvbk1h
cCgpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFw
PFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uPiYgcmVzdHJpY3RlZE1hcmtOYW1lc1Rv
TmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uTWFwKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPEhhc2hNYXA8
U3RyaW5nLCBOYXZpZ2F0aW9uVGltaW5nRnVuY3Rpb24+Pih7CisgICAgc3RhdGljIGF1dG8gbWFw
ID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxTdHJpbmcsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj4+KHsKICAgICAgICAgeyAiY29u
bmVjdEVuZCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0RW5kIH0sCiAgICAgICAgIHsg
ImNvbm5lY3RTdGFydCJfcywgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0U3RhcnQgfSwKICAg
ICAgICAgeyAiZG9tQ29tcGxldGUiX3MsICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tQ29tcGxldGUg
fSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVn
aXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01JTUVUeXBlUmVn
aXN0cnlDb2NvYS5tbQppbmRleCA5YzQ1YTIyOTRmYmZhY2YxOTc3MGQ0ODFlNmJlZTRmZWRhZWE2
NGZjLi5hNTVkNWEwNWU0ZGRjYmY1YzgxYzcxOTFiNGRjYjlkMmMzNDFlYjc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NSU1FVHlwZVJlZ2lzdHJ5Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTUlNRVR5cGVSZWdpc3RyeUNvY29h
Lm1tCkBAIC0yOSwxNyArMjksMTkgQEAKIAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlU2Vy
dmljZXNTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNVUkxGaWxlVHlwZU1hcHBpbmdz
U1BJLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgorI2ltcG9ydCA8d3RmL1Jv
YmluSG9vZEhhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxTdHJp
bmc+PiYgZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4mIGV4dGVuc2lvbnNGb3JNSU1FVHlwZU1hcCgpCiB7CiAg
ICAgc3RhdGljIGF1dG8gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwID0gbWFrZU5ldmVyRGVzdHJv
eWVkKFtdIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4gbWFwOwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4gbWFwOwogCiAg
ICAgICAgIGF1dG8gYWRkRXh0ZW5zaW9uID0gWyZdKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24pIHsKLSAgICAgICAgICAgIG1hcC5hZGQodHlwZSwgSGFzaFNldDxT
dHJpbmc+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIG1h
cC5hZGQodHlwZSwgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmlu
Zz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChleHRlbnNpb24pOwogICAgICAgICB9OwogCiAgICAg
ICAgIGF1dG8gYWRkRXh0ZW5zaW9ucyA9IFsmXShjb25zdCBTdHJpbmcmIHR5cGUsIE5TQXJyYXk8
TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA1Y2VhNzQ1MmQ1ZmYyZTZjYjVmM2UxMTY2
NTk3Yjc5ZmQ4ZjczZDdkLi5mNWE2NzU4MzM1MTMxOWY0MGYxMjg3ZTJhNzI5Y2M0NzFiYmQxZTc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAg
LTUwLDcgKzUxLDcgQEAgc3RhdGljIGJvb2wgdXNlQmFja3NsYXNoQXNZZW5TaWduRm9yRmFtaWx5
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldCA9IG1ha2VOZXZl
ckRlc3Ryb3llZChbXSB7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0
OwogICAgICAgICBhdXRvIGFkZCA9IFsmc2V0XSAoY29uc3QgY2hhciogbmFtZSwgc3RkOjppbml0
aWFsaXplcl9saXN0PFVDaGFyPiB1bmljb2RlTmFtZSkgewogICAgICAgICAgICAgdW5zaWduZWQg
bmFtZUxlbmd0aCA9IHN0cmxlbihuYW1lKTsKICAgICAgICAgICAgIHNldC5hZGQoQXRvbVN0cmlu
ZyB7IG5hbWUsIG5hbWVMZW5ndGgsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsIH0p
OwpAQCAtMzgyLDcgKzM4Myw3IEBAIGJvb2wgRm9udENhc2NhZGU6Omhhc1ZhbGlkQXZlcmFnZUNo
YXJXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgc3Rh
dGljIGNvbnN0IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkKEhhc2hTZXQ8QXRvbVN0cmlu
Zz4geworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1hcCA9IG1ha2VOZXZlckRlc3Ryb3llZChNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gewogICAgICAg
ICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCiAgICAgICAgICJBcmlhbCBIZWJyZXciLAogICAgICAg
ICAiQ2hhbGtib2FyZCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAppbmRleCA0ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwLi4xNDI0ZDFi
ZWVlNmUzYzMyYzY2YjQ5YTJmNmYyNGI0OGIyYWMyZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgSEFWRShBVkNPTlRFTlRLRVlTRVNT
SU9OKQpAQCAtMjA1LDkgKzIwNiw5IEBAIE9wdGlvbmFsPFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVy
Pj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrCiAgICAgcmV0
dXJuIGtleUlEczsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlk
SW5pdERhdGFUeXBlcygpCitzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21TdHJpbmc+PiB2YWxpZFR5cGVzID0gSGFz
aFNldDxBdG9tU3RyaW5nPih7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPj4gdmFsaWRUeXBlcyhzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8QXRvbVN0cmluZz4gewogICAgICAgICBDRE1Qcml2YXRlRmFpclBs
YXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksCiAgICAgICAgIENETVByaXZhdGVGYWlyUGxheVN0cmVh
bWluZzo6c2tkTmFtZSgpLAogI2lmIEhBVkUoRkFJUlBMQVlTVFJFQU1JTkdfQ0VOQ19JTklUREFU
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lz
dHJ5LmNwcAppbmRleCAzYzFiNmY2NTcyZWIzOGE5MzgxMDVmNzQ3NThiMTc4MmZjZDk3OTE3Li5h
NDcwMjQ0MGVkZmIwMzIyZmVhZjdjZDkxYjZlYWQ0MDdiM2M5MjBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCkBAIC0zMSwx
MyArMzEsMTQgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZGVmYXVsdFN1
cHBvcnRlZEltYWdlVHlwZXMoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKIHsKICAgICBz
dGF0aWMgY29uc3QgYXV0byBkZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcyA9IG1ha2VOZXZlckRl
c3Ryb3llZChbXSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWZhdWx0U3VwcG9ydGVkSW1h
Z2VUeXBlcyA9IHsKQEAgLTY4LDExICs2OSwxMiBAQCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRl
ZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhhc2hT
ZXQ8U3RyaW5nPio+KGNvbnRleHQpLT5hZGQoaW1hZ2VUeXBlKTsKICAgICAgICAgfSwgJnN5c3Rl
bVN1cHBvcnRlZEltYWdlVHlwZXMpOwogCi0gICAgICAgIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5
cGVzLnJlbW92ZUlmKFsmc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlc10oY29uc3QgU3RyaW5nJiBp
bWFnZVR5cGUpIHsKLSAgICAgICAgICAgIHJldHVybiAhc3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBl
cy5jb250YWlucyhpbWFnZVR5cGUpOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gZGVm
YXVsdFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+IGZpbHRlcmVkOworICAgICAgICBmb3IgKGF1dG8mIGlt
YWdlVHlwZSA6IGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKSB7CisgICAgICAgICAgICBpZiAo
c3lzdGVtU3VwcG9ydGVkSW1hZ2VUeXBlcy5jb250YWlucyhpbWFnZVR5cGUpKQorICAgICAgICAg
ICAgICAgIGZpbHRlcmVkLmFkZChpbWFnZVR5cGUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmaWx0ZXJlZDsKICAgICB9KCkpOwogCiAgICAgcmV0dXJuIGRlZmF1bHRTdXBwb3J0ZWRJbWFn
ZVR5cGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmgKaW5kZXggNWI4ZmUyMTdlODczZDBiMGM4NTY2ODY3NDAwZDc2ZWUzYzY2NTc1ZS4u
NGIwMTVhZmM5NWNhZjIzMDg2YTFjYmI2MWUzZTU2NGY3N2QwYjliYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCkBAIC0yNSwxMiAr
MjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBk
ZWZhdWx0U3VwcG9ydGVkSW1hZ2VUeXBlcygpOworY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIGRlZmF1bHRTdXBwb3J0ZWRJbWFnZVR5cGVzKCk7
CiBIYXNoU2V0PFN0cmluZz4mIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCk7CiBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+Jik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2Nv
YS5tbQppbmRleCBmMTExZjI4NzdiOThmOWM4MzdkMzU0Y2M4MWRiYTAyOGIzZWU5MjMzLi42MjZj
NTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0Nv
Y29hLm1tCkBAIC0zMiw4ICszMiw5IEBACiAjaW1wb3J0ICJIRVZDVXRpbGl0aWVzLmgiCiAjaW1w
b3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKIAotI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91
bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2lt
cG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorI2ltcG9ydCA8cGFs
L2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNv
ZnRMaW5rLmgiCiAKQEAgLTEyNiwxMSArMTI3LDExIEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFyYW1l
dGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8m
CiAKIHN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBjb2RlY1R5cGVGb3JEb1ZpQ29k
ZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKIHsKLSAgICBzdGF0aWMgYXV0byBt
YXAgPSBtYWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENNVmlkZW9Db2RlY1R5cGU+
Pih7Ci0gICAgICAgIHsgImF2YzEiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAgICAg
IHsgImF2YzMiLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAgICAgIHsgImh2YzEiLCBr
Q01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhldjEiLCBrQ01WaWRlb0NvZGVj
VHlwZV9IRVZDIH0sCisgICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIENNVmlkZW9Db2Rl
Y1R5cGU+Pih7CisgICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwK
KyAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAorICAgICAgICB7
ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCisgICAgICAgIHsgImhldjEiX3Ms
IGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKICAgICB9KTsKIAogICAgIGF1dG8gZmluZFJlc3Vs
dCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKaW5kZXggZDFmY2ZkMGRjYmEzMjZhZDNjNTRiMGNhY2Q2N2RmYmI5NWMxMmQ5OS4u
ZTUxYjVkNjljNDZmNDE3N2RhNGM5OWY0NzM3YzgyZjAzMGY0MjlmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTEzNzEsMTUgKzEzNzEsMTUgQEAgdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpzZXRDYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhDYWxsT25DbGll
bnRUaHJlYWRDYWwKICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayk7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c3VwcG9ydGVkVmlkZW9Db2RlY3MoKQorY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnN1cHBv
cnRlZFZpZGVvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCIsICJWX1ZQOSIgfSk7CisgICAgc3Rh
dGljIGF1dG8gY29kZWNzID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+Pih7ICJWX1ZQOCJfcywgIlZfVlA5Il9zIH0pOwog
ICAgIHJldHVybiBjb2RlY3M7CiB9CiAKLWNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6c3VwcG9ydGVkQXVkaW9Db2RlY3MoKQorY29uc3QgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnN1cHBvcnRlZEF1ZGlvQ29kZWNzKCkKIHsKLSAgICBzdGF0aWMgYXV0byBjb2RlY3MgPSBt
YWtlTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+Pih7ICJBX1ZPUkJJUyIsICJBX09QVVMi
IH0pOworICAgIHN0YXRpYyBhdXRvIGNvZGVjcyA9IG1ha2VOZXZlckRlc3Ryb3llZDxNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3RyaW5nPj4oeyAiQV9WT1JCSVMiX3Ms
ICJBX09QVVMiX3MgfSk7CiAgICAgcmV0dXJuIGNvZGVjczsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oCmluZGV4IGYwZDZhNWZkNmYwZjZjMmIzODRmOTJmNzQ4ZjRjOWJhNWQ5MWI4
ZDQuLjY0MWU0NzE4NmVhZjMyNzYwZTE4Mjc1YWQzZDhkNTA0NmQ1YzcyZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvQm94
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtMjM1LDggKzIzNiw4IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlCiAKICAgICBUcmFj
a0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotICAgIHN0YXRpYyBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7Ci0gICAgc3RhdGlj
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkQXVkaW9Db2RlY3MoKTsKKyAgICBzdGF0
aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4m
IHN1cHBvcnRlZFZpZGVvQ29kZWNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRBdWRpb0NvZGVjcygp
OwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpTdGF0dXMgT25FbGVtZW50QmVn
aW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKikgZmluYWw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5kZXggODgw
Y2JiYTA0YzhlZDBiN2JmM2I4ZDI5NTM1MTQyYzUyNzdjYmFhZi4uZmUwZWQzMTQ0MTE0OGVlMTUz
YjM0NmU0NTM1NDU1NTkyNmMzYTc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNWR1BhdHRl
cm5FbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgogCiAjaWYg
RU5BQkxFKFRSRUVfREVCVUdHSU5HKQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00Myw5ICs0NCw5
IEBAIFNWR1Jlc291cmNlczo6U1ZHUmVzb3VyY2VzKCkKIHsKIH0KIAotc3RhdGljIEhhc2hTZXQ8
QXRvbVN0cmluZz4mIGNsaXBwZXJGaWx0ZXJNYXNrZXJUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNsaXBwZXJG
aWx0ZXJNYXNrZXJUYWdzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxB
dG9tU3RyaW5nPj4gc190YWdMaXN0OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlD
b21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsK
ICAgICBpZiAoc190YWdMaXN0LmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyAiY29udGFp
bmVyIGVsZW1lbnRzIjogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJt
Q29udGFpbmVyRWxlbWVudAogICAgICAgICAvLyAiZ3JhcGhpY3MgZWxlbWVudHMiIDogaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvaW50cm8uaHRtbCNUZXJtR3JhcGhpY3NFbGVtZW50CkBAIC05
Miw5ICs5Myw5IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21TdHJpbmc+JiBjbGlwcGVyRmlsdGVyTWFz
a2VyVGFncygpCiAgICAgcmV0dXJuIHNfdGFnTGlzdDsKIH0KIAotc3RhdGljIEhhc2hTZXQ8QXRv
bVN0cmluZz4mIG1hcmtlclRhZ3MoKQorc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgbWFya2VyVGFncygpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6bGluZVRhZy0+
bG9jYWxOYW1lKCkpOwogICAgICAgICBzX3RhZ0xpc3QuZ2V0KCkuYWRkKFNWR05hbWVzOjpwYXRo
VGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0xMDUsOSArMTA2LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRv
bVN0cmluZz4mIG1hcmtlclRhZ3MoKQogICAgIHJldHVybiBzX3RhZ0xpc3Q7CiB9CiAKLXN0YXRp
YyBIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxsQW5kU3Ryb2tlVGFncygpCitzdGF0aWMgY29uc3Qg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+JiBmaWxs
QW5kU3Ryb2tlVGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRv
bVN0cmluZz4+IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAg
ICAgaWYgKHNfdGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0Lmdl
dCgpLmFkZChTVkdOYW1lczo6YWx0R2x5cGhUYWctPmxvY2FsTmFtZSgpKTsKICAgICAgICAgc190
YWdMaXN0LmdldCgpLmFkZChTVkdOYW1lczo6Y2lyY2xlVGFnLT5sb2NhbE5hbWUoKSk7CkBAIC0x
MjYsOSArMTI3LDkgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbVN0cmluZz4mIGZpbGxBbmRTdHJva2VU
YWdzKCkKICAgICByZXR1cm4gc190YWdMaXN0OwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3Ry
aW5nPiYgY2hhaW5hYmxlUmVzb3VyY2VUYWdzKCkKK3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIGNoYWluYWJsZVJlc291cmNl
VGFncygpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+
IHNfdGFnTGlzdDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0b21TdHJpbmc+PiBzX3RhZ0xpc3Q7CiAgICAgaWYgKHNf
dGFnTGlzdC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgc190YWdMaXN0LmdldCgpLmFkZChT
VkdOYW1lczo6bGluZWFyR3JhZGllbnRUYWctPmxvY2FsTmFtZSgpKTsKICAgICAgICAgc190YWdM
aXN0LmdldCgpLmFkZChTVkdOYW1lczo6ZmlsdGVyVGFnLT5sb2NhbE5hbWUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDk3NThhMjc4MzlhMmI4MTg2NDRhY2Vj
MmZjODhhYzE3ZTE4MzBmZGYuLmU2YWExYjVjZDFiYzg5ODMzNDAxMjc2ZTUzNmZhZjQwMGMyZDZm
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC01Nyw2ICs1Nyw3
IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAi
V2ViQW5pbWF0aW9uVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewpAQCAtNDk3LDcgKzQ5OCw3
IEBAIHZvaWQgQWRqdXN0ZXI6OmFkanVzdChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiB1c2VyQWdlbnRBcHBlYXJhbmNlCiBzdGF0aWMgYm9vbCBoYXNFZmZlY3RpdmVEaXNw
bGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1odG1sCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0g
W10geworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4+IHRhZ05hbWVzID0gW10gewogICAgICAgICBzdGF0
aWMgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUqIGNvbnN0IHRhZ0xpc3RbXSA9IHsKICAgICAgICAg
ICAgICZiclRhZy5nZXQoKSwKICAgICAgICAgICAgICZ3YnJUYWcuZ2V0KCksCkBAIC01MTcsNyAr
NTE4LDggQEAgc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNwbGF5Q29u
dGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgICAgICZ0ZXh0YXJlYVRhZy5n
ZXQoKSwKICAgICAgICAgICAgICZzZWxlY3RUYWcuZ2V0KCksCiAgICAgICAgIH07Ci0gICAgICAg
IEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OworICAgICAgICBzZXQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaXplb2YodGFnTGlzdCkpOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUg
OiB0YWdMaXN0KQogICAgICAgICAgICAgc2V0LmFkZChuYW1lLT5sb2NhbE5hbWUoKSk7CiAgICAg
ICAgIHJldHVybiBzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAKaW5kZXggZTRhYWFjMDQ2ODZhOGMyNTgzODI1Njk0ZjI0MjhmOTllMjhhMTc4Ny4uNzEyNjgw
YTUwYzk4MmQxYzIyOTAzZWQ0NThhZGQ0M2QxNzU1ZWNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1BhcnNpbmdCdWZmZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTEyNyw3ICsxMjgsNyBAQCBzdGF0aWMgT3B0
aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtleVNwbGluZXMoU3RyaW5nVmlldyBzdHJp
bmcpCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHN1cHBv
cnRlZEF0dHJpYnV0ZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10gewotICAgICAgICBIYXNoU2V0
PFF1YWxpZmllZE5hbWU+IHNldDsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHNldDsKICAgICAgICAgU1ZHVGVzdHM6OmFkZFN1
cHBvcnRlZEF0dHJpYnV0ZXMoc2V0KTsKICAgICAgICAgc2V0LmFkZCh7CiAgICAgICAgICAgICBT
VkdOYW1lczo6dmFsdWVzQXR0ci5nZXQoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRl
eCA0ZjI3MDRlNDEwNTZlY2Y0MTNmZDM1ZmExZjkzYTFjZTg4MTdlYjU0Li45YzE0MGNjMWQ0ZTAz
OGE0MzYzOGNiNmRiMmM2YjBjYWEzNDJjZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
CkBAIC01NSwxMyArNTUsMTQgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKFNWR0VsZW1lbnQpOwogCi1zdGF0aWMgTkVWRVJfSU5MSU5FIEhhc2hNYXA8QXRvbVN0
cmluZ0ltcGwqLCBDU1NQcm9wZXJ0eUlEPiBjcmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0
eUlETWFwKCkKK3N0YXRpYyBORVZFUl9JTkxJTkUgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoTWFwPEF0b21TdHJpbmcsIENTU1Byb3BlcnR5SUQ+IGNyZWF0ZUF0dHJpYnV0ZU5h
bWVUb0NTU1Byb3BlcnR5SURNYXAoKQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAgICAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwpAQCAtMTQxLDE2ICsxNDIsMTYgQEAgc3Rh
dGljIE5FVkVSX0lOTElORSBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4g
Y3JlYXRlQXR0cmlidXRlTmFtZVQKICAgICAgICAgJnlBdHRyLmdldCgpLAogICAgIH07CiAKLSAg
ICBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgQ1NTUHJvcGVydHlJRD4gbWFwOworICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxBdG9tU3RyaW5nLCBDU1NQcm9wZXJ0
eUlEPiBtYXA7CiAKICAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRyaWJ1dGVOYW1lcykgewogICAg
ICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUgPSBuYW1lLT5sb2NhbE5hbWUoKTsKLSAg
ICAgICAgbWFwLmFkZChsb2NhbE5hbWUuaW1wbCgpLCBjc3NQcm9wZXJ0eUlEKGxvY2FsTmFtZSkp
OworICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsK
ICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hlbiBDU1Mgc3VwcG9ydHMgInRyYW5zZm9ybS1vcmln
aW4iIHRoaXMgc3BlY2lhbCBjYXNlIGNhbiBiZSByZW1vdmVkLAogICAgIC8vIGFuZCB3ZSBjYW4g
YWRkIHRyYW5zZm9ybV9vcmlnaW5BdHRyIHRvIHRoZSB0YWJsZSBhYm92ZSBpbnN0ZWFkLgotICAg
IG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHItPmxvY2FsTmFtZSgpLmltcGwoKSwgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW4pOworICAgIG1hcC5hZGQodHJhbnNmb3JtX29yaWdpbkF0dHIt
PmxvY2FsTmFtZSgpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbik7CiAKICAgICByZXR1cm4g
bWFwOwogfQpAQCAtNzI0LDcgKzcyNSw3IEBAIFF1YWxpZmllZE5hbWUgU1ZHRWxlbWVudDo6YW5p
bWF0YWJsZUF0dHJpYnV0ZUZvck5hbWUoY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lCiAgICAg
ICAgICAgICAmU1ZHTmFtZXM6OnpBdHRyLmdldCgpLAogICAgICAgICAgICAgJlNWR05hbWVzOjpo
cmVmQXR0ci5nZXQoKSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBR
dWFsaWZpZWROYW1lPiBtYXA7CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxBdG9tU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBtYXA7CiAgICAgICAgIGZvciAo
YXV0byYgbmFtZSA6IG5hbWVzKSB7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5h
ZGQobmFtZS0+bG9jYWxOYW1lKCksICpuYW1lKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC03ODAsNyArNzgxLDcgQEAgQ1NT
UHJvcGVydHlJRCBTVkdFbGVtZW50Ojpjc3NQcm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJgogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwog
CiAgICAgc3RhdGljIGNvbnN0IGF1dG8gcHJvcGVydGllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChj
cmVhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKCkpOwotICAgIHJldHVybiBwcm9w
ZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIHJldHVy
biBwcm9wZXJ0aWVzLmdldCgpLmdldChhdHRyTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAKIGJvb2wg
U1ZHRWxlbWVudDo6aXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwCmluZGV4IDFkMmNkOTc4ZWQxMzIzNmQ2
YWU2YTc4YWQ2Yjc0YzYwMjg3MTE3MmYuLmM1ODIzMTBhZmFkY2U1ZjJiNjU3MDk5NmE1ZmE0NDU1
NjFlOGVmOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZv
aWQgU1ZHVGVzdHM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgbV9jb250ZXh0RWxlbWVudC5pbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNG
b3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgU1ZHVGVzdHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
SGFzaFNldDxRdWFsaWZpZWROYW1lPiYgc3VwcG9ydGVkQXR0cmlidXRlcykKK3ZvaWQgU1ZHVGVz
dHM6OmFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQogewogICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNBdHRyKTsKICAgICBzdXBwb3J0
ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3Rz
LmgKaW5kZXggYTljMmFjZTBhMzBjNDUwZTlkOWQyODE5MTE1Mjk3NmM1MjJhOGM1Yi4uMGMyNTIx
NjZhYWRhMjZhYjFmOTZiOGE0MTFlMmFiMGIzOWQ5OTU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1Rlc3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmgK
QEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRl
ICJTVkdTdHJpbmdMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGNsYXNzIFNWR1Rlc3RzIHsK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
U3RyaW5nJik7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYpOworICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMo
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBoYXNGZWF0dXJlRm9yTGVnYWN5Qmlu
ZGluZ3MoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggZTA1ZmI1M2MwMTk5NzE2YjM0NTZm
NzcyZGViOTg1ZmViMGYwYzcxMS4uZmE3NTM5Mjg3ODJhM2M0M2QzYTI0MjIyYjhmNGZiMzc3MTEx
MTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFz
aFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE3NywxNCArMTc4LDE0IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1zdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxvd2Vk
RWxlbWVudFNldCgpCitzdGF0aWMgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PEF0b21TdHJpbmc+IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCkKIHsKICAgICAvLyBTcGVj
OiAiQW55ICdzdmcnLCAnc3ltYm9sJywgJ2cnLCBncmFwaGljcyBlbGVtZW50IG9yIG90aGVyICd1
c2UnIGlzIHBvdGVudGlhbGx5IGEgdGVtcGxhdGUgb2JqZWN0IHRoYXQgY2FuIGJlIHJlLXVzZWQK
ICAgICAvLyAoaS5lLiwgImluc3RhbmNlZCIpIGluIHRoZSBTVkcgZG9jdW1lbnQgdmlhIGEgJ3Vz
ZScgZWxlbWVudC4iCiAgICAgLy8gIkdyYXBoaWNzIEVsZW1lbnQiIGlzIGRlZmluZWQgYXMgJ2Np
cmNsZScsICdlbGxpcHNlJywgJ2ltYWdlJywgJ2xpbmUnLCAncGF0aCcsICdwb2x5Z29uJywgJ3Bv
bHlsaW5lJywgJ3JlY3QnLCAndGV4dCcKICAgICAvLyBFeGNsdWRlZCBhcmUgYW55dGhpbmcgdGhh
dCBpcyB1c2VkIGJ5IHJlZmVyZW5jZSBvciB0aGF0IG9ubHkgbWFrZSBzZW5zZSB0byBhcHBlYXIg
b25jZSBpbiBhIGRvY3VtZW50LgogICAgIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKLSAgICBI
YXNoU2V0PEF0b21TdHJpbmc+IHNldDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4gc2V0OwogICAgIGZvciAoYXV0byYgdGFnIDogeyBhVGFn
LmdldCgpLCBjaXJjbGVUYWcuZ2V0KCksIGRlc2NUYWcuZ2V0KCksIGVsbGlwc2VUYWcuZ2V0KCks
IGdUYWcuZ2V0KCksIGltYWdlVGFnLmdldCgpLCBsaW5lVGFnLmdldCgpLCBtZXRhZGF0YVRhZy5n
ZXQoKSwgcGF0aFRhZy5nZXQoKSwgcG9seWdvblRhZy5nZXQoKSwgcG9seWxpbmVUYWcuZ2V0KCks
IHJlY3RUYWcuZ2V0KCksIHN2Z1RhZy5nZXQoKSwgc3dpdGNoVGFnLmdldCgpLCBzeW1ib2xUYWcu
Z2V0KCksIHRleHRUYWcuZ2V0KCksIHRleHRQYXRoVGFnLmdldCgpLCB0aXRsZVRhZy5nZXQoKSwg
dHJlZlRhZy5nZXQoKSwgdHNwYW5UYWcuZ2V0KCksIHVzZVRhZy5nZXQoKSB9KQogICAgICAgICBz
ZXQuYWRkKHRhZy5sb2NhbE5hbWUoKSk7CiAgICAgcmV0dXJuIHNldDsKQEAgLTE5Miw3ICsxOTMs
NyBAQCBzdGF0aWMgSGFzaFNldDxBdG9tU3RyaW5nPiBjcmVhdGVBbGxvd2VkRWxlbWVudFNldCgp
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Rpc2FsbG93ZWRFbGVtZW50KGNvbnN0IFNWR0VsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbVN0
cmluZz4+IHNldCA9IGNyZWF0ZUFsbG93ZWRFbGVtZW50U2V0KCk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3Ry
aW5nPj4gc2V0ID0gY3JlYXRlQWxsb3dlZEVsZW1lbnRTZXQoKTsKICAgICByZXR1cm4gIXNldC5n
ZXQoKS5jb250YWlucyhlbGVtZW50LmxvY2FsTmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCA2ODE5MWI5NGE0MDAx
MDVmYjI2YTE2OTJlNmYwMmRiNTc4Y2JhZWNkLi5lMzRhMWFlNzZkYTRhZmQ2MDQ5ZGJjYTYwYjkw
ZmNjZjkyN2VlZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NjIsNyArNDYz
LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKGNvbnN0IFN0cmluZyYg
cGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KIAogYm9vbCBTVkdTTUlMRWxlbWVudDo6aXNT
dXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
c3RhdGljIGNvbnN0IGF1dG8gc3VwcG9ydGVkQXR0cmlidXRlcyA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChIYXNoU2V0PFF1YWxpZmllZE5hbWU+IHsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBzdXBwb3J0
ZWRBdHRyaWJ1dGVzID0gbWFrZU5ldmVyRGVzdHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxRdWFsaWZpZWROYW1lPiB7CiAgICAgICAgIFNWR05hbWVzOjpiZWdp
bkF0dHIsCiAgICAgICAgIFNWR05hbWVzOjplbmRBdHRyLAogICAgICAgICBTVkdOYW1lczo6ZHVy
QXR0ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDlmZGZiYThiMTAy
M2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYuLjEwZjBjMjJkNGI2N2NlNWZmYTNiODMwNjlj
YmY0MDYwNTEyMWVlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2OCw0NCArNjY5LDQ0IEBAIHN0cnVjdCBGdW5j
dGlvbk1hcFZhbHVlIHsKICAgICBJbnRlcnZhbCBhcmd1bWVudENvdW50SW50ZXJ2YWw7CiB9Owog
Ci1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IGNyZWF0ZUZ1bmN0aW9u
TWFwKCkKK3N0YXRpYyBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3Ry
aW5nLCBGdW5jdGlvbk1hcFZhbHVlPiBjcmVhdGVGdW5jdGlvbk1hcCgpCiB7CiAgICAgc3RydWN0
IEZ1bmN0aW9uTWFwcGluZyB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgIEFT
Q0lJTGl0ZXJhbCBuYW1lOwogICAgICAgICBGdW5jdGlvbk1hcFZhbHVlIGZ1bmN0aW9uOwogICAg
IH07CiAKICAgICBzdGF0aWMgY29uc3QgRnVuY3Rpb25NYXBwaW5nIGZ1bmN0aW9uc1tdID0gewot
ICAgICAgICB7ICJib29sZWFuIiwgeyBjcmVhdGVGdW5jdGlvbkJvb2xlYW4sIDEgfSB9LAotICAg
ICAgICB7ICJjZWlsaW5nIiwgeyBjcmVhdGVGdW5jdGlvbkNlaWxpbmcsIDEgfSB9LAotICAgICAg
ICB7ICJjb25jYXQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJbnRlcnZhbCgyLCBJbnRlcnZh
bDo6SW5mKSB9IH0sCi0gICAgICAgIHsgImNvbnRhaW5zIiwgeyBjcmVhdGVGdW5jdGlvbkNvbnRh
aW5zLCAyIH0gfSwKLSAgICAgICAgeyAiY291bnQiLCB7IGNyZWF0ZUZ1bmN0aW9uQ291bnQsIDEg
fSB9LAotICAgICAgICB7ICJmYWxzZSIsIHsgY3JlYXRlRnVuY3Rpb25GYWxzZSwgMCB9IH0sCi0g
ICAgICAgIHsgImZsb29yIiwgeyBjcmVhdGVGdW5jdGlvbkZsb29yLCAxIH0gfSwKLSAgICAgICAg
eyAiaWQiLCB7IGNyZWF0ZUZ1bmN0aW9uSWQsIDEgfSB9LAotICAgICAgICB7ICJsYW5nIiwgeyBj
cmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAotICAgICAgICB7ICJsYXN0IiwgeyBjcmVhdGVGdW5j
dGlvbkxhc3QsIDAgfSB9LAotICAgICAgICB7ICJsb2NhbC1uYW1lIiwgeyBjcmVhdGVGdW5jdGlv
bkxvY2FsTmFtZSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJuYW1lIiwgeyBjcmVh
dGVGdW5jdGlvbk5hbWUsIEludGVydmFsKDAsIDEpIH0gfSwKLSAgICAgICAgeyAibmFtZXNwYWNl
LXVyaSIsIHsgY3JlYXRlRnVuY3Rpb25OYW1lc3BhY2VVUkksIEludGVydmFsKDAsIDEpIH0gfSwK
LSAgICAgICAgeyAibm9ybWFsaXplLXNwYWNlIiwgeyBjcmVhdGVGdW5jdGlvbk5vcm1hbGl6ZVNw
YWNlLCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgIm5vdCIsIHsgY3JlYXRlRnVuY3Rp
b25Ob3QsIDEgfSB9LAotICAgICAgICB7ICJudW1iZXIiLCB7IGNyZWF0ZUZ1bmN0aW9uTnVtYmVy
LCBJbnRlcnZhbCgwLCAxKSB9IH0sCi0gICAgICAgIHsgInBvc2l0aW9uIiwgeyBjcmVhdGVGdW5j
dGlvblBvc2l0aW9uLCAwIH0gfSwKLSAgICAgICAgeyAicm91bmQiLCB7IGNyZWF0ZUZ1bmN0aW9u
Um91bmQsIDEgfSB9LAotICAgICAgICB7ICJzdGFydHMtd2l0aCIsIHsgY3JlYXRlRnVuY3Rpb25T
dGFydHNXaXRoLCAyIH0gfSwKLSAgICAgICAgeyAic3RyaW5nIiwgeyBjcmVhdGVGdW5jdGlvblN0
cmluZywgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7ICJzdHJpbmctbGVuZ3RoIiwgeyBj
cmVhdGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAotICAgICAgICB7
ICJzdWJzdHJpbmciLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3RyaW5nLCBJbnRlcnZhbCgyLCAzKSB9
IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1hZnRlciIsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJp
bmdBZnRlciwgMiB9IH0sCi0gICAgICAgIHsgInN1YnN0cmluZy1iZWZvcmUiLCB7IGNyZWF0ZUZ1
bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKLSAgICAgICAgeyAic3VtIiwgeyBjcmVhdGVG
dW5jdGlvblN1bSwgMSB9IH0sCi0gICAgICAgIHsgInRyYW5zbGF0ZSIsIHsgY3JlYXRlRnVuY3Rp
b25UcmFuc2xhdGUsIDMgfSB9LAotICAgICAgICB7ICJ0cnVlIiwgeyBjcmVhdGVGdW5jdGlvblRy
dWUsIDAgfSB9LAorICAgICAgICB7ICJib29sZWFuIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uQm9vbGVh
biwgMSB9IH0sCisgICAgICAgIHsgImNlaWxpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25DZWlsaW5n
LCAxIH0gfSwKKyAgICAgICAgeyAiY29uY2F0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uQ29uY2F0LCBJ
bnRlcnZhbCgyLCBJbnRlcnZhbDo6SW5mKSB9IH0sCisgICAgICAgIHsgImNvbnRhaW5zIl9zLCB7
IGNyZWF0ZUZ1bmN0aW9uQ29udGFpbnMsIDIgfSB9LAorICAgICAgICB7ICJjb3VudCJfcywgeyBj
cmVhdGVGdW5jdGlvbkNvdW50LCAxIH0gfSwKKyAgICAgICAgeyAiZmFsc2UiX3MsIHsgY3JlYXRl
RnVuY3Rpb25GYWxzZSwgMCB9IH0sCisgICAgICAgIHsgImZsb29yIl9zLCB7IGNyZWF0ZUZ1bmN0
aW9uRmxvb3IsIDEgfSB9LAorICAgICAgICB7ICJpZCJfcywgeyBjcmVhdGVGdW5jdGlvbklkLCAx
IH0gfSwKKyAgICAgICAgeyAibGFuZyJfcywgeyBjcmVhdGVGdW5jdGlvbkxhbmcsIDEgfSB9LAor
ICAgICAgICB7ICJsYXN0Il9zLCB7IGNyZWF0ZUZ1bmN0aW9uTGFzdCwgMCB9IH0sCisgICAgICAg
IHsgImxvY2FsLW5hbWUiX3MsIHsgY3JlYXRlRnVuY3Rpb25Mb2NhbE5hbWUsIEludGVydmFsKDAs
IDEpIH0gfSwKKyAgICAgICAgeyAibmFtZSJfcywgeyBjcmVhdGVGdW5jdGlvbk5hbWUsIEludGVy
dmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAibmFtZXNwYWNlLXVyaSJfcywgeyBjcmVhdGVGdW5j
dGlvbk5hbWVzcGFjZVVSSSwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJub3JtYWxp
emUtc3BhY2UiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3JtYWxpemVTcGFjZSwgSW50ZXJ2YWwoMCwg
MSkgfSB9LAorICAgICAgICB7ICJub3QiX3MsIHsgY3JlYXRlRnVuY3Rpb25Ob3QsIDEgfSB9LAor
ICAgICAgICB7ICJudW1iZXIiX3MsIHsgY3JlYXRlRnVuY3Rpb25OdW1iZXIsIEludGVydmFsKDAs
IDEpIH0gfSwKKyAgICAgICAgeyAicG9zaXRpb24iX3MsIHsgY3JlYXRlRnVuY3Rpb25Qb3NpdGlv
biwgMCB9IH0sCisgICAgICAgIHsgInJvdW5kIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uUm91bmQsIDEg
fSB9LAorICAgICAgICB7ICJzdGFydHMtd2l0aCJfcywgeyBjcmVhdGVGdW5jdGlvblN0YXJ0c1dp
dGgsIDIgfSB9LAorICAgICAgICB7ICJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdHJpbmcs
IEludGVydmFsKDAsIDEpIH0gfSwKKyAgICAgICAgeyAic3RyaW5nLWxlbmd0aCJfcywgeyBjcmVh
dGVGdW5jdGlvblN0cmluZ0xlbmd0aCwgSW50ZXJ2YWwoMCwgMSkgfSB9LAorICAgICAgICB7ICJz
dWJzdHJpbmciX3MsIHsgY3JlYXRlRnVuY3Rpb25TdWJzdHJpbmcsIEludGVydmFsKDIsIDMpIH0g
fSwKKyAgICAgICAgeyAic3Vic3RyaW5nLWFmdGVyIl9zLCB7IGNyZWF0ZUZ1bmN0aW9uU3Vic3Ry
aW5nQWZ0ZXIsIDIgfSB9LAorICAgICAgICB7ICJzdWJzdHJpbmctYmVmb3JlIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uU3Vic3RyaW5nQmVmb3JlLCAyIH0gfSwKKyAgICAgICAgeyAic3VtIl9zLCB7IGNy
ZWF0ZUZ1bmN0aW9uU3VtLCAxIH0gfSwKKyAgICAgICAgeyAidHJhbnNsYXRlIl9zLCB7IGNyZWF0
ZUZ1bmN0aW9uVHJhbnNsYXRlLCAzIH0gfSwKKyAgICAgICAgeyAidHJ1ZSJfcywgeyBjcmVhdGVG
dW5jdGlvblRydWUsIDAgfSB9LAogICAgIH07CiAKLSAgICBIYXNoTWFwPFN0cmluZywgRnVuY3Rp
b25NYXBWYWx1ZT4gbWFwOworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxTdHJpbmcsIEZ1bmN0aW9uTWFwVmFsdWU+IG1hcDsKICAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uIDogZnVuY3Rpb25zKQogICAgICAgICBtYXAuYWRkKGZ1bmN0aW9uLm5hbWUsIGZ1bmN0aW9u
LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAK
aW5kZXggZGZiNDlmOGIyZmUyNTNlM2FkZWJkNmI2MTY1NGQwYzc5MGQ1ODk1MC4uODlmN2VkOWQ3
MjJmMmE5ZmMxNTljOWRkNWJlZmZkMDNjMTM3ZmFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJz
ZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiWFBhdGhQYXRoLmgiCiAjaW5jbHVk
ZSAiWFBhdGhTdGVwLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JvYmluSG9vZEhhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC03NiwyOCArNzcsMjggQEAg
c3RhdGljIFhNTENhdCBjaGFyQ2F0KFVDaGFyIGNoYXJhY3RlcikKICAgICByZXR1cm4gTm90UGFy
dE9mTmFtZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBjcmVhdGVB
eGlzTmFtZXNNYXAoKQorc3RhdGljIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFz
aE1hcDxTdHJpbmcsIFN0ZXA6OkF4aXM+IGNyZWF0ZUF4aXNOYW1lc01hcCgpCiB7CiAgICAgc3Ry
dWN0IEF4aXNOYW1lIHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgQVNDSUlM
aXRlcmFsIG5hbWU7CiAgICAgICAgIFN0ZXA6OkF4aXMgYXhpczsKICAgICB9OwogICAgIGNvbnN0
IEF4aXNOYW1lIGF4aXNOYW1lTGlzdFtdID0gewotICAgICAgICB7ICJhbmNlc3RvciIsIFN0ZXA6
OkFuY2VzdG9yQXhpcyB9LAotICAgICAgICB7ICJhbmNlc3Rvci1vci1zZWxmIiwgU3RlcDo6QW5j
ZXN0b3JPclNlbGZBeGlzIH0sCi0gICAgICAgIHsgImF0dHJpYnV0ZSIsIFN0ZXA6OkF0dHJpYnV0
ZUF4aXMgfSwKLSAgICAgICAgeyAiY2hpbGQiLCBTdGVwOjpDaGlsZEF4aXMgfSwKLSAgICAgICAg
eyAiZGVzY2VuZGFudCIsIFN0ZXA6OkRlc2NlbmRhbnRBeGlzIH0sCi0gICAgICAgIHsgImRlc2Nl
bmRhbnQtb3Itc2VsZiIsIFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzIH0sCi0gICAgICAgIHsg
ImZvbGxvd2luZyIsIFN0ZXA6OkZvbGxvd2luZ0F4aXMgfSwKLSAgICAgICAgeyAiZm9sbG93aW5n
LXNpYmxpbmciLCBTdGVwOjpGb2xsb3dpbmdTaWJsaW5nQXhpcyB9LAotICAgICAgICB7ICJuYW1l
c3BhY2UiLCBTdGVwOjpOYW1lc3BhY2VBeGlzIH0sCi0gICAgICAgIHsgInBhcmVudCIsIFN0ZXA6
OlBhcmVudEF4aXMgfSwKLSAgICAgICAgeyAicHJlY2VkaW5nIiwgU3RlcDo6UHJlY2VkaW5nQXhp
cyB9LAotICAgICAgICB7ICJwcmVjZWRpbmctc2libGluZyIsIFN0ZXA6OlByZWNlZGluZ1NpYmxp
bmdBeGlzIH0sCi0gICAgICAgIHsgInNlbGYiLCBTdGVwOjpTZWxmQXhpcyB9CisgICAgICAgIHsg
ImFuY2VzdG9yIl9zLCBTdGVwOjpBbmNlc3RvckF4aXMgfSwKKyAgICAgICAgeyAiYW5jZXN0b3It
b3Itc2VsZiJfcywgU3RlcDo6QW5jZXN0b3JPclNlbGZBeGlzIH0sCisgICAgICAgIHsgImF0dHJp
YnV0ZSJfcywgU3RlcDo6QXR0cmlidXRlQXhpcyB9LAorICAgICAgICB7ICJjaGlsZCJfcywgU3Rl
cDo6Q2hpbGRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQiX3MsIFN0ZXA6OkRlc2NlbmRh
bnRBeGlzIH0sCisgICAgICAgIHsgImRlc2NlbmRhbnQtb3Itc2VsZiJfcywgU3RlcDo6RGVzY2Vu
ZGFudE9yU2VsZkF4aXMgfSwKKyAgICAgICAgeyAiZm9sbG93aW5nIl9zLCBTdGVwOjpGb2xsb3dp
bmdBeGlzIH0sCisgICAgICAgIHsgImZvbGxvd2luZy1zaWJsaW5nIl9zLCBTdGVwOjpGb2xsb3dp
bmdTaWJsaW5nQXhpcyB9LAorICAgICAgICB7ICJuYW1lc3BhY2UiX3MsIFN0ZXA6Ok5hbWVzcGFj
ZUF4aXMgfSwKKyAgICAgICAgeyAicGFyZW50Il9zLCBTdGVwOjpQYXJlbnRBeGlzIH0sCisgICAg
ICAgIHsgInByZWNlZGluZyJfcywgU3RlcDo6UHJlY2VkaW5nQXhpcyB9LAorICAgICAgICB7ICJw
cmVjZWRpbmctc2libGluZyJfcywgU3RlcDo6UHJlY2VkaW5nU2libGluZ0F4aXMgfSwKKyAgICAg
ICAgeyAic2VsZiJfcywgU3RlcDo6U2VsZkF4aXMgfQogICAgIH07Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFN0ZXA6OkF4aXM+IG1hcDsKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9v
ZEhhc2hNYXA8U3RyaW5nLCBTdGVwOjpBeGlzPiBtYXA7CiAgICAgZm9yIChhdXRvJiBheGlzTmFt
ZSA6IGF4aXNOYW1lTGlzdCkKICAgICAgICAgbWFwLmFkZChheGlzTmFtZS5uYW1lLCBheGlzTmFt
ZS5heGlzKTsKICAgICByZXR1cm4gbWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggODdiZDI4ZWI0OGFlMjQwMDY1NThl
OGZmOGVhYWY3ZTY3ZjE4NDQxMS4uNmRjNjMxYjc4OTM0ODMyNjRlMGM1YTA5YzdlYmJlM2RjZGNl
N2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuY3BwCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdn
cmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUg
PHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
QEAgLTI3NCwxOCArMjc0LDE4IEBAIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMSgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5zVGFi
bGVTY2hlbWFWMUFsdGVybmF0ZSgpCiB7Ci0gICAgcmV0dXJuICJDUkVBVEUgVEFCTEUgXCJPYnNl
cnZlZERvbWFpbnNcIiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0cmFibGVE
b21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNlZW4gUkVB
TCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdF
UiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50
IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBO
VUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVH
RVIgTk9UIE5VTEwsaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJTlRFR0VS
IE5PVCBOVUxMKSI7CisgICAgcmV0dXJuICJDUkVBVEUgVEFCTEUgXCJPYnNlcnZlZERvbWFpbnNc
IiAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVYVCBO
T1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwg
aGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBOT1QgTlVMTCwg
aXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9U
IE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5VTEws
aXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCBJTlRFR0VSIE5PVCBOVUxMKSJf
czsKIH0KIAogc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRVbmF0dHJpYnV0
ZWRDb2x1bW5zKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0gbWFrZU5ldmVy
RGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCIsICJkZXN0aW5h
dGlvblNpdGVEb21haW5JRCIsICJzb3VyY2VJRCIsICJ0aW1lT2ZBZENsaWNrIiwgInRva2VuIiwg
InNpZ25hdHVyZSIsICJrZXlJRCIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1ucyA9
IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWluSUQi
X3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAidGltZU9mQWRD
bGljayJfcywgInRva2VuIl9zLCAic2lnbmF0dXJlIl9zLCAia2V5SUQiX3MgfSk7CiAgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBFeHBlY3RlZENvbHVtbnMmIGV4
cGVjdGVkQXR0cmlidXRlZENvbHVtbnMoKQogewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVt
bnMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFp
bklEIiwgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIiwgInNvdXJjZUlEIiwgImF0dHJpYnV0aW9u
VHJpZ2dlckRhdGEiLCAicHJpb3JpdHkiLCAidGltZU9mQWRDbGljayIsICJlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSIsICJ0b2tlbiIsICJzaWduYXR1cmUiLCAia2V5SUQiLCAiZWFybGllc3RU
aW1lVG9TZW5kVG9EZXN0aW5hdGlvbiIgfSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywgImVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJr
ZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CiAgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7CiB9CiAKQEAgLTI5NCw5ICsyOTQsOSBAQCBzdGF0aWMgYm9vbCBu
ZWVkc05ld0NyZWF0ZVRhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgc2NoZW1hKQogICAgIHJldHVy
biBzY2hlbWEuY29udGFpbnMoIlJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zIik7CiB9CiAKLXN0
YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3JlYXRlVGFibGVRdWVyaWVzKCkK
K3N0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBjcmVhdGVUYWJsZVF1ZXJpZXMoKQogewotICAgIHN0YXRpYyBhdXRvIGNy
ZWF0ZVRhYmxlUXVlcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiB7CisgICAgc3RhdGljIGF1dG8gY3JlYXRlVGFibGVRdWVyaWVzID0gbWFrZU5ldmVyRGVz
dHJveWVkKE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gewogICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIGNyZWF0ZU9ic2VydmVkRG9t
YWlufSwKICAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBjcmVhdGVUb3BMZXZlbERvbWFp
bnN9LAogICAgICAgICB7ICJTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMiX3MsIGNy
ZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc30sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBlNDhlODMyNmEyYTczNWVmOTI0Zjg3
MzcyZGM3ODYzOWQ4MjM5MzMwLi5iYjJiM2M0NjAxYzBlMzg3MmFjYzFhZTMzYzk1ODdjNDgyM2Jm
ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAg
LTQ5Nyw4ICs0OTcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+PiA6IFZlY3RvckFyZ3VtZW50
Q29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHsgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxI
YXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRy
YWl0c0FyZz4+IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hB
cmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiBIYXNoTWFwVHlwZTsKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZywgdHlwZW5hbWUg
SGFzaFRhYmxlVHJhaXRzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxIYXNoTWFwPEtleUFyZywgTWFw
cGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZywgSGFzaFRhYmxl
VHJhaXRzPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFy
ZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4gSGFzaE1h
cFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
SGFzaE1hcFR5cGUmIGhhc2hNYXApCiAgICAgewpAQCAtNTE0LDYgKzUxNCw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0
eXBlbmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
ICAgIEhhc2hNYXBUeXBlIGhhc2hNYXA7CisgICAgICAgIGhhc2hNYXAucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBo
YXNoTWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAg
ICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTUxLDggKzU1Miw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpCiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBBcmd1bWVudENvZGVy
PEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+PiB7Ci0gICAgdHlwZWRlZiBI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnLCB0eXBlbmFtZSBIYXNoVGFibGVUcmFpdHM+IHN0cnVjdCBBcmd1bWVudENvZGVyPEhhc2hT
ZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJsZVRyYWl0cz4+IHsKKyAg
ICB0eXBlZGVmIEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIEhhc2hUYWJs
ZVRyYWl0cz4gSGFzaFNldFR5cGU7CiAKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewpAQCAtNTc5LDYgKzU4
MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5h
bWUgS2V5VHJhaXRzQXJnPiBzdHJ1Y3QgQXJndW1lCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgIEhhc2hTZXRUeXBlIGhhc2hTZXQ7CisgICAgICAgIGhhc2hTZXQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShoYXNoU2V0U2l6ZSk7CiAgICAgICAgIGZvciAodWludDY0
X3QgaSA9IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxL
ZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQppbmRleCA0
OTJiOWM2NDQyYmUxNTRkNTFkZGY3NjlmNTkzZTgwODRlYjFiZDZkLi45YTRkNzgwOWU2M2U0ODUy
NDI1ZjIwNTdjODYwMTMyYTU4YTVhNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9EZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbQpAQCAtMzIsNiArMzIsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9WZXJzaW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5o
PgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUm9iaW5Ib29k
SGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KICNpbXBvcnQgPHd0Zi9Tb2Z0TGlu
a2luZy5oPgogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAtNTgsNyArNTksNyBAQCBPcHRp
b25hbDxWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBnZXRBcHBCb3VuZERvbWFp
bnNUZXN0aW5nKGNvbnN0IFN0cgogICAgIGlmIChidW5kbGVJRC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9tYWluTGlz
dCA9IG1ha2VOZXZlckRlc3Ryb3llZChIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPj4geworICAgIHN0YXRpYyBhdXRvIGFwcEJvdW5kRG9tYWluTGlzdCA9
IG1ha2VOZXZlckRlc3Ryb3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiB7CiAgICAgICAg
IHsiaW5BcHBCcm93c2VyUHJpdmFjeVRlc3RJZGVudGlmaWVyIl9zLCBWZWN0b3I8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+IHsgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tl
ZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZygiMTI3LjAuMC4xIikgfX0sCiAgICAg
fSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKaW5k
ZXggYmJjZWU0MTY5OWMwZDVmODRkYzZjNzkyYWI2NDRjNmZkZDgxZDBkNy4uY2U1NmY5Y2Q0NjI4
NjA5NGM2ZTQxNDEwZWViYjRmOTQ5ZDdlZmU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNTdG9yZS5jcHAKQEAgLTUyLDEzICs1MiwxMyBAQCB2b2lkIFdlYlByZWZl
cmVuY2VzU3RvcmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKIGJvb2wg
V2ViUHJlZmVyZW5jZXNTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2ViUHJl
ZmVyZW5jZXNTdG9yZSYgcmVzdWx0KQogewotICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBW
YWx1ZT4+IHZhbHVlczsKKyAgICBPcHRpb25hbDxWYWx1ZU1hcD4gdmFsdWVzOwogICAgIGRlY29k
ZXIgPj4gdmFsdWVzOwogICAgIGlmICghdmFsdWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmVzdWx0Lm1fdmFsdWVzID0gV1RGTW92ZSgqdmFsdWVzKTsKIAotICAgIE9wdGlvbmFsPEhh
c2hNYXA8U3RyaW5nLCBWYWx1ZT4+IG92ZXJyaWRkZW5EZWZhdWx0czsKKyAgICBPcHRpb25hbDxW
YWx1ZU1hcD4gb3ZlcnJpZGRlbkRlZmF1bHRzOwogICAgIGRlY29kZXIgPj4gb3ZlcnJpZGRlbkRl
ZmF1bHRzOwogICAgIGlmICghb3ZlcnJpZGRlbkRlZmF1bHRzKQogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKaW5kZXggYzVm
ZTNmYjNmYmI2MjE2ZGViZTAwMDlkZjU1MGM1Y2E2ZDZmMzYwOC4uNGEzZDhmMmE0ZTRjZjBjNzgx
ZTk3MjJmNzc5N2RmMzYxMDZjODFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZl
cmVuY2VzU3RvcmUuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRGVjb2Rlci5oIgog
I2luY2x1ZGUgIkVuY29kZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02Niw3ICs2Niw3IEBAIHN0
cnVjdCBXZWJQcmVmZXJlbmNlc1N0b3JlIHsKIAogICAgIHVzaW5nIFZhbHVlID0gVmFyaWFudDxT
dHJpbmcsIGJvb2wsIHVpbnQzMl90LCBkb3VibGU+OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmFsdWU+IFZhbHVlTWFwOworICAgIHVzaW5nIFZhbHVlTWFwID0gTWVtb3J5Q29tcGFj
dFJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBWYWx1ZT47CiAgICAgVmFsdWVNYXAgbV92YWx1ZXM7
CiAgICAgVmFsdWVNYXAgbV9vdmVycmlkZGVuRGVmYXVsdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggMmYw
YWFiNWE5Yjc4MjQzZTk3NDk0Yjc1NDE0NDFjYTRlMTNmM2I4Ny4uMDQxNzQ4YjkwNDRhZDI1MzY4
OGVhYWNlYmFmOWE4ZmU2ZTdmMDBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTY1LDkgKzY1LDkgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHVuZXhwZWN0ZWRBY3Rpdml0
eUR1cmF0aW9uID0gMTBfczsKIAotY29uc3QgSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9jZXNzUHJv
eHk6OnBsYXRmb3JtUGF0aHNXaXRoQXNzdW1lZFJlYWRBY2Nlc3MoKQorY29uc3QgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6
cGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzcygpCiB7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFj
Y2VzcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U3RyaW5nPiB7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxTdHJpbmc+PiBw
bGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxT
dHJpbmc+IHsKICAgICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFw
cGxlLldlYkNvcmUiXS5yZXNvdXJjZVBhdGguc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aCwKICAg
ICAgICAgW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJd
LnJlc291cmNlUGF0aC5zdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoCiAgICAgfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1YTY2MjAyMjkxMzA0
YmJkNzM3ZTExNmI4ODdhYzRmOTk2M2FmMTRjLi41OWQ4MDBhZmI0M2I3NDUwMzliMGI0ODMzNTFl
NDg0MjNjNTNhMzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKQEAgLTE2MjQsOSArMTYyNCw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1cGRhdGVC
YWNrZ3JvdW5kUmVzcG9uc2l2ZW5lc3NUaW1lcigpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1jb25zdCBIYXNoU2V0PFN0cmluZz4mIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1QYXRoc1dp
dGhBc3N1bWVkUmVhZEFjY2VzcygpCitjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8U3RyaW5nPiYgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybVBhdGhzV2l0aEFz
c3VtZWRSZWFkQWNjZXNzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxT
dHJpbmc+PiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8U3Ry
aW5nPj4gcGxhdGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKICAgICByZXR1cm4gcGxh
dGZvcm1QYXRoc1dpdGhBc3N1bWVkUmVhZEFjY2VzczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAppbmRleCBlZjA1YjQxNDcwY2VlNWZlY2FmNzVj
YmZiZTM2ZTFmMDhiZmQ3ZTY1Li5hNjhhOWMxNTFiM2MyZDAxN2JmMGQ3ZmQwYWI0ZjZhYjMyODQ5
OTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtNTks
NiArNTksNyBAQAogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUm9iaW5Ib29k
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCiAjaWYgSEFWRShWSVNJ
QklMSVRZX1BST1BBR0FUSU9OX1ZJRVcpCkBAIC00NzgsNyArNDc5LDcgQEAgY2xhc3MgV2ViUHJv
Y2Vzc1Byb3h5IDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94eSwgcHVibGljIFJlc3BvbnNp
dmVuZXNzVGltZXIKICAgICBib29sIHBsYXRmb3JtSXNCZWluZ0RlYnVnZ2VkKCkgY29uc3Q7CiAg
ICAgYm9vbCBzaG91bGRBbGxvd05vblZhbGlkSW5qZWN0ZWRDb2RlKCkgY29uc3Q7CiAKLSAgICBz
dGF0aWMgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFk
QWNjZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaFNldDxTdHJpbmc+JiBwbGF0Zm9ybVBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzKCk7
CiAKICAgICBSZXNwb25zaXZlbmVzc1RpbWVyJiByZXNwb25zaXZlbmVzc1RpbWVyKCkgeyByZXR1
cm4gbV9yZXNwb25zaXZlbmVzc1RpbWVyOyB9CiAgICAgdm9pZCB1cGRhdGVCYWNrZ3JvdW5kUmVz
cG9uc2l2ZW5lc3NUaW1lcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGNiM2VmZmE4ZjY2ZDNkNWFkYjE2ODc1NDJjMjVhMjA4YzdhYjA2NWQu
LjU1NTgzZjg2MTU4ZjZlMDAyZjBiZjM1MDBlMDJhMzY2ODNjZDRkZGQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAy
MS0wNC0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtX
VEZdIEludHJvZHVjZSBSb2Jpbkhvb2RIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IEZp
bCBQaXpsby4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9w
ZXJhdG9yLmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5nVXNpbmdFbnN1cmUpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6dGVzdE1vdmluZ1VzaW5nQWRkKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Omdl
bmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MD4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTW92ZU9ubHkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9S
b2Jpbkhvb2RIYXNoTWFwLmNwcDogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmJ1Y2tldEZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpaZXJvSGFzaDo6aGFzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPYmplY3RXaXRoUmVm
TG9nZ2VyOjpPYmplY3RXaXRoUmVmTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRl
c3RNb3ZpbmdVc2luZ0Vuc3VyZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0TW92aW5n
VXNpbmdBZGQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6VGVzdE9iamVj
dFdpdGhDdXN0b21EZXN0cnVjdG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RPYmpl
Y3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcjo6flRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1Y3Rvcik6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHA6
IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwLgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2FwYWNpdHlGb3JTaXplKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnRlc3RJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Z2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyZWZPYnNlcnZlcjo6cmVmKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkRlcmVmT2JzZXJ2ZXI6OmRlcmVmKToKKwogMjAyMS0wNC0w
MSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJFR1JFU1NJT04ocjI3MjQ2OSkgUXVpY2tMb29rIHByZXZpZXdzIGJyb2tlbiBpbiBzb21lIHBs
YWNlcyBvbiBtYWNPUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggOWM1NWU0ZjZl
YWE4ZTViYWFhZGExMjI1NjYyMDU5ZWRmNjI1Y2QwZS4uM2Y3Y2ZmZGUyOTFjMmQ4MmRkMTI1MWJi
ZWM4YzgxMzExMjdmYmVmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC03OSw2
ICs3OSw4IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvUmVmQ291bnRlci5j
cHAKICAgICBUZXN0cy9XVEYvUmVmTG9nZ2VyLmNwcAogICAgIFRlc3RzL1dURi9SZWZQdHIuY3Bw
CisgICAgVGVzdHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCisgICAgVGVzdHMvV1RGL1JvYmlu
SG9vZEhhc2hTZXQuY3BwCiAgICAgVGVzdHMvV1RGL1J1bkxvb3AuY3BwCiAgICAgVGVzdHMvV1RG
L1NIQTEuY3BwCiAgICAgVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNw
cApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzOGUxNWZiNDYwYmFlYTE4MWUxZWJlNmIyYmE0
Y2FiMTlhYTJjMDJhLi41NmVjZWZlZTYxZDZkMmM2NTM3ODQwOGJmZTdlZWY5NDU2NjgyZTkyIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTExMyw2ICsxMTEzLDggQEAKIAkJRTMyNUM5MDcy
M0UzODcwMjAwQkM3RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyNUM5MDYyM0UzODcwMjAwQkM3
RDNCIC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lm1tICovOyB9OwogCQlFMzJCNTQ5MjIyODEw
QUM0MDA4QUQ3MDIgLyogUGFja2VkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMkI1NDkxMjI4MTBBQzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICov
OyB9OwogCQlFMzRBNkQxOTI0MTJERTM5MDAxMkFCNkUgLyogR3JhbnRBY2Nlc3NUb1ByZWZlcmVu
Y2VzU2VydmljZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNEE2RDE4MjQxMkRFMzkwMDEyQUI2RSAvKiBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNT
ZXJ2aWNlLm1tICovOyB9OworCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29k
SGFzaFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5jcHAgKi87IH07
CisJCUUzNTVBNjMyMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNTVBNjMxMjYxNTcx
OEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RIYXNoTWFwLmNwcCAqLzsgfTsKIAkJRTM1QjkwODIyM0Y2
MEREMDAwMDAxMUZGIC8qIExvY2FsaXplZERldmljZU1vZGVsLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QjkwODEyM0Y2MEREMDAwMDAxMUZGIC8q
IExvY2FsaXplZERldmljZU1vZGVsLm1tICovOyB9OwogCQlFMzVGQzdCMjIyQjgyQTczMDBGMzJG
OTggLyogSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RkM3QjEyMkI4MkE2RDAwRjMyRjk4IC8qIEpTTG9j
a1Rha2VzV2ViVGhyZWFkTG9jay5tbSAqLzsgfTsKIAkJRTM3M0Q3OTExRjJDRjM1MjAwQzZGQUFG
IC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM5NTNGOTUxRjJDRjMyMTAwQTc2QTJFIC8qIFNpZ25hbHMuY3BwICovOyB9OwpAQCAt
MjkwMyw2ICsyOTA1LDggQEAKIAkJRTMyNUM5MDYyM0UzODcwMjAwQkM3RDNCIC8qIFBpY3R1cmVJ
blBpY3R1cmVTdXBwb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGljdHVyZUluUGljdHVy
ZVN1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkI1NDkxMjI4MTBB
QzAwMDhBRDcwMiAvKiBQYWNrZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFja2VkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0QTZEMTgyNDEyREUzOTAwMTJBQjZFIC8q
IEdyYW50QWNjZXNzVG9QcmVmZXJlbmNlc1NlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBHcmFudEFjY2Vzc1RvUHJlZmVyZW5jZXNTZXJ2aWNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSb2Jpbkhvb2RIYXNoU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1NUE2MzEyNjE1NzE4RjAwMUMx
MTI5IC8qIFJvYmluSG9vZEhhc2hNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUm9iaW5Ib29kSGFzaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUI5MDgxMjNGNjBERDAwMDAwMTFGRiAvKiBMb2NhbGl6ZWREZXZpY2VNb2RlbC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsaXplZERldmljZU1vZGVsLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzVGQzdCMTIyQjgyQTZEMDBGMzJGOTggLyogSlNMb2NrVGFr
ZXNXZWJUaHJlYWRMb2NrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gSlNMb2NrVGFrZXNXZWJUaHJlYWRMb2NrLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzg4ODg3MDIwQzkwOTgxMDBFNjMyQkMgLyogV29ya2VyUG9vbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJQb29sLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDgsNiArNDQxMiw4IEBACiAJCQkJNDQyQkJGNjgxQzkxQ0FE
OTAwMTcwODdGIC8qIFJlZkxvZ2dlci5jcHAgKi8sCiAJCQkJOTNBNDI3QUQxODBEQTYwRjAwQ0Qy
NEQ3IC8qIFJlZkxvZ2dlci5oICovLAogCQkJCTkzQTQyN0E4MTgwRDlCMDcwMENEMjRENyAvKiBS
ZWZQdHIuY3BwICovLAorCQkJCUUzNTVBNjMxMjYxNTcxOEYwMDFDMTEyOSAvKiBSb2Jpbkhvb2RI
YXNoTWFwLmNwcCAqLywKKwkJCQlFMzU1QTYyRjI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29k
SGFzaFNldC5jcHAgKi8sCiAJCQkJRTRDOUFCQzcxQjNEQjE3MTAwNDBBOTg3IC8qIFJ1bkxvb3Au
Y3BwICovLAogCQkJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMUEzNTI0QUMxRDYzQTRGQjAwMzE3MjlCIC8qIFNj
b3BlLmNwcCAqLywKQEAgLTUxNTUsNiArNTE2MSw4IEBACiAJCQkJN0M4M0RGMTYxRDBBNTkwQzAw
RkVCQ0YzIC8qIFJlZlB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NEFDOEJDNjIxRDAyNDVB
MDBDQUZCMzQgLyogUmV0YWluUHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjI0MUQw
QTU5MEMwMEZFQkNGMyAvKiBSZXRhaW5QdHIubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMzU1QTYz
MjI2MTU3MThGMDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaE1hcC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMzU1QTYzMDI2MTU3MTc0MDAxQzExMjkgLyogUm9iaW5Ib29kSGFzaFNldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzgzREYwNTFEMEE1OTBDMDBGRUJDRjMgLyogUnVuTG9vcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYyNjFEMEE1OTBDMDBGRUJDRjMgLyogU2F0dXJhdGVk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNTI0QUUxRDYz
QTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmggYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaApp
bmRleCA0NWNjZmE0MDMwZTEyYWQzYzVhNmRjMzc0YzE1YmQ5ZWQzMTA5MDJhLi5mZGZhYmVlYzRi
ZjRlMGQwN2NmODUwYzQyMmM0MTI0YjQ3ZTQ3MWJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9EZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaApAQCAtNzcs
NiArNzcsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxEZWxldGVkQWRkcmVzc09m
T3BlcmF0b3I+IHsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hh
c2hJblZhbHVlID0gdHJ1ZTsgLy8gVGhpcyBpcyBub3QgY29ycmVjdCwgYnV0IGZvciBkZWJ1Z2dp
bmcgb2YgUm9iaW5Ib29kSGFzaFNldC4KIH07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHAKaW5kZXggYWFiZTdkZGFjMjc3M2I2Zjc5NmUyMDQwYjMyMmJlNTll
MWYwNzg2ZC4uYzg0M2U3YzU1YWIxMzQzZTgwMmFiNzg0NzA0N2Y5Zjg2YTUyNDdiOCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKQEAgLTY2OCwxNCArNjY4LDE0
IEBAIGNsYXNzIE9iamVjdFdpdGhSZWZMb2dnZXIgewogfTsKIAogCi12b2lkIHRlc3RNb3ZpbmdV
c2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lkIHRlc3RNb3Zp
bmdVc2luZ0Vuc3VyZShSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1hcDsKICAgICAK
ICAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBtYWtlVW5pcXVlPE9iamVjdFdpdGhSZWZM
b2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0pOwogfQogCi12b2lkIHRlc3RNb3ZpbmdVc2luZ0Fk
ZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKK3N0YXRpYyB2b2lkIHRlc3RNb3ZpbmdVc2luZ0Fk
ZChSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKIHsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6
OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4+IG1hcDsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAppbmRleCBlN2NmYmNjYWQxZDQ1OWNkNjRjYTIxMjg4
OGE3YTk2MmNkNWUzMDMxLi5iMGM2NDkyMjZlZWEzYmNmMzFlMGIwMjg2NDg1N2ViZDY2NGI3ZDQ5
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcApAQCAtNzAsMTEg
KzcwLDExIEBAIHZvaWQgdGVzdEluaXRpYWxDYXBhY2l0eSgpCiAgICAgRVhQRUNUX0dUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5KCkpLCBpbml0aWFsQ2FwYWNpdHkpOwog
fQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2b2lkIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBU
b1NpemUoKTsKLXRlbXBsYXRlPD4gdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplPDA+
KCkKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRlVGVzdENhcGFj
aXR5VXBUb1NpemUoKTsKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNp
dHlVcFRvU2l6ZTwwPigpCiB7CiB9Ci10ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiB2b2lkIGdlbmVy
YXRlVGVzdENhcGFjaXR5VXBUb1NpemUoKQordGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gaW5saW5l
IHZvaWQgZ2VuZXJhdGVUZXN0Q2FwYWNpdHlVcFRvU2l6ZSgpCiB7CiAgICAgZ2VuZXJhdGVUZXN0
Q2FwYWNpdHlVcFRvU2l6ZTxzaXplIC0gMT4oKTsKICAgICB0ZXN0SW5pdGlhbENhcGFjaXR5PHNp
emU+KCk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Nb3ZlT25s
eS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTW92ZU9ubHkuaAppbmRleCBkOWMy
MDZjMjhlYzQ5ZGNjZDBjZjlkNDA3YWQzNzJmYWMwMjQ0YmFkLi5hMTBjNWU4Zjg2NTFlN2RhNjQy
ZmM0ZmRmMDFkMmUwZThmNTM1NzA0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Nb3ZlT25seS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01v
dmVPbmx5LmgKQEAgLTk0LDcgKzk0LDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
TW92ZU9ubHk+IHsKICAgICAgICAgcmV0dXJuIGEgPT0gYjsKICAgICB9CiAKLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOyAvLyBUaGlz
IGlzIG5vdCBjb3JyZWN0LCBidXQgZm9yIGRlYnVnZ2luZyBvZiBSb2Jpbkhvb2RIYXNoU2V0Lgog
fTsKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1JvYmluSG9vZEhhc2hNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3N2Y3YjQ4YjU4ZmI4YTI5
OTJmZjRmYzUzYjViZTQwMzQyOGEwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoTWFwLmNwcApAQCAtMCwwICsxLDEyNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ291bnRl
cnMuaCIKKyNpbmNsdWRlICJEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJN
b3ZlT25seS5oIgorI2luY2x1ZGUgIlJlZkxvZ2dlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKyNp
bmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jp
bkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorc3RydWN0IFJvYmluSG9vZEhhc2ggOiBwdWJsaWMgRGVmYXVsdEhhc2g8VD4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNIYXNoSW5WYWx1ZSA9IHRydWU7Cit9OworCit0
eXBlZGVmIFdURjo6TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwg
aW50LCBSb2Jpbkhvb2RIYXNoPGludD4+IEludEhhc2hNYXA7CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIEhhc2hUYWJsZUl0ZXJhdG9yQ29tcGFyaXNvbikKK3sKKyAgICBJbnRIYXNoTWFw
IG1hcDsKKyAgICBtYXAuYWRkKDEsIDIpOworICAgIEFTU0VSVF9UUlVFKG1hcC5iZWdpbigpICE9
IG1hcC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5iZWdpbigpID09IG1hcC5lbmQoKSk7
CisKKyAgICBJbnRIYXNoTWFwOjpjb25zdF9pdGVyYXRvciBiZWdpbiA9IG1hcC5iZWdpbigpOwor
ICAgIEFTU0VSVF9UUlVFKGJlZ2luID09IG1hcC5iZWdpbigpKTsKKyAgICBBU1NFUlRfVFJVRSht
YXAuYmVnaW4oKSA9PSBiZWdpbik7CisgICAgQVNTRVJUX1RSVUUoYmVnaW4gIT0gbWFwLmVuZCgp
KTsKKyAgICBBU1NFUlRfVFJVRShtYXAuZW5kKCkgIT0gYmVnaW4pOworICAgIEFTU0VSVF9GQUxT
RShiZWdpbiAhPSBtYXAuYmVnaW4oKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1hcC5iZWdpbigpICE9
IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4gPT0gbWFwLmVuZCgpKTsKKyAgICBBU1NF
UlRfRkFMU0UobWFwLmVuZCgpID09IGJlZ2luKTsKK30KKworc3RydWN0IFRlc3REb3VibGVIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxkb3VibGU+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
dW1UYWJsZVNpemUgPSA4OworfTsKKwordHlwZWRlZiBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8ZG91YmxlLCBpbnQ2NF90LCBSb2Jpbkhvb2RIYXNoPGRvdWJsZT4sIFRl
c3REb3VibGVIYXNoVHJhaXRzPiBEb3VibGVIYXNoTWFwOworCitzdGF0aWMgaW50IGJ1Y2tldEZv
cktleShkb3VibGUga2V5KQoreworICAgIHJldHVybiBEZWZhdWx0SGFzaDxkb3VibGU+OjpoYXNo
KGtleSkgJiAoVGVzdERvdWJsZUhhc2hUcmFpdHM6Om1pbmltdW1UYWJsZVNpemUgLSAxKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpZ1RhYmxlSGFzaFRyYWl0cyA6IHB1Ymxp
YyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUg
PSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTw0MDk2Pjo6dmFsdWU7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWmVyb0hhc2ggOiBwdWJsaWMgSW50SGFzaDxUPiB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzSGFzaEluVmFsdWUgPSB0cnVlOworfTsKKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgRG91YmxlSGFzaENvbGxpc2lvbnMpCit7CisgICAgLy8gVGhlICJj
bG9iYmVyIiBrZXkgaGVyZSBpcyBvbmUgdGhhdCBlbmRzIHVwIHN0ZWFsaW5nIHRoZSBidWNrZXQg
dGhhdCB0aGUgLTAga2V5CisgICAgLy8gb3JpZ2luYWxseSB3YW50cyB0byBiZSBpbi4gVGhpcyBt
YWtlcyB0aGUgMCBhbmQgLTAga2V5cyBjb2xsaWRlIGFuZCB0aGUgdGVzdCB0aGVuCisgICAgLy8g
ZmFpbHMgdW5sZXNzIHRoZSBGbG9hdEhhc2g6OmVxdWFscygpIGltcGxlbWVudGF0aW9uIGNhbiBk
aXN0aW5ndWlzaCB0aGVtLgorICAgIGNvbnN0IGRvdWJsZSBjbG9iYmVyS2V5ID0gNjsKKyAgICBj
b25zdCBkb3VibGUgemVyb0tleSA9IDA7CisgICAgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0tl
eSA9IC16ZXJvS2V5OworCisgICAgRG91YmxlSGFzaE1hcCBtYXA7CisgICAgbWFwLmFkZChjbG9i
YmVyS2V5LCAxKTsKKyAgICBtYXAuYWRkKHplcm9LZXksIDIpOworICAgIG1hcC5hZGQobmVnYXRp
dmVaZXJvS2V5LCAzKTsKKworICAgIEFTU0VSVF9FUShidWNrZXRGb3JLZXkoY2xvYmJlcktleSks
IGJ1Y2tldEZvcktleShuZWdhdGl2ZVplcm9LZXkpKTsKKyAgICBBU1NFUlRfRVEobWFwLmdldChj
bG9iYmVyS2V5KSwgMSk7CisgICAgQVNTRVJUX0VRKG1hcC5nZXQoemVyb0tleSksIDIpOworICAg
IEFTU0VSVF9FUShtYXAuZ2V0KG5lZ2F0aXZlWmVyb0tleSksIDMpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBNb3ZlT25seVZhbHVlcykKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIE1vdmVPbmx5LCBSb2Jpbkhvb2RIYXNo
PHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAg
bW92ZU9ubHlWYWx1ZXMuc2V0KGkgKyAxLCBXVEZNb3ZlKG1vdmVPbmx5KSk7CisgICAgfQorCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0g
bW92ZU9ubHlWYWx1ZXMuZmluZChpICsgMSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShpdCA9PSBt
b3ZlT25seVZhbHVlcy5lbmQoKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCA1MDsgKytpKQorICAgICAgICBBU1NFUlRfRVEobW92ZU9ubHlWYWx1ZXMudGFrZShpICsgMSku
dmFsdWUoKSwgaSArIDEpOworCisgICAgZm9yIChzaXplX3QgaSA9IDUwOyBpIDwgMTAwOyArK2kp
CisgICAgICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5VmFsdWVzLnJlbW92ZShpICsgMSkpOworCisg
ICAgQVNTRVJUX1RSVUUobW92ZU9ubHlWYWx1ZXMuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgTW92ZU9ubHlLZXlzKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxNb3ZlT25seSwgdW5zaWduZWQ+IG1vdmVPbmx5S2V5czsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgTW92ZU9u
bHkgbW92ZU9ubHkoaSArIDEpOworICAgICAgICBtb3ZlT25seUtleXMuc2V0KFdURk1vdmUobW92
ZU9ubHkpLCBpICsgMSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7
ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbW92ZU9ubHlLZXlzLmZpbmQoTW92ZU9ubHkoaSAr
IDEpKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5S2V5cy5lbmQoKSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNT
RVJUX0ZBTFNFKG1vdmVPbmx5S2V5cy5hZGQoTW92ZU9ubHkoaSArIDEpLCBpICsgMSkuaXNOZXdF
bnRyeSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBB
U1NFUlRfVFJVRShtb3ZlT25seUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAxKSkpOworCisgICAg
QVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLmlzRW1wdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmlu
SG9vZEhhc2hNYXAsIEluaXRpYWxpemVyTGlzdCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6c3RyaW5nLCBSb2Jpbkhvb2RIYXNo
PHVuc2lnbmVkPj4gbWFwID0geworICAgICAgICB7IDEsICJvbmUiIH0sCisgICAgICAgIHsgMiwg
InR3byIgfSwKKyAgICAgICAgeyAzLCAidGhyZWUiIH0sCisgICAgICAgIHsgNCwgImZvdXIiIH0s
CisgICAgfTsKKworICAgIEVYUEVDVF9FUSg0dSwgbWFwLnNpemUoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoIm9uZSIsIG1hcC5nZXQoMSkpOworICAgIEVYUEVDVF9FUSgidHdvIiwgbWFwLmdldCgyKSk7
CisgICAgRVhQRUNUX0VRKCJ0aHJlZSIsIG1hcC5nZXQoMykpOworICAgIEVYUEVDVF9FUSgiZm91
ciIsIG1hcC5nZXQoNCkpOworICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygpLCBtYXAuZ2V0KDUp
KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRWZmaWNpZW50R2V0dGVyKQorewor
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgQ29w
eU1vdmVDb3VudGVyLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAgIG1hcC5zZXQo
MSwgQ29weU1vdmVDb3VudGVyKCkpOworCisgICAgeworICAgICAgICBDb3B5TW92ZUNvdW50ZXI6
OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAgICAgbWFwLmdldCgxKTsKKyAgICAgICAgRVhQRUNU
X0VRKDBVLCBDb3B5TW92ZUNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDFVLCBDb3B5TW92ZUNvdW50ZXI6OmNvcHlDb3VudCk7CisgICAgICAgIEVYUEVDVF9F
USgwVSwgQ29weU1vdmVDb3VudGVyOjptb3ZlQ291bnQpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgQ29weU1vdmVDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgICAgIG1hcC5nZXQo
Mik7CisgICAgICAgIEVYUEVDVF9FUSgxVSwgQ29weU1vdmVDb3VudGVyOjpjb25zdHJ1Y3Rpb25D
b3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgwVSwgQ29weU1vdmVDb3VudGVyOjpjb3B5Q291bnQp
OworICAgICAgICBFWFBFQ1RfRVEoMVUsIENvcHlNb3ZlQ291bnRlcjo6bW92ZUNvdW50KTsKKyAg
ICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleSkKK3sKKyAg
ICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1
bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisgICAgYXV0
byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7
CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAg
RVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNv
dW50KTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1
LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKwor
VEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0N1c3RvbURlbGV0ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIGNvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXJTY29wZTsKKyAgICBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPjo6VGVzdGluZ1Njb3BlIGRlbGV0ZXJDb3VudGVyU2NvcGU7CisK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVf
cHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiwgaW50LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPj4+PiBtYXA7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlciwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcj4+IHVuaXF1ZVB0cihuZXcgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcigp
LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpKTsKKyAgICBt
YXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0
cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwor
CisgICAgRVhQRUNUX0VRKDB1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3Ry
dWN0aW9uQ291bnQpOworCisgICAgRVhQRUNUX0VRKDF1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KCkpOworfQorCitURVNUKFdURl9S
b2Jpbkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfRmluZFVzaW5nUmF3UG9pbnRlcikKK3sKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVfcHRy
PGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4+IG1hcDsKKwor
ICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8aW50
Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBtYXAuYWRkKFdURk1v
dmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBhdXRvIGl0ID0gbWFwLmZpbmQocHRyKTsKKyAgICBB
U1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIsIGl0LT5rZXku
Z2V0KCkpOworICAgIEVYUEVDVF9FUSgyLCBpdC0+dmFsdWUpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7Cisg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHN0ZDo6dW5pcXVlX3B0
cjxpbnQ+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPGludD4+PiBtYXA7CisK
KyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGlu
dD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgbWFwLmFkZChXVEZN
b3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNUX0VRKHRydWUsIG1hcC5jb250YWlucyhw
dHIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X0dldFVz
aW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8c3RkOjp1bmlxdWVfcHRyPGludD4sIGludCwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1
ZV9wdHI8aW50Pj4+IG1hcDsKKworICAgIGF1dG8gdW5pcXVlUHRyID0gbWFrZVVuaXF1ZVdpdGhv
dXRGYXN0TWFsbG9jQ2hlY2s8aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQo
KTsKKyAgICBtYXAuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMik7CisKKyAgICBpbnQgdmFsdWUg
PSBtYXAuZ2V0KHB0cik7CisgICAgRVhQRUNUX0VRKDIsIHZhbHVlKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRlcikKK3sK
KyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8c3RkOjp1bmlxdWVf
cHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+Pj4gbWFwOworCisgICAg
YXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+
KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdl
dCgpOworICAgIG1hcC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpLCAyKTsKKworICAgIEVYUEVDVF9F
USgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rp
b25Db3VudCk7CisKKyAgICBib29sIHJlc3VsdCA9IG1hcC5yZW1vdmUocHRyKTsKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgcmVzdWx0KTsKKworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1Qo
V1RGX1JvYmluSG9vZEhhc2hNYXAsIFVuaXF1ZVB0cktleV9UYWtlVXNpbmdSYXdQb2ludGVyKQor
eworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsK
KworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxzdGQ6OnVuaXF1
ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxz
dGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+PiBtYXA7CisKKyAg
ICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKiBwdHIgPSB1bmlxdWVQdHIu
Z2V0KCk7CisgICAgbWFwLmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDIpOworCisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7
CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVj
dGlvbkNvdW50KTsKKworICAgIGludCByZXN1bHQgPSBtYXAudGFrZShwdHIpOworICAgIEVYUEVD
VF9FUSgyLCByZXN1bHQpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgVW5pcXVlUmVmVmFsdWUpCit7CisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgVW5pcXVlUmVmPGludD4sIFJvYmluSG9vZEhh
c2g8aW50Pj4gbWFwOworICAgIFVuaXF1ZVJlZjxpbnQ+IGZpdmUgPSBtYWtlVW5pcXVlUmVmV2l0
aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIG1hcC5hZGQoNSwgV1RGTW92ZShmaXZl
KSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNvbnRhaW5zKDUpKTsKKyAgICBpbnQqIHNob3VsZEJl
Rml2ZSA9IG1hcC5nZXQoNSk7CisgICAgRVhQRUNUX0VRKCpzaG91bGRCZUZpdmUsIDUpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IHRha2VuRml2ZSA9IG1hcC50YWtlKDUpOworICAgIEVYUEVD
VF9FUSgqdGFrZW5GaXZlLCA1KTsKKyAgICBtYXAuZW5zdXJlKDYsIFtdIHsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrPGludD4oNik7CisgICAgfSk7
CisgICAgRVhQRUNUX0ZBTFNFKG1hcC5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX1RSVUUobWFw
LmNvbnRhaW5zKDYpKTsKKyAgICBmb3IgKFVuaXF1ZVJlZjxpbnQ+JiBhIDogbWFwLnZhbHVlcygp
KQorICAgICAgICBFWFBFQ1RfRVEoYS5nZXQoKSwgNik7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9v
ZEhhc2hNYXAsIFJlZlB0cktleV9BZGQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9n
Z2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAg
ICBtYXAuYWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZFVzaW5nUmVsZWFzZSkKK3sKKyAg
ICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBS
b2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxS
ZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShwdHIpLCAwKTsKKyAg
ICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRV
c2luZ01vdmUpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJl
ZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKwor
ICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuYWRkKFdURk1v
dmUocHRyKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFw
LCBSZWZQdHJLZXlfQWRkVXNpbmdSYXcpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9n
Z2VyPj4+IG1hcDsKKworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAg
ICBtYXAuYWRkKHB0ci5nZXQoKSwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYo
YSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30K
KworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X0FkZEtleUFscmVhZHlQcmVz
ZW50KQoreworICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmlu
SG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICB7CisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5hZGQocHRyLCAwKTsKKyAgICB9CisK
KyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigp
LmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuYWRkKHB0cjIsIDApOworICAgICAgICBFWFBF
Q1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIG1hcC5j
bGVhcigpOworCisgICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJlZlB0cktleV9BZGRVc2lu
Z1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEi
KTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8
UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOwor
CisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAu
YWRkKHB0ciwgMCk7CisgICAgfQorCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRl
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmUHRy
PFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmFkZChX
VEZNb3ZlKHB0cjIpLCAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIEVYUEVDVF9TVFJF
USgiZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jp
bkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfQWRkVXNpbmdNb3ZlS2V5QWxyZWFkeVByZXNlbnQpCit7
CisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFz
aDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLmFkZChwdHIsIDApOworICAgIH0KKworICAgIEVY
UEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5hZGQoV1RGTW92ZShwdHIyKSwgMCk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX1NU
UkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgbWFw
LmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldCkK
K3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwg
aW50LCBSb2Jpbkhvb2RIYXNoPFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJl
ZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBS
ZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxv
Z2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxv
Z2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAg
ICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgi
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworCitURVNUKFdU
Rl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdNb3ZlKQoreworICAgIHsKKyAg
ICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dl
cj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChXVEZNb3ZlKHB0ciksIDApOworICAgIH0KKwor
ICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmUHRyS2V5X1NldFVzaW5nUmF3
KQoreworICAgIHsKKyAgICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAg
TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+
LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAg
UmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIuZ2V0KCksIDAp
OworICAgIH0KKworICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBkZXJl
ZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhh
c2hNYXAsIFJlZlB0cktleV9TZXRLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICB7CisgICAgICAg
IERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaE1hcDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNo
PFJlZlB0cjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0
cigmYSk7CisgICAgICAgIG1hcC5zZXQocHRyLCAwKTsKKworICAgICAgICBFWFBFQ1RfU1RSRVEo
InJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtYXAuc2V0KHB0cjIsIDEpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtYXAuZ2V0KHB0
ci5nZXQoKSkpOworICAgICAgICB9CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIH0KKworICAgIEVYUEVDVF9TVFJF
USgiZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZWZQdHJLZXlfU2V0VXNpbmdSZWxlYXNlS2V5QWxyZWFk
eVByZXNlbnQpCit7CisgICAgeworICAgICAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFJl
ZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQdHI8UmVmTG9nZ2VyPj4+IG1hcDsKKwor
ICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBtYXAuc2V0KHB0ciwg
MCk7CisKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgICAgICB7CisgICAgICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBw
dHIyKCZhKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLnNldChXVEZNb3ZlKHB0
cjIpLCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoMSwgbWFwLmdldChwdHIuZ2V0KCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1h
cCwgUmVmUHRyS2V5X1NldFVzaW5nTW92ZUtleUFscmVhZHlQcmVzZW50KQoreworICAgIHsKKyAg
ICAgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9v
ZEhhc2g8UmVmUHRyPFJlZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dl
cj4gcHRyKCZhKTsKKyAgICAgICAgbWFwLnNldChwdHIsIDApOworCisgICAgICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICAgICAg
eworICAgICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1hcC5zZXQoV1RGTW92ZShwdHIyKSwgMSk7CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgRVhQRUNUX0VR
KDEsIG1hcC5nZXQocHRyLmdldCgpKSk7CisgICAgICAgIH0KKworICAgICAgICBFWFBFQ1RfU1RS
RVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgfQorCisg
ICAgRVhQRUNUX1NUUkVRKCJkZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIo
KSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZSkKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBS
b2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtYXAuZW5zdXJlKDEsIFtdIHsgcmV0dXJuIDE7IH0pOworICAgICAgICBFWFBFQ1RfRVEo
MXUsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFk
ZFJlc3VsdC5pdGVyYXRvci0+a2V5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdDIgPSBtYXAuZW5zdXJlKDEsIFtdIHsg
cmV0dXJuIDI7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsIGFkZFJlc3VsdDIuaXRlcmF0b3It
PnZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5rZXkp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9Nb3ZlT25seVZhbHVlcykKK3sK
KyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIE1v
dmVPbmx5LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbW92ZU9ubHlWYWx1ZXM7CisgICAgewor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1vdmVPbmx5VmFsdWVzLmVuc3VyZSgxLCBbXSB7IHJl
dHVybiBNb3ZlT25seSgxKTsgfSk7CisgICAgICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQu
aXRlcmF0b3ItPmtleSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQyID0gbW92ZU9ubHlWYWx1ZXMuZW5zdXJlKDEsIFtd
IHsgcmV0dXJuIE1vdmVPbmx5KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1
bHQyLml0ZXJhdG9yLT52YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRS
ZXN1bHQyLml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5p
c05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3Vy
ZV9VbmlxdWVQb2ludGVyKQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkPiwgUm9iaW5Ib29kSGFz
aDx1bnNpZ25lZD4+IG1hcDsKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmVu
c3VyZSgxLCBbXSB7IHJldHVybiBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazx1bnNp
Z25lZD4oMSk7IH0pOworICAgICAgICBFWFBFQ1RfRVEoMXUsICptYXAuZ2V0KDEpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDF1LCAqYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxdSwgYWRkUmVzdWx0Lml0ZXJhdG9yLT5rZXkpOworICAgICAgICBFWFBF
Q1RfVFJVRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0MiA9
IG1hcC5lbnN1cmUoMSwgW10geyByZXR1cm4gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hl
Y2s8dW5zaWduZWQ+KDIpOyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCAqbWFwLmdldCgxKSk7
CisgICAgICAgIEVYUEVDVF9FUSgxdSwgKmFkZFJlc3VsdDIuaXRlcmF0b3ItPnZhbHVlLmdldCgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDF1LCBhZGRSZXN1bHQyLml0ZXJhdG9yLT5rZXkpOworICAg
ICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0Mi5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1RF
U1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIEVuc3VyZV9SZWZQdHIpCit7CisgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVk
Pj4gbWFwOworCisgICAgbWFwLmVuc3VyZSgxLCBbJl0geyByZXR1cm4gUmVmUHRyPFJlZkxvZ2dl
cj4oJmEpOyB9KTsKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBSZWZQdHI8UmVmTG9nZ2Vy
PigmYSk7IH0pOworICAgIEVYUEVDVF9TVFJFUSgiIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfU1RSRVEoImRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKK30KKworY2xhc3MgT2JqZWN0V2l0aFJlZkxvZ2dlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqZWN0V2l0aFJlZkxvZ2dl
cihSZWY8UmVmTG9nZ2VyPiYmIGxvZ2dlcikKKyAgICAgICAgOiBtX2xvZ2dlcihXVEZNb3ZlKGxv
Z2dlcikpCisgICAgeworICAgIH0KKworICAgIFJlZjxSZWZMb2dnZXI+IG1fbG9nZ2VyOworfTsK
KworCitzdGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdFbnN1cmUoUmVmPFJlZkxvZ2dlcj4mJiBs
b2dnZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVu
c2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhh
c2g8dW5zaWduZWQ+PiBtYXA7CisKKyAgICBtYXAuZW5zdXJlKDEsIFsmXSB7IHJldHVybiBtYWtl
VW5pcXVlPE9iamVjdFdpdGhSZWZMb2dnZXI+KFdURk1vdmUobG9nZ2VyKSk7IH0pOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0TW92aW5nVXNpbmdBZGQoUmVmPFJlZkxvZ2dlcj4mJiBsb2dnZXIpCit7
CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCBz
dGQ6OnVuaXF1ZV9wdHI8T2JqZWN0V2l0aFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8dW5zaWdu
ZWQ+PiBtYXA7CisKKyAgICBhdXRvJiBzbG90ID0gbWFwLmFkZCgxLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CisgICAgc2xvdCA9IG1ha2VVbmlxdWU8T2JqZWN0V2l0aFJlZkxvZ2dlcj4oV1RG
TW92ZShsb2dnZXIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgRW5zdXJlX0xh
bWJkYXNDYXB0dXJpbmdCeVJlZmVyZW5jZSkKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRSZWZM
b2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHRl
c3RNb3ZpbmdVc2luZ0Vuc3VyZShXVEZNb3ZlKHJlZikpOworCisgICAgICAgIEVYUEVDVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgICAgICBSZWY8UmVmTG9n
Z2VyPiByZWYoYSk7CisgICAgICAgIHRlc3RNb3ZpbmdVc2luZ0FkZChXVEZNb3ZlKHJlZikpOwor
CisgICAgICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKKyAgICB9Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgVmFsdWVJ
c0Rlc3RydWN0ZWRPblJlbW92ZSkKK3sKKyAgICBzdHJ1Y3QgRGVzdHJ1Y3Rvck9ic2VydmVyIHsK
KyAgICAgICAgRGVzdHJ1Y3Rvck9ic2VydmVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIERlc3Ry
dWN0b3JPYnNlcnZlcihib29sKiBkZXN0cnVjdGVkKQorICAgICAgICAgICAgOiBkZXN0cnVjdGVk
KGRlc3RydWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5EZXN0cnVjdG9y
T2JzZXJ2ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGVzdHJ1Y3RlZCkKKyAgICAg
ICAgICAgICAgICAqZGVzdHJ1Y3RlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBEZXN0
cnVjdG9yT2JzZXJ2ZXIoRGVzdHJ1Y3Rvck9ic2VydmVyJiYgb3RoZXIpCisgICAgICAgICAgICA6
IGRlc3RydWN0ZWQob3RoZXIuZGVzdHJ1Y3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgb3Ro
ZXIuZGVzdHJ1Y3RlZCA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBEZXN0cnVjdG9y
T2JzZXJ2ZXImIG9wZXJhdG9yPShEZXN0cnVjdG9yT2JzZXJ2ZXImJiBvdGhlcikKKyAgICAgICAg
eworICAgICAgICAgICAgZGVzdHJ1Y3RlZCA9IG90aGVyLmRlc3RydWN0ZWQ7CisgICAgICAgICAg
ICBvdGhlci5kZXN0cnVjdGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wqIGRlc3RydWN0ZWQgeyBudWxscHRyIH07CisgICAg
fTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIERl
c3RydWN0b3JPYnNlcnZlciwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAgICBib29sIGRl
c3RydWN0ZWQgPSBmYWxzZTsKKyAgICBtYXAuYWRkKDUsIERlc3RydWN0b3JPYnNlcnZlciB7ICZk
ZXN0cnVjdGVkIH0pOworCisgICAgRVhQRUNUX0ZBTFNFKGRlc3RydWN0ZWQpOworCisgICAgYm9v
bCByZW1vdmVSZXN1bHQgPSBtYXAucmVtb3ZlKDUpOworCisgICAgRVhQRUNUX1RSVUUocmVtb3Zl
UmVzdWx0KTsKKyAgICBFWFBFQ1RfVFJVRShkZXN0cnVjdGVkKTsKK30KKworc3RydWN0IERlcmVm
T2JzZXJ2ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBORVZF
Ul9JTkxJTkUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAg
TkVWRVJfSU5MSU5FIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgLS1jb3VudDsKKyAgICAg
ICAgb2JzZXJ2ZWRCdWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICB9CisgICAgdW5z
aWduZWQgY291bnQgeyAxIH07CisgICAgY29uc3QgUmVmUHRyPERlcmVmT2JzZXJ2ZXI+KiBidWNr
ZXRBZGRyZXNzIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IERlcmVmT2JzZXJ2ZXIqIG9ic2VydmVk
QnVja2V0IHsgbnVsbHB0ciB9OworfTsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVm
UHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCit7CisgICAgYXV0byBvYnNlcnZlciA9IG1ha2VVbmlx
dWU8RGVyZWZPYnNlcnZlcj4oKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5I
b29kSGFzaE1hcDxSZWZQdHI8RGVyZWZPYnNlcnZlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWZQ
dHI8RGVyZWZPYnNlcnZlcj4+PiBtYXA7CisgICAgbWFwLmFkZChhZG9wdFJlZihvYnNlcnZlci5n
ZXQoKSksIDUpOworCisgICAgYXV0byBpdGVyYXRvciA9IG1hcC5maW5kKG9ic2VydmVyLmdldCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShpdGVyYXRvciAhPSBtYXAuZW5kKCkpOworCisgICAgb2JzZXJ2
ZXItPmJ1Y2tldEFkZHJlc3MgPSAmaXRlcmF0b3ItPmtleTsKKworICAgIEVYUEVDVF9UUlVFKG9i
c2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShtYXAu
cmVtb3ZlKG9ic2VydmVyLmdldCgpKSk7CisKKyAgICAvLyBJdCBpZiBmaW5lIHRvIGVpdGhlciBs
ZWF2ZSB0aGUgb2xkIHZhbHVlIGludGFjdCBhdCBkZWxldGlvbiBvciBhbHJlYWR5IHNldCBpdCB0
byB0aGUgZGVsZXRlZAorICAgIC8vIHZhbHVlLgorICAgIC8vIEEgemVybyB3b3VsZCBiZSBhIGlu
Y29ycmVjdCBvdXRjb21lIGFzIGl0IHdvdWxkIG1lYW4gd2UgbnVsbGVkIHRoZSBidWNrZXQgYmVm
b3JlIGFuIG9wYXF1ZQorICAgIC8vIGNhbGwuCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9i
c2VydmVkQnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8IG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tl
dCA9PSBSZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkpOworICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmX0tleSkKK3sKKyAgICB7CisgICAgICAgIFJlZkxvZ2dl
ciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBt
YXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKFdU
Rk1vdmUocmVmKSwgMSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1h
cDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFw
OworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZihhKTsKKyAgICAgICAgbWFwLnNldChXVEZN
b3ZlKHJlZiksIDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEo
ImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8
UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsK
KworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWZBKGEpOworICAgICAgICBtYXAuYWRkKFdURk1v
dmUocmVmQSksIDEpOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEyKGEpOworICAgICAg
ICBtYXAuc2V0KFdURk1vdmUocmVmQTIpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSByZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNv
bXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2VyPiwgaW50LCBSb2Jp
bkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+
IHJlZihhKTsKKyAgICAgICAgbWFwLmVuc3VyZShXVEZNb3ZlKHJlZiksIFtdKCkgeworICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0pOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hNYXA8UmVmPFJlZkxvZ2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVm
TG9nZ2VyPj4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAg
IG1hcC5hZGQoV1RGTW92ZShyZWYpLCAxKTsKKworICAgICAgICBhdXRvIGl0ID0gbWFwLmZpbmQo
JmEpOworICAgICAgICBBU1NFUlRfVFJVRShpdCAhPSBtYXAuZW5kKCkpOworCisgICAgICAgIEFT
U0VSVF9FUShpdC0+a2V5LnB0cigpLCAmYSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUs
IDEpOworICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VM
b2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKwor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPFJlZkxv
Z2dlcj4sIGludCwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IG1hcDsKKworICAgICAg
ICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5hZGQoV1RGTW92ZShyZWYpLCAx
KTsKKworICAgICAgICBtYXAucmVtb3ZlKCZhKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAg
ICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoTWFwPFJlZjxSZWZMb2dnZXI+LCBpbnQsIFJvYmluSG9vZEhhc2g8UmVmPFJl
ZkxvZ2dlcj4+PiBtYXA7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAg
ICBtYXAuYWRkKFdURk1vdmUocmVmKSwgMSk7CisKKyAgICAgICAgaW50IGkgPSBtYXAudGFrZSgm
YSk7CisgICAgICAgIEFTU0VSVF9FUShpLCAxKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEo
InJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAg
ICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxSZWY8UmVmTG9nZ2Vy
PiwgaW50LCBSb2Jpbkhvb2RIYXNoPFJlZjxSZWZMb2dnZXI+Pj4gbWFwOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlc2UgUmVmTG9nZ2VyIG9iamVjdHMgbGVhay4gTm8gYmlnIGRlYWwgZm9yIGEgdGVzdCBJIGd1
ZXNzLgorICAgICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmID0gYWRvcHRSZWYoKm5ldyBSZWZM
b2dnZXIoImEiKSk7CisgICAgICAgICAgICBhdXRvKiBwb2ludGVyID0gcmVmLnB0cigpOworICAg
ICAgICAgICAgbWFwLmFkZChXVEZNb3ZlKHJlZiksIGkgKyAxKTsKKyAgICAgICAgICAgIEFTU0VS
VF9UUlVFKG1hcC5jb250YWlucyhwb2ludGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBB
U1NFUlRfU1RSRVEoImRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVm
KGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEp
IGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChX
VEZfUm9iaW5Ib29kSGFzaE1hcCwgUmVmX1ZhbHVlKQoreworICAgIHsKKyAgICAgICAgUmVmTG9n
Z2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAg
ICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdURk1vdmUo
cmVmKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwor
CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJl
ZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVm
TG9nZ2VyPiByZWYoYSk7CisgICAgICAgIG1hcC5zZXQoMSwgV1RGTW92ZShyZWYpKTsKKyAgICB9
CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisgICAgICAgIFJlZkxv
Z2dlciBiKCJiIik7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPGludCwgUmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisg
ICAgICAgIFJlZjxSZWZMb2dnZXI+IHJlZkEoYSk7CisgICAgICAgIG1hcC5hZGQoMSwgV1RGTW92
ZShyZWZBKSk7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmQihiKTsKKyAgICAgICAgbWFw
LnNldCgxLCBXVEZNb3ZlKHJlZkIpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1RSRVEoInJlZihh
KSByZWYoYikgZGVyZWYoYSkgZGVyZWYoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RI
YXNoPGludD4+IG1hcDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAg
IG1hcC5hZGQoMSwgV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFHZXQgPSBtYXAuZ2V0
KDEpOworICAgICAgICBBU1NFUlRfRVEoYUdldCwgJmEpOworICAgIH0KKworICAgIEFTU0VSVF9T
VFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsK
KyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVm
PFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIGF1dG8gZW1w
dHlHZXQgPSBtYXAuZ2V0KDEpOworICAgICAgICBBU1NFUlRfVFJVRShlbXB0eUdldCA9PSBudWxs
cHRyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CisKKyAgICAg
ICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgUmVmPFJlZkxv
Z2dlcj4sIFJvYmluSG9vZEhhc2g8aW50Pj4gbWFwOworCisgICAgICAgIFJlZjxSZWZMb2dnZXI+
IHJlZihhKTsKKyAgICAgICAgbWFwLmFkZCgxLCBXVEZNb3ZlKHJlZikpOworCisgICAgICAgIGF1
dG8gYU91dCA9IG1hcC50YWtlKDEpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxi
b29sPihhT3V0KSk7CisgICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7CisKKyAg
ICAgICAgYXV0byBlbXB0eVRha2UgPSBtYXAudGFrZSgxKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNF
KHN0YXRpY19jYXN0PGJvb2w+KGVtcHR5VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAg
UmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxpbnQ+PiBtYXA7
CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBtYXAuYWRkKDEsIFdU
Rk1vdmUocmVmKSk7CisgICAgICAgIG1hcC5yZW1vdmUoMSk7CisgICAgfQorCisgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAg
eworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxpbnQsIFJlZjxSZWZMb2dnZXI+LCBSb2Jpbkhvb2RIYXNo
PGludD4+IG1hcDsKKworICAgICAgICBtYXAuZW5zdXJlKDEsIFsmXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICAgICAgcmV0dXJuIHJlZjsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8aW50LCBSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29k
SGFzaDxpbnQ+PiBtYXA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFr
LiBObyBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVmTG9n
Z2VyPiByZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAgIG1h
cC5hZGQoaSArIDEsIFdURk1vdmUocmVmKSk7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShtYXAu
Y29udGFpbnMoaSArIDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9TVFJFUSgi
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoTWFwLCBEZWxldGVkQWRkcmVzc09mT3BlcmF0b3IpCit7CisgICAgTWVtb3J5Q29tcGFjdExv
b2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPGludCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLCBS
b2Jpbkhvb2RIYXNoPGludD4+IG1hcDE7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1hcDEudmFs
dWVzKCkpCisgICAgICAgICh2b2lkKXZhbHVlOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNo
TWFwLCBSZWZNYXBwZWRUb05vblplcm9FbXB0eVZhbHVlKQoreworICAgIGNsYXNzIFZhbHVlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlKCkgPSBkZWZhdWx0OworICAgICAgICBWYWx1ZShW
YWx1ZSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0
OworICAgICAgICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVlJiYpID0gZGVmYXVsdDsKKworICAgICAg
ICBWYWx1ZShpbnQzMl90IGYpCisgICAgICAgICAgICA6IG1fZmllbGQoZikKKyAgICAgICAgeyB9
CisKKyAgICAgICAgaW50MzJfdCBmaWVsZCgpIHsgcmV0dXJuIG1fZmllbGQ7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIGludDMyX3QgbV9maWVsZCB7IDB4YmFkYmVlZiB9OworICAgIH07CisK
KyAgICBjbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKKyAgICAgICAgS2V5KCkg
PSBkZWZhdWx0OworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KTsgfQorICAgIH07CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFXVEY6Okhhc2hUcmFpdHM8VmFsdWU+OjplbXB0eVZhbHVlSXNaZXJvLCAiIik7CisKKyAg
ICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmPEtleT4sIFZhbHVl
LCBSb2Jpbkhvb2RIYXNoPFJlZjxLZXk+Pj4gbWFwOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PEtleT4sIGludDMyX3Q+PiB2ZWN0b3JNYXA7CisKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCAxNjA7ICsraSkgeworICAgICAgICBSZWY8S2V5PiBrZXkgPSBLZXk6OmNyZWF0ZSgpOworICAg
ICAgICBtYXAuYWRkKFJlZjxLZXk+KGtleS5nZXQoKSksIFZhbHVlIHsgaSB9KTsKKyAgICAgICAg
dmVjdG9yTWFwLmFwcGVuZCh7IFdURk1vdmUoa2V5KSwgaSB9KTsKKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8mIHBhaXIgOiB2ZWN0b3JNYXApCisgICAgICAgIEFTU0VSVF9FUShwYWlyLnNlY29uZCwg
bWFwLmdldChwYWlyLmZpcnN0KS5maWVsZCgpKTsKKworICAgIGZvciAoYXV0byYgcGFpciA6IHZl
Y3Rvck1hcCkKKyAgICAgICAgQVNTRVJUX1RSVUUobWFwLnJlbW92ZShwYWlyLmZpcnN0KSk7Cit9
CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJhbmRvbV9FbXB0eSkKK3sKKyAgICBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBS
b2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gbWFwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAucmFu
ZG9tKCk7CisgICAgQVNTRVJUX0VRKHJlc3VsdCwgbWFwLmVuZCgpKTsKK30KKworVEVTVChXVEZf
Um9iaW5Ib29kSGFzaE1hcCwgUmFuZG9tX1dyYXBBcm91bmQpCit7CisgICAgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgWmVyb0hhc2g8
dW5zaWduZWQ+LCBCaWdUYWJsZUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7CisgICAgbWFwLmFk
ZCgxLCAxKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbWFwLnJhbmRvbSgpOworICAgIEFTU0VSVF9F
UShyZXN1bHQsIG1hcC5iZWdpbigpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwg
UmFuZG9tX0lzRXZlbmx5RGlzdHJpYnV0ZWQpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNp
Z25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBtYXA7
CisgICAgbWFwLmFkZCgwLCAwKTsKKyAgICBtYXAuYWRkKDEsIDEpOworCisgICAgdW5zaWduZWQg
emVyb3MgPSAwOworICAgIHVuc2lnbmVkIG9uZXMgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOwor
ICAgICAgICBpZiAoIWl0LT52YWx1ZSkKKyAgICAgICAgICAgICsremVyb3M7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgICAgICAgICAg
KytvbmVzOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX0VRKHplcm9zICsgb25lcywg
MTAwMHUpOworICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgQVNTRVJUX0xFKG9uZXMs
IDYwMHUpOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoTWFwLCBSZXNlcnZlSW5pdGlhbENh
cGFjaXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbWFwOworICAgIEVYUEVDVF9FUSgwdSwgbWFwLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDB1LCBtYXAuY2FwYWNpdHkoKSk7CisKKyAgICBtYXAucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXplKCkpOworICAgIEVYUEVD
VF9FUSgxNjM4NHUsIG1hcC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
OTk5OTsgKytpKQorICAgICAgICBtYXAuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpLCBtYWtlU3Ry
aW5nKCJiYXIiLCBpKSk7CisgICAgRVhQRUNUX0VRKDk5OTl1LCBtYXAuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMTYzODR1LCBtYXAuY2FwYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUobWFwLmNv
bnRhaW5zKCJmb28zIl9zdHIpKTsKKyAgICBFWFBFQ1RfU1RSRVEoImJhcjMiLCBtYXAuZ2V0KCJm
b28zIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OTk5
OyArK2kpCisgICAgICAgIG1hcC5hZGQobWFrZVN0cmluZygiZXhjZXNzIiwgaSksIG1ha2VTdHJp
bmcoImJheiIsIGkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUgKyA5OTk5dSwgbWFwLnNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDMyNzY4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1vdmUobWFr
ZVN0cmluZygiZm9vIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoOTk5OXUsIG1hcC5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUSgzMjc2OHUsIG1hcC5jYXBhY2l0eSgpKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ImJhejMiLCBtYXAuZ2V0KCJleGNlc3MzIl9zdHIpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKG1hcC5yZW1v
dmUobWFrZVN0cmluZygiZXhjZXNzIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcC5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSg4dSwgbWFwLmNhcGFjaXR5KCkpOworCisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAyOworICAg
IG1hcDIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5OTk5KTsKKyAgICBFWFBFQ1RfRkFMU0UobWFw
Mi5yZW1vdmUoImZvbzEiX3MpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjAwMDsgKytp
KQorICAgICAgICBtYXAyLmFkZChtYWtlU3RyaW5nKCJmb28iLCBpKSwgbWFrZVN0cmluZygiYmFy
IiwgaSkpOworICAgIEVYUEVDVF9FUSgyMDAwdSwgbWFwMi5zaXplKCkpOworICAgIEVYUEVDVF9F
USgxNjM4NHUsIG1hcDIuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIw
MDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUobWFwMi5yZW1vdmUobWFrZVN0cmluZygiZm9v
IiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1hcDIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEo
OHUsIG1hcDIuY2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hNYXAsIFJh
bmRvbV9Jc0V2ZW5seURpc3RyaWJ1dGVkQWZ0ZXJSZW1vdmUpCit7CisgICAgZm9yIChzaXplX3Qg
dGFibGVTaXplID0gMjsgdGFibGVTaXplIDw9IDIgKiA2OyArK3RhYmxlU2l6ZSkgeyAvLyBPdXIg
aGFzaCB0YWJsZXMgc2hyaW5rIGF0IGEgbG9hZCBmYWN0b3Igb2YgMSAvIDYuCisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPj4gbWFwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxl
U2l6ZTsgKytpKQorICAgICAgICAgICAgbWFwLmFkZChpLCBpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDI7IGkgPCB0YWJsZVNpemU7ICsraSkKKyAgICAgICAgICAgIG1hcC5yZW1vdmUoaSk7
CisKKyAgICAgICAgdW5zaWduZWQgemVyb3MgPSAwOworICAgICAgICB1bnNpZ25lZCBvbmVzID0g
MDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAg
ICAgICAgICBhdXRvIGl0ID0gbWFwLnJhbmRvbSgpOworICAgICAgICAgICAgaWYgKCFpdC0+dmFs
dWUpCisgICAgICAgICAgICAgICAgKyt6ZXJvczsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIDF1KTsKKyAgICAgICAgICAgICAgICArK29u
ZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfRVEoemVyb3Mg
KyBvbmVzLCAxMDAwdSk7CisgICAgICAgIEFTU0VSVF9MRSh6ZXJvcywgNjAwdSk7CisgICAgICAg
IEFTU0VSVF9MRShvbmVzLCA2MDB1KTsKKyAgICB9Cit9CisKK2NsYXNzIFRlc3RPYmplY3RXaXRo
Q3VzdG9tRGVzdHJ1Y3RvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgVGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yKEZ1bmN0aW9uPHZvaWQoKT4mJiBy
dW5JbkRlc3RydWN0b3IpCisgICAgICAgIDogbV9ydW5JbkRlc3RydWN0b3IoV1RGTW92ZShydW5J
bkRlc3RydWN0b3IpKQorICAgIHsgfQorCisgICAgflRlc3RPYmplY3RXaXRoQ3VzdG9tRGVzdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBtX3J1bkluRGVzdHJ1Y3RvcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fcnVuSW5EZXN0cnVjdG9yOworfTsKKworVEVT
VChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgQ2xlYXJfUmVlbnRlcikKK3sKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxU
ZXN0T2JqZWN0V2l0aEN1c3RvbURlc3RydWN0b3I+LCBSb2Jpbkhvb2RIYXNoPHVpbnQ2NF90Pj4g
bWFwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gMTA7ICsraSkgeworICAgICAgICBt
YXAuYWRkKGksIG1ha2VVbmlxdWU8VGVzdE9iamVjdFdpdGhDdXN0b21EZXN0cnVjdG9yPihbJm1h
cF0geworICAgICAgICAgICAgbWFwLmNsZWFyKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMFUs
IG1hcC5zaXplKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobWFwLmlzRW1wdHkoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKDEwVSwgbWFwLnNpemUoKSk7CisgICAg
bWFwLmNsZWFyKCk7CisgICAgRVhQRUNUX0VRKDBVLCBtYXAuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShtYXAuaXNFbXB0eSgpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaE1hcCwgQWRk
QW5kSWRlbnRpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
TWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IG1hcDsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byBzdHJpbmcg
PSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLnNldChz
dHJpbmcuaW1wbCgpLCBpbmRleCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICAgICAgRVhQRUNUX0VRKHJlc3VsdC5pdGVyYXRvci0+a2V5LCBzdHJpbmcuaW1w
bCgpKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWUzOyAr
K2luZGV4KSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoc3RyaW5nLmltcGwoKSwgaW5kZXggKyAxKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNU
X0VRKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIGluZGV4KTsKKyAgICAgICAgRVhQRUNUX05FKHJl
c3VsdC5pdGVyYXRvci0+a2V5LCBzdHJpbmcuaW1wbCgpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RG
X1JvYmluSG9vZEhhc2hNYXAsIExhcmdlUmVtb3ZhbCkKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZD4gbWFw
OworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgewor
ICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgbWFw
LnNldChzdHJpbmcuaW1wbCgpLCBpbmRleCk7CisgICAgfQorICAgIEVYUEVDVF9FUShtYXAuc2l6
ZSgpLCAxZTQpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytp
bmRleCkgeworICAgICAgICBpZiAoaW5kZXggJiAweDEpIHsKKyAgICAgICAgICAgIGF1dG8gc3Ry
aW5nID0gU3RyaW5nOjpudW1iZXIoaW5kZXgpOworICAgICAgICAgICAgYm9vbCByZW1vdmVkID0g
bWFwLnJlbW92ZShzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlbW92
ZWQpOworICAgICAgICB9CisgICAgfQorICAgIEVYUEVDVF9FUShtYXAuc2l6ZSgpLCAxZTQgLyAy
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTQ7ICsraW5kZXgpIHsK
KyAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGlm
IChpbmRleCAmIDB4MSkKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShtYXAuY29udGFpbnMoc3Ry
aW5nLmltcGwoKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVl
ID0gbWFwLmdldChzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwg
aW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlmICghKGluZGV4ICYgMHgxKSkgewor
ICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAg
ICAgICBib29sIHJlbW92ZWQgPSBtYXAucmVtb3ZlKHN0cmluZy5pbXBsKCkpOworICAgICAgICAg
ICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VR
KG1hcC5zaXplKCksIDB1KTsKKyAgICBFWFBFQ1RfRVEobWFwLmNhcGFjaXR5KCksIDh1KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Sb2Jpbkhvb2RIYXNoU2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzkzOTNlNjlj
NzYxZjE3Y2ZmNDMyNWIzMTM2MjJkOWQzMTU4YjBmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUm9iaW5Ib29kSGFzaFNldC5jcHAKQEAgLTAsMCArMSw1
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9yLmgiCisjaW5j
bHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dnZXIuaCIKKyNpbmNsdWRlICJUZXN0
LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JvYmluSG9vZEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RvcHdhdGNoLmg+CisKK25h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8aW50IGluaXRpYWxDYXBhY2l0eT4K
K3N0cnVjdCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4geworICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
aW11bVRhYmxlU2l6ZSA9IGluaXRpYWxDYXBhY2l0eTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgUm9iaW5Ib29kSGFzaCA6IHB1YmxpYyBEZWZhdWx0SGFzaDxUPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0hhc2hJblZhbHVlID0gdHJ1ZTsKK307CisKK3N0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgY2FwYWNpdHlGb3JTaXplKHVuc2lnbmVkIHNpemUpCit7Cisg
ICAgdW5zaWduZWQgY2FwYWNpdHkgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oc2l6ZSk7Cisg
ICAgaWYgKHNpemUgKiAxMDAgPj0gY2FwYWNpdHkgKiA5NSkKKyAgICAgICAgcmV0dXJuIGNhcGFj
aXR5ICogMjsKKyAgICByZXR1cm4gY2FwYWNpdHk7Cit9CisKK3RlbXBsYXRlPHVuc2lnbmVkIHNp
emU+Cit2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHkoKQoreworICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBpbml0aWFsQ2FwYWNpdHkgPSBjYXBhY2l0eUZvclNpemUoc2l6ZSk7CisgICAgTWVtb3J5Q29t
cGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PGludCwgUm9iaW5Ib29kSGFzaDxpbnQ+LCBJ
bml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0czxpbml0aWFsQ2FwYWNpdHk+PiB0ZXN0U2V0Owor
CisgICAgLy8gSW5pdGlhbCBjYXBhY2l0eSBpcyBudWxsLgorICAgIEFTU0VSVF9FUSgwdSwgdGVz
dFNldC5jYXBhY2l0eSgpKTsKKworICAgIC8vIEFkZGluZyBpdGVtcyB1cCB0byBzaXplIHNob3Vs
ZCBuZXZlciBjaGFuZ2UgdGhlIGNhcGFjaXR5LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIHRlc3RTZXQuYWRkKGkpOworICAgICAgICBBU1NFUlRfRVEo
aW5pdGlhbENhcGFjaXR5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGVzdFNldC5jYXBhY2l0eSgp
KSk7CisgICAgfQorCisgICAgLy8gQWRkaW5nIGl0ZW1zIHVwIHRvIG1vcmUgdGhhbiA5NSUgb2Yg
dGhlIGNhcGFjaXR5IHNob3VsZCBub3QgY2hhbmdlIHRoZSBjYXBhY2l0eS4KKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eUxpbWl0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6Y2VpbChpbml0aWFs
Q2FwYWNpdHkgKiAwLjk1KSk7CisgICAgZm9yIChzaXplX3QgaSA9IHNpemU7IGkgPCBjYXBhY2l0
eUxpbWl0OyArK2kpIHsKKyAgICAgICAgdGVzdFNldC5hZGQoaSk7CisgICAgICAgIEFTU0VSVF9F
UShpbml0aWFsQ2FwYWNpdHksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXN0U2V0LmNhcGFjaXR5
KCkpKTsKKyAgICB9CisKKyAgICAvLyBBZGRpbmcgb25lIG1vcmUgaXRlbSBpbmNyZWFzZSB0aGUg
Y2FwYWNpdHkuCisgICAgdGVzdFNldC5hZGQoaW5pdGlhbENhcGFjaXR5KTsKKyAgICBFWFBFQ1Rf
R1Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRlc3RTZXQuY2FwYWNpdHkoKSksIGluaXRpYWxDYXBh
Y2l0eSk7Cit9CisKK3RlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGlubGluZSB2b2lkIGdlbmVyYXRl
VGVzdENhcGFjaXR5VXBUb1NpemUoKTsKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQgZ2VuZXJhdGVU
ZXN0Q2FwYWNpdHlVcFRvU2l6ZTwwPigpCit7Cit9Cit0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBp
bmxpbmUgdm9pZCBnZW5lcmF0ZVRlc3RDYXBhY2l0eVVwVG9TaXplKCkKK3sKKyAgICBnZW5lcmF0
ZVRlc3RDYXBhY2l0eVVwVG9TaXplPHNpemUgLSAxPigpOworICAgIHRlc3RJbml0aWFsQ2FwYWNp
dHk8c2l6ZT4oKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgSW5pdGlhbENhcGFj
aXR5KQoreworICAgIGdlbmVyYXRlVGVzdENhcGFjaXR5VXBUb1NpemU8MTI4PigpOworfQorCitU
RVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBNb3ZlT25seSkKK3sKKyAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8TW92ZU9ubHk+IGhhc2hTZXQ7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVPbmx5IG1vdmVPbmx5
KGkgKyAxKTsKKyAgICAgICAgaGFzaFNldC5hZGQoV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEVYUEVDVF9U
UlVFKGhhc2hTZXQuY29udGFpbnMoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LnJlbW92
ZShNb3ZlT25seShpICsgMSkpKTsKKworICAgIEVYUEVDVF9UUlVFKGhhc2hTZXQuaXNFbXB0eSgp
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIGhhc2hT
ZXQuYWRkKE1vdmVPbmx5KGkgKyAxKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEw
MDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LnRha2UoTW92ZU9ubHkoaSArIDEp
KSA9PSBNb3ZlT25seShpICsgMSkpOworCisgICAgRVhQRUNUX1RSVUUoaGFzaFNldC5pc0VtcHR5
KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgaGFz
aFNldC5hZGQoTW92ZU9ubHkoaSArIDEpKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxNb3ZlT25seT4gc2Vjb25kU2V0OworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgc2Vjb25kU2V0LmFkZChoYXNoU2V0LnRha2VB
bnkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShoYXNoU2V0LmlzRW1wdHkoKSk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShzZWNvbmRT
ZXQuY29udGFpbnMoTW92ZU9ubHkoaSArIDEpKSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29k
SGFzaFNldCwgVW5pcXVlUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50
ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVlPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikp
OworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIHNldC5jbGVhcigpOworCisgICAgRVhQ
RUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0
cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRy
S2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlS
b2Jpbkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6
dW5pcXVlX3B0cjxpbnQ+Pj4gc2V0OworCisgICAgYXV0byB1bmlxdWVQdHIgPSBtYWtlVW5pcXVl
V2l0aG91dEZhc3RNYWxsb2NDaGVjazxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRy
LmdldCgpOworICAgIHNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKworICAgIGF1dG8gaXQg
PSBzZXQuZmluZChwdHIpOworICAgIEFTU0VSVF9UUlVFKGl0ICE9IHNldC5lbmQoKSk7CisgICAg
RVhQRUNUX0VRKHB0ciwgaXQtPmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoNSwgKml0LT5nZXQoKSk7
Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFVuaXF1ZVB0cktleV9Db250YWluc1Vz
aW5nUmF3UG9pbnRlcikKK3sKKyAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRy
PGludD4+PiBzZXQ7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWVXaXRob3V0RmFz
dE1hbGxvY0NoZWNrPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7Cisg
ICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworCisgICAgRVhQRUNUX0VRKHRydWUsIHNl
dC5jb250YWlucyhwdHIpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVl
UHRyS2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisKKyAgICBNZW1vcnlDb21wYWN0TG9va3Vw
T25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI+LCBSb2Jpbkhvb2RIYXNoPHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPj4+IHNldDsKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29u
c3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyKiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1
ZVB0cikpOworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
Ojpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0
LnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVlLCByZXN1bHQpOworCisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7
CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVj
dGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgVW5pcXVlUHRyS2V5
X1Rha2VVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6VGVzdGluZ1Njb3BlIHNjb3BlOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
PiwgUm9iaW5Ib29kSGFzaDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcj4+PiBzZXQ7CisKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IG1ha2VVbmlxdWU8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgc2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikp
OworCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25z
dHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKworICAgIGF1dG8gcmVzdWx0ID0gc2V0LnRha2Uo
cHRyKTsKKyAgICBFWFBFQ1RfRVEocHRyLCByZXN1bHQuZ2V0KCkpOworCisgICAgRVhQRUNUX0VR
KDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7Cisg
ICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlv
bkNvdW50KTsKKworICAgIHJlc3VsdCA9IG51bGxwdHI7CisKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQp
OworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBDb3B5RW1wdHkpCit7CisgICAgewor
ICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQs
IFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBmb287CisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29kSGFzaDx1bnNpZ25lZD4+
IGJhcihmb28pOworCisgICAgICAgIEVYUEVDVF9FUSgwdSwgYmFyLmNhcGFjaXR5KCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMHUsIGJhci5zaXplKCkpOworICAgIH0KKyAgICB7CisgICAgICAgIE1l
bW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDx1bnNpZ25lZCwgUm9iaW5Ib29k
SGFzaDx1bnNpZ25lZD4+IGZvbyh7IDEsIDUsIDY0LCA0MiB9KTsKKyAgICAgICAgRVhQRUNUX0VR
KDR1LCBmb28uc2l6ZSgpKTsKKyAgICAgICAgZm9vLnJlbW92ZSgxKTsKKyAgICAgICAgZm9vLnJl
bW92ZSg1KTsKKyAgICAgICAgZm9vLnJlbW92ZSg0Mik7CisgICAgICAgIGZvby5yZW1vdmUoNjQp
OworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWdu
ZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+PiBiYXIoZm9vKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoMHUsIGJhci5jYXBhY2l0eSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBiYXIuc2l6ZSgp
KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIENvcHlBbGxvY2F0ZUF0
TGVhc3RNaW5pbXVtQ2FwYWNpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gZm9vKHsgNDIg
fSk7CisgICAgRVhQRUNUX0VRKDF1LCBmb28uc2l6ZSgpKTsKKyAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8dW5zaWduZWQsIFJvYmluSG9vZEhhc2g8dW5zaWduZWQ+
PiBiYXIoZm9vKTsKKworICAgIEVYUEVDVF9FUSg4dSwgYmFyLmNhcGFjaXR5KCkpOworICAgIEVY
UEVDVF9FUSgxdSwgYmFyLnNpemUoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQs
IENvcHlDYXBhY2l0eUlzTm90T25Cb3VuZGFyeSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHNpemUg
PSA0OyBzaXplIDwgMTAwOyArK3NpemUpIHsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gc291
cmNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZSArIDE7ICsraSkKKyAg
ICAgICAgICAgIHNvdXJjZS5hZGQoaSk7CisKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29w
eTEoc291cmNlKTsKKyAgICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNo
U2V0PHVuc2lnbmVkLCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29weTIoc291cmNlKTsKKyAg
ICAgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVkLCBS
b2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gY29weTMoc291cmNlKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoc2l6ZSwgY29weTEuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemUsIGNvcHkyLnNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzaXplLCBjb3B5My5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZSArIDE7ICsraSkgeworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoY29weTEuY29udGFpbnMoaSkpIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RShjb3B5Mi5jb250YWlucyhpKSkgPDwgaTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvcHkz
LmNvbnRhaW5zKGkpKSA8PCBpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9GQUxTRShjb3B5
MS5jb250YWlucyhzaXplICsgMikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY29weTIuY29udGFp
bnMoc2l6ZSArIDIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNvcHkzLmNvbnRhaW5zKHNpemUg
KyAyKSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoY29weTIucmVtb3ZlKDEpKTsKKyAgICAgICAg
RVhQRUNUX0VRKGNvcHkxLmNhcGFjaXR5KCksIGNvcHkyLmNhcGFjaXR5KCkpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoY29weTIuY29udGFpbnMoMSkpOworCisgICAgICAgIEVYUEVDVF9UUlVFKGNv
cHkzLmFkZChzaXplICsgMikuaXNOZXdFbnRyeSk7CisgICAgICAgIGlmICgoY29weTEuY2FwYWNp
dHkoKSAqIDAuOTUpIDw9IGNvcHkxLnNpemUoKSkKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb3B5
MS5jYXBhY2l0eSgpICogMiwgY29weTMuY2FwYWNpdHkoKSkgPDwgY29weTEuc2l6ZSgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRVEoY29weTEuY2FwYWNpdHkoKSwgY29weTMu
Y2FwYWNpdHkoKSkgPDwgY29weTEuc2l6ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShjb3B5My5j
b250YWlucyhzaXplICsgMikpOworICAgIH0KK30KKworc3RydWN0IERlcmVmT2JzZXJ2ZXIgewor
ICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBORVZFUl9JTkxJTkUgdm9p
ZCByZWYoKQorICAgIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgTkVWRVJfSU5MSU5F
IHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgLS1jb3VudDsKKyAgICAgICAgb2JzZXJ2ZWRC
dWNrZXQgPSBidWNrZXRBZGRyZXNzLT5nZXQoKTsKKyAgICB9CisgICAgdW5zaWduZWQgY291bnQg
eyAxIH07CisgICAgY29uc3QgUmVmUHRyPERlcmVmT2JzZXJ2ZXI+KiBidWNrZXRBZGRyZXNzIHsg
bnVsbHB0ciB9OworICAgIGNvbnN0IERlcmVmT2JzZXJ2ZXIqIG9ic2VydmVkQnVja2V0IHsgbnVs
bHB0ciB9OworfTsKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgUmVmUHRyTm90WmVyb2Vk
QmVmb3JlRGVyZWYpCit7CisgICAgYXV0byBvYnNlcnZlciA9IG1ha2VVbmlxdWU8RGVyZWZPYnNl
cnZlcj4oKTsKKworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxS
ZWZQdHI8RGVyZWZPYnNlcnZlcj4sIFJvYmluSG9vZEhhc2g8UmVmUHRyPERlcmVmT2JzZXJ2ZXI+
Pj4gc2V0OworICAgIHNldC5hZGQoYWRvcHRSZWYob2JzZXJ2ZXIuZ2V0KCkpKTsKKworICAgIGF1
dG8gaXRlcmF0b3IgPSBzZXQuZmluZChvYnNlcnZlci5nZXQoKSk7CisgICAgRVhQRUNUX1RSVUUo
aXRlcmF0b3IgIT0gc2V0LmVuZCgpKTsKKworICAgIG9ic2VydmVyLT5idWNrZXRBZGRyZXNzID0g
aXRlcmF0b3IuZ2V0KCk7CisKKyAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNr
ZXQgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZShvYnNlcnZlci5nZXQo
KSkpOworCisgICAgLy8gSXQgaWYgZmluZSB0byBlaXRoZXIgbGVhdmUgdGhlIG9sZCB2YWx1ZSBp
bnRhY3QgYXQgZGVsZXRpb24gb3IgYWxyZWFkeSBzZXQgaXQgdG8gdGhlIGRlbGV0ZWQKKyAgICAv
LyB2YWx1ZS4KKyAgICAvLyBBIHplcm8gd291bGQgYmUgYSBpbmNvcnJlY3Qgb3V0Y29tZSBhcyBp
dCB3b3VsZCBtZWFuIHdlIG51bGxlZCB0aGUgYnVja2V0IGJlZm9yZSBhbiBvcGFxdWUKKyAgICAv
LyBjYWxsLgorICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNl
cnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gUmVmUHRyPERlcmVmT2Jz
ZXJ2ZXI+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7Cit9CisKKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNl
dCwgVW5pcXVlUHRyTm90WmVyb2VkQmVmb3JlRGVzdHJ1Y3RvcikKK3sKKyAgICBzdHJ1Y3QgRGVz
dHJ1Y3Rvck9ic2VydmVyIHsKKyAgICAgICAgfkRlc3RydWN0b3JPYnNlcnZlcigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG9ic2VydmUoKTsKKyAgICAgICAgfQorICAgICAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gb2JzZXJ2ZTsKKyAgICB9OworCisgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRy
PERlc3RydWN0b3JPYnNlcnZlcj4qIGJ1Y2tldEFkZHJlc3MgPSBudWxscHRyOworICAgIGNvbnN0
IERlc3RydWN0b3JPYnNlcnZlciogb2JzZXJ2ZWRCdWNrZXQgPSBudWxscHRyOworICAgIGJvb2wg
ZGVzdHJ1Y3RvckNhbGxlZCA9IGZhbHNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXN0cnVjdG9y
T2JzZXJ2ZXI+IG9ic2VydmVyKG5ldyBEZXN0cnVjdG9yT2JzZXJ2ZXIgeyBbJl0oKSB7CisgICAg
ICAgIG9ic2VydmVkQnVja2V0ID0gYnVja2V0QWRkcmVzcy0+Z2V0KCk7CisgICAgICAgIGRlc3Ry
dWN0b3JDYWxsZWQgPSB0cnVlOworICAgIH19KTsKKworICAgIGNvbnN0IERlc3RydWN0b3JPYnNl
cnZlciogb2JzZXJ2ZXJBZGRyZXNzID0gb2JzZXJ2ZXIuZ2V0KCk7CisKKyAgICBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JP
YnNlcnZlcj4sIFJvYmluSG9vZEhhc2g8c3RkOjp1bmlxdWVfcHRyPERlc3RydWN0b3JPYnNlcnZl
cj4+PiBzZXQ7CisgICAgYXV0byBhZGRSZXN1bHQgPSBzZXQuYWRkKFdURk1vdmUob2JzZXJ2ZXIp
KTsKKworICAgIEVYUEVDVF9UUlVFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBFWFBFQ1Rf
VFJVRShvYnNlcnZlZEJ1Y2tldCA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRkFMU0UoZGVzdHJ1
Y3RvckNhbGxlZCk7CisKKyAgICBidWNrZXRBZGRyZXNzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLmdl
dCgpOworCisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gbnVsbHB0cik7CisgICAg
RVhQRUNUX0ZBTFNFKGRlc3RydWN0b3JDYWxsZWQpOworICAgIEVYUEVDVF9UUlVFKHNldC5yZW1v
dmUoKmFkZFJlc3VsdC5pdGVyYXRvcikpOworCisgICAgRVhQRUNUX1RSVUUoZGVzdHJ1Y3RvckNh
bGxlZCk7CisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXJBZGRyZXNz
IHx8IG9ic2VydmVkQnVja2V0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVzdHJ1Y3Rvck9i
c2VydmVyKj4oLTEpKTsKK30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgUmVmKQorewor
ICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0
TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8
UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOwor
ICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVR
KCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAg
ICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFzaDxSZWY8UmVmTG9n
Z2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7CisgICAgICAgIHNl
dC5hZGQocmVmLmNvcHlSZWYoKSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkg
cmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAg
IHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9v
a3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVm
PFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAg
ICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisgICAgICAgIHNldC5yZW1vdmUoJmEpOworICAg
IH0KKworICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKKworICAgIHsKKyAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBN
ZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJv
YmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dl
cj4gcmVmKGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgYXV0
byBhT3V0ID0gc2V0LnRha2UoJmEpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxi
b29sPihhT3V0KSk7CisgICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQor
CisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKworICAgICAgICBSZWY8UmVmTG9nZ2VyPiBy
ZWYoYSk7CisgICAgICAgIHNldC5hZGQoV1RGTW92ZShyZWYpKTsKKworICAgICAgICBhdXRvIGFP
dXQgPSBzZXQudGFrZUFueSgpOworICAgICAgICBBU1NFUlRfVFJVRShzdGF0aWNfY2FzdDxib29s
PihhT3V0KSk7CisgICAgICAgIEFTU0VSVF9FUSgmYSwgYU91dC5nZXQoKSk7CisgICAgfQorCisg
ICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkp
OworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hT
ZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dlcj4+PiBzZXQ7Cisg
ICAgICAgIGF1dG8gZW1wdHlUYWtlID0gc2V0LnRha2VBbnkoKTsKKyAgICAgICAgQVNTRVJUX0ZB
TFNFKHN0YXRpY19jYXN0PGJvb2w+KGVtcHR5VGFrZSkpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKKworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxvZ2dl
cj4+PiBzZXQ7CisKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOworICAgICAgICBzZXQu
YWRkKFdURk1vdmUocmVmKSk7CisKKyAgICAgICAgQVNTRVJUX1RSVUUoc2V0LmNvbnRhaW5zKCZh
KSk7CisgICAgfQorCisgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBNZW1vcnlDb21wYWN0TG9va3VwT25s
eVJvYmluSG9vZEhhc2hTZXQ8UmVmPFJlZkxvZ2dlcj4sIFJvYmluSG9vZEhhc2g8UmVmPFJlZkxv
Z2dlcj4+PiBzZXQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBSZWZMb2dnZXIgb2JqZWN0cyBsZWFrLiBO
byBiaWcgZGVhbCBmb3IgYSB0ZXN0IEkgZ3Vlc3MuCisgICAgICAgICAgICBSZWY8UmVmTG9nZ2Vy
PiByZWYgPSBhZG9wdFJlZigqbmV3IFJlZkxvZ2dlcigiYSIpKTsKKyAgICAgICAgICAgIGF1dG8q
IHBvaW50ZXIgPSByZWYucHRyKCk7CisgICAgICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7
CisgICAgICAgICAgICBBU1NFUlRfVFJVRShzZXQuY29udGFpbnMocG9pbnRlcikpOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVF9TVFJFUSgiZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYo
YSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkg
ZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworCisgICAgeworICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOworCisgICAgICAgIE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5I
b29kSGFzaDxSZWY8UmVmTG9nZ2VyPj4+IHNldDsKKyAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVm
KGEpOworICAgICAgICBzZXQuYWRkKFdURk1vdmUocmVmKSk7CisgICAgICAgIE1lbW9yeUNvbXBh
Y3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWY8UmVmTG9nZ2VyPiwgUm9iaW5Ib29kSGFz
aDxSZWY8UmVmTG9nZ2VyPj4+IHNldDIoc2V0KTsKKyAgICB9CisgICAgQVNTRVJUX1NUUkVRKCJy
ZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
K30KKworVEVTVChXVEZfUm9iaW5Ib29kSGFzaFNldCwgRGVsZXRlZEFkZHJlc3NPZk9wZXJhdG9y
KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxEZWxldGVk
QWRkcmVzc09mT3BlcmF0b3I+IHNldDE7CisgICAgc2V0MS5hZGQoMTApOworCisgICAgc2V0MS5y
ZW1vdmUoMTApOworfQorCitURVNUKFdURl9Sb2Jpbkhvb2RIYXNoU2V0LCBSZW1vdmVSYW5kb20p
Cit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PHVuc2lnbmVk
LCBSb2Jpbkhvb2RIYXNoPHVuc2lnbmVkPj4gc2V0MSB7IDEsIDIsIDMgfTsKKyAgICBzZXQxLnJl
bW92ZShzZXQxLnJhbmRvbSgpKTsKKyAgICBzZXQxLnJlbW92ZShzZXQxLnJhbmRvbSgpKTsKKyAg
ICBzZXQxLnJlbW92ZShzZXQxLnJhbmRvbSgpKTsKKyAgICBBU1NFUlRfVFJVRShzZXQxLmlzRW1w
dHkoKSk7Cit9CisKK1RFU1QoV1RGX1JvYmluSG9vZEhhc2hTZXQsIFJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0
cmluZz4gc2V0OworICAgIEVYUEVDVF9FUSgwdSwgc2V0LnNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDB1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBzZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg5
OTk5KTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4
NHUsIHNldC5jYXBhY2l0eSgpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTk5OTsgKytp
KQorICAgICAgICBzZXQuYWRkKG1ha2VTdHJpbmcoImZvbyIsIGkpKTsKKyAgICBFWFBFQ1RfRVEo
OTk5OXUsIHNldC5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUsIHNldC5jYXBhY2l0eSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFpbnMoImZvbzMiX3N0cikpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIHNldC5hZGQobWFrZVN0cmluZygi
ZXhjZXNzIiwgaSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSArIDk5OTl1LCBzZXQuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMzI3Njh1LCBzZXQuY2FwYWNpdHkoKSk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDk5OTk7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LnJlbW92ZShtYWtl
U3RyaW5nKCJmb28iLCBpKSkpOworICAgIEVYUEVDVF9FUSg5OTk5dSwgc2V0LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDMyNzY4dSwgc2V0LmNhcGFjaXR5KCkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA5OTk5OyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHNldC5yZW1vdmUobWFrZVN0
cmluZygiZXhjZXNzIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldC5zaXplKCkpOworICAg
IEVYUEVDVF9FUSg4dSwgc2V0LmNhcGFjaXR5KCkpOworCisgICAgTWVtb3J5Q29tcGFjdExvb2t1
cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PFN0cmluZz4gc2V0MjsKKyAgICBzZXQyLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoOTk5OSk7CisgICAgRVhQRUNUX0ZBTFNFKHNldDIucmVtb3ZlKCJmb28xIl9z
KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICAgICAgc2V0Mi5h
ZGQobWFrZVN0cmluZygiZm9vIiwgaSkpOworICAgIEVYUEVDVF9FUSgyMDAwdSwgc2V0Mi5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSgxNjM4NHUsIHNldDIuY2FwYWNpdHkoKSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDIwMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0Mi5yZW1v
dmUobWFrZVN0cmluZygiZm9vIiwgaSkpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIHNldDIuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoOHUsIHNldDIuY2FwYWNpdHkoKSk7Cit9CisKK1RFU1QoV1RGX1Jv
YmluSG9vZEhhc2hTZXQsIEFkZEFuZElkZW50aXR5KQoreworICAgIE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxSZWZQdHI8U3RyaW5nSW1wbD4+IHNldDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAxZTM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0
byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
c2V0LmFkZChzdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICBFWFBFQ1RfRVEoKnJlc3VsdC5pdGVyYXRvciwgc3RyaW5nLmltcGwo
KSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IDFlMzsgKytp
bmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHN0cmluZy5pbXBsKCkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBFWFBFQ1RfTkUoKnJlc3VsdC5p
dGVyYXRvciwgc3RyaW5nLmltcGwoKSk7CisgICAgfQorfQorCitURVNUKFdURl9Sb2Jpbkhvb2RI
YXNoU2V0LCBMYXJnZVJlbW92YWwpCit7CisgICAgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jp
bkhvb2RIYXNoU2V0PFJlZlB0cjxTdHJpbmdJbXBsPj4gc2V0OworICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9
IFN0cmluZzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgc2V0LmFkZChzdHJpbmcuaW1wbCgpKTsK
KyAgICB9CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIDFlNCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4KSB7CisgICAgICAgIGlmIChpbmRleCAm
IDB4MSkgeworICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7
CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBzZXQucmVtb3ZlKHN0cmluZy5pbXBsKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3ZlZCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
RVhQRUNUX0VRKHNldC5zaXplKCksIDFlNCAvIDIpOworICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IDFlNDsgKytpbmRleCkgeworICAgICAgICBhdXRvIHN0cmluZyA9IFN0cmlu
Zzo6bnVtYmVyKGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ICYgMHgxKQorICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhzdHJpbmcuaW1wbCgpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhzdHJpbmcuaW1wbCgpKSk7Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgMWU0OyArK2luZGV4
KSB7CisgICAgICAgIGlmICghKGluZGV4ICYgMHgxKSkgeworICAgICAgICAgICAgYXV0byBzdHJp
bmcgPSBTdHJpbmc6Om51bWJlcihpbmRleCk7CisgICAgICAgICAgICBib29sIHJlbW92ZWQgPSBz
ZXQucmVtb3ZlKHN0cmluZy5pbXBsKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVtb3Zl
ZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIDB1KTsKKyAg
ICBFWFBFQ1RfRVEoc2V0LmNhcGFjaXR5KCksIDh1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>