<?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>207426</bug_id>
          
          <creation_ts>2020-02-07 22:37:14 -0800</creation_ts>
          <short_desc>[WTF] Use SwissTable algorithm for larger HashTable</short_desc>
          <delta_ts>2020-04-13 20:20:16 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1616543</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-07 22:37:14 -0800</bug_when>
    <thetext>And let&apos;s use 75% load-factor even in larger table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616657</commentid>
    <comment_count>1</comment_count>
      <attachid>390197</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-08 22:26:24 -0800</bug_when>
    <thetext>Created attachment 390197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616658</commentid>
    <comment_count>2</comment_count>
      <attachid>390198</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-08 22:40:25 -0800</bug_when>
    <thetext>Created attachment 390198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616659</commentid>
    <comment_count>3</comment_count>
      <attachid>390199</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-08 23:04:31 -0800</bug_when>
    <thetext>Created attachment 390199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616661</commentid>
    <comment_count>4</comment_count>
      <attachid>390200</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 01:26:45 -0800</bug_when>
    <thetext>Created attachment 390200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616707</commentid>
    <comment_count>5</comment_count>
      <attachid>390214</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 15:04:33 -0800</bug_when>
    <thetext>Created attachment 390214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616730</commentid>
    <comment_count>6</comment_count>
      <attachid>390220</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 17:47:28 -0800</bug_when>
    <thetext>Created attachment 390220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616743</commentid>
    <comment_count>7</comment_count>
      <attachid>390222</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 19:19:31 -0800</bug_when>
    <thetext>Created attachment 390222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616744</commentid>
    <comment_count>8</comment_count>
      <attachid>390223</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 19:23:25 -0800</bug_when>
    <thetext>Created attachment 390223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616777</commentid>
    <comment_count>9</comment_count>
      <attachid>390233</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-09 22:11:27 -0800</bug_when>
    <thetext>Created attachment 390233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617276</commentid>
    <comment_count>10</comment_count>
      <attachid>390339</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-10 19:54:39 -0800</bug_when>
    <thetext>Created attachment 390339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617287</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-10 21:57:16 -0800</bug_when>
    <thetext>Some of membuster process&apos;s HashTable dump by using MALLOC_BREAKDOWN.
This is interesting.

Zone HashTable_0x110574000: 3867 nodes (2306608 bytes) 

    COUNT     BYTES       AVG   CLASS_NAME                                       TYPE    BINARY
    =====     =====       ===   ==========                                       ====    ======
        1        16      16.0   non-object                                                                 
      720     57600      80.0   non-object                                                                 
     1739    250416     144.0   non-object                                                                 
      714    148512     208.0   non-object                                                                 
      276     75072     272.0   non-object                                                                 
        4      1344     336.0   non-object                                                                 
       61     24400     400.0   non-object                                                                 
      133     70224     528.0   non-object                                                                 
        1       592     592.0   non-object                                                                 
       11      7216     656.0   non-object                                                                 
        1       720     720.0   non-object                                                                 
       22     17248     784.0   non-object                                                                 
       66    101376    1536.0   non-object                                                                 
        8     16384    2048.0   non-object                                                                 
       28     71680    2560.0   non-object                                                                 
        3      9216    3072.0   non-object                                                                 
       31    142848    4608.0   non-object                                                                 
        1      5120    5120.0   non-object                                                                 
        3     16896    5632.0   non-object                                                                 
        6     39936    6656.0   non-object                                                                 
        1      7680    7680.0   non-object                                                                 
        1      8192    8192.0   non-object                                                                 
        8     69632    8704.0   non-object                                                                 
        5     53760   10752.0   non-object                                                                 
        4     51200   12800.0   non-object                                                                 
        1     14848   14848.0   non-object                                                                 
        4     67584   16896.0   non-object                                                                 
        2     41984   20992.0   non-object                                                                 
        2     50176   25088.0   non-object                                                                 
        7    458752   65536.0   non-object                                                                 
        2    196608   98304.0   non-object                                                                 
        1    229376  229376.0   non-object

While # of HashTable has skew (144.0 is the most), accumulated memory of long-tail has fair-amount of memory.
For example, total memory of 144.0 is smaller than 65536.0 sized table.
We should optimize large-sized table too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617650</commentid>
    <comment_count>12</comment_count>
      <attachid>390429</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-11 14:44:07 -0800</bug_when>
    <thetext>Created attachment 390429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617812</commentid>
    <comment_count>13</comment_count>
      <attachid>390478</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-11 18:56:54 -0800</bug_when>
    <thetext>Created attachment 390478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618725</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-13 15:00:37 -0800</bug_when>
    <thetext>Test failure comes from the fact that this test is relying on hashtable.
In some place, we put properties of JSGlobalObject into hashtable, iterating, and picking the first one to dump. Previously, it was,

&quot;undefined&quot;: undefined

But now, it is,

&quot;NaN&quot;: NaN

that&apos;s why we are seeing the failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618888</commentid>
    <comment_count>15</comment_count>
      <attachid>390734</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-14 00:13:11 -0800</bug_when>
    <thetext>Created attachment 390734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1618901</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-14 00:55:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/59453007&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620251</commentid>
    <comment_count>17</comment_count>
      <attachid>390734</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-02-18 11:39:33 -0800</bug_when>
    <thetext>Comment on attachment 390734
Patch

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

r=me if you fix the style errors and rename h1/h2. Can you make sure we have tests for SwissHashing in testWTF?

&gt; Source/WTF/ChangeLog:13
&gt; +        to select Group we will search. The key is that we maintains Control bytes as a side data,

Nit: maintains =&gt; maintain and &quot;a side data&quot; =&gt; &quot;side data&quot;

&gt; Source/WTF/ChangeLog:16
&gt; +        For each bucket, we store either of (1) 7 bit hash code, (2) empty marker, or (3) deleted marker.

Nit: either =&gt; one

&gt; Source/WTF/ChangeLog:18
&gt; +        operation to match 16 bucket hash codes in parallel, to filter out search candidate buckets in

Nit: operation =&gt; operations. no comma after parallel.

&gt; Source/WTF/ChangeLog:19
&gt; +        one Group. And we can see last empty bucket if any bucket of Group is empty. So, almost all cases,

Nit: &quot;So, almost&quot; =&gt; &quot;So, in almost&quot;

&gt; Source/WTF/wtf/HashTable.h:622
&gt; +        ALWAYS_INLINE unsigned h1(unsigned hash)

h1 doesn&apos;t really convey the meaning of what we are computing here. Can we call this groupHash?

&gt; Source/WTF/wtf/HashTable.h:628
&gt; +        inline Control h2(unsigned hash)

h2 doesn&apos;t really convey the meaning of what we are computing here. Can we call this controlHash?

&gt; Source/WTF/wtf/HashTable.h:1033
&gt; +    inline auto HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::lookupForWriting(const T&amp; key, unsigned h) -&gt; LookupType

Can we change h to hash? It&apos;s poor style in the old code and now that it&apos;s a parameter is even worse...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620520</commentid>
    <comment_count>18</comment_count>
      <attachid>390734</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-02-18 20:58:29 -0800</bug_when>
    <thetext>Comment on attachment 390734
Patch

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

&gt; Source/WTF/ChangeLog:29
&gt; +        While JetStream2 is neutral, we get sub-1% improvement in Membuster.

How big was the improvement in Membuster?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621028</commentid>
    <comment_count>19</comment_count>
      <attachid>390734</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-19 19:22:14 -0800</bug_when>
    <thetext>Comment on attachment 390734
Patch

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

&gt;&gt; Source/WTF/ChangeLog:29
&gt;&gt; +        While JetStream2 is neutral, we get sub-1% improvement in Membuster.
&gt; 
&gt; How big was the improvement in Membuster?

In my local testing, it is ~1%. We already got large improvement when increasing the load-factor from 50% to 75% for small HashMap. This patch allows this load-factor for larger tables.
But maybe, I first need to check the result of https://bugs.webkit.org/show_bug.cgi?id=207827 and https://trac.webkit.org/changeset/257025/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641231</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-13 20:20:16 -0700</bug_when>
    <thetext>Looks OK to me. The key is really the performance testing and making sure we also do enough correctness testing. Like maybe testing with CHECK_HASHTABLE_CONSISTENCY set to 1?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390197</attachid>
            <date>2020-02-08 22:26:24 -0800</date>
            <delta_ts>2020-02-08 22:40:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200208222623.patch</filename>
            <type>text/plain</type>
            <size>32865</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjczNGNlMjMyZThjY2NlMWRiMzc4NzM1MmMwZTRiNDA2YjUwOGI5
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3QpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojps
b29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZv
cldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRVbmlxdWVGb3JJbml0aWFs
aXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlKToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRh
YmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1D
UFUuaDoKKwogMjAyMC0wMi0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXVEZdIFRyeSB1c2luZyA3NSUgbG9hZCBmYWN0b3IgZm9yIEhhc2hUYWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoVGFibGUuaAppbmRleCBkM2FiMTE5MjRmNGVhMmM3ZGNiZTA3YzFmYjRlYTA4ZjE0NjM3MzYz
Li5jZDZmNDllMWZhNmVjMjhlMWI3MTJhY2EyMWVmYzk4MTdiYmZhM2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoK
ICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NUYWJsZSBmb3IgbGFy
Z2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBBdXRob3JzLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisg
Ki8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRlIDxlbW1pbnRyaW4u
aD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShYODZfU1NFMykKKyNp
bmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUgRFVNUF9IQVNIVEFC
TEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUgMApAQCAt
MzA4LDE5ICszMzUsMTUgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgogICAgIHN0cnVjdCBIYXNo
VGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwg
dGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4
TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21h
bGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBs
YXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFy
Z2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtleUFuZERlbGV0ZUNvdW50LCB1aW50NjRfdCB0
YWJsZVNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21h
bGxUYWJsZUNhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3Vu
dCAqIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIHNtYWxsTWF4TG9hZE51
bWVyYXRvcjsKLSAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIGxhcmdlTWF4
TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIGxhcmdlTWF4TG9hZE51bWVyYXRvcjsKKyAg
ICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIG1heExvYWREZW5vbWluYXRvciA+
PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodWludDY0X3Qgc2l6ZUFyZykK
QEAgLTU2MCwxMSArNTgzLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFs
bCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxN
YXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJh
dG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9t
aW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0g
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6bGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1l
cmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5h
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4TG9hZERlbm9taW5hdG9yOwogICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJs
ZVNpemVQb2xpY3k6Om1heFNtYWxsVGFibGVDYXBhY2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApA
QCAtNTc0LDYgKzU5NCwxNjIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50
T2Zmc2V0ID0gLTQ7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFT
aXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CiAKKyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVp
bnQ4X3Q7CisgICAgICAgIGVudW0gY2xhc3MgQ29udHJvbFZhbHVlIDogQ29udHJvbCB7CisgICAg
ICAgICAgICBFbXB0eSAgID0gMGIxMDAwMDAwMCwKKyAgICAgICAgICAgIERlbGV0ZWQgPSAwYjEx
MTExMTExLAorICAgICAgICB9OworCisgICAgICAgIGlubGluZSB1bnNpZ25lZCBoMSh1bnNpZ25l
ZCBoYXNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaCA+PiA3OworICAgICAg
ICB9CisKKyAgICAgICAgaW5saW5lIENvbnRyb2wgaDIodW5zaWduZWQgaGFzaCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiAweDdGOworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIFQsIHVuc2lnbmVkIHNoaWZ0PgorICAgICAgICBjbGFzcyBCaXRNYXNr
IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUp
OworCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSB1bnNp
Z25lZDsKKyAgICAgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gQml0TWFzazsKKyAgICAgICAgICAg
IHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gQml0TWFzazsKKworICAgICAgICAgICAgZXhwbGljaXQg
Y29uc3RleHByIEJpdE1hc2soVCBtYXNrKQorICAgICAgICAgICAgICAgIDogbV9tYXNrKG1hc2sp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJpdE1hc2smIG9w
ZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbWFzayAmPSAobV9t
YXNrIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrICE9IDA7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQo
bV9tYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBs
b3dlc3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
bV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGhpZ2hlc3RCaXRTZXQoKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRNU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Qml0TWFzayBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgICAgICBCaXRN
YXNrIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEJpdE1hc2soMCk7IH0KKworICAgICAgICAgICAgdW5z
aWduZWQgdHJhaWxpbmdaZXJvcygpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjdHoobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdW5zaWduZWQgbGVhZGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNseihtX21hc2spID4+
IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrID09IGIubV9t
YXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBCaXRNYXNrJiBhLCBjb25zdCBCaXRNYXNrJiBiKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBhLm1fbWFzayAhPSBiLm1fbWFzazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVCBtX21hc2s7CisgICAgICAgIH07CisKKworI2lmIENQVShYODZfU1NFMikK
KyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gMTY7CisgICAgICAgICAgICB1c2luZyBCaXRNYXNrID0g
Qml0TWFzazx1aW50MTZfdCwgMD47CisgICAgICAgICAgICBCaXRNYXNrIG1hdGNoRW1wdHlPckRl
bGV0ZWQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBCaXRN
YXNrKF9tbV9tb3ZlbWFza19lcGk4KG1fdmVjdG9yKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEJpdE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hdGNoID0gX21tX3NldDFfZXBpOChjb250cm9s
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQml0TWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1f
Y21wZXFfZXBpOChtYXRjaCwgbV92ZWN0b3IpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEJpdE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7CisjaWYgQ1BVKFg4Nl9TU0Uz
KQorICAgICAgICAgICAgICAgIHJldHVybiBCaXRNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9z
aWduX2VwaTgobV92ZWN0b3IsIG1fdmVjdG9yKSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hCeXRlKHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RW1wdHkp
KTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfX20xMjhpIG1fdmVjdG9y
OworICAgICAgICB9OworI2Vsc2UKKyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gODsKKworICAgICAg
ICAgICAgdXNpbmcgQml0TWFzayA9IEJpdE1hc2s8dWludDY0X3QsIDM+OworICAgICAgICAgICAg
Qml0TWFzayBtYXRjaEVtcHR5T3JEZWxldGVkKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVM
TDsKKyAgICAgICAgICAgICAgICByZXR1cm4gQml0TWFzaygoY3RybCAmICh+Y3RybCA8PCA3KSkg
JiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQml0TWFzayBtYXRjaEJ5dGUo
Q29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IEZvciB0aGUgdGVjaG5pcXVlLCBzZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2dyYXBo
aWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sIyNWYWx1ZUluV29yZAorICAg
ICAgICAgICAgICAgIC8vIChEZXRlcm1pbmUgaWYgYSB3b3JkIGhhcyBhIGJ5dGUgZXF1YWwgdG8g
bikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBDYXZlYXQ6IHRoZXJl
IGFyZSBmYWxzZSBwb3NpdGl2ZXMgYnV0OgorICAgICAgICAgICAgICAgIC8vIC0gdGhleSBvbmx5
IG9jY3VyIGlmIHRoZXJlIGlzIGEgcmVhbCBtYXRjaAorICAgICAgICAgICAgICAgIC8vIC0gdGhl
eSBuZXZlciBvY2N1ciBvbiBrRW1wdHksIGtEZWxldGVkLCBrU2VudGluZWwKKyAgICAgICAgICAg
ICAgICAvLyAtIHRoZXkgd2lsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkgYnkgc3Vic2VxdWVudCBj
aGVja3MgaW4gY29kZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gRXhh
bXBsZToKKyAgICAgICAgICAgICAgICAvLyAgIHYgPSAweDE3MTYxNTE0MTMxMjExMTAKKyAgICAg
ICAgICAgICAgICAvLyAgIGhhc2ggPSAweDEyCisgICAgICAgICAgICAgICAgLy8gICByZXR2YWwg
PSAodiAtIGxzYnMpICYgfnYgJiBtc2JzID0gMHgwMDAwMDAwMDgwODAwMDAwCisgICAgICAgICAg
ICAgICAgY29uc3RleHByIHVpbnQ2NF90IG1zYnMgPSAweDgwODA4MDgwODA4MDgwODBVTEw7Cisg
ICAgICAgICAgICAgICAgY29uc3RleHByIHVpbnQ2NF90IGxzYnMgPSAweDAxMDEwMTAxMDEwMTAx
MDFVTEw7CisgICAgICAgICAgICAgICAgYXV0byB4ID0gbV92ZWN0b3IgXiAobHNicyAqIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGNvbnRyb2wpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQml0TWFz
aygoeCAtIGxzYnMpICYgfnggJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Qml0TWFzayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQml0TWFzaygobV92ZWN0b3IgJiAofm1fdmVjdG9yIDw8IDYpKSAmIG1zYnMp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50NjRfdCBtX3ZlY3RvcjsKKyAgICAg
ICAgfTsKKyNlbmRpZgorCiAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVT
aXplT2Zmc2V0XSA6IDA7IH0KICAgICAgICAgdm9pZCBzZXRUYWJsZVNpemUodW5zaWduZWQgc2l6
ZSkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPiht
X3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdID0gc2l6ZTsgfQogICAgICAgICB1bnNpZ25lZCB0YWJs
ZVNpemVNYXNrKCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJldHVybiBtX3RhYmxlID8gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU1hc2tPZmZzZXRdIDog
MDsgfQpAQCAtNTgyLDYgKzc1OCwxNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB2b2lkIHNldEtleUNvdW50KHVuc2lnbmVkIGNv
dW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KG1fdGFibGUpW2tleUNvdW50T2Zmc2V0XSA9IGNvdW50OyB9CiAgICAgICAgIHVuc2lnbmVkIGRl
bGV0ZWRDb3VudCgpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNldF07IH0KICAgICAgICAg
dm9pZCBzZXREZWxldGVkQ291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFi
bGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50T2Zm
c2V0XSA9IGNvdW50OyB9CisgICAgICAgIENvbnRyb2wqIGNvbnRyb2xzKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb250cm9sKj4oZ3JvdXBzKCkp
OworICAgICAgICB9CisgICAgICAgIEdyb3VwKiBncm91cHMoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAg
ICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxH
cm91cCo+KGJpdHdpc2VfY2FzdDxDb250cm9sKj4obV90YWJsZSkgLSBtZXRhZGF0YVNpemUgLSB0
YWJsZVNpemUpOworICAgICAgICB9CiAKICAgICAgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVs
bHB0ciB9OwogCkBAIC02NjYsOSArODUzLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXpl
TWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsK
LSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxF
X1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNjc5LDYg
Kzg2NCwzOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFi
bGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAKKyAgICAgICAg
aWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBo
MihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6
ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBz
ICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAtPm1h
dGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50
cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0
ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAg
ICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVj
b3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
IGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsK
KyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7
CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIHdoaWxlICgxKSB7
CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAgICAgICAg
ICAgIApAQCAtNzIwLDkgKzkzOCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZh
bHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAg
LTczMyw2ICs5NDksNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisg
ICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlI
YXNoID0gaDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUo
KSAvIHNpemVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3Vw
U2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7
CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9
IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdy
b3VwLT5tYXRjaEJ5dGUoZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9u
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAh
aXNEZWxldGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZ
KEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShlbnRyeSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1h
dGNoRW1wdHkoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAg
ICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7Cisj
ZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAg
ICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8
IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAg
ICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3Jv
dXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRj
aEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBMb29rdXBUeXBlKHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3Np
dGlvbi52YWx1ZSgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQg
aSA9IGggJiBzaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwog
CiAgICAgICAgIHdoaWxlICgxKSB7CkBAIC03ODEsOSArMTAzOSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQg
ayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNp
Z25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhh
c2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1h
c2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRz
OjpudW1BY2Nlc3NlczsKQEAgLTc5NCw2ICsxMDUwLDQ4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNj
ZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3Vw
cygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3Jv
dXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdy
b3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAg
ICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJP
ZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5
QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRy
YWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VM
b29rdXBSZXN1bHQoZW50cnksIHRydWUsIGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAg
Kytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xs
aXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9T
VEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAg
ICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAg
ICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNl
dCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdCh0YWJsZSAr
IGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKSwgZmFsc2UsIGgp
OworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAx
IHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sg
PSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAg
ICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gMDsKIAogICAgICAgICB3aGlsZSAoMSkg
ewpAQCAtODQ3LDkgKzExNDUsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1
ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJs
ZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChr
ZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC04
NjEsMjcgKzExNTcsNTcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgaWYg
KEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQg
Z3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJs
ZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBn
cm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBn
cm91cC0+bWF0Y2hFbXB0eSgpLmxvd2VzdEJpdFNldCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVD
b3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRD
b3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVS
X1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChw
cm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAg
ICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0g
KGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAg
ICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwor
ICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVT
dGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0g
ICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChr
ID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAg
ICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChh
dXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tl
bnRyeSAtIHRhYmxlXSA9IGgyKGgpOwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CiAgICAgfQpAQCAtOTI4LDkgKzEyNTQsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAw
OwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJh
bnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwog
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVt
QWNjZXNzZXM7CkBAIC05NDMsNDAgKzEyNjcsODYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRF
bnRyeSA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7
Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5j
aAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAg
ICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAg
dW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgp
IC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBT
aXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsK
KyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0g
Z3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3Jv
dXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0
ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0
b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVj
a2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKQorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3By
b2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lv
bkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRT
X1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291
bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAg
aSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBn
cm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAg
ICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVy
T2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
RGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVu
dHJ5ID0gZW50cnk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAg
ICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChI
YXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9y
KGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAg
ICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFz
aygpOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRv
IG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAorICAgICAgICAgICAgICAgIGlmIChIYXNoRnVuY3Rp
b25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3Io
ZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRF
bnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNsYXRv
cjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSks
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAg
ICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVD
b3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRD
b3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVS
X1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2Jl
Q291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQo
cHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAg
ICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlbGV0
ZWRFbnRyeSkgewpAQCAtOTg2LDYgKzEzNTYsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5z
bGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndh
cmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNv
bnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwog
ICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDI0LDYgKzEzOTYsOCBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaCk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9s
cyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIG1fdGFi
bGVdID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKIAogICAg
ICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDQ3LDkgKzE0MjEsMTIgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0
YXRzLT5udW1SZWluc2VydHM7CiAjZW5kaWYKIAotICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBs
b29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0OworICAgICAg
ICBGdWxsTG9va3VwVHlwZSBsb29rdXBSZXN1bHQgPSBmdWxsTG9va3VwRm9yV3JpdGluZzxJZGVu
dGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKTsKKyAgICAgICAg
VmFsdWVUeXBlKiBuZXdFbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKICAgICAgICAg
bmV3RW50cnktPn5WYWx1ZSgpOwogICAgICAgICBuZXcgKE5vdE51bGwsIG5ld0VudHJ5KSBWYWx1
ZVR5cGUoV1RGTW92ZShlbnRyeSkpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlz
LT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxlXSA9
IGgyKGxvb2t1cFJlc3VsdC5zZWNvbmQpOwogCiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAg
ICB9CkBAIC0xMTE4LDYgKzE0OTUsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3Mp
OworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAg
ICAgICAgY29udHJvbHNbcG9zIC0gbV90YWJsZV0gPSBzdGF0aWNfY2FzdDxDb250cm9sPihDb250
cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50
KCkgKyAxKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogCkBAIC0xMTc5
LDYgKzE1NTgsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWxldGVCdWNrZXQoYnVja2V0KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBjb250cm9s
cyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBzdGF0
aWNfY2FzdDxDb250cm9sPihDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgKyty
ZW1vdmVkQnVja2V0Q291bnQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlbW92ZWRCdWNrZXRD
b3VudCkgewpAQCAtMTE5OCwxNCArMTU3OSwzMCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgh
KG1ldGFkYXRhU2l6ZSAlIGFsaWdub2YoVmFsdWVUeXBlKSkpOwogCisgICAgICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworICAgICAgICBp
ZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGFsbG9jYXRp
b25TaXplID0gbWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpOworICAgICAg
ICAgICAgb2Zmc2V0ID0gbWV0YWRhdGFTaXplOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlw
ZSkgKyBzaXplOworICAgICAgICAgICAgb2Zmc2V0ID0gbWV0YWRhdGFTaXplICsgc2l6ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKwogICAgICAg
ICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBz
cGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CiAgICAgICAgIC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0
byBzdXBwb3J0IHRoYXQKICAgICAgICAgaWYgKFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybykKLSAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0
PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9lZE1hbGxvYyhtZXRhZGF0YVNpemUgKyBzaXpl
ICogc2l6ZW9mKFZhbHVlVHlwZSkpKSArIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgICAgICByZXN1
bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNo
VGFibGVNYWxsb2M6Onplcm9lZE1hbGxvYyhhbGxvY2F0aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVl
VHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhhbGxvY2F0
aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0p
OworICAgICAgICB9CiAKLSAgICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSByZWludGVycHJldF9j
YXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Om1hbGxv
YyhtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSArIG1ldGFkYXRhU2l6
ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAg
ICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgICAgIGlmIChzaXplID4gbWF4
U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAgbWVtc2V0KGJpdHdpc2VfY2FzdDxDb250
cm9sKj4ocmVzdWx0KSAtIG9mZnNldCwgc3RhdGljX2Nhc3Q8dWludDhfdD4oQ29udHJvbFZhbHVl
OjpFbXB0eSksIHNpemUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTIx
Nyw3ICsxNjE0LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCiAg
ICAgICAgICAgICAgICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0gICAgICAg
IEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBt
ZXRhZGF0YVNpemUpOworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkp
CisgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSGFz
aFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFk
YXRhU2l6ZSAtIHNpemUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xMjYwLDE1ICsxNjYwLDkg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2
ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CiAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKGJlc3RUYWJs
ZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIg
ZG91YmxlIHNtYWxsTG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc21hbGxNYXhMb2Fk
TnVtZXJhdG9yKSAvIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFi
b3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24oc21hbGxMb2FkRmFjdG9yLCBrZXlDb3VudCwg
YmVzdFRhYmxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3RleHByIGRvdWJsZSBsYXJnZUxvYWRGYWN0
b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGxhcmdlTWF4TG9hZE51bWVyYXRvcikgLyBsYXJnZU1h
eExvYWREZW5vbWluYXRvcjsKLSAgICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2Vy
RXhwYW5zaW9uKGxhcmdlTG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQotICAg
ICAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLSAgICAgICAgfQorICAgICAgICBjb25z
dGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1l
cmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRG
b3JFYWdlckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisg
ICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1U
YWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAgICAgICAgIHJldHVybiBz
dGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKICAgICB9CkBAIC0xMjg4
LDYgKzE2ODIsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX3RhYmxlW2ldOwogICAgICAgICAg
ICAgaWYgKGlzUmVsZWFzZWRXZWFrQnVja2V0KGVudHJ5KSkgewogICAgICAgICAgICAgICAgIGRl
bGV0ZUJ1Y2tldChlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0g
dGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBzdGF0
aWNfY2FzdDxDb250cm9sPihDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgICAg
IHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICAgICAgICAgIHNl
dEtleUNvdW50KGtleUNvdW50KCkgLSAxKTsKICAgICAgICAgICAgIH0KQEAgLTEzNDgsOCArMTc0
NCwxMiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9sZFRhYmxlKQotICAg
ICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9s
ZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlmIChvbGRUYWJsZSkgeworICAgICAg
ICAgICAgaWYgKG9sZFRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAg
ICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9s
ZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxl
KSAtIG1ldGFkYXRhU2l6ZSAtIG9sZFRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBp
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1DUFUuaAppbmRleCBiY2UyM2UwMzQ2ZDU0M2RlZDY5ZGMyYTVjODVmMGU4YjQy
OGRiZTJiLi5lOWZkOGYyYjAzYzlkZGNlNzZmMGM3NWUzYzA0OWVlNmUwYWIzMTY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtQ1BVLmgKQEAgLTEwOSw2ICsxMDksOSBAQAogICAgIHx8IGRlZmluZWQoX01fWDY0KQog
I2RlZmluZSBXVEZfQ1BVX1g4Nl82NCAxCiAjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTIgMQorI2lm
IGRlZmluZWQoX19TU0UzX18pCisjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTMgMQorI2VuZGlmCiAj
ZGVmaW5lIFdURl9DUFVfS05PV04gMQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390198</attachid>
            <date>2020-02-08 22:40:25 -0800</date>
            <delta_ts>2020-02-08 23:04:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200208224025.patch</filename>
            <type>text/plain</type>
            <size>32810</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjczNGNlMjMyZThjY2NlMWRiMzc4NzM1MmMwZTRiNDA2YjUwOGI5
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3QpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojps
b29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZv
cldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRVbmlxdWVGb3JJbml0aWFs
aXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlKToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRh
YmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1D
UFUuaDoKKwogMjAyMC0wMi0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXVEZdIFRyeSB1c2luZyA3NSUgbG9hZCBmYWN0b3IgZm9yIEhhc2hUYWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoVGFibGUuaAppbmRleCBkM2FiMTE5MjRmNGVhMmM3ZGNiZTA3YzFmYjRlYTA4ZjE0NjM3MzYz
Li4zN2I2OTg3MDQ4NTlhNzM4NzY1YTUyZDJjMGI2MDU2NDhmZWE4MzM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoK
ICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NUYWJsZSBmb3IgbGFy
Z2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBBdXRob3JzLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisg
Ki8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRlIDxlbW1pbnRyaW4u
aD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShYODZfU1NFMykKKyNp
bmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUgRFVNUF9IQVNIVEFC
TEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUgMApAQCAt
MzA4LDE5ICszMzUsMTUgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgogICAgIHN0cnVjdCBIYXNo
VGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwg
dGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4
TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21h
bGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBs
YXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFy
Z2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtleUFuZERlbGV0ZUNvdW50LCB1aW50NjRfdCB0
YWJsZVNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21h
bGxUYWJsZUNhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3Vu
dCAqIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIHNtYWxsTWF4TG9hZE51
bWVyYXRvcjsKLSAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIGxhcmdlTWF4
TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIGxhcmdlTWF4TG9hZE51bWVyYXRvcjsKKyAg
ICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIG1heExvYWREZW5vbWluYXRvciA+
PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodWludDY0X3Qgc2l6ZUFyZykK
QEAgLTU2MCwxMSArNTgzLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFs
bCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxN
YXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJh
dG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9t
aW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0g
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6bGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1l
cmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5h
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4TG9hZERlbm9taW5hdG9yOwogICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJs
ZVNpemVQb2xpY3k6Om1heFNtYWxsVGFibGVDYXBhY2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApA
QCAtNTc0LDYgKzU5NCwxNjIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50
T2Zmc2V0ID0gLTQ7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFT
aXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CiAKKyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVp
bnQ4X3Q7CisgICAgICAgIGVudW0gY2xhc3MgQ29udHJvbFZhbHVlIDogQ29udHJvbCB7CisgICAg
ICAgICAgICBFbXB0eSAgID0gMGIxMDAwMDAwMCwKKyAgICAgICAgICAgIERlbGV0ZWQgPSAwYjEx
MTExMTExLAorICAgICAgICB9OworCisgICAgICAgIGlubGluZSB1bnNpZ25lZCBoMSh1bnNpZ25l
ZCBoYXNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaCA+PiA3OworICAgICAg
ICB9CisKKyAgICAgICAgaW5saW5lIENvbnRyb2wgaDIodW5zaWduZWQgaGFzaCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiAweDdGOworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIFQsIHVuc2lnbmVkIHNoaWZ0PgorICAgICAgICBjbGFzcyBCaXRNYXNr
IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUp
OworCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSB1bnNp
Z25lZDsKKyAgICAgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gQml0TWFzazsKKyAgICAgICAgICAg
IHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gQml0TWFzazsKKworICAgICAgICAgICAgZXhwbGljaXQg
Y29uc3RleHByIEJpdE1hc2soVCBtYXNrKQorICAgICAgICAgICAgICAgIDogbV9tYXNrKG1hc2sp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJpdE1hc2smIG9w
ZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbWFzayAmPSAobV9t
YXNrIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrICE9IDA7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQo
bV9tYXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBs
b3dlc3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
bV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGhpZ2hlc3RCaXRTZXQoKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRNU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Qml0TWFzayBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgICAgICBCaXRN
YXNrIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEJpdE1hc2soMCk7IH0KKworICAgICAgICAgICAgdW5z
aWduZWQgdHJhaWxpbmdaZXJvcygpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjdHoobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdW5zaWduZWQgbGVhZGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNseihtX21hc2spID4+
IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrID09IGIubV9t
YXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBCaXRNYXNrJiBhLCBjb25zdCBCaXRNYXNrJiBiKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBhLm1fbWFzayAhPSBiLm1fbWFzazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVCBtX21hc2s7CisgICAgICAgIH07CisKKworI2lmIENQVShYODZfU1NFMikK
KyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gMTY7CisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0
TWFzazx1aW50MTZfdCwgMD47CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQo
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9t
b3ZlbWFza19lcGk4KG1fdmVjdG9yKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1h
c2sgbWF0Y2hCeXRlKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIG1hdGNoID0gX21tX3NldDFfZXBpOChjb250cm9sKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpOChtYXRj
aCwgbV92ZWN0b3IpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hF
bXB0eSgpCisgICAgICAgICAgICB7CisjaWYgQ1BVKFg4Nl9TU0UzKQorICAgICAgICAgICAgICAg
IHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9zaWduX2VwaTgobV92ZWN0b3IsIG1f
dmVjdG9yKSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hCeXRlKHN0YXRp
Y19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RW1wdHkpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBfX20xMjhpIG1fdmVjdG9yOworICAgICAgICB9OworI2Vsc2UK
KyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gODsKKworICAgICAgICAgICAgdXNpbmcgTWFzayA9IEJp
dE1hc2s8dWludDY0X3QsIDM+OworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5T3JEZWxldGVk
KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdGV4cHIgdWludDY0
X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWFzayhtX3ZlY3RvciAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNr
IG1hdGNoQnl0ZShDb250cm9sIGNvbnRyb2wpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gRm9yIHRoZSB0ZWNobmlxdWUsIHNlZToKKyAgICAgICAgICAgICAgICAvLyBo
dHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjI1ZhbHVl
SW5Xb3JkCisgICAgICAgICAgICAgICAgLy8gKERldGVybWluZSBpZiBhIHdvcmQgaGFzIGEgYnl0
ZSBlcXVhbCB0byBuKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIENh
dmVhdDogdGhlcmUgYXJlIGZhbHNlIHBvc2l0aXZlcyBidXQ6CisgICAgICAgICAgICAgICAgLy8g
LSB0aGV5IG9ubHkgb2NjdXIgaWYgdGhlcmUgaXMgYSByZWFsIG1hdGNoCisgICAgICAgICAgICAg
ICAgLy8gLSB0aGV5IG5ldmVyIG9jY3VyIG9uIGtFbXB0eSwga0RlbGV0ZWQsIGtTZW50aW5lbAor
ICAgICAgICAgICAgICAgIC8vIC0gdGhleSB3aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSBieSBz
dWJzZXF1ZW50IGNoZWNrcyBpbiBjb2RlCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBFeGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgdiA9IDB4MTcxNjE1MTQxMzEy
MTExMAorICAgICAgICAgICAgICAgIC8vICAgaGFzaCA9IDB4MTIKKyAgICAgICAgICAgICAgICAv
LyAgIHJldHZhbCA9ICh2IC0gbHNicykgJiB+diAmIG1zYnMgPSAweDAwMDAwMDAwODA4MDAwMDAK
KyAgICAgICAgICAgICAgICBjb25zdGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgw
ODA4MFVMTDsKKyAgICAgICAgICAgICAgICBjb25zdGV4cHIgdWludDY0X3QgbHNicyA9IDB4MDEw
MTAxMDEwMTAxMDEwMVVMTDsKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBtX3ZlY3RvciBeIChs
c2JzICogc3RhdGljX2Nhc3Q8dWludDhfdD4oY29udHJvbCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBNYXNrKCh4IC0gbHNicykgJiB+eCAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBNYXNrIG1hdGNoRW1wdHkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4MDgwODA4MDgwVUxMOworICAgICAg
ICAgICAgICAgIHJldHVybiBNYXNrKChtX3ZlY3RvciAmICh+bV92ZWN0b3IgPDwgNikpICYgbXNi
cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ2NF90IG1fdmVjdG9yOworICAg
ICAgICB9OworI2VuZGlmCisKICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJs
ZVNpemVPZmZzZXRdIDogMDsgfQogICAgICAgICB2b2lkIHNldFRhYmxlU2l6ZSh1bnNpZ25lZCBz
aXplKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gPSBzaXplOyB9CiAgICAgICAgIHVuc2lnbmVkIHRh
YmxlU2l6ZU1hc2soKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIG1fdGFibGUgPyBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplTWFza09mZnNldF0g
OiAwOyB9CkBAIC01ODIsNiArNzU4LDE3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHZvaWQgc2V0S2V5Q291bnQodW5zaWduZWQg
Y291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRdID0gY291bnQ7IH0KICAgICAgICAgdW5zaWduZWQg
ZGVsZXRlZENvdW50KCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJldHVybiByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50T2Zmc2V0XTsgfQogICAgICAg
ICB2b2lkIHNldERlbGV0ZWRDb3VudCh1bnNpZ25lZCBjb3VudCkgY29uc3QgeyBBU1NFUlQobV90
YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRP
ZmZzZXRdID0gY291bnQ7IH0KKyAgICAgICAgQ29udHJvbCogY29udHJvbHMoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRyb2wqPihncm91cHMo
KSk7CisgICAgICAgIH0KKyAgICAgICAgR3JvdXAqIGdyb3VwcygpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAg
ICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEdyb3VwKj4oYml0d2lzZV9jYXN0PENvbnRyb2wqPihtX3RhYmxlKSAtIG1ldGFkYXRhU2l6ZSAt
IHRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBu
dWxscHRyIH07CiAKQEAgLTY2Niw5ICs4NTMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNp
emVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
OwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFC
TEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC02Nzks
NiArODY0LDM5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAg
ICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9
IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBz
aXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUg
LSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAg
ICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91
cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+
bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVs
ZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNo
VHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisg
ICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0
YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5y
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgp
OworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKICAgICAgICAgd2hpbGUgKDEp
IHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAg
ICAgICAgCkBAIC03MjAsOSArOTM4LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAg
VmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
dGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpA
QCAtNzMzLDYgKzk0OSw0OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAK
KyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAg
ICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6
ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3Jv
dXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFz
azsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3Vw
ID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDog
Z3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
VHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRp
b247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYm
ICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtF
TFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+
bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAg
ICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsK
KyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAg
ICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAx
IHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBn
cm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1h
dGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIExvb2t1cFR5cGUodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBv
c2l0aW9uLnZhbHVlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAg
aSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25l
ZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7
CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTc4MSw5ICsxMDM5LDcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25l
ZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0g
SGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXpl
TWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3Rh
dHM6Om51bUFjY2Vzc2VzOwpAQCAtNzk0LDYgKzEwNTAsNDggQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1B
Y2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3Jv
dXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAg
ICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBn
cm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0g
Z3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg
ICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5dGUoZW50cnlIYXNoKSkgeworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJl
ck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1w
dHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4
dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAg
ICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENv
bGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxF
X1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lv
bkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0
U2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0KHRhYmxl
ICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpLCBmYWxzZSwg
aCk7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9
IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsK
ICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwogCiAgICAgICAgIHdoaWxlICgx
KSB7CkBAIC04NDcsOSArMTE0NSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZh
bHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAg
LTg2MSwyNyArMTE1Nyw1NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAg
ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworICAgICAgICBp
ZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRh
YmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBz
aXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAq
IGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9
IGdyb3VwLT5tYXRjaEVtcHR5KCkubG93ZXN0Qml0U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24u
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAg
IGJyZWFrOworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9i
ZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19Q
RVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50
KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisgICAgICAgICAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAg
ICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJs
ZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJl
Y29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0
cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAg
ICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsK
LSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYg
KGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAg
ICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpm
b3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYg
KGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xz
W2VudHJ5IC0gdGFibGVdID0gaDIoaCk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29u
c2lzdGVuY3koKTsKICAgICB9CkBAIC05MjgsOSArMTI1NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9
IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hU
cmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7
CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpu
dW1BY2Nlc3NlczsKQEAgLTk0Myw0MCArMTI2Nyw4NiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRl
ZEVudHJ5ID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEp
IHsKLSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJh
bmNoCi0gICAgICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQor
ICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5
SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXpl
KCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91
cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNr
OworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAg
PSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBn
cm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYg
IWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VM
WShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29k
SXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNs
YXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRC
dWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0
KCplbnRyeSkpCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsr
cHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRD
b3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisg
ICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAg
ICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9
IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
ICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQo
KSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1i
ZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVk
RW50cnkgPSBlbnRyeTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAg
ICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwogICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVN
YXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOworICAgICAgICAg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIg
dG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCisgICAgICAgICAgICAgICAgaWYgKEhhc2hGdW5j
dGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChIYXNo
VHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRv
cihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
ZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xh
dG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwot
ICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJl
Y29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgKytwcm9i
ZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19Q
RVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJv
YmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAg
ICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGsp
ICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAg
ICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGsp
ICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGVs
ZXRlZEVudHJ5KSB7CkBAIC05ODYsNiArMTM1Niw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9y
d2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+
Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gdGFibGVdID0gaDIoaCk7
CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwMjQsNiArMTM5Niw4IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRy
b2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gbV90
YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSArIDEpOwogCiAg
ICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwNDcsOSArMTQyMSwxMiBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21f
c3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRpZgogCi0gICAgICAgIFZhbHVlKiBuZXdFbnRyeSA9
IGxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuZmlyc3Q7CisgICAg
ICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JXcml0aW5nPElk
ZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpOworICAgICAg
ICBWYWx1ZVR5cGUqIG5ld0VudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0LmZpcnN0OwogICAgICAg
ICBuZXdFbnRyeS0+flZhbHVlKCk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgbmV3RW50cnkpIFZh
bHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRo
aXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVd
ID0gaDIobG9va3VwUmVzdWx0LnNlY29uZCk7CiAKICAgICAgICAgcmV0dXJuIG5ld0VudHJ5Owog
ICAgIH0KQEAgLTExMTgsNiArMTQ5NSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICBkZWxldGVCdWNrZXQoKnBv
cyk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAg
ICAgICAgICBjb250cm9sc1twb3MgLSBtX3RhYmxlXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENv
bnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291
bnQoKSArIDEpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAgLTEx
NzksNiArMTU1OCw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRy
b2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0
YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAr
K3JlbW92ZWRCdWNrZXRDb3VudDsKICAgICAgICAgfQogICAgICAgICBpZiAocmVtb3ZlZEJ1Y2tl
dENvdW50KSB7CkBAIC0xMTk4LDE0ICsxNTc5LDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KCEobWV0YWRhdGFTaXplICUgYWxpZ25vZihWYWx1ZVR5cGUpKSk7CiAKKyAgICAgICAgc2l6ZV90
IGFsbG9jYXRpb25TaXplID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAg
IGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkgeworICAgICAgICAgICAgYWxsb2Nh
dGlvblNpemUgPSBtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSk7CisgICAg
ICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVU
eXBlKSArIHNpemU7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBzaXplOwor
ICAgICAgICB9CisKKyAgICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworCiAgICAg
ICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0
IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFy
IHRvIHN1cHBvcnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQot
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nh
c3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNp
emUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhh
c2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFs
dWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKGFsbG9j
YXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtp
XSk7CisgICAgICAgIH0KIAotICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFs
bG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFT
aXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAg
ICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgaWYgKHNpemUgPiBt
YXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICBtZW1zZXQoYml0d2lzZV9jYXN0PENv
bnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50OF90PihDb250cm9sVmFs
dWU6OkVtcHR5KSwgc2l6ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0x
MjE3LDcgKzE2MTQsMTAgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkK
ICAgICAgICAgICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAt
IG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0
eSkKKyAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNo
YXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0
YWRhdGFTaXplIC0gc2l6ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KQEAgLTEyNjAsMTUgKzE2NjAs
OSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVu
QXZlcmFnZUFuZE1heExvYWRSYXRpbzsKICAgICAgICAgfTsKIAotICAgICAgICBpZiAoYmVzdFRh
YmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBkb3VibGUgc21hbGxMb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzbWFsbE1heExv
YWROdW1lcmF0b3IpIC8gc21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAo
YWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihzbWFsbExvYWRGYWN0b3IsIGtleUNvdW50
LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIgZG91YmxlIGxhcmdlTG9hZEZh
Y3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obGFyZ2VNYXhMb2FkTnVtZXJhdG9yKSAvIGxhcmdl
TWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFn
ZXJFeHBhbnNpb24obGFyZ2VMb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0g
ICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAgICAgICB9CisgICAgICAgIGNv
bnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51
bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIGlmIChhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkK
KyAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKICAgICAgICAgdW5zaWduZWQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOwogICAgIH0KQEAgLTEy
ODgsNiArMTY4Miw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1fdGFibGVbaV07CiAgICAgICAg
ICAgICBpZiAoaXNSZWxlYXNlZFdlYWtCdWNrZXQoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAg
ZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMg
PSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0
YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAg
ICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgMSk7CiAgICAgICAgICAgICAgICAg
c2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogICAgICAgICAgICAgfQpAQCAtMTM0OCw4ICsx
NzQ0LDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2xkVGFibGUpCi0g
ICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
b2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgaWYgKG9sZFRhYmxlKSB7CisgICAg
ICAgICAgICBpZiAob2xkVGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAg
ICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
b2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFi
bGUpIC0gbWV0YWRhdGFTaXplIC0gb2xkVGFibGVTaXplKTsKKyAgICAgICAgfQogCiAgICAgICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJldHVybiBuZXdFbnRy
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThi
NDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1DUFUuaApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQp
CiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisj
aWYgZGVmaW5lZChfX1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYK
ICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAxCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390199</attachid>
            <date>2020-02-08 23:04:31 -0800</date>
            <delta_ts>2020-02-09 01:26:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200208230430.patch</filename>
            <type>text/plain</type>
            <size>32957</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjczNGNlMjMyZThjY2NlMWRiMzc4NzM1MmMwZTRiNDA2YjUwOGI5
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3QpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojps
b29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZv
cldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRVbmlxdWVGb3JJbml0aWFs
aXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlKToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+
OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRh
YmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgor
ICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1D
UFUuaDoKKwogMjAyMC0wMi0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXVEZdIFRyeSB1c2luZyA3NSUgbG9hZCBmYWN0b3IgZm9yIEhhc2hUYWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoVGFibGUuaAppbmRleCBkM2FiMTE5MjRmNGVhMmM3ZGNiZTA3YzFmYjRlYTA4ZjE0NjM3MzYz
Li40OGJjYmFiMTUzNGM0YTIyYWYxOTg3YTcyMDBhZjRjNjdjOGFkZDZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoK
ICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NUYWJsZSBmb3IgbGFy
Z2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBBdXRob3JzLgorICoK
KyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisg
Ki8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRlIDxlbW1pbnRyaW4u
aD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShYODZfU1NFMykKKyNp
bmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUgRFVNUF9IQVNIVEFC
TEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUgMApAQCAt
MzA4LDE5ICszMzUsMTUgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgogICAgIHN0cnVjdCBIYXNo
VGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwg
dGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4
TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21h
bGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBs
YXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFy
Z2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtleUFuZERlbGV0ZUNvdW50LCB1aW50NjRfdCB0
YWJsZVNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21h
bGxUYWJsZUNhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3Vu
dCAqIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIHNtYWxsTWF4TG9hZE51
bWVyYXRvcjsKLSAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIGxhcmdlTWF4
TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIGxhcmdlTWF4TG9hZE51bWVyYXRvcjsKKyAg
ICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIG1heExvYWREZW5vbWluYXRvciA+
PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodWludDY0X3Qgc2l6ZUFyZykK
QEAgLTU2MCwxMSArNTgzLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFs
bCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxN
YXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJh
dG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9t
aW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0g
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6bGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1l
cmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5h
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4TG9hZERlbm9taW5hdG9yOwogICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJs
ZVNpemVQb2xpY3k6Om1heFNtYWxsVGFibGVDYXBhY2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApA
QCAtNTc0LDYgKzU5NCwxNjMgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50
T2Zmc2V0ID0gLTQ7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFT
aXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CiAKKyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVp
bnQ4X3Q7CisgICAgICAgIGVudW0gY2xhc3MgQ29udHJvbFZhbHVlIDogQ29udHJvbCB7CisgICAg
ICAgICAgICBFbXB0eSAgID0gMGIxMDAwMDAwMCwKKyAgICAgICAgICAgIERlbGV0ZWQgPSAwYjEx
MTExMTExLAorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBHcm91cDsKKyAgICAgICAgaW5s
aW5lIHVuc2lnbmVkIGgxKHNpemVfdCBoYXNoLCBjb25zdCBHcm91cCogZ3JvdXBzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKGhhc2ggPj4gNykgXiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZ3JvdXBzKSA+PiAxMik7CisgICAgICAgIH0KKwor
ICAgICAgICBpbmxpbmUgQ29udHJvbCBoMih1bnNpZ25lZCBoYXNoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaGFzaCAmIDB4N0Y7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hpZnQ+CisgICAgICAgIGNsYXNzIEJpdE1hc2sgeworICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSk7CisKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHVuc2lnbmVkOwor
ICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSBCaXRNYXNrOworICAgICAgICAgICAgdXNpbmcg
Y29uc3RfaXRlcmF0b3IgPSBCaXRNYXNrOworCisgICAgICAgICAgICBleHBsaWNpdCBjb25zdGV4
cHIgQml0TWFzayhUIG1hc2spCisgICAgICAgICAgICAgICAgOiBtX21hc2sobWFzaykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQml0TWFzayYgb3BlcmF0b3Ir
KygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9tYXNrICY9IChtX21hc2sgLSAx
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX21hc2sgIT0g
MDsgfQorICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2sp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxvd2VzdEJp
dFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2sp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldExTQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gaGlnaGVzdEJpdFNldCgpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldE1TQlNl
dChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCaXRNYXNr
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgICAgIEJpdE1hc2sgZW5k
KCkgY29uc3QgeyByZXR1cm4gQml0TWFzaygwKTsgfQorCisgICAgICAgICAgICB1bnNpZ25lZCB0
cmFpbGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGN0eihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB1bnNpZ25lZCBsZWFkaW5nWmVyb3MoKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2x6KG1fbWFzaykgPj4gc2hpZnQ7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5tX21hc2sgPT0gYi5tX21hc2s7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJp
dE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGEubV9tYXNrICE9IGIubV9tYXNrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUIG1fbWFzazsKKyAgICAgICAgfTsKKworCisjaWYgQ1BVKFg4Nl9TU0UyKQorICAgICAg
ICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkVudHJpZXMgPSAxNjsKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVp
bnQxNl90LCAwPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNr
X2VwaTgobV92ZWN0b3IpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRj
aEJ5dGUoQ29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gbWF0Y2ggPSBfbW1fc2V0MV9lcGk4KGNvbnRyb2wpOworICAgICAgICAgICAgICAg
IHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9jbXBlcV9lcGk4KG1hdGNoLCBtX3Zl
Y3RvcikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkK
KyAgICAgICAgICAgIHsKKyNpZiBDUFUoWDg2X1NTRTMpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1hc2soX21tX21vdmVtYXNrX2VwaTgoX21tX3NpZ25fZXBpOChtX3ZlY3RvciwgbV92ZWN0b3Ip
KSk7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEJ5dGUoc3RhdGljX2Nhc3Q8
Q29udHJvbD4oQ29udHJvbFZhbHVlOjpFbXB0eSkpOworI2VuZGlmCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIF9fbTEyOGkgbV92ZWN0b3I7CisgICAgICAgIH07CisjZWxzZQorICAgICAg
ICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkVudHJpZXMgPSA4OworCisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1
aW50NjRfdCwgMz47CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0ZXhwciB1aW50NjRfdCBtc2Jz
ID0gMHg4MDgwODA4MDgwODA4MDgwVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKG1f
dmVjdG9yICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hC
eXRlKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBGb3IgdGhlIHRlY2huaXF1ZSwgc2VlOgorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9n
cmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCMjVmFsdWVJbldvcmQK
KyAgICAgICAgICAgICAgICAvLyAoRGV0ZXJtaW5lIGlmIGEgd29yZCBoYXMgYSBieXRlIGVxdWFs
IHRvIG4pLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQ2F2ZWF0OiB0
aGVyZSBhcmUgZmFsc2UgcG9zaXRpdmVzIGJ1dDoKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkg
b25seSBvY2N1ciBpZiB0aGVyZSBpcyBhIHJlYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyAt
IHRoZXkgbmV2ZXIgb2NjdXIgb24ga0VtcHR5LCBrRGVsZXRlZCwga1NlbnRpbmVsCisgICAgICAg
ICAgICAgICAgLy8gLSB0aGV5IHdpbGwgYmUgaGFuZGxlZCBncmFjZWZ1bGx5IGJ5IHN1YnNlcXVl
bnQgY2hlY2tzIGluIGNvZGUKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IEV4YW1wbGU6CisgICAgICAgICAgICAgICAgLy8gICB2ID0gMHgxNzE2MTUxNDEzMTIxMTEwCisg
ICAgICAgICAgICAgICAgLy8gICBoYXNoID0gMHgxMgorICAgICAgICAgICAgICAgIC8vICAgcmV0
dmFsID0gKHYgLSBsc2JzKSAmIH52ICYgbXNicyA9IDB4MDAwMDAwMDA4MDgwMDAwMAorICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4MDgwODA4MDgwVUxM
OworICAgICAgICAgICAgICAgIGNvbnN0ZXhwciB1aW50NjRfdCBsc2JzID0gMHgwMTAxMDEwMTAx
MDEwMTAxVUxMOworICAgICAgICAgICAgICAgIGF1dG8geCA9IG1fdmVjdG9yIF4gKGxzYnMgKiBz
dGF0aWNfY2FzdDx1aW50OF90Pihjb250cm9sKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1h
c2soKHggLSBsc2JzKSAmIH54ICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3Rl
eHByIHVpbnQ2NF90IG1zYnMgPSAweDgwODA4MDgwODA4MDgwODBVTEw7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1hc2soKG1fdmVjdG9yICYgKH5tX3ZlY3RvciA8PCA2KSkgJiBtc2JzKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3QgbV92ZWN0b3I7CisgICAgICAgIH07
CisjZW5kaWYKKwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9m
ZnNldF0gOiAwOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVTaXplKHVuc2lnbmVkIHNpemUpIGNv
bnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJs
ZSlbdGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KICAgICAgICAgdW5zaWduZWQgdGFibGVTaXpl
TWFzaygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVNYXNrT2Zmc2V0XSA6IDA7IH0K
QEAgLTU4Miw2ICs3NTksMTcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgdm9pZCBzZXRLZXlDb3VudCh1bnNpZ25lZCBjb3VudCkg
Y29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3Rh
YmxlKVtrZXlDb3VudE9mZnNldF0gPSBjb3VudDsgfQogICAgICAgICB1bnNpZ25lZCBkZWxldGVk
Q291bnQoKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRdOyB9CiAgICAgICAgIHZvaWQg
c2V0RGVsZXRlZENvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNldF0g
PSBjb3VudDsgfQorICAgICAgICBDb250cm9sKiBjb250cm9scygpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KGdyb3VwcygpKTsKKyAg
ICAgICAgfQorICAgICAgICBHcm91cCogZ3JvdXBzKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgICAg
ICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8R3JvdXAq
PihiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KG1fdGFibGUpIC0gbWV0YWRhdGFTaXplIC0gdGFibGVT
aXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZSB7IG51bGxwdHIg
fTsKIApAQCAtNjY2LDkgKzg1NCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGlmICghdGFibGUpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTY3OSw2ICs4NjUs
MzkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChH
cm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdy
b3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2gg
PSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8g
c2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXpl
IC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAg
ICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3Jv
dXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAt
Pm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSog
ZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0Rl
bGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwor
ICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVT
dGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+
cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaCho
KTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNr
KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIHdoaWxlICgx
KSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAgICAg
ICAgICAgIApAQCAtNzIwLDkgKzkzOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAg
IFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpo
YXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsK
QEAgLTczMyw2ICs5NTAsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgog
CisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNp
Z25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9
IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2gg
JiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3Jv
dXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBv
c2l0aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVz
ICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVu
dHJ5LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VM
WShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAg
ICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9i
ZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisg
ICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNp
emVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCog
Z3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0g
Z3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50
cmllcyArIHBvc2l0aW9uLnZhbHVlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAg
ICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRF
bnRyeSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTc4MSw5ICsxMDQwLDcgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAg
ICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0g
ICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNp
Z25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9
IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNzk0LDYgKzEwNTEsNDggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0
YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0g
dGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgs
IGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxl
ICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRy
eUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSAr
IGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVu
dHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVx
dWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0KGVudHJ5LCB0cnVlLCBoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFi
bGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0
cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOwor
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHlPckRl
bGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VM
b29rdXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9u
LnZhbHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAg
ICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAgaSA9
IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBp
ID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAK
ICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTg0Nyw5ICsxMTQ2LDcgQEAgREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBr
ID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFz
aFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFz
azsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6
Om51bUFjY2Vzc2VzOwpAQCAtODYxLDI3ICsxMTU4LDU3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnkgPSB0YWJs
ZSArIGk7CisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1
bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkg
eworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eSgpLmxvd2VzdEJpdFNl
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51
bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFi
bGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0
cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0
YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsg
aTsKKworICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAg
ICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xs
aXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsK
KyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChw
cm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxF
Ci0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQp
OworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVD
b3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAg
ICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVN
YXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsg
PSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVN
YXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6
OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0
cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xz
KCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwogCiAgICAg
ICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtOTI4LDkgKzEy
NTUsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0g
bV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAg
ICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1
bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAg
ICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC05NDMsNDAgKzEyNjgsODYg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAog
ICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSog
ZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsg
aTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVy
IHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlv
bnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlz
LT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3Jv
dXBzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAg
ICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAg
ICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAg
dW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFz
aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAq
IEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwo
RXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1h
dGNoRW1wdHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1
bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisKKyNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAg
ICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsK
KyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAg
ICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAx
IHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBn
cm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1h
dGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52
YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNE
ZWxldGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9
IGVudHJ5OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAg
ICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
ICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJh
bmNoCisgICAgICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5Owor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5
QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4
dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRS
ZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIH0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50
OwotICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJv
YmVDb3VudCk7CisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAg
IEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2Vu
ZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1f
c3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAg
ICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgog
Ci0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91Ymxl
SGFzaChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAg
ICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNo
KGgpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGVsZXRlZEVudHJ5KSB7CkBAIC05ODYsNiAr
MTM1Nyw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRy
eSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAg
ICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAg
IGNvbnRyb2xzW2VudHJ5IC0gdGFibGVdID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtl
eUNvdW50KCkgKyAxKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAg
LTEwMjQsNiArMTM5Nyw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNs
YXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0
cmEpLCBoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkK
KyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gbV90YWJsZV0gPSBoMihoKTsKICAgICAgICAg
c2V0S2V5Q291bnQoa2V5Q291bnQoKSArIDEpOwogCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQo
KSkKQEAgLTEwNDcsOSArMTQyMiwxMiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0czsKICNl
bmRpZgogCi0gICAgICAgIFZhbHVlKiBuZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmcoRXh0cmFj
dG9yOjpleHRyYWN0KGVudHJ5KSkuZmlyc3Q7CisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1
cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JXcml0aW5nPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4
dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpOworICAgICAgICBWYWx1ZVR5cGUqIG5ld0VudHJ5ID0g
bG9va3VwUmVzdWx0LmZpcnN0LmZpcnN0OwogICAgICAgICBuZXdFbnRyeS0+flZhbHVlKCk7CiAg
ICAgICAgIG5ldyAoTm90TnVsbCwgbmV3RW50cnkpIFZhbHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7
CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAg
ICAgICBjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID0gaDIobG9va3VwUmVzdWx0LnNlY29u
ZCk7CiAKICAgICAgICAgcmV0dXJuIG5ld0VudHJ5OwogICAgIH0KQEAgLTExMTgsNiArMTQ5Niw4
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAj
ZW5kaWYKIAogICAgICAgICBkZWxldGVCdWNrZXQoKnBvcyk7CisgICAgICAgIGlmIChhdXRvKiBj
b250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1twb3MgLSBt
X3RhYmxlXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAg
ICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICBzZXRL
ZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAgLTExNzksNiArMTU1OSw4IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNr
ZXQpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkK
KyAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRy
b2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICArK3JlbW92ZWRCdWNrZXRDb3VudDsKICAg
ICAgICAgfQogICAgICAgICBpZiAocmVtb3ZlZEJ1Y2tldENvdW50KSB7CkBAIC0xMTk4LDE0ICsx
NTgwLDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEobWV0YWRhdGFTaXplICUgYWxpZ25v
ZihWYWx1ZVR5cGUpKSk7CiAKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gMDsKKyAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFi
bGVDYXBhY2l0eSkgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUg
KyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSk7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0
YVNpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1l
dGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSArIHNpemU7CisgICAgICAgICAg
ICBvZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBzaXplOworICAgICAgICB9CisKKyAgICAgICAgVmFs
dWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworCiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBs
YXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBi
dXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgICAg
ICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxv
Yzo6emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkp
ICsgbWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFs
bG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hh
cio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAg
ICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgICAgIH0KIAotICAgICAg
ICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGlj
X2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUg
KiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQo
cmVzdWx0W2ldKTsKKyAgICAgICAgaWYgKHNpemUgPiBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisg
ICAgICAgICAgICBtZW1zZXQoYml0d2lzZV9jYXN0PENvbnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0
LCBzdGF0aWNfY2FzdDx1aW50OF90PihDb250cm9sVmFsdWU6OkVtcHR5KSwgc2l6ZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMjE3LDcgKzE2MTUsMTAgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAg
IGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkKICAgICAgICAgICAgICAgICB0YWJsZVtp
XS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KLSAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAg
IGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgIEhhc2hUYWJs
ZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNp
emUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0YWRhdGFTaXplIC0gc2l6ZSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KQEAgLTEyNjAsMTUgKzE2NjEsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgcmV0dXJuIGtleUNv
dW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsK
ICAgICAgICAgfTsKIAotICAgICAgICBpZiAoYmVzdFRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxl
Q2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgc21hbGxMb2FkRmFjdG9y
ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzbWFsbE1heExvYWROdW1lcmF0b3IpIC8gc21hbGxNYXhM
b2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4
cGFuc2lvbihzbWFsbExvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKLSAgICAg
ICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb25zdGV4cHIgZG91YmxlIGxhcmdlTG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4obGFyZ2VNYXhMb2FkTnVtZXJhdG9yKSAvIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yOwotICAg
ICAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obGFyZ2VMb2FkRmFj
dG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgYmVzdFRhYmxl
U2l6ZSAqPSAyOwotICAgICAgICB9CisgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3Rv
ciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21p
bmF0b3I7CisgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRG
YWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgICAgIGJlc3RUYWJsZVNp
emUgKj0gMjsKICAgICAgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6
bWluaW11bVRhYmxlU2l6ZTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUs
IG1pbmltdW1UYWJsZVNpemUpOwogICAgIH0KQEAgLTEyODgsNiArMTY4Myw4IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICBh
dXRvJiBlbnRyeSA9IG1fdGFibGVbaV07CiAgICAgICAgICAgICBpZiAoaXNSZWxlYXNlZFdlYWtC
dWNrZXQoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAg
ICAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRy
b2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0
ZWRDb3VudCgpICsgMSk7CiAgICAgICAgICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAt
IDEpOwogICAgICAgICAgICAgfQpAQCAtMTM0OCw4ICsxNzQ1LDEyIEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAob2xkVGFibGUpCi0gICAgICAgICAgICBIYXNoVGFibGVNYWxs
b2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXpl
KTsKKyAgICAgICAgaWYgKG9sZFRhYmxlKSB7CisgICAgICAgICAgICBpZiAob2xkVGFibGVTaXpl
IDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxs
b2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXpl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplIC0gb2xk
VGFibGVTaXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4
IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThiNDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRk
Y2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1DUFUuaApAQCAtMTA5LDYg
KzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQpCiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0
IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisjaWYgZGVmaW5lZChfX1NTRTNfXykKKyNk
ZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYKICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAx
CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390200</attachid>
            <date>2020-02-09 01:26:45 -0800</date>
            <delta_ts>2020-02-09 15:04:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209012644.patch</filename>
            <type>text/plain</type>
            <size>39149</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjAxNjVjMzE3ZTQ0YjI4OWRlZmQ1ZDVkNGJiNjc3ZTJkYmI4YTE0
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1DUFUuaDoKKwogMjAyMC0wMi0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtXVEZdIFRyeSB1c2luZyA3NSUgbG9hZCBmYWN0b3Ig
Zm9yIEhhc2hUYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCBkM2FiMTE5MjRmNGVhMmM3ZGNiZTA3YzFm
YjRlYTA4ZjE0NjM3MzYzLi4yZmI4MTdhMGI4MDQzN2YyZGY4YTNmNmJmODhlYWZhOGZhNDkyMzVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICoKICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dp
c3NUYWJsZSBmb3IgbGFyZ2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2Vp
bCBBdXRob3JzLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
KyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisgKi8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAj
aW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNs
dWRlIDxlbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQ
VShYODZfU1NFMykKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZp
bmUgRFVNUF9IQVNIVEFCTEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19Q
RVJfVEFCTEUgMApAQCAtMzA4LDE5ICszMzUsMTUgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgog
ICAgIHN0cnVjdCBIYXNoVGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZh
Y3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExv
YWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7CiAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsKIAogICAgICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtleUFuZERlbGV0ZUNv
dW50LCB1aW50NjRfdCB0YWJsZVNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YWJs
ZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBr
ZXlBbmREZWxldGVDb3VudCAqIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAq
IHNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVD
b3VudCAqIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIGxhcmdlTWF4TG9h
ZE51bWVyYXRvcjsKKyAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIG1heExv
YWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodWlu
dDY0X3Qgc2l6ZUFyZykKQEAgLTU2MCwxMSArNTgzLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIC8vIExvYWQt
ZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21h
bGxNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNt
YWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2Fk
RGVub21pbmF0b3I7Ci0gICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1
MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJh
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkTnVtZXJhdG9yOwotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gSGFz
aFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xp
Y3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4TG9hZERlbm9taW5h
dG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBh
Y2l0eSA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heFNtYWxsVGFibGVDYXBhY2l0eTsKICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gSGFzaFRhYmxlU2l6ZVBvbGlj
eTo6bWluTG9hZDsKIApAQCAtNTc0LDYgKzU5NCwyMDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgZGVsZXRlZENvdW50T2Zmc2V0ID0gLTQ7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWV0YWRhdGFTaXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CiAKKyAgICAgICAgdXNp
bmcgQ29udHJvbCA9IHVpbnQ4X3Q7CisgICAgICAgIGVudW0gY2xhc3MgQ29udHJvbFZhbHVlIDog
Q29udHJvbCB7CisgICAgICAgICAgICBFbXB0eSAgID0gMGIxMDAwMDAwMCwKKyAgICAgICAgICAg
IERlbGV0ZWQgPSAwYjExMTExMTEwLAorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBHcm91
cDsKKyAgICAgICAgaW5saW5lIHVuc2lnbmVkIGgxKHNpemVfdCBoYXNoLCBjb25zdCBHcm91cCog
Z3JvdXBzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGhhc2ggPj4gNykgXiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZ3JvdXBzKSA+PiAxMik7
CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgQ29udHJvbCBoMih1bnNpZ25lZCBoYXNoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaCAmIDB4N0Y7CisgICAgICAgIH0KKwor
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hpZnQ+CisgICAgICAgIGNsYXNz
IEJpdE1hc2sgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+
Ojp2YWx1ZSk7CisKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlw
ZSA9IHVuc2lnbmVkOworICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSBCaXRNYXNrOworICAg
ICAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBCaXRNYXNrOworCisgICAgICAgICAgICBl
eHBsaWNpdCBjb25zdGV4cHIgQml0TWFzayhUIG1hc2spCisgICAgICAgICAgICAgICAgOiBtX21h
c2sobWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQml0
TWFzayYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9tYXNr
ICY9IChtX21hc2sgLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBtX21hc2sgIT0gMDsgfQorICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0b3IqKCkgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdl
dExTQlNldChtX21hc2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgT3B0aW9uYWw8dW5z
aWduZWQ+IGxvd2VzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2spID4+IHNoaWZ0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gaGlnaGVzdEJpdFNl
dCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdldE1TQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBCaXRNYXNrIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAg
ICAgIEJpdE1hc2sgZW5kKCkgY29uc3QgeyByZXR1cm4gQml0TWFzaygwKTsgfQorCisgICAgICAg
ICAgICB1bnNpZ25lZCB0cmFpbGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQz
Ml9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0eihtX21hc2spID4+IHNoaWZ0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZWFkaW5nWmVyb3MoKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2x6KG1f
bWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0
TWFzayYgYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5tX21hc2sg
PT0gYi5tX21hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrICE9IGIubV9tYXNrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBUIG1fbWFzazsKKyAgICAgICAgfTsKKworCisjaWYgQ1BVKFg4
Nl9TU0UyKQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSAxNjsKKyAgICAgICAgICAgIHVzaW5nIE1h
c2sgPSBCaXRNYXNrPHVpbnQxNl90LCAwPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9y
RGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1h
c2soX21tX21vdmVtYXNrX2VwaTgobV92ZWN0b3IpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgTWFzayBtYXRjaEJ5dGUoQ29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2ggPSBfbW1fc2V0MV9lcGk4KGNvbnRyb2wpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9jbXBlcV9l
cGk4KG1hdGNoLCBtX3ZlY3RvcikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFz
ayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyNpZiBDUFUoWDg2X1NTRTMpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNrX2VwaTgoX21tX3NpZ25fZXBpOChtX3Zl
Y3RvciwgbV92ZWN0b3IpKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEJ5
dGUoc3RhdGljX2Nhc3Q8Q29udHJvbD4oQ29udHJvbFZhbHVlOjpFbXB0eSkpOworI2VuZGlmCisg
ICAgICAgICAgICB9CisKKworICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fic2Vp
bC9hYnNlaWwtY3BwL2lzc3Vlcy8yMDkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2NjLmdudS5v
cmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTg3ODUzCisgICAgICAgICAgICAvLyBfbW1fY21w
Z3RfZXBpOCBpcyBicm9rZW4gdW5kZXIgR0NDIHdpdGggLWZ1bnNpZ25lZC1jaGFyCisgICAgICAg
ICAgICAvLyBXb3JrIGFyb3VuZCB0aGlzIGJ5IHVzaW5nIHRoZSBwb3J0YWJsZSBpbXBsZW1lbnRh
dGlvbiBvZiBHcm91cAorICAgICAgICAgICAgLy8gd2hlbiB1c2luZyAtZnVuc2lnbmVkLWNoYXIg
dW5kZXIgR0NDLgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBfX20xMjhpIF9tbV9jbXBndF9l
cGk4X2ZpeGVkKF9fbTEyOGkgYSwgX19tMTI4aSBiKQorICAgICAgICAgICAgeworI2lmIENPTVBJ
TEVSKEdDQykKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNfdW5zaWduZWQ8Y2hhcj46OnZhbHVl
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgX19tMTI4aSBtYXNrID0gX21tX3NldDFfZXBpOCgw
eDgwKTsKKyAgICAgICAgICAgICAgICBjb25zdCBfX20xMjhpIGRpZmYgPSBfbW1fc3Vic19lcGk4
KGIsIGEpOworICAgICAgICAgICAgICAgIHJldHVybiBfbW1fY21wZXFfZXBpOChfbW1fYW5kX3Np
MTI4KGRpZmYsIG1hc2spLCBtYXNrKTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAg
ICAgICAgIHJldHVybiBfbW1fY21wZ3RfZXBpOChhLCBiKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBjb252ZXJ0U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxldGVkKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBERUxFVEVEIC0+IEVNUFRZCisgICAgICAg
ICAgICAgICAgLy8gRU1QVFkgLT4gRU1QVFkKKyAgICAgICAgICAgICAgICAvLyBGVUxMIC0+IERF
TEVURUQKKyAgICAgICAgICAgICAgICBhdXRvIG1zYnMgPSBfbW1fc2V0MV9lcGk4KHN0YXRpY19j
YXN0PGNoYXI+KC0xMjgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHgxMjYgPSBfbW1fc2V0MV9l
cGk4KDEyNik7CisjaWYgQ1BVKFg4Nl9TU0UzKQorICAgICAgICAgICAgICAgIGF1dG8gcmVzID0g
X21tX29yX3NpMTI4KF9tbV9zaHVmZmxlX2VwaTgoeDEyNiwgbV92ZWN0b3IpLCBtc2JzKTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgYXV0byB6ZXJvID0gX21tX3NldHplcm9fc2kxMjgoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIHNwZWNpYWxfbWFzayA9IF9tbV9jbXBndF9lcGk4X2ZpeGVkKHpl
cm8sIG1fdmVjdG9yKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlcyA9IF9tbV9vcl9zaTEyOCht
c2JzLCBfbW1fYW5kbm90X3NpMTI4KHNwZWNpYWxfbWFzaywgeDEyNikpOworI2VuZGlmCisgICAg
ICAgICAgICAgICAgbV92ZWN0b3IgPSByZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IF9fbTEyOGkgbV92ZWN0b3I7CisgICAgICAgIH07CisjZWxzZQorICAgICAgICBzdHJ1Y3QgR3Jv
dXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJp
ZXMgPSA4OworCisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1aW50NjRfdCwgMz47
CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4
MDgwODA4MDgwVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKG1fdmVjdG9yICYgbXNi
cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wg
Y29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhl
IHRlY2huaXF1ZSwgc2VlOgorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9ncmFwaGljcy5zdGFu
Zm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCMjVmFsdWVJbldvcmQKKyAgICAgICAgICAg
ICAgICAvLyAoRGV0ZXJtaW5lIGlmIGEgd29yZCBoYXMgYSBieXRlIGVxdWFsIHRvIG4pLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQ2F2ZWF0OiB0aGVyZSBhcmUgZmFs
c2UgcG9zaXRpdmVzIGJ1dDoKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkgb25seSBvY2N1ciBp
ZiB0aGVyZSBpcyBhIHJlYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkgbmV2ZXIg
b2NjdXIgb24ga0VtcHR5LCBrRGVsZXRlZCwga1NlbnRpbmVsCisgICAgICAgICAgICAgICAgLy8g
LSB0aGV5IHdpbGwgYmUgaGFuZGxlZCBncmFjZWZ1bGx5IGJ5IHN1YnNlcXVlbnQgY2hlY2tzIGlu
IGNvZGUKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6Cisg
ICAgICAgICAgICAgICAgLy8gICB2ID0gMHgxNzE2MTUxNDEzMTIxMTEwCisgICAgICAgICAgICAg
ICAgLy8gICBoYXNoID0gMHgxMgorICAgICAgICAgICAgICAgIC8vICAgcmV0dmFsID0gKHYgLSBs
c2JzKSAmIH52ICYgbXNicyA9IDB4MDAwMDAwMDA4MDgwMDAwMAorICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4MDgwODA4MDgwVUxMOworICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciB1aW50NjRfdCBsc2JzID0gMHgwMTAxMDEwMTAxMDEwMTAxVUxMOwor
ICAgICAgICAgICAgICAgIGF1dG8geCA9IG1fdmVjdG9yIF4gKGxzYnMgKiBzdGF0aWNfY2FzdDx1
aW50OF90Pihjb250cm9sKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soKHggLSBsc2Jz
KSAmIH54ICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hF
bXB0eSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3RleHByIHVpbnQ2NF90
IG1zYnMgPSAweDgwODA4MDgwODA4MDgwODBVTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1h
c2soKG1fdmVjdG9yICYgKH5tX3ZlY3RvciA8PCA2KSkgJiBtc2JzKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdm9pZCBjb252ZXJ0U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxldGVk
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdGV4cHIgdWludDY0X3QgbXNi
cyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKyAgICAgICAgICAgICAgICBjb25zdGV4cHIgdWlu
dDY0X3QgbHNicyA9IDB4MDEwMTAxMDEwMTAxMDEwMVVMTDsKKyAgICAgICAgICAgICAgICBhdXRv
IHggPSBtX3ZlY3RvciAmIG1zYnM7CisgICAgICAgICAgICAgICAgYXV0byByZXMgPSAofnggKyAo
eCA+PiA3KSkgJiB+bHNiczsKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IHJlczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3QgbV92ZWN0b3I7CisgICAgICAgIH07Cisj
ZW5kaWYKKwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rh
YmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNl
dF0gOiAwOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVTaXplKHVuc2lnbmVkIHNpemUpIGNvbnN0
IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlb
dGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplTWFz
aygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVNYXNrT2Zmc2V0XSA6IDA7IH0KQEAg
LTU4Miw2ICs4MDMsMTcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgdm9pZCBzZXRLZXlDb3VudCh1bnNpZ25lZCBjb3VudCkgY29u
c3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxl
KVtrZXlDb3VudE9mZnNldF0gPSBjb3VudDsgfQogICAgICAgICB1bnNpZ25lZCBkZWxldGVkQ291
bnQoKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRdOyB9CiAgICAgICAgIHZvaWQgc2V0
RGVsZXRlZENvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNldF0gPSBj
b3VudDsgfQorICAgICAgICBDb250cm9sKiBjb250cm9scygpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KGdyb3VwcygpKTsKKyAgICAg
ICAgfQorICAgICAgICBHcm91cCogZ3JvdXBzKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAgICAgICBp
ZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8R3JvdXAqPihi
aXR3aXNlX2Nhc3Q8Q29udHJvbCo+KG1fdGFibGUpIC0gbWV0YWRhdGFTaXplIC0gdGFibGVTaXpl
KTsKKyAgICAgICAgfQogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZSB7IG51bGxwdHIgfTsK
IApAQCAtNjY2LDkgKzg5OCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGlmICghdGFibGUpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
ICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAg
IHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwog
ICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTY3OSw2ICs5MDksMzkg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91
cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3Vw
SGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBo
MihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6
ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBz
ICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAtPm1h
dGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50
cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0
ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAg
ICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVj
b3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
IGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsK
KyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7
CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIHdoaWxlICgxKSB7
CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAgICAgICAg
ICAgIApAQCAtNzIwLDkgKzk4Myw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZh
bHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAg
LTczMyw2ICs5OTQsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisg
ICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRh
YmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBz
aXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAq
IGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0
aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsg
cG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50
cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
LCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShn
cm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAg
ICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNv
dW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAg
ICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAg
IGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNp
emVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVN
YXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3Jv
dXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3Jv
dXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIExvb2t1cFR5cGUodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmll
cyArIHBvc2l0aW9uLnZhbHVlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1
bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRy
eSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTc4MSw5ICsxMDg0LDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1
bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25l
ZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRh
YmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNzk0LDYgKzEwOTUsNDggQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRz
LT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhp
cy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdy
b3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgx
KSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhh
c2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkg
KiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFs
KEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0KGVudHJ5LCB0cnVlLCBoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwor
ICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVT
dGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+
cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaCho
KTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0
ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29r
dXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZh
bHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAgaSA9IChp
ICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0g
aCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAKICAg
ICAgICAgd2hpbGUgKDEpIHsKQEAgLTg0Nyw5ICsxMTkwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0g
MDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRy
YW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsK
IAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51
bUFjY2Vzc2VzOwpAQCAtODYxLDI3ICsxMjAyLDU3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICBWYWx1ZVR5cGUq
IGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnkgPSB0YWJsZSAr
IGk7CisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1
bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNp
Z25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eSgpLmxvd2VzdEJpdFNldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJl
ck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwor
ICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVT
dGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+
cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaCho
KTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJs
ZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOworICAg
ICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsK
KworICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgICAg
ICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNp
b25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAg
ICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9i
ZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0g
ICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3Vu
dCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBr
ID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAx
IHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRy
YW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+
KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkp
CisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwogCiAgICAgICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtOTI4LDkgKzEyOTks
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
CiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90
YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAg
ICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAg
ICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC05NDMsNDAgKzEzMTIsODYgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAg
ICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogZW50
cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRv
IG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6
OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5n
cm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBz
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAg
dW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAg
ICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5z
aWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdy
b3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNo
RW1wdHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRy
YWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQo
bWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisKKyNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAg
ICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAg
ICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91
cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNo
RW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBl
bnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVu
dHJ5OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpID0gaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAg
ICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNo
CisgICAgICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRy
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9y
OjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
QWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVu
dHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1
bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IH0KICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50Owot
ICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVD
b3VudCk7CisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhh
c2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlm
CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3Rh
dHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAg
bV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0g
ICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgp
OworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGVsZXRlZEVudHJ5KSB7CkBAIC05ODYsNiArMTQw
MSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwg
c3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAg
ICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNv
bnRyb2xzW2VudHJ5IC0gdGFibGVdID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNv
dW50KCkgKyAxKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEw
MjQsNiArMTQ0MSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRl
KCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEp
LCBoKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAg
ICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gbV90YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0
S2V5Q291bnQoa2V5Q291bnQoKSArIDEpOwogCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkK
QEAgLTEwNDcsOSArMTQ2NiwxMiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRp
ZgogCi0gICAgICAgIFZhbHVlKiBuZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9y
OjpleHRyYWN0KGVudHJ5KSkuZmlyc3Q7CisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJl
c3VsdCA9IGZ1bGxMb29rdXBGb3JXcml0aW5nPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJh
Y3Rvcjo6ZXh0cmFjdChlbnRyeSkpOworICAgICAgICBWYWx1ZVR5cGUqIG5ld0VudHJ5ID0gbG9v
a3VwUmVzdWx0LmZpcnN0LmZpcnN0OwogICAgICAgICBuZXdFbnRyeS0+flZhbHVlKCk7CiAgICAg
ICAgIG5ldyAoTm90TnVsbCwgbmV3RW50cnkpIFZhbHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7Cisg
ICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAg
ICBjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID0gaDIobG9va3VwUmVzdWx0LnNlY29uZCk7
CiAKICAgICAgICAgcmV0dXJuIG5ld0VudHJ5OwogICAgIH0KQEAgLTExMTgsNiArMTU0MCw4IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5k
aWYKIAogICAgICAgICBkZWxldGVCdWNrZXQoKnBvcyk7CisgICAgICAgIGlmIChhdXRvKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1twb3MgLSBtX3Rh
YmxlXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAg
ICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICBzZXRLZXlD
b3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAgLTExNzksNiArMTYwMyw4IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQp
OworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAg
ICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xW
YWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICArK3JlbW92ZWRCdWNrZXRDb3VudDsKICAgICAg
ICAgfQogICAgICAgICBpZiAocmVtb3ZlZEJ1Y2tldENvdW50KSB7CkBAIC0xMTk4LDE0ICsxNjI0
LDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEobWV0YWRhdGFTaXplICUgYWxpZ25vZihW
YWx1ZVR5cGUpKSk7CiAKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gMDsKKyAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVD
YXBhY2l0eSkgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUgKyBz
aXplICogc2l6ZW9mKFZhbHVlVHlwZSk7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNp
emU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFk
YXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSArIHNpemU7CisgICAgICAgICAgICBv
ZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBzaXplOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVU
eXBlKiByZXN1bHQgPSBudWxscHRyOworCiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRl
IG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQK
ICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgICAgICBp
ZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6
emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsg
bWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFs
dWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9j
KGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+
KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAg
ICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgICAgIH0KIAotICAgICAgICBW
YWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nh
c3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBz
aXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVz
dWx0W2ldKTsKKyAgICAgICAgaWYgKHNpemUgPiBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAg
ICAgICAgICBtZW1zZXQoYml0d2lzZV9jYXN0PENvbnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0LCBz
dGF0aWNfY2FzdDx1aW50OF90PihDb250cm9sVmFsdWU6OkVtcHR5KSwgc2l6ZSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMjE3LDcgKzE2NTksMTAgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIGlm
ICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkKICAgICAgICAgICAgICAgICB0YWJsZVtpXS5+
VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KLSAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlm
IChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgIEhhc2hUYWJsZU1h
bGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0YWRhdGFTaXplIC0gc2l6ZSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KQEAgLTEyNjAsMTUgKzE3MDUsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgcmV0dXJuIGtleUNvdW50
ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVuQXZlcmFnZUFuZE1heExvYWRSYXRpbzsKICAg
ICAgICAgfTsKIAotICAgICAgICBpZiAoYmVzdFRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2Fw
YWNpdHkpIHsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgc21hbGxMb2FkRmFjdG9yID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzbWFsbE1heExvYWROdW1lcmF0b3IpIC8gc21hbGxNYXhMb2Fk
RGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFu
c2lvbihzbWFsbExvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAg
ICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgZG91YmxlIGxhcmdlTG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
bGFyZ2VNYXhMb2FkTnVtZXJhdG9yKSAvIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAg
ICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obGFyZ2VMb2FkRmFjdG9y
LCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6
ZSAqPSAyOwotICAgICAgICB9CisgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9
IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0
b3I7CisgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0
b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKKyAgICAgICAgICAgIGJlc3RUYWJsZVNpemUg
Kj0gMjsKICAgICAgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1p
bmltdW1UYWJsZVNpemUpOwogICAgIH0KQEAgLTEyODgsNiArMTcyNyw4IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICBhdXRv
JiBlbnRyeSA9IG1fdGFibGVbaV07CiAgICAgICAgICAgICBpZiAoaXNSZWxlYXNlZFdlYWtCdWNr
ZXQoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAg
ICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IHN0YXRpY19jYXN0PENvbnRyb2w+KENvbnRyb2xW
YWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRD
b3VudCgpICsgMSk7CiAgICAgICAgICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEp
OwogICAgICAgICAgICAgfQpAQCAtMTMxMiw2ICsxNzUzLDkyIEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICArK21fc3RhdHMt
Pm51bVJlaGFzaGVzOwogI2VuZGlmCiAKKyAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSA9PSBuZXdU
YWJsZVNpemUgJiYgb2xkVGFibGVTaXplID4gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7CisgICAg
ICAgICAgICAvLyBQZXJmb3JtIGlucGxhY2UgcmVoYXNoaW5nLgorICAgICAgICAgICAgdHlwZW5h
bWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFZhbHVlVHlwZSksIGFsaWdub2YoVmFsdWVU
eXBlKT46OnR5cGUgcmF3OworICAgICAgICAgICAgVmFsdWVUeXBlKiBzbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDxWYWx1ZVR5cGUqPigmcmF3KTsKKyAgICAgICAgICAgIEdyb3VwKiBncm91cHMgPSB0
aGlzLT5ncm91cHMoKTsKKyAgICAgICAgICAgIEFTU0VSVChncm91cHMpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb2xkVGFibGVTaXplOyArK2luZGV4KQor
ICAgICAgICAgICAgICAgIGdyb3Vwc1tpbmRleF0uY29udmVydFNwZWNpYWxUb0VtcHR5QW5kRnVs
bFRvRGVsZXRlZCgpOworICAgICAgICAgICAgQ29udHJvbCogY29udHJvbHMgPSB0aGlzLT5jb250
cm9scygpOworICAgICAgICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgb2xkVGFibGVTaXplOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzW2luZGV4XSAhPSBzdGF0aWNfY2Fz
dDxDb250cm9sPihDb250cm9sVmFsdWU6OkRlbGV0ZWQpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytI
YXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOworI2VuZGlmCisjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgKyttX3N0YXRzLT5udW1SZWluc2VydHM7
CisjZW5kaWYKKworICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogY3VycmVudCA9IG1fdGFibGUg
KyBpbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmN1cnJlbnQp
ICYmICFpc0RlbGV0ZWRCdWNrZXQoKmN1cnJlbnQpKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBoID0gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTo6aGFzaChFeHRyYWN0b3I6OmV4dHJhY3QoKmN1
cnJlbnQpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gbG9va3VwRW1wdHlPckRlbGV0ZWQgPSBb
Jl0gKHVuc2lnbmVkIGgpIC0+IFZhbHVlVHlwZSogeworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFi
bGU7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vw
cyk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgp
IC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sg
PSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBI
YXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRl
ZCgpLmxvd2VzdEJpdFNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvIHByb2JlSW5kZXggPSBbJl0gKFZhbHVlVHlw
ZSogY3VycmVudCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IGN1
cnJlbnQgLSBtX3RhYmxlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChwb3NpdGlvbiAt
IChoMShoLCBncm91cHMpICYgdGFibGVTaXplKCkpKSAmIHRhYmxlU2l6ZSgpKSAvIEdyb3VwOjpu
dW1iZXJPZkVudHJpZXM7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIFZh
bHVlVHlwZSogbmV3RW50cnkgPSBsb29rdXBFbXB0eU9yRGVsZXRlZChoKTsKKworICAgICAgICAg
ICAgICAgIGlmIChMSUtFTFkocHJvYmVJbmRleChjdXJyZW50KSA9PSBwcm9iZUluZGV4KG5ld0Vu
dHJ5KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbHNbaW5kZXhdID0gaDIoaCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVudHJ5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzW25ld0Vu
dHJ5IC0gbV90YWJsZV0gPT0gc3RhdGljX2Nhc3Q8Q29udHJvbD4oQ29udHJvbFZhbHVlOjpFbXB0
eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPn5WYWx1ZVR5cGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBlKFdURk1vdmUo
KmN1cnJlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+flZhbHVlVHlwZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KCpjdXJyZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxlXSA9IGgyKGgpOworICAgICAg
ICAgICAgICAgICAgICBjb250cm9sc1tjdXJyZW50IC0gbV90YWJsZV0gPSBzdGF0aWNfY2FzdDxD
b250cm9sPihDb250cm9sVmFsdWU6OkVtcHR5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnQgPT0gZW50cnkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdFbnRy
eTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPT0gc3Rh
dGljX2Nhc3Q8Q29udHJvbD4oQ29udHJvbFZhbHVlOjpEZWxldGVkKSk7CisgICAgICAgICAgICAg
ICAgbmV3IChOb3ROdWxsLCBzbG90KSBWYWx1ZVR5cGUoV1RGTW92ZSgqY3VycmVudCkpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnQtPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBuZXcg
KE5vdE51bGwsIGN1cnJlbnQpIFZhbHVlVHlwZShXVEZNb3ZlKCpuZXdFbnRyeSkpOworICAgICAg
ICAgICAgICAgIG5ld0VudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICAgICAgbmV3IChO
b3ROdWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBlKFdURk1vdmUoKmN1cnJlbnQpKTsKKyAgICAgICAg
ICAgICAgICBzbG90LT5+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICAgICAgY29udHJvbHNbbmV3
RW50cnkgLSBtX3RhYmxlXSA9IGgyKGgpOworICAgICAgICAgICAgICAgIGlmIChuZXdFbnRyeSA9
PSBlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsKKyAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnkg
PSBuZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAtLWluZGV4OyAvLyBSZXBlYXQgdGhpcyBpbmRl
eCBhZ2Fpbi4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERlbGV0ZWRDb3VudCgwKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25l
ZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRh
YmxlKG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHNldFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOwpA
QCAtMTM0OCw4ICsxODc1LDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
b2xkVGFibGUpCi0gICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgaWYgKG9sZFRh
YmxlKSB7CisgICAgICAgICAgICBpZiAob2xkVGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBh
Y2l0eSkKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplIC0gb2xkVGFibGVTaXplKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJl
dHVybiBuZXdFbnRyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlk
YzJhNWM4NWYwZThiNDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBh
YjMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1DUFUuaApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVm
aW5lZChfTV9YNjQpCiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9Y
ODZfU1NFMiAxCisjaWYgZGVmaW5lZChfX1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NF
MyAxCisjZW5kaWYKICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAxCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390214</attachid>
            <date>2020-02-09 15:04:33 -0800</date>
            <delta_ts>2020-02-09 17:47:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209150432.patch</filename>
            <type>text/plain</type>
            <size>39878</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLmVlMTIwYTM0ZjUzODQzYzFjZDhjY2ZiNTY3NjgyN2UyNTA3NGZl
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSk6CisgICAgICAgICogd3RmL1BsYXRmb3Jt
Q1BVLmg6CisKIDIwMjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbV1RGXSBUcnkgdXNpbmcgNzUlIGxvYWQgZmFjdG9yIGZvciBIYXNoVGFibGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmgKaW5kZXggZDNhYjExOTI0ZjRlYTJjN2RjYmUwN2MxZmI0ZWEwOGYxNDYzNzM2
My4uYzhmYjMwZjk1NTcxMjdkODdjODc0OWZiZTQxMTAzZjJiNmU0YTdkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKQEAgLTE4LDYgKzE4LDIzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
CiAgKi8KKy8qCisgKiBUaGlzIEhhc2hUYWJsZSBpbXBsZW1lbnRzIFN3aXNzVGFibGUgZm9yIGxh
cmdlciBzaXplLgorICoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBYnNlaWwgQXV0aG9ycy4KKyAq
CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
ICovCiAKICNwcmFnbWEgb25jZQogCkBAIC0zNiw2ICs1MywxNiBAQAogI2luY2x1ZGUgPHd0Zi9S
YW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZhbHVlQ2hlY2suaD4KKyNpZiBDUFUoWDg2X1NTRTIpCisjaW5jbHVkZSA8ZW1taW50cmlu
Lmg+CisjaW5jbHVkZSA8aW1taW50cmluLmg+CisjZW5kaWYKKyNpZiBDUFUoWDg2X1NTRTMpCisj
aW5jbHVkZSA8dG1taW50cmluLmg+CisjZW5kaWYKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgogCiAjZGVmaW5lIERVTVBfSEFTSFRB
QkxFX1NUQVRTIDAKICNkZWZpbmUgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFIDAKQEAg
LTMwOCwxOSArMzM1LDE2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4KICAgICBzdHJ1Y3QgSGFz
aFRhYmxlQ2FwYWNpdHlGb3JTaXplIHsKICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIHNtYWxs
IHRhYmxlIGlzIDc1JS4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1h
eExvYWROdW1lcmF0b3IgPSAzOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNt
YWxsTWF4TG9hZERlbm9taW5hdG9yID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhMb2FkTnVtZXJhdG9yID0gMzsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSA0OwogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Ig
bGFyZ2UgdGFibGUgaXMgNTAlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxh
cmdlTWF4TG9hZE51bWVyYXRvciA9IDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbGFyZ2VNYXhMb2FkRGVub21pbmF0b3IgPSAyOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IDEwMjQ7CisgICAgICAgIC8vIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSA4Owog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OwogCiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzaG91bGRFeHBhbmQodWludDY0X3Qga2V5QW5kRGVsZXRl
Q291bnQsIHVpbnQ2NF90IHRhYmxlU2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRh
YmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGtleUFuZERlbGV0ZUNvdW50ICogc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXpl
ICogc21hbGxNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICAgICAgcmV0dXJuIGtleUFuZERlbGV0
ZUNvdW50ICogbGFyZ2VNYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbGFyZ2VNYXhM
b2FkTnVtZXJhdG9yOworICAgICAgICAgICAgcmV0dXJuIGtleUFuZERlbGV0ZUNvdW50ICogbWF4
TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhcGFjaXR5Rm9yU2l6ZSh1
aW50NjRfdCBzaXplQXJnKQpAQCAtNTM0LDYgKzU1OCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHZvaWQgZGVsZXRlUmVsZWFz
ZWRXZWFrQnVja2V0cygpOwogCiAgICAgICAgIFZhbHVlVHlwZSogcmVoYXNoKHVuc2lnbmVkIG5l
d1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSk7CisgICAgICAgIFZhbHVlVHlwZSogcmVoYXNo
SW5QbGFjZSh1bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwogICAgICAg
ICBWYWx1ZVR5cGUqIHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KTsKQEAgLTU2MCwxMSArNTg1LDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNl
bmRpZgogCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCi0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0g
SGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxl
U2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgIC8vIExvYWQtZmFj
dG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VN
YXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdl
TWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkRGVu
b21pbmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVy
YXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6
ZVBvbGljeTo6bWF4TG9hZERlbm9taW5hdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heFNt
YWxsVGFibGVDYXBhY2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5M
b2FkID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApAQCAtNTc0LDYgKzU5NiwxOTgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50T2Zmc2V0ID0gLTQ7CiAgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFTaXplID0gNCAqIHNpemVvZih1
bnNpZ25lZCk7CiAKKyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVpbnQ4X3Q7CisgICAgICAgIGVu
dW0gQ29udHJvbFZhbHVlIDogQ29udHJvbCB7CisgICAgICAgICAgICBFbXB0eSAgID0gMGIxMDAw
MDAwMCwKKyAgICAgICAgICAgIERlbGV0ZWQgPSAwYjExMTExMTExLAorICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBHcm91cDsKKyAgICAgICAgaW5saW5lIHVuc2lnbmVkIGgxKHNpemVfdCBo
YXNoLCBjb25zdCBHcm91cCogZ3JvdXBzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KGhhc2ggPj4gNykgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oZ3JvdXBzKSA+PiAxMik7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgQ29udHJvbCBo
Mih1bnNpZ25lZCBoYXNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaCAmIDB4
N0Y7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hp
ZnQ+CisgICAgICAgIGNsYXNzIEJpdE1hc2sgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSk7CisKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgdXNpbmcgdmFsdWVfdHlwZSA9IHVuc2lnbmVkOworICAgICAgICAgICAgdXNpbmcgaXRlcmF0
b3IgPSBCaXRNYXNrOworICAgICAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBCaXRNYXNr
OworCisgICAgICAgICAgICBleHBsaWNpdCBjb25zdGV4cHIgQml0TWFzayhUIG1hc2spCisgICAg
ICAgICAgICAgICAgOiBtX21hc2sobWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQml0TWFzayYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9tYXNrICY9IChtX21hc2sgLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX21hc2sgIT0gMDsgfQorICAgICAgICAgICAgdW5zaWdu
ZWQgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2spOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxvd2VzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21h
c2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gaGlnaGVzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldE1TQlNldChtX21hc2spID4+IHNoaWZ0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBCaXRNYXNrIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
KnRoaXM7IH0KKyAgICAgICAgICAgIEJpdE1hc2sgZW5kKCkgY29uc3QgeyByZXR1cm4gQml0TWFz
aygwKTsgfQorCisgICAgICAgICAgICB1bnNpZ25lZCB0cmFpbGluZ1plcm9zKCkgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0eihtX21h
c2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZWFk
aW5nWmVyb3MoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9t
YXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2x6KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0
TWFzayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYS5tX21hc2sgPT0gYi5tX21hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2sm
IGIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrICE9IGIu
bV9tYXNrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUIG1fbWFzazsKKyAgICAgICAg
fTsKKworCisjaWYgQ1BVKFg4Nl9TU0UyKQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSAxNjsKKyAg
ICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVpbnQxNl90LCAwPjsKKyAgICAgICAgICAg
IE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNrX2VwaTgobV92ZWN0b3IpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEJ5dGUoQ29udHJvbCBjb250cm9sKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2ggPSBfbW1fc2V0
MV9lcGk4KGNvbnRyb2wpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFz
a19lcGk4KF9tbV9jbXBlcV9lcGk4KG1hdGNoLCBtX3ZlY3RvcikpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyNpZiBDUFUo
WDg2X1NTRTMpCisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ4
X3Q+KENvbnRyb2xWYWx1ZTo6RW1wdHkpID09IC0xMjgpOworICAgICAgICAgICAgICAgIHJldHVy
biBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9zaWduX2VwaTgobV92ZWN0b3IsIG1fdmVjdG9y
KSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hCeXRlKENvbnRyb2xWYWx1
ZTo6RW1wdHkpOworI2VuZGlmCisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgLy8gaHR0
cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3BwL2lzc3Vlcy8yMDkKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTg3ODUzCisg
ICAgICAgICAgICAvLyBfbW1fY21wZ3RfZXBpOCBpcyBicm9rZW4gdW5kZXIgR0NDIHdpdGggLWZ1
bnNpZ25lZC1jaGFyCisgICAgICAgICAgICBpbmxpbmUgc3RhdGljIF9fbTEyOGkgX21tX2NtcGd0
X2VwaThfZml4ZWQoX19tMTI4aSBhLCBfX20xMjhpIGIpCisgICAgICAgICAgICB7CisjaWYgQ09N
UElMRVIoR0NDKQorICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzX3Vuc2lnbmVkPGNoYXI+Ojp2
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBfX20xMjhpIG1hc2sgPSBfbW1fc2V0
MV9lcGk4KDB4ODApOworICAgICAgICAgICAgICAgICAgICBjb25zdCBfX20xMjhpIGRpZmYgPSBf
bW1fc3Vic19lcGk4KGIsIGEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21tX2NtcGVx
X2VwaTgoX21tX2FuZF9zaTEyOChkaWZmLCBtYXNrKSwgbWFzayk7CisgICAgICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIF9tbV9jbXBndF9lcGk4KGEsIGIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGNvbnZlcnRTcGVjaWFsVG9FbXB0eUFu
ZEZ1bGxUb0RlbGV0ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERlbGV0
ZWQoMGIxMTExMTExMSkgfCBFbXB0eSgwYjEwMDAwMDAwKSA9PiBFbXB0eSgwYjEwMDAwMDAwKQor
ICAgICAgICAgICAgICAgIC8vIEZ1bGwoMGIwWFhYWFhYWCkgPT4gRGVsZXRlZCgwYjExMTExMTEx
KQorICAgICAgICAgICAgICAgIGF1dG8gbXNicyA9IF9tbV9zZXQxX2VwaTgoc3RhdGljX2Nhc3Q8
Y2hhcj4oLTEyOCkpOworICAgICAgICAgICAgICAgIGF1dG8gemVybyA9IF9tbV9zZXR6ZXJvX3Np
MTI4KCk7CisgICAgICAgICAgICAgICAgYXV0byBtYXNrID0gX21tX2NtcGd0X2VwaThfZml4ZWQo
emVybywgbV92ZWN0b3IpOworICAgICAgICAgICAgICAgIGF1dG8gcmVzID0gX21tX29yX3NpMTI4
KG1zYnMsIG1hc2spOworICAgICAgICAgICAgICAgIG1fdmVjdG9yID0gcmVzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBfX20xMjhpIG1fdmVjdG9yOworICAgICAgICB9OworI2Vsc2UK
KyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gODsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDY0X3QgbHNicyA9IDB4MDEwMTAxMDEwMTAxMDEwMVVMTDsKKworICAg
ICAgICAgICAgdXNpbmcgTWFzayA9IEJpdE1hc2s8dWludDY0X3QsIDM+OworICAgICAgICAgICAg
TWFzayBtYXRjaEVtcHR5T3JEZWxldGVkKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWFzayhtX3ZlY3RvciAmIG1zYnMpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBNYXNrIG1hdGNoQnl0ZShDb250cm9sIGNvbnRyb2wpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSB0ZWNobmlxdWUsIHNlZToKKyAgICAg
ICAgICAgICAgICAvLyBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhh
Y2tzLmh0bWwjI1ZhbHVlSW5Xb3JkCisgICAgICAgICAgICAgICAgLy8gKERldGVybWluZSBpZiBh
IHdvcmQgaGFzIGEgYnl0ZSBlcXVhbCB0byBuKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIENhdmVhdDogdGhlcmUgYXJlIGZhbHNlIHBvc2l0aXZlcyBidXQ6CisgICAg
ICAgICAgICAgICAgLy8gLSB0aGV5IG9ubHkgb2NjdXIgaWYgdGhlcmUgaXMgYSByZWFsIG1hdGNo
CisgICAgICAgICAgICAgICAgLy8gLSB0aGV5IG5ldmVyIG9jY3VyIG9uIGtFbXB0eSwga0RlbGV0
ZWQsIGtTZW50aW5lbAorICAgICAgICAgICAgICAgIC8vIC0gdGhleSB3aWxsIGJlIGhhbmRsZWQg
Z3JhY2VmdWxseSBieSBzdWJzZXF1ZW50IGNoZWNrcyBpbiBjb2RlCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgdiA9
IDB4MTcxNjE1MTQxMzEyMTExMAorICAgICAgICAgICAgICAgIC8vICAgaGFzaCA9IDB4MTIKKyAg
ICAgICAgICAgICAgICAvLyAgIHJldHZhbCA9ICh2IC0gbHNicykgJiB+diAmIG1zYnMgPSAweDAw
MDAwMDAwODA4MDAwMDAKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBtX3ZlY3RvciBeIChsc2Jz
ICogc3RhdGljX2Nhc3Q8dWludDhfdD4oY29udHJvbCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBNYXNrKCh4IC0gbHNicykgJiB+eCAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBNYXNrIG1hdGNoRW1wdHkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBNYXNrKChtX3ZlY3RvciAmICh+bV92ZWN0b3IgPDwgMSkpICYgbXNicyk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgY29udmVydFNwZWNpYWxUb0VtcHR5QW5kRnVsbFRv
RGVsZXRlZCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRlZCgwYjEx
MTExMTExKSB8IEVtcHR5KDBiMTAwMDAwMDApID0+IEVtcHR5KDBiMTAwMDAwMDApCisgICAgICAg
ICAgICAgICAgLy8gRnVsbCgwYjBYWFhYWFhYKSA9PiBEZWxldGVkKDBiMTExMTExMTEpCisgICAg
ICAgICAgICAgICAgYXV0byB4ID0gbV92ZWN0b3IgJiBtc2JzOworICAgICAgICAgICAgICAgIGF1
dG8gcmVzID0gfnggKyAoeCA+PiA3KTsKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IHJlczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3QgbV92ZWN0b3I7CisgICAgICAg
IH07CisjZW5kaWYKKwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6
ZU9mZnNldF0gOiAwOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVTaXplKHVuc2lnbmVkIHNpemUp
IGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90
YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KICAgICAgICAgdW5zaWduZWQgdGFibGVT
aXplTWFzaygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gbV90YWJsZSA/IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVNYXNrT2Zmc2V0XSA6IDA7
IH0KQEAgLTU4Miw2ICs3OTYsMTcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgdm9pZCBzZXRLZXlDb3VudCh1bnNpZ25lZCBjb3Vu
dCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPiht
X3RhYmxlKVtrZXlDb3VudE9mZnNldF0gPSBjb3VudDsgfQogICAgICAgICB1bnNpZ25lZCBkZWxl
dGVkQ291bnQoKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRdOyB9CiAgICAgICAgIHZv
aWQgc2V0RGVsZXRlZENvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxl
KTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNl
dF0gPSBjb3VudDsgfQorICAgICAgICBDb250cm9sKiBjb250cm9scygpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KGdyb3VwcygpKTsK
KyAgICAgICAgfQorICAgICAgICBHcm91cCogZ3JvdXBzKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAgICAg
ICAgICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8R3Jv
dXAqPihiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KG1fdGFibGUpIC0gbWV0YWRhdGFTaXplIC0gdGFi
bGVTaXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZSB7IG51bGxw
dHIgfTsKIApAQCAtNjY2LDkgKzg5MSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGlmICghdGFibGUpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1h
c2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9T
VEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTY3OSw2ICs5
MDIsMzkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlm
IChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgp
IC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBT
aXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsK
KyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0g
Z3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3Jv
dXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFi
bGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0
cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKICAgICAg
ICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7
CiAgICAgICAgICAgICAgICAgCkBAIC03MjAsOSArOTc2LDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0g
MDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRy
YW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsK
IAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51
bUFjY2Vzc2VzOwpAQCAtNzMzLDYgKzk4Nyw0OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2Vz
OwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkg
eworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQg
Z3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5z
aWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
ICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1i
ZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0Vt
cHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExv
b2t1cFR5cGUoZW50cnksIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9i
ZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19Q
RVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50
KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0
U2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKHRhYmxlICsgaSAq
IEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3Vi
bGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFz
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwog
ICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEp
IHsKQEAgLTc4MSw5ICsxMDc3LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFs
dWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFi
bGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2go
a2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAt
Nzk0LDYgKzEwODgsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisg
ICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRh
YmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBz
aXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAq
IGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0
aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsg
cG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50
cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
LCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0
KGVudHJ5LCB0cnVlLCBoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3Vu
dDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RB
QkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9i
ZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAg
ICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAg
IGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0g
Z3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg
ICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1
dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNldCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdCh0YWJsZSArIGkg
KiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKSwgZmFsc2UsIGgpOwor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
TWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFz
azsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwogCiAgICAgICAgIHdoaWxl
ICgxKSB7CkBAIC04NDcsOSArMTE4Myw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAg
IFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpo
YXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsK
QEAgLTg2MSwyNyArMTE5NSw1NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAg
ICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworICAgICAg
ICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBncm91cEhhc2ggPSBoMShoLCBncm91cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZ3Jv
dXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdy
b3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAg
ICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRv
IHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHkoKS5sb3dlc3RCaXRTZXQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMg
KyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAg
ICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29y
ZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRB
QkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxp
c2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsK
KyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNp
emVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOworICAgICAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKwor
ICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgICAgICsr
cHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAg
ICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNv
dW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAg
ICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAg
ICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0g
MSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5z
bGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4
dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisg
ICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwogCiAgICAgICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtOTI4LDkgKzEyOTIsNyBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAg
ICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJs
ZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAg
IHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25l
ZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAg
KytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC05NDMsNDAgKzEzMDUsODYgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAg
ICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7
Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9w
dGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1w
dHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91
cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5z
aWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3Vw
OjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFj
dG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1w
dHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFr
ZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisKKyNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRp
ZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAg
bV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91
YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7
CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9
IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+
bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9u
LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5
ID0gZW50cnk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFs
KEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAg
aSA9IChpICsgaykgJiBzaXplTWFzazsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAg
ICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7
CisgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91
dCB0aGlzIGJyYW5jaAorICAgICAgICAgICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVx
dWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkg
PSBlbnRyeTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNr
ZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5
OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICB9CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgICAgICsr
cHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAg
ICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNv
dW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAg
ICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAg
ICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0g
MSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlbGV0ZWRFbnRyeSkgewpA
QCAtOTg2LDYgKzEzOTQsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5z
bGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4
dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisg
ICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwogICAgICAgICBzZXRL
ZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhw
YW5kKCkpCkBAIC0xMDI0LDYgKzE0MzQsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0
b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8
RXh0cmE+KGV4dHJhKSwgaCk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNv
bnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIG1fdGFibGVdID0gaDIoaCk7
CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKIAogICAgICAgICBpZiAoc2hv
dWxkRXhwYW5kKCkpCkBAIC0xMDQ3LDkgKzE0NTksMTIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1SZWlu
c2VydHM7CiAjZW5kaWYKIAotICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBsb29rdXBGb3JXcml0
aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0OworICAgICAgICBGdWxsTG9va3Vw
VHlwZSBsb29rdXBSZXN1bHQgPSBmdWxsTG9va3VwRm9yV3JpdGluZzxJZGVudGl0eVRyYW5zbGF0
b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKTsKKyAgICAgICAgVmFsdWVUeXBlKiBu
ZXdFbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKICAgICAgICAgbmV3RW50cnktPn5W
YWx1ZSgpOwogICAgICAgICBuZXcgKE5vdE51bGwsIG5ld0VudHJ5KSBWYWx1ZVR5cGUoV1RGTW92
ZShlbnRyeSkpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygp
KQorICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxlXSA9IGgyKGxvb2t1cFJl
c3VsdC5zZWNvbmQpOwogCiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9CkBAIC0xMTE4
LDYgKzE1MzMsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3MpOworICAgICAgICBp
ZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJv
bHNbcG9zIC0gbV90YWJsZV0gPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAgIHNldERl
bGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlD
b3VudCgpIC0gMSk7CiAKQEAgLTExNzksNiArMTU5Niw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQpOworICAgICAg
ICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAg
ICAgICBjb250cm9sc1tpXSA9IENvbnRyb2xWYWx1ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICsr
cmVtb3ZlZEJ1Y2tldENvdW50OwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW1vdmVkQnVja2V0
Q291bnQpIHsKQEAgLTExOTgsMTQgKzE2MTcsMzAgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IShtZXRhZGF0YVNpemUgJSBhbGlnbm9mKFZhbHVlVHlwZSkpKTsKIAorICAgICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAg
aWYgKHNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBhbGxvY2F0
aW9uU2l6ZSA9IG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKTsKKyAgICAg
ICAgICAgIG9mZnNldCA9IG1ldGFkYXRhU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGFsbG9jYXRpb25TaXplID0gbWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5
cGUpICsgc2l6ZTsKKyAgICAgICAgICAgIG9mZnNldCA9IG1ldGFkYXRhU2l6ZSArIHNpemU7Cisg
ICAgICAgIH0KKworICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisKICAgICAg
ICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQg
c3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAogICAgICAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIg
dG8gc3VwcG9ydCB0aGF0CiAgICAgICAgIGlmIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCi0g
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2Fz
dDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MobWV0YWRhdGFTaXplICsgc2l6
ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0YVNpemUpOworICAgICAgICAgICAgcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFz
aFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MoYWxsb2NhdGlvblNpemUpKSArIG9mZnNldCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1
ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2MoYWxsb2Nh
dGlvblNpemUpKSArIG9mZnNldCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ld
KTsKKyAgICAgICAgfQogCi0gICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxs
b2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0YVNp
emUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAg
ICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgICAgICBpZiAoc2l6ZSA+IG1h
eFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgIG1lbXNldChiaXR3aXNlX2Nhc3Q8Q29u
dHJvbCo+KHJlc3VsdCkgLSBvZmZzZXQsIENvbnRyb2xWYWx1ZTo6RW1wdHksIHNpemUpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTIxNyw3ICsxNjUyLDEwIEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAg
ICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCiAgICAgICAgICAgICAgICAgdGFibGVb
aV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJl
ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAg
ICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICBIYXNoVGFi
bGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0YWRhdGFT
aXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIHNpemUpOwogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+CkBAIC0xMjYwLDE1ICsxNjk4LDkgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIHJldHVybiBrZXlD
b3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87
CiAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKGJlc3RUYWJsZVNpemUgPD0gbWF4U21hbGxUYWJs
ZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIgZG91YmxlIHNtYWxsTG9hZEZhY3Rv
ciA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc21hbGxNYXhMb2FkTnVtZXJhdG9yKSAvIHNtYWxsTWF4
TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJF
eHBhbnNpb24oc21hbGxMb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0gICAg
ICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29uc3RleHByIGRvdWJsZSBsYXJnZUxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGxhcmdlTWF4TG9hZE51bWVyYXRvcikgLyBsYXJnZU1heExvYWREZW5vbWluYXRvcjsKLSAg
ICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKGxhcmdlTG9hZEZh
Y3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQotICAgICAgICAgICAgICAgIGJlc3RUYWJs
ZVNpemUgKj0gMjsKLSAgICAgICAgfQorICAgICAgICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0
b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9t
aW5hdG9yOworICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihsb2Fk
RmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAgICAgICBiZXN0VGFibGVT
aXplICo9IDI7CiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6
Om1pbmltdW1UYWJsZVNpemU7CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXpl
LCBtaW5pbXVtVGFibGVTaXplKTsKICAgICB9CkBAIC0xMjg4LDYgKzE3MjAsOCBAQCBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAg
YXV0byYgZW50cnkgPSBtX3RhYmxlW2ldOwogICAgICAgICAgICAgaWYgKGlzUmVsZWFzZWRXZWFr
QnVja2V0KGVudHJ5KSkgewogICAgICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChlbnRyeSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7CiAg
ICAgICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgMSk7CiAgICAg
ICAgICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogICAgICAgICAgICAgfQpA
QCAtMTMwMCw3ICsxNzM0LDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNl
cHRTaXplKCk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkVGFibGVTaXplID0gdGFibGVTaXplKCk7
Ci0gICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwogCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKICAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSAhPSAwKQpAQCAtMTMxMiw2ICsx
NzQ1LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICAgICArK21fc3RhdHMtPm51bVJlaGFzaGVzOwogI2VuZGlmCiAKKyAgICAg
ICAgaWYgKG9sZFRhYmxlU2l6ZSA9PSBuZXdUYWJsZVNpemUgJiYgb2xkVGFibGVTaXplID4gbWF4
U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIHJlaGFzaEluUGxhY2UobmV3
VGFibGVTaXplLCBlbnRyeSk7CisKKyAgICAgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFi
bGU7CiAgICAgICAgIHVuc2lnbmVkIG9sZEtleUNvdW50ID0ga2V5Q291bnQoKTsKICAgICAgICAg
bV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKICAgICAgICAgc2V0VGFibGVT
aXplKG5ld1RhYmxlU2l6ZSk7CkBAIC0xMzQ4LDEzICsxNzg1LDEwOSBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG9sZFRhYmxlKQotICAgICAgICAgICAgSGFzaFRhYmxlTWFs
bG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6
ZSk7CisgICAgICAgIGlmIChvbGRUYWJsZSkgeworICAgICAgICAgICAgaWYgKG9sZFRhYmxlU2l6
ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAgICAgSGFzaFRhYmxlTWFs
bG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6
ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpm
cmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIG9s
ZFRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25z
aXN0ZW5jeSgpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CiAgICAgfQogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KyAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSh1bnNpZ25lZCB0YWJsZVNpemUsIFZh
bHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YWJs
ZVNpemUgPT0gdGhpcy0+dGFibGVTaXplKCkpOworICAgICAgICBBU1NFUlQodGFibGVTaXplID4g
bWF4U21hbGxUYWJsZUNhcGFjaXR5KTsKKyAgICAgICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0
b3JhZ2U8c2l6ZW9mKFZhbHVlVHlwZSksIGFsaWdub2YoVmFsdWVUeXBlKT46OnR5cGUgcmF3Owor
ICAgICAgICBWYWx1ZVR5cGUqIHNsb3QgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KCZy
YXcpOworICAgICAgICBHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCk7CisgICAgICAgIEFT
U0VSVChncm91cHMpOworCisgICAgICAgIGF1dG8gdHJhbnNmZXIgPSBbJl0oVmFsdWVUeXBlKiBm
cm9tLCBWYWx1ZVR5cGUqIHRvKSB7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsIHRvKSBWYWx1
ZVR5cGUoV1RGTW92ZSgqZnJvbSkpOworICAgICAgICAgICAgZnJvbS0+flZhbHVlVHlwZSgpOwor
ICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSAvIHNp
emVvZihHcm91cCk7CisgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZU1hc2sgPSBncm91cFNpemUg
LSAxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBncm91cFNpemU7
ICsraW5kZXgpCisgICAgICAgICAgICBncm91cHNbaW5kZXhdLmNvbnZlcnRTcGVjaWFsVG9FbXB0
eUFuZEZ1bGxUb0RlbGV0ZWQoKTsKKyAgICAgICAgQ29udHJvbCogY29udHJvbHMgPSB0aGlzLT5j
b250cm9scygpOworICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlU2l6ZTsgKytpbmRleCkgewor
ICAgICAgICAgICAgaWYgKGNvbnRyb2xzW2luZGV4XSAhPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwor
ICAgICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOworI2VuZGlmCisjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICArK21fc3RhdHMtPm51
bVJlaW5zZXJ0czsKKyNlbmRpZgorCisgICAgICAgICAgICBWYWx1ZVR5cGUqIGN1cnJlbnQgPSBt
X3RhYmxlICsgaW5kZXg7CisgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmN1cnJl
bnQpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmN1cnJlbnQpKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqY3Vy
cmVudCkpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsK
KworICAgICAgICAgICAgYXV0byBsb29rdXBFbXB0eU9yRGVsZXRlZCA9IFsmXSh1bnNpZ25lZCBn
cm91cEhhc2gpIC0+IFZhbHVlVHlwZSogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGsgPSAw
OworICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBncm91cFNpemVNYXNrOworICAgICAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdy
b3VwcyArIGk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAt
Pm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRp
b24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAg
ICAgICAgICBpID0gKGkgKyBrKSAmIGdyb3VwU2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBncm91cEluZGV4ID0gWyZdKFZhbHVl
VHlwZSogY3VycmVudCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gY3Vy
cmVudCAtIG1fdGFibGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC8gR3JvdXA6
Om51bWJlck9mRW50cmllczsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIFZhbHVlVHlw
ZSogbmV3RW50cnkgPSBsb29rdXBFbXB0eU9yRGVsZXRlZChncm91cEhhc2gpOworCisgICAgICAg
ICAgICAvLyBJZiBjdXJyZW50IGFuZCBuZXdFbnRyeSBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHdl
IGRvIG5vdCBuZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgaWYgKExJ
S0VMWShncm91cEluZGV4KGN1cnJlbnQpID09IGdyb3VwSW5kZXgobmV3RW50cnkpKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRyb2xzW2luZGV4XSA9IGgyKGgpOworICAgICAgICAgICAgICAgIGlm
IChlbnRyeSA9PSBjdXJyZW50ICYmICFyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID09IENvbnRyb2xW
YWx1ZTo6RW1wdHkpIHsKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+flZhbHVlVHlwZSgpOwor
ICAgICAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIG5ld0VudHJ5KTsKKyAgICAgICAgICAg
ICAgICBpbml0aWFsaXplQnVja2V0KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBjb250cm9s
c1tuZXdFbnRyeSAtIG1fdGFibGVdID0gaDIoaCk7CisgICAgICAgICAgICAgICAgY29udHJvbHNb
Y3VycmVudCAtIG1fdGFibGVdID0gQ29udHJvbFZhbHVlOjpFbXB0eTsKKyAgICAgICAgICAgICAg
ICBpZiAoZW50cnkgPT0gY3VycmVudCAmJiAhcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBuZXdFbnRyeTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPT0g
Q29udHJvbFZhbHVlOjpEZWxldGVkKTsKKyAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIHNs
b3QpOworICAgICAgICAgICAgdHJhbnNmZXIobmV3RW50cnksIGN1cnJlbnQpOworICAgICAgICAg
ICAgdHJhbnNmZXIoc2xvdCwgbmV3RW50cnkpOworICAgICAgICAgICAgY29udHJvbHNbbmV3RW50
cnkgLSBtX3RhYmxlXSA9IGgyKGgpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IGN1cnJlbnQg
JiYgIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdFbnRyeTsKKyAgICAgICAg
ICAgIGlmIChlbnRyeSA9PSBuZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGN1cnJl
bnQ7CisgICAgICAgICAgICAtLWluZGV4OyAvLyBSZXBlYXQgdGhpcyBpbmRleCBhZ2Fpbi4KKyAg
ICAgICAgfQorICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThi
NDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1DUFUuaApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQp
CiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisj
aWYgZGVmaW5lZChfX1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYK
ICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAxCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390220</attachid>
            <date>2020-02-09 17:47:28 -0800</date>
            <delta_ts>2020-02-09 19:19:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209174728.patch</filename>
            <type>text/plain</type>
            <size>41249</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLmQzOTVmNzJiNjcwYThlN2UyYWVmNjdmNDY5NmNjMmE0MWJkYjhi
OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUNQVS5oOgorCiAyMDIwLTAyLTA4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CiAKICAgICAgICAgW1dURl0gVHJ5IHVzaW5nIDc1JSBsb2FkIGZhY3RvciBmb3Ig
SGFzaFRhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IGQzYWIxMTkyNGY0ZWEyYzdkY2JlMDdjMWZiNGVh
MDhmMTQ2MzczNjMuLjhmYjQ4ODFiM2MxZTlhZjdjZGRmNjliOWViYjFkMTAyYzNmMzRlNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0hhc2hUYWJsZS5oCkBAIC0xOCw2ICsxOCwyMyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKgogICovCisvKgorICogVGhpcyBIYXNoVGFibGUgaW1wbGVtZW50cyBTd2lzc1Rh
YmxlIGZvciBsYXJnZXIgc2l6ZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBUaGUgQWJzZWlsIEF1
dGhvcnMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICog
V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKyAqLwogCiAjcHJhZ21hIG9uY2UKIApAQCAtMzYsNiArNTMsMTYgQEAKICNpbmNs
dWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9WYWx1ZUNoZWNrLmg+CisjaWYgQ1BVKFg4Nl9TU0UyKQorI2luY2x1ZGUg
PGVtbWludHJpbi5oPgorI2luY2x1ZGUgPGltbWludHJpbi5oPgorI2VuZGlmCisjaWYgQ1BVKFg4
Nl9TU0UzKQorI2luY2x1ZGUgPHRtbWludHJpbi5oPgorI2VuZGlmCisjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKIAogI2RlZmluZSBE
VU1QX0hBU0hUQUJMRV9TVEFUUyAwCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9U
QUJMRSAwCkBAIC0zMDgsMTkgKzMzNSwxNiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+CiAgICAg
c3RydWN0IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZSB7CiAgICAgICAgIC8vIExvYWQtZmFjdG9y
IGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gMzsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IDQ7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IDM7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gNDsKICAgICAgICAgLy8gTG9hZC1m
YWN0b3IgZm9yIGxhcmdlIHRhYmxlIGlzIDUwJS4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBsYXJnZU1heExvYWROdW1lcmF0b3IgPSAxOwotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gMjsKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSAxMDI0OworICAgICAg
ICAvLyBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IDEw
MjQ7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFj
aXR5ID0gODsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gNjsK
IAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxkRXhwYW5kKHVpbnQ2NF90IGtl
eUFuZERlbGV0ZUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID49
IHRhYmxlU2l6ZSAqIHNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgICAgIHJldHVybiBr
ZXlBbmREZWxldGVDb3VudCAqIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAq
IGxhcmdlTWF4TG9hZE51bWVyYXRvcjsKKyAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVD
b3VudCAqIG1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBtYXhMb2FkTnVtZXJhdG9y
OwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYXBhY2l0
eUZvclNpemUodWludDY0X3Qgc2l6ZUFyZykKQEAgLTUzNCw2ICs1NTgsNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB2b2lkIGRl
bGV0ZVJlbGVhc2VkV2Vha0J1Y2tldHMoKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOworICAgICAgICBWYWx1ZVR5
cGUqIHJlaGFzaEluUGxhY2UodW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5
KTsKICAgICAgICAgVmFsdWVUeXBlKiByZWluc2VydChWYWx1ZVR5cGUmJik7CiAKICAgICAgICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CkBAIC01NjAs
MTEgKzU4NSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAjZW5kaWYKIAogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUg
aXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51
bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9
IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAv
LyBMb2FkLWZhY3RvciBmb3IgbGFyZ2UgdGFibGUgaXMgNTAlLgotICAgICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xp
Y3k6OmxhcmdlTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Omxhcmdl
TWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjptYXhMb2FkTnVtZXJhdG9yOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IEhh
c2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSBIYXNoVGFibGVTaXplUG9s
aWN5OjptYXhTbWFsbFRhYmxlQ2FwYWNpdHk7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWluTG9hZCA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1pbkxvYWQ7CiAKQEAgLTU3NCw2
ICs1OTYsMTk3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRlbGV0ZWRDb3VudE9mZnNldCA9
IC00OwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1ldGFkYXRhU2l6ZSA9IDQg
KiBzaXplb2YodW5zaWduZWQpOwogCisgICAgICAgIHVzaW5nIENvbnRyb2wgPSB1aW50OF90Owor
ICAgICAgICBlbnVtIENvbnRyb2xWYWx1ZSA6IENvbnRyb2wgeworICAgICAgICAgICAgRW1wdHkg
ICA9IDBiMTAwMDAwMDAsCisgICAgICAgICAgICBEZWxldGVkID0gMGIxMTExMTExMSwKKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgR3JvdXA7CisgICAgICAgIGlubGluZSB1bnNpZ25lZCBo
MShzaXplX3QgaGFzaCwgY29uc3QgR3JvdXAqIGdyb3VwcykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIChoYXNoID4+IDcpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGdyb3VwcykgPj4gMTIpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5l
IENvbnRyb2wgaDIodW5zaWduZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGhhc2ggJiAweDdGOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQsIHVu
c2lnbmVkIHNoaWZ0PgorICAgICAgICBjbGFzcyBCaXRNYXNrIHsKKyAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUpOworCisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSB1bnNpZ25lZDsKKyAgICAgICAgICAgIHVz
aW5nIGl0ZXJhdG9yID0gQml0TWFzazsKKyAgICAgICAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9y
ID0gQml0TWFzazsKKworICAgICAgICAgICAgZXhwbGljaXQgY29uc3RleHByIEJpdE1hc2soVCBt
YXNrKQorICAgICAgICAgICAgICAgIDogbV9tYXNrKG1hc2spCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEJpdE1hc2smIG9wZXJhdG9yKysoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1fbWFzayAmPSAobV9tYXNrIC0gMSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrICE9IDA7IH0KKyAgICAgICAg
ICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFY
OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQobV9tYXNrKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsb3dlc3RCaXRTZXQoKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRM
U0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IGhpZ2hlc3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRNU0JTZXQobV9tYXNrKSA+PiBz
aGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQml0TWFzayBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgICAgICBCaXRNYXNrIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIEJpdE1hc2soMCk7IH0KKworICAgICAgICAgICAgdW5zaWduZWQgdHJhaWxpbmdaZXJvcygp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVy
biBjdHoobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5z
aWduZWQgbGVhZGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNseihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrID09IGIubV9tYXNrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaXRNYXNrJiBhLCBjb25z
dCBCaXRNYXNrJiBiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBhLm1f
bWFzayAhPSBiLm1fbWFzazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCBtX21hc2s7
CisgICAgICAgIH07CisKKworI2lmIENQVShYODZfU1NFMikKKyAgICAgICAgc3RydWN0IEdyb3Vw
IHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVz
ID0gMTY7CisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1aW50MTZfdCwgMD47Cisg
ICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KG1fdmVjdG9y
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wg
Y29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hdGNo
ID0gX21tX3NldDFfZXBpOChjb250cm9sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhf
bW1fbW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpOChtYXRjaCwgbV92ZWN0b3IpKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7
CisjaWYgQ1BVKFg4Nl9TU0UzKQorICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8aW50OF90PihDb250cm9sVmFsdWU6OkVtcHR5KSA9PSAtMTI4KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1fc2lnbl9lcGk4KG1fdmVjdG9y
LCBtX3ZlY3RvcikpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoQnl0ZShD
b250cm9sVmFsdWU6OkVtcHR5KTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHAvaXNzdWVzLzIwOQorICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9
ODc4NTMKKyAgICAgICAgICAgIC8vIF9tbV9jbXBndF9lcGk4IGlzIGJyb2tlbiB1bmRlciBHQ0Mg
d2l0aCAtZnVuc2lnbmVkLWNoYXIKKyAgICAgICAgICAgIGlubGluZSBzdGF0aWMgX19tMTI4aSBf
bW1fY21wZ3RfZXBpOF9maXhlZChfX20xMjhpIGEsIF9fbTEyOGkgYikKKyAgICAgICAgICAgIHsK
KyNpZiBDT01QSUxFUihHQ0MpCisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNfdW5zaWduZWQ8
Y2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkgbWFzayA9
IF9tbV9zZXQxX2VwaTgoMHg4MCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkg
ZGlmZiA9IF9tbV9zdWJzX2VwaTgoYiwgYSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBf
bW1fY21wZXFfZXBpOChfbW1fYW5kX3NpMTI4KGRpZmYsIG1hc2spLCBtYXNrKTsKKyAgICAgICAg
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gX21tX2NtcGd0X2VwaTgo
YSwgYik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgY29udmVydFNwZWNpYWxU
b0VtcHR5QW5kRnVsbFRvRGVsZXRlZCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gRGVsZXRlZCgwYjExMTExMTExKSB8IEVtcHR5KDBiMTAwMDAwMDApID0+IEVtcHR5KDBiMTAw
MDAwMDApCisgICAgICAgICAgICAgICAgLy8gRnVsbCgwYjBYWFhYWFhYKSA9PiBEZWxldGVkKDBi
MTExMTExMTEpCisgICAgICAgICAgICAgICAgYXV0byB6ZXJvID0gX21tX3NldHplcm9fc2kxMjgo
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNwZWNpYWwgPSBfbW1fY21wZ3RfZXBpOF9maXhlZCh6
ZXJvLCBtX3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgYXV0byBtc2JzID0gX21tX3NldDFfZXBp
OCgweDgwKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlcyA9IF9tbV9vcl9zaTEyOChtc2JzLCBf
bW1fYW5kbm90X3NpMTI4KHNwZWNpYWwsIF9tbV9zZXQxX2VwaTgoMHhmZikpKTsKKyAgICAgICAg
ICAgICAgICBtX3ZlY3RvciA9IHJlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX19t
MTI4aSBtX3ZlY3RvcjsKKyAgICAgICAgfTsKKyNlbHNlCisgICAgICAgIHN0cnVjdCBHcm91cCB7
CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mRW50cmllcyA9
IDg7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1zYnMgPSAweDgwODA4
MDgwODA4MDgwODBVTEw7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGxz
YnMgPSAweDAxMDEwMTAxMDEwMTAxMDFVTEw7CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBC
aXRNYXNrPHVpbnQ2NF90LCAzPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRl
ZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2sobV92
ZWN0b3IgJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEJ5
dGUoQ29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIEZvciB0aGUgdGVjaG5pcXVlLCBzZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2dy
YXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sIyNWYWx1ZUluV29yZAor
ICAgICAgICAgICAgICAgIC8vIChEZXRlcm1pbmUgaWYgYSB3b3JkIGhhcyBhIGJ5dGUgZXF1YWwg
dG8gbikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBDYXZlYXQ6IHRo
ZXJlIGFyZSBmYWxzZSBwb3NpdGl2ZXMgYnV0OgorICAgICAgICAgICAgICAgIC8vIC0gdGhleSBv
bmx5IG9jY3VyIGlmIHRoZXJlIGlzIGEgcmVhbCBtYXRjaAorICAgICAgICAgICAgICAgIC8vIC0g
dGhleSBuZXZlciBvY2N1ciBvbiBrRW1wdHksIGtEZWxldGVkLCBrU2VudGluZWwKKyAgICAgICAg
ICAgICAgICAvLyAtIHRoZXkgd2lsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkgYnkgc3Vic2VxdWVu
dCBjaGVja3MgaW4gY29kZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
RXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgIHYgPSAweDE3MTYxNTE0MTMxMjExMTAKKyAg
ICAgICAgICAgICAgICAvLyAgIGhhc2ggPSAweDEyCisgICAgICAgICAgICAgICAgLy8gICByZXR2
YWwgPSAodiAtIGxzYnMpICYgfnYgJiBtc2JzID0gMHgwMDAwMDAwMDgwODAwMDAwCisgICAgICAg
ICAgICAgICAgYXV0byB4ID0gbV92ZWN0b3IgXiAobHNicyAqIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGNvbnRyb2wpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygoeCAtIGxzYnMpICYgfngg
JiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygobV92ZWN0b3IgJiAo
fm1fdmVjdG9yIDw8IDEpKSAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
b2lkIGNvbnZlcnRTcGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIERlbGV0ZWQoMGIxMTExMTExMSkgfCBFbXB0eSgwYjEwMDAw
MDAwKSA9PiBFbXB0eSgwYjEwMDAwMDAwKQorICAgICAgICAgICAgICAgIC8vIEZ1bGwoMGIwWFhY
WFhYWCkgPT4gRGVsZXRlZCgwYjExMTExMTExKQorICAgICAgICAgICAgICAgIGF1dG8geCA9IG1f
dmVjdG9yICYgbXNiczsKKyAgICAgICAgICAgICAgICBhdXRvIHJlcyA9IH54ICsgKHggPj4gNyk7
CisgICAgICAgICAgICAgICAgbV92ZWN0b3IgPSByZXM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHVpbnQ2NF90IG1fdmVjdG9yOworICAgICAgICB9OworI2VuZGlmCisKICAgICAgICAg
dW5zaWduZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdIDogMDsgfQogICAgICAg
ICB2b2lkIHNldFRhYmxlU2l6ZSh1bnNpZ25lZCBzaXplKSBjb25zdCB7IEFTU0VSVChtX3RhYmxl
KTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0g
PSBzaXplOyB9CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZU1hc2soKSBjb25zdCB7IEFTU0VS
VChtX3RhYmxlKTsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4o
bV90YWJsZSlbdGFibGVTaXplTWFza09mZnNldF0gOiAwOyB9CkBAIC01ODIsNiArNzk1LDE3IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
ICAgIHZvaWQgc2V0S2V5Q291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFi
bGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRd
ID0gY291bnQ7IH0KICAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50KCkgY29uc3QgeyBBU1NF
UlQobV90YWJsZSk7IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlb
ZGVsZXRlZENvdW50T2Zmc2V0XTsgfQogICAgICAgICB2b2lkIHNldERlbGV0ZWRDb3VudCh1bnNp
Z25lZCBjb3VudCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRdID0gY291bnQ7IH0KKyAgICAgICAg
Q29udHJvbCogY29udHJvbHMoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PENvbnRyb2wqPihncm91cHMoKSk7CisgICAgICAgIH0KKyAgICAgICAgR3Jv
dXAqIGdyb3VwcygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxl
U2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBt
YXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEdyb3VwKj4oYml0d2lzZV9jYXN0PENvbnRy
b2wqPihtX3RhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIHRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAog
ICAgICAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CiAKQEAgLTY2Niw5ICs4OTAs
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVk
IGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAm
IHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFi
bGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC02NzksNiArOTAxLDM5IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+
bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMt
Pmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoLCBncm91
cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1
bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkg
eworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5dGUoZW50cnlIYXNo
KSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICog
R3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChM
SUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3By
b2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lv
bkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRT
X1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291
bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAg
ICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAg
IHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAgICAgICAgICAgIApAQCAt
NzIwLDkgKzk3NSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSog
dGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1h
c2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9T
VEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTczMyw2ICs5
ODYsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlm
IChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgp
IC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBT
aXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsK
KyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0g
Z3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3Jv
dXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0
Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAg
ICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91
cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91
cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNldCgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTG9va3VwVHlwZSh0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVz
ICsgcG9zaXRpb24udmFsdWUoKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChrID09IDAp
CisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAg
ICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAg
ICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxl
dGVkRW50cnkgPSAwOwogCiAgICAgICAgIHdoaWxlICgxKSB7CkBAIC03ODEsOSArMTA3Niw3IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAg
ICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxl
OwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICAr
K0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTc5NCw2ICsxMDg3LDQ4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsr
bV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3Vw
cyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBo
MShoLCBncm91cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91
cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3
aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5dGUo
ZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFi
bGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0
KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9y
OjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1w
dHkoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFz
aFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYK
KworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1f
c3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJs
ZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBn
cm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1h
dGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VMb29rdXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmll
cyArIHBvc2l0aW9uLnZhbHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsK
KyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7
CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSog
ZGVsZXRlZEVudHJ5ID0gMDsKIAogICAgICAgICB3aGlsZSAoMSkgewpAQCAtODQ3LDkgKzExODIs
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
CiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90
YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAg
ICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAg
ICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC04NjEsMjcgKzExOTQsNTcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRp
ZgogCiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAg
ICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0
aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwg
Z3JvdXBzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8g
c2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXpl
IC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAg
ICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3Jv
dXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRj
aEVtcHR5KCkubG93ZXN0Qml0U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0
YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAg
ICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CisjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAg
ICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQp
OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChp
ICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICAgICAg
dW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNF
bXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAg
ICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3Rh
dHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5y
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAg
IGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndh
cmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0
byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50
cnkgLSB0YWJsZV0gPSBoMihoKTsKIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogICAgIH0KQEAgLTkyOCw5ICsxMjkxLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsK
ICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNp
emVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5z
bGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAog
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFj
Y2Vzc2VzOwpAQCAtOTQzLDQwICsxMzA0LDg2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50
cnkgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewot
ICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gK
LSAgICAgICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAg
ICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBl
bnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxl
U2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
Z3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXpl
TWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdy
b3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9u
IDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9z
aXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkp
ICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChM
SUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBr
ZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3du
R29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRy
eSksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVu
dHJ5OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1
Y2tldCgqZW50cnkpKQorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAg
ICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENv
bGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxF
X1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lv
bkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAg
ICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAg
ICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5s
b3dlc3RCaXRTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAq
IEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkp
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVu
dHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25v
d25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91Ymxl
SGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7
CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBz
aXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYg
c2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGVudHJ5
ID0gdGFibGUgKyBpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHdlIGNv
dW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKKyAgICAgICAg
ICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQo
bWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
LCBrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25v
d25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAg
ICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3Rh
dHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5y
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAg
IGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIGlmIChkZWxldGVkRW50cnkpIHsKQEAgLTk4Niw2ICsxMzkzLDggQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
fQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndh
cmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0
byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50
cnkgLSB0YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSArIDEp
OwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTAyNCw2ICsxNDMz
LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBz
dGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGgpOworICAg
ICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAg
Y29udHJvbHNbZW50cnkgLSBtX3RhYmxlXSA9IGgyKGgpOwogICAgICAgICBzZXRLZXlDb3VudChr
ZXlDb3VudCgpICsgMSk7CiAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTA0Nyw5
ICsxNDU4LDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKLSAgICAg
ICAgVmFsdWUqIG5ld0VudHJ5ID0gbG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3Qo
ZW50cnkpKS5maXJzdDsKKyAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9va3VwUmVzdWx0ID0gZnVs
bExvb2t1cEZvcldyaXRpbmc8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRy
YWN0KGVudHJ5KSk7CisgICAgICAgIFZhbHVlVHlwZSogbmV3RW50cnkgPSBsb29rdXBSZXN1bHQu
Zmlyc3QuZmlyc3Q7CiAgICAgICAgIG5ld0VudHJ5LT5+VmFsdWUoKTsKICAgICAgICAgbmV3IChO
b3ROdWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBlKFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgaWYg
KGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xz
W25ld0VudHJ5IC0gbV90YWJsZV0gPSBoMihsb29rdXBSZXN1bHQuc2Vjb25kKTsKIAogICAgICAg
ICByZXR1cm4gbmV3RW50cnk7CiAgICAgfQpAQCAtMTExOCw2ICsxNTMyLDggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAg
ICAgIGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhp
cy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW3BvcyAtIG1fdGFibGVdID0gQ29u
dHJvbFZhbHVlOjpEZWxldGVkOwogICAgICAgICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50
KCkgKyAxKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogCkBAIC0xMTc5
LDYgKzE1OTUsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBkZWxldGVCdWNrZXQoYnVja2V0KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBjb250cm9s
cyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBDb250
cm9sVmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAgICAgICArK3JlbW92ZWRCdWNrZXRDb3VudDsKICAg
ICAgICAgfQogICAgICAgICBpZiAocmVtb3ZlZEJ1Y2tldENvdW50KSB7CkBAIC0xMTk4LDE0ICsx
NjE2LDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEobWV0YWRhdGFTaXplICUgYWxpZ25v
ZihWYWx1ZVR5cGUpKSk7CiAKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gMDsKKyAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFi
bGVDYXBhY2l0eSkgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUg
KyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSk7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0
YVNpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1l
dGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSArIHNpemU7CisgICAgICAgICAg
ICBvZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBzaXplOworICAgICAgICB9CisKKyAgICAgICAgVmFs
dWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworCiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBs
YXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBi
dXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgICAg
ICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxv
Yzo6emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkp
ICsgbWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFs
bG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hh
cio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAg
ICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgICAgIH0KIAotICAgICAg
ICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGlj
X2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUg
KiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQo
cmVzdWx0W2ldKTsKKyAgICAgICAgaWYgKHNpemUgPiBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisg
ICAgICAgICAgICBtZW1zZXQoYml0d2lzZV9jYXN0PENvbnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0
LCBDb250cm9sVmFsdWU6OkVtcHR5LCBzaXplKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKQEAgLTEyMTcsNyArMTY1MSwxMCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWRCdWNrZXQo
dGFibGVbaV0pKQogICAgICAgICAgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKICAgICAg
ICAgfQotICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21hbGxU
YWJsZUNhcGFjaXR5KQorICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0
YWJsZSkgLSBtZXRhZGF0YVNpemUgLSBzaXplKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpAQCAtMTI2
MCwxNSArMTY5Nyw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFs
ZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOwogICAgICAgICB9OwogCi0gICAgICAg
IGlmIChiZXN0VGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkgewotICAgICAgICAg
ICAgY29uc3RleHByIGRvdWJsZSBzbWFsbExvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+
KHNtYWxsTWF4TG9hZE51bWVyYXRvcikgLyBzbWFsbE1heExvYWREZW5vbWluYXRvcjsKLSAgICAg
ICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKHNtYWxsTG9hZEZhY3Rv
ciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQotICAgICAgICAgICAgICAgIGJlc3RUYWJsZVNp
emUgKj0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUg
bGFyZ2VMb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsYXJnZU1heExvYWROdW1lcmF0
b3IpIC8gbGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJl
c2hvbGRGb3JFYWdlckV4cGFuc2lvbihsYXJnZUxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFi
bGVTaXplKSkKLSAgICAgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0K
KyAgICAgICAgY29uc3RleHByIGRvdWJsZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtYXhMb2FkTnVtZXJhdG9yKSAvIG1heExvYWREZW5vbWluYXRvcjsKKyAgICAgICAgaWYgKGFi
b3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RU
YWJsZVNpemUpKQorICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwogICAgICAgICB1bnNp
Z25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAg
ICAgICByZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7CiAg
ICAgfQpAQCAtMTI4OCw2ICsxNzE5LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbV90YWJsZVtp
XTsKICAgICAgICAgICAgIGlmIChpc1JlbGVhc2VkV2Vha0J1Y2tldChlbnRyeSkpIHsKICAgICAg
ICAgICAgICAgICBkZWxldGVCdWNrZXQoZW50cnkpOworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRy
b2xzW2ldID0gQ29udHJvbFZhbHVlOjpEZWxldGVkOwogICAgICAgICAgICAgICAgIHNldERlbGV0
ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICAgICAgICAgIHNldEtleUNvdW50
KGtleUNvdW50KCkgLSAxKTsKICAgICAgICAgICAgIH0KQEAgLTEzMDAsNyArMTczMyw2IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAg
IGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOwogCiAgICAgICAgIHVu
c2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOwotICAgICAgICBWYWx1ZVR5cGUqIG9s
ZFRhYmxlID0gbV90YWJsZTsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgIGlm
IChvbGRUYWJsZVNpemUgIT0gMCkKQEAgLTEzMTIsNiArMTc0NCwxMCBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgKyttX3N0
YXRzLT5udW1SZWhhc2hlczsKICNlbmRpZgogCisgICAgICAgIGlmIChvbGRUYWJsZVNpemUgPT0g
bmV3VGFibGVTaXplICYmIG9sZFRhYmxlU2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAg
ICAgICAgICAgIHJldHVybiByZWhhc2hJblBsYWNlKG5ld1RhYmxlU2l6ZSwgZW50cnkpOworCisg
ICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwogICAgICAgICB1bnNpZ25lZCBv
bGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxl
KG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHNldFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOwpAQCAt
MTM0OCwxMyArMTc4NCwxMTYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChv
bGRUYWJsZSkKLSAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9j
YXN0PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBpZiAob2xkVGFi
bGUpIHsKKyAgICAgICAgICAgIGlmIChvbGRUYWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFj
aXR5KQorICAgICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9j
YXN0PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNo
YXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUgLSBvbGRUYWJsZVNpemUpOworICAgICAgICB9
CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmV0
dXJuIG5ld0VudHJ5OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgYXV0byBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJl
aGFzaEluUGxhY2UodW5zaWduZWQgdGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1
ZVR5cGUqCisgICAgeworICAgICAgICBBU1NFUlQodGFibGVTaXplID09IHRoaXMtPnRhYmxlU2l6
ZSgpKTsKKyAgICAgICAgQVNTRVJUKHRhYmxlU2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSk7
CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihWYWx1ZVR5cGUp
LCBhbGlnbm9mKFZhbHVlVHlwZSk+Ojp0eXBlIHJhdzsKKyAgICAgICAgVmFsdWVUeXBlKiBzbG90
ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPigmcmF3KTsKKyAgICAgICAgR3JvdXAqIGdy
b3VwcyA9IHRoaXMtPmdyb3VwcygpOworICAgICAgICBBU1NFUlQoZ3JvdXBzKTsKKworICAgICAg
ICBhdXRvIHRyYW5zZmVyID0gWyZdKFZhbHVlVHlwZSogZnJvbSwgVmFsdWVUeXBlKiB0bykgewor
ICAgICAgICAgICAgbmV3IChOb3ROdWxsLCB0bykgVmFsdWVUeXBlKFdURk1vdmUoKmZyb20pKTsK
KyAgICAgICAgICAgIGZyb20tPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgfTsKKworICAgICAgICB1
bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUgLyBzaXplb2YoR3JvdXApOworICAgICAgICB1
bnNpZ25lZCBncm91cFNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IGluZGV4IDwgZ3JvdXBTaXplOyArK2luZGV4KQorICAgICAgICAgICAg
Z3JvdXBzW2luZGV4XS5jb252ZXJ0U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxldGVkKCk7CisK
KyAgICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBDb250cm9sKiBj
b250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IHRhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWVUeXBl
KiBjdXJyZW50ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICAgICAgaWYgKGNvbnRyb2xzW2lu
ZGV4XSAhPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dHJvbHNbaW5kZXhdID09IENvbnRyb2xWYWx1ZTo6RW1wdHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudC0+flZhbHVlVHlwZSgpOworICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXpl
QnVja2V0KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAg
ICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOworI2VuZGlmCisjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICArK21fc3RhdHMtPm51bVJlaW5z
ZXJ0czsKKyNlbmRpZgorCisgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmN1cnJl
bnQpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmN1cnJlbnQpKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGggPSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqY3Vy
cmVudCkpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsK
KworICAgICAgICAgICAgYXV0byBsb29rdXBFbXB0eU9yRGVsZXRlZCA9IFsmXSh1bnNpZ25lZCBn
cm91cEhhc2gpIC0+IFZhbHVlVHlwZSogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGsgPSAw
OworICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBncm91cFNpemVNYXNrOworICAgICAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdy
b3VwcyArIGk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAt
Pm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRp
b24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAg
ICAgICAgICBpID0gKGkgKyBrKSAmIGdyb3VwU2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBncm91cEluZGV4ID0gWyZdKFZhbHVl
VHlwZSogY3VycmVudCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gY3Vy
cmVudCAtIG1fdGFibGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC8gR3JvdXA6
Om51bWJlck9mRW50cmllczsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIFZhbHVlVHlw
ZSogbmV3RW50cnkgPSBsb29rdXBFbXB0eU9yRGVsZXRlZChncm91cEhhc2gpOworCisgICAgICAg
ICAgICAvLyBJZiBjdXJyZW50IGFuZCBuZXdFbnRyeSBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHdl
IGRvIG5vdCBuZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgaWYgKExJ
S0VMWShncm91cEluZGV4KGN1cnJlbnQpID09IGdyb3VwSW5kZXgobmV3RW50cnkpKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRyb2xzW2luZGV4XSA9IGgyKGgpOworICAgICAgICAgICAgICAgIGlm
IChlbnRyeSA9PSBjdXJyZW50ICYmICFyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID09IENvbnRyb2xW
YWx1ZTo6RW1wdHkpIHsKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+flZhbHVlVHlwZSgpOwor
ICAgICAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIG5ld0VudHJ5KTsKKyAgICAgICAgICAg
ICAgICBpbml0aWFsaXplQnVja2V0KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBjb250cm9s
c1tuZXdFbnRyeSAtIG1fdGFibGVdID0gaDIoaCk7CisgICAgICAgICAgICAgICAgY29udHJvbHNb
Y3VycmVudCAtIG1fdGFibGVdID0gQ29udHJvbFZhbHVlOjpFbXB0eTsKKyAgICAgICAgICAgICAg
ICBpZiAoZW50cnkgPT0gY3VycmVudCAmJiAhcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBuZXdFbnRyeTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPT0g
Q29udHJvbFZhbHVlOjpEZWxldGVkKTsKKyAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIHNs
b3QpOworICAgICAgICAgICAgdHJhbnNmZXIobmV3RW50cnksIGN1cnJlbnQpOworICAgICAgICAg
ICAgdHJhbnNmZXIoc2xvdCwgbmV3RW50cnkpOworICAgICAgICAgICAgY29udHJvbHNbbmV3RW50
cnkgLSBtX3RhYmxlXSA9IGgyKGgpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IGN1cnJlbnQg
JiYgIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdFbnRyeTsKKyAgICAgICAg
ICAgIGlmIChlbnRyeSA9PSBuZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGN1cnJl
bnQ7CisgICAgICAgICAgICAtLWluZGV4OyAvLyBSZXBlYXQgdGhpcyBpbmRleCBhZ2Fpbi4KKyAg
ICAgICAgfQorICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CisgICAgICAgIGludGVybmFsQ2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKQEAgLTE0NTcsMTYg
KzE5OTYsMjQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBkZWxl
dGVkQ291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNp
emUoKTsKKyAgICAgICAgQ29udHJvbCogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdGFibGVTaXplOyArK2opIHsKICAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgajsKLSAgICAgICAgICAgIGlmIChpc0Vt
cHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY29udHJvbHNbal0gPT0gQ29udHJvbFZhbHVlOjpFbXB0eSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRC
dWNrZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7
CiAgICAgICAgICAgICAgICAgKytkZWxldGVkQ291bnQ7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoY29udHJvbHNbal0gIT0gQ29udHJvbFZhbHVlOjpFbXB0eSAmJiBjb250
cm9sc1tqXSAhPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgYXV0byYga2V5
ID0gRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CiAgICAgICAgICAgICBjb25zdF9pdGVyYXRv
ciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYw
ZThiNDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1DUFUuaApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9Y
NjQpCiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAx
CisjaWYgZGVmaW5lZChfX1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5k
aWYKICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAxCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390222</attachid>
            <date>2020-02-09 19:19:31 -0800</date>
            <delta_ts>2020-02-09 19:23:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209191930.patch</filename>
            <type>text/plain</type>
            <size>43902</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjhmNjg1YTdiYjJhNGE5M2NlNWRjMmZkMjg2OWQwNDcxNmNjMjlh
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeSBjb25zdCk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUNQVS5oOgorICAgICAgICAqIHd0Zi9WYWx1ZUNoZWNrLmg6CisgICAgICAgIChX
VEY6OlZhbHVlQ2hlY2s8dm9pZDo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgICogd3RmL1Zl
Y3Rvci5oOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisKIDIw
MjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V1RGXSBUcnkgdXNpbmcgNzUlIGxvYWQgZmFjdG9yIGZvciBIYXNoVGFibGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgK
aW5kZXggZDNhYjExOTI0ZjRlYTJjN2RjYmUwN2MxZmI0ZWEwOGYxNDYzNzM2My4uY2MxMzIwNzY0
MDhiYzA2YTgxYTVjZGMyN2RkYWY0OTAzOGFkNDBiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTE4LDYg
KzE4LDIzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKy8qCisg
KiBUaGlzIEhhc2hUYWJsZSBpbXBsZW1lbnRzIFN3aXNzVGFibGUgZm9yIGxhcmdlciBzaXplLgor
ICoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBYnNlaWwgQXV0aG9ycy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
ICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKICNwcmFn
bWEgb25jZQogCkBAIC0zNiw2ICs1MywxNiBAQAogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZhbHVlQ2hl
Y2suaD4KKyNpZiBDUFUoWDg2X1NTRTIpCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisjaW5jbHVk
ZSA8aW1taW50cmluLmg+CisjZW5kaWYKKyNpZiBDUFUoWDg2X1NTRTMpCisjaW5jbHVkZSA8dG1t
aW50cmluLmg+CisjZW5kaWYKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVk
ZSA8YXJtX25lb24uaD4KKyNlbmRpZgogCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxFX1NUQVRTIDAK
ICNkZWZpbmUgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFIDAKQEAgLTQ5LDcgKzc2LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogCiAvLyBFbmFibGVzIGludGVybmFsIFdURiBjb25zaXN0ZW5jeSBjaGVj
a3MgdGhhdCBhcmUgaW52b2tlZCBhdXRvbWF0aWNhbGx5LiBOb24tV1RGIGNhbGxlcnMgY2FuIGNh
bGwgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgZXZlbiBpZiBpbnRlcm5hbCBjaGVja3MgYXJlIGRp
c2FibGVkLgotI2RlZmluZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAorI2RlZmluZSBD
SEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMQogCiAjaWZkZWYgTkRFQlVHCiAjZGVmaW5lIENI
RUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMgMApAQCAtMzA4LDE5ICszMzUsMTYgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1
bnNpZ25lZCBzaXplPgogICAgIHN0cnVjdCBIYXNoVGFibGVDYXBhY2l0eUZvclNpemUgewogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSA0Owor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAzOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7
CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9
IDI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFj
aXR5ID0gMTAyNDsKKyAgICAgICAgLy8gc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFs
bFRhYmxlQ2FwYWNpdHkgPSAxMDI0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IDg7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWluTG9hZCA9IDY7CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3Vs
ZEV4cGFuZCh1aW50NjRfdCBrZXlBbmREZWxldGVDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBh
Y2l0eSkKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBzbWFsbE1h
eExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBzbWFsbE1heExvYWROdW1lcmF0b3I7Ci0g
ICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBsYXJnZU1heExvYWREZW5vbWlu
YXRvciA+PSB0YWJsZVNpemUgKiBsYXJnZU1heExvYWROdW1lcmF0b3I7CisgICAgICAgICAgICBy
ZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXpl
ICogbWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FwYWNpdHlGb3JTaXplKHVpbnQ2NF90IHNpemVBcmcpCkBAIC01MzQsNiAr
NTU4LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgdm9pZCBkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKCk7CiAKICAgICAgICAg
VmFsdWVUeXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5
KTsKKyAgICAgICAgVmFsdWVUeXBlKiByZWhhc2hJblBsYWNlKHVuc2lnbmVkIG5ld1RhYmxlU2l6
ZSwgVmFsdWVUeXBlKiBlbnRyeSk7CiAgICAgICAgIFZhbHVlVHlwZSogcmVpbnNlcnQoVmFsdWVU
eXBlJiYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBl
JiBidWNrZXQpOwpAQCAtNTYwLDExICs1ODUsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgLy8gTG9hZC1mYWN0
b3IgZm9yIHNtYWxsIHRhYmxlIGlzIDc1JS4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBzbWFsbE1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1h
eExvYWROdW1lcmF0b3I7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxN
YXhMb2FkRGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFsbE1heExvYWREZW5v
bWluYXRvcjsKLSAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIGxhcmdlIHRhYmxlIGlzIDUwJS4K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWROdW1lcmF0b3Ig
PSBIYXNoVGFibGVTaXplUG9saWN5OjpsYXJnZU1heExvYWROdW1lcmF0b3I7Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkRGVub21pbmF0b3IgPSBIYXNoVGFi
bGVTaXplUG9saWN5OjpsYXJnZU1heExvYWREZW5vbWluYXRvcjsKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6
bWF4TG9hZE51bWVyYXRvcjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhM
b2FkRGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjptYXhMb2FkRGVub21pbmF0b3I7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5
ID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4U21hbGxUYWJsZUNhcGFjaXR5OwogICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSBIYXNoVGFibGVTaXplUG9saWN5Ojpt
aW5Mb2FkOwogCkBAIC01NzQsNiArNTk2LDE5OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBk
ZWxldGVkQ291bnRPZmZzZXQgPSAtNDsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtZXRhZGF0YVNpemUgPSA0ICogc2l6ZW9mKHVuc2lnbmVkKTsKIAorICAgICAgICB1c2luZyBD
b250cm9sID0gdWludDhfdDsKKyAgICAgICAgZW51bSBDb250cm9sVmFsdWUgOiBDb250cm9sIHsK
KyAgICAgICAgICAgIEVtcHR5ICAgPSAwYjEwMDAwMDAwLAorICAgICAgICAgICAgRGVsZXRlZCA9
IDBiMTExMTExMTEsCisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IEdyb3VwOworICAgICAg
ICBpbmxpbmUgdW5zaWduZWQgaDEoc2l6ZV90IGhhc2gsIGNvbnN0IEdyb3VwKiBncm91cHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoaGFzaCA+PiA3KSBeIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihncm91cHMpID4+IDEyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlubGluZSBDb250cm9sIGgyKHVuc2lnbmVkIGhhc2gpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBoYXNoICYgMHg3RjsKKyAgICAgICAgfQorCisgICAgICAgIHRl
bXBsYXRlIDxjbGFzcyBULCB1bnNpZ25lZCBzaGlmdD4KKyAgICAgICAgY2xhc3MgQml0TWFzayB7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlKTsK
KworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB1c2luZyB2YWx1ZV90eXBlID0gdW5zaWdu
ZWQ7CisgICAgICAgICAgICB1c2luZyBpdGVyYXRvciA9IEJpdE1hc2s7CisgICAgICAgICAgICB1
c2luZyBjb25zdF9pdGVyYXRvciA9IEJpdE1hc2s7CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGNv
bnN0ZXhwciBCaXRNYXNrKFQgbWFzaykKKyAgICAgICAgICAgICAgICA6IG1fbWFzayhtYXNrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCaXRNYXNrJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX21hc2sgJj0gKG1fbWFz
ayAtIDEpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
ayAhPSAwOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRvciooKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TFNCU2V0KG1f
bWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gbG93ZXN0Qml0U2V0KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TFNCU2V0KG1fbWFzaykgPj4gc2hpZnQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBoaWdoZXN0Qml0U2V0
KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0TVNCU2V0KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEJpdE1hc2sgYmVnaW4oKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgICAgICAg
ICAgQml0TWFzayBlbmQoKSBjb25zdCB7IHJldHVybiBCaXRNYXNrKDApOyB9CisKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHRyYWlsaW5nWmVyb3MoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVDMy
X01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3R6KG1fbWFzaykgPj4gc2hpZnQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlYWRpbmdaZXJvcygpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBjbHoobV9t
YXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRNYXNrJiBhLCBjb25zdCBCaXRN
YXNrJiBiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBhLm1fbWFzayA9
PSBiLm1fbWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yIT0oY29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYS5tX21hc2sgIT0gYi5tX21hc2s7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFQgbV9tYXNrOworICAgICAgICB9OworCisKKyNpZiAwCisvLyAj
aWYgQ1BVKFg4Nl9TU0UyKQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSAxNjsKKyAgICAgICAgICAg
IHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVpbnQxNl90LCAwPjsKKyAgICAgICAgICAgIE1hc2sgbWF0
Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hc2soX21tX21vdmVtYXNrX2VwaTgobV92ZWN0b3IpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgTWFzayBtYXRjaEJ5dGUoQ29udHJvbCBjb250cm9sKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2ggPSBfbW1fc2V0MV9lcGk4KGNv
bnRyb2wpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9t
bV9jbXBlcV9lcGk4KG1hdGNoLCBtX3ZlY3RvcikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgTWFzayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyNpZiBDUFUoWDg2X1NTRTMp
CisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ4X3Q+KENvbnRy
b2xWYWx1ZTo6RW1wdHkpID09IC0xMjgpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9t
bV9tb3ZlbWFza19lcGk4KF9tbV9zaWduX2VwaTgobV92ZWN0b3IsIG1fdmVjdG9yKSkpOworI2Vs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hCeXRlKENvbnRyb2xWYWx1ZTo6RW1wdHkp
OworI2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHVi
LmNvbS9hYnNlaWwvYWJzZWlsLWNwcC9pc3N1ZXMvMjA5CisgICAgICAgICAgICAvLyBodHRwczov
L2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD04Nzg1MworICAgICAgICAgICAg
Ly8gX21tX2NtcGd0X2VwaTggaXMgYnJva2VuIHVuZGVyIEdDQyB3aXRoIC1mdW5zaWduZWQtY2hh
cgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBfX20xMjhpIF9tbV9jbXBndF9lcGk4X2ZpeGVk
KF9fbTEyOGkgYSwgX19tMTI4aSBiKQorICAgICAgICAgICAgeworI2lmIENPTVBJTEVSKEdDQykK
KyAgICAgICAgICAgICAgICBpZiAoc3RkOjppc191bnNpZ25lZDxjaGFyPjo6dmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX19tMTI4aSBtYXNrID0gX21tX3NldDFfZXBpOCgweDgw
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tMTI4aSBkaWZmID0gX21tX3N1YnNfZXBp
OChiLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9tbV9jbXBlcV9lcGk4KF9tbV9h
bmRfc2kxMjgoZGlmZiwgbWFzayksIG1hc2spOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICAgICAgICAgIHJldHVybiBfbW1fY21wZ3RfZXBpOChhLCBiKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdm9pZCBjb252ZXJ0U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxl
dGVkKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBEZWxldGVkKDBiMTExMTEx
MTEpIHwgRW1wdHkoMGIxMDAwMDAwMCkgPT4gRW1wdHkoMGIxMDAwMDAwMCkKKyAgICAgICAgICAg
ICAgICAvLyBGdWxsKDBiMFhYWFhYWFgpID0+IERlbGV0ZWQoMGIxMTExMTExMSkKKyAgICAgICAg
ICAgICAgICBhdXRvIHplcm8gPSBfbW1fc2V0emVyb19zaTEyOCgpOworICAgICAgICAgICAgICAg
IGF1dG8gc3BlY2lhbCA9IF9tbV9jbXBndF9lcGk4X2ZpeGVkKHplcm8sIG1fdmVjdG9yKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG1zYnMgPSBfbW1fc2V0MV9lcGk4KDB4ODApOworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzID0gX21tX29yX3NpMTI4KG1zYnMsIF9tbV9hbmRub3Rfc2kxMjgoc3Bl
Y2lhbCwgX21tX3NldDFfZXBpOCgweGZmKSkpOworICAgICAgICAgICAgICAgIG1fdmVjdG9yID0g
cmVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfX20xMjhpIG1fdmVjdG9yOworICAg
ICAgICB9OworI2Vsc2UKKyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gODsKKyAgICAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKyAg
ICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbHNicyA9IDB4MDEwMTAxMDEwMTAx
MDEwMVVMTDsKKworICAgICAgICAgICAgdXNpbmcgTWFzayA9IEJpdE1hc2s8dWludDY0X3QsIDM+
OworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5T3JEZWxldGVkKCkgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhtX3ZlY3RvciAmIG1zYnMpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNrIG1hdGNoQnl0ZShDb250cm9sIGNvbnRyb2wp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSB0ZWNobmlx
dWUsIHNlZToKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1
L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjI1ZhbHVlSW5Xb3JkCisgICAgICAgICAgICAgICAgLy8g
KERldGVybWluZSBpZiBhIHdvcmQgaGFzIGEgYnl0ZSBlcXVhbCB0byBuKS4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIENhdmVhdDogdGhlcmUgYXJlIGZhbHNlIHBvc2l0
aXZlcyBidXQ6CisgICAgICAgICAgICAgICAgLy8gLSB0aGV5IG9ubHkgb2NjdXIgaWYgdGhlcmUg
aXMgYSByZWFsIG1hdGNoCisgICAgICAgICAgICAgICAgLy8gLSB0aGV5IG5ldmVyIG9jY3VyIG9u
IGtFbXB0eSwga0RlbGV0ZWQsIGtTZW50aW5lbAorICAgICAgICAgICAgICAgIC8vIC0gdGhleSB3
aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSBieSBzdWJzZXF1ZW50IGNoZWNrcyBpbiBjb2RlCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOgorICAgICAgICAg
ICAgICAgIC8vICAgdiA9IDB4MTcxNjE1MTQxMzEyMTExMAorICAgICAgICAgICAgICAgIC8vICAg
aGFzaCA9IDB4MTIKKyAgICAgICAgICAgICAgICAvLyAgIHJldHZhbCA9ICh2IC0gbHNicykgJiB+
diAmIG1zYnMgPSAweDAwMDAwMDAwODA4MDAwMDAKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBt
X3ZlY3RvciBeIChsc2JzICogc3RhdGljX2Nhc3Q8dWludDhfdD4oY29udHJvbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBNYXNrKCh4IC0gbHNicykgJiB+eCAmIG1zYnMpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHkoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBNYXNrKChtX3ZlY3RvciAmICh+bV92ZWN0b3IgPDwgMSkpICYg
bXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgY29udmVydFNwZWNpYWxU
b0VtcHR5QW5kRnVsbFRvRGVsZXRlZCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gRGVsZXRlZCgwYjExMTExMTExKSB8IEVtcHR5KDBiMTAwMDAwMDApID0+IEVtcHR5KDBiMTAw
MDAwMDApCisgICAgICAgICAgICAgICAgLy8gRnVsbCgwYjBYWFhYWFhYKSA9PiBEZWxldGVkKDBi
MTExMTExMTEpCisgICAgICAgICAgICAgICAgYXV0byB4ID0gbV92ZWN0b3IgJiBtc2JzOworICAg
ICAgICAgICAgICAgIGF1dG8gcmVzID0gfnggKyAoeCA+PiA3KTsKKyAgICAgICAgICAgICAgICBt
X3ZlY3RvciA9IHJlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWludDY0X3QgbV92
ZWN0b3I7CisgICAgICAgIH07CisjZW5kaWYKKwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUo
KSBjb25zdCB7IHJldHVybiBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1f
dGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gOiAwOyB9CiAgICAgICAgIHZvaWQgc2V0VGFibGVTaXpl
KHVuc2lnbmVkIHNpemUpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KICAgICAgICAg
dW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4g
bV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVN
YXNrT2Zmc2V0XSA6IDA7IH0KQEAgLTU4Miw2ICs3OTYsMTcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgdm9pZCBzZXRLZXlDb3Vu
dCh1bnNpZ25lZCBjb3VudCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihtX3RhYmxlKVtrZXlDb3VudE9mZnNldF0gPSBjb3VudDsgfQogICAgICAg
ICB1bnNpZ25lZCBkZWxldGVkQ291bnQoKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRd
OyB9CiAgICAgICAgIHZvaWQgc2V0RGVsZXRlZENvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7
IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2Rl
bGV0ZWRDb3VudE9mZnNldF0gPSBjb3VudDsgfQorICAgICAgICBDb250cm9sKiBjb250cm9scygp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Q29udHJv
bCo+KGdyb3VwcygpKTsKKyAgICAgICAgfQorICAgICAgICBHcm91cCogZ3JvdXBzKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVT
aXplKCk7CisgICAgICAgICAgICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8R3JvdXAqPihiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KG1fdGFibGUpIC0gbWV0
YWRhdGFTaXplIC0gdGFibGVTaXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIFZhbHVlVHlwZSog
bV90YWJsZSB7IG51bGxwdHIgfTsKIApAQCAtNjY2LDkgKzg5MSw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGlmICghdGFibGUp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICB1bnNpZ25lZCBzaXplTWFz
ayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9y
OjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3Nl
czsKQEAgLTY3OSw2ICs5MDIsMzkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRp
ZgogCisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1
bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6
ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNp
emVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhh
c2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAg
R3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHBvc2l0aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRy
aWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tl
dCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgq
ZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hF
bXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAg
ICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAg
ICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsg
PSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGsp
ICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBz
aXplTWFzazsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50
cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAgICAgCkBAIC03MjAsOSArOTc2LDcgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAg
ICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0g
ICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNp
Z25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9
IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNzMzLDYgKzk4Nyw0OCBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3Rh
dHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0
aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwg
Z3JvdXBzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAg
ICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOwor
ICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAg
ICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUg
KDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5
SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsg
aSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50
cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1
YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZW50cnksIHRydWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAg
ICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpy
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYg
KGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFz
aCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxl
dGVkKCkubG93ZXN0Qml0U2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBU
eXBlKHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgp
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChp
ICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0g
aCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAKICAg
ICAgICAgd2hpbGUgKDEpIHsKQEAgLTc4MSw5ICsxMDc3LDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0g
MDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRy
YW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsK
IAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51
bUFjY2Vzc2VzOwpAQCAtNzk0LDYgKzEwODgsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3Nl
czsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkg
PSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVt
YmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNF
bXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6
ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlTG9va3VwUmVzdWx0KGVudHJ5LCB0cnVlLCBoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAg
ICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFC
TEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09
IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOwor
ICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAo
MSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgp
Lmxvd2VzdEJpdFNldCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJl
c3VsdCh0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUo
KSwgZmFsc2UsIGgpOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAg
ICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQg
aSA9IGggJiBzaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwog
CiAgICAgICAgIHdoaWxlICgxKSB7CkBAIC04NDcsOSArMTE4Myw3IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQg
ayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNp
Z25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhh
c2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1h
c2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRz
OjpudW1BY2Nlc3NlczsKQEAgLTg2MSwyNyArMTE5NSw1NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5ID0gdGFi
bGUgKyBpOworICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoLCBncm91cHMpOworICAgICAgICAg
ICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAg
ICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAg
dW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAg
ICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHkoKS5sb3dlc3RCaXRT
ZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpu
dW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAg
ICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgogCi0gICAgICAg
ICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwor
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3Rh
dHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhh
c2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6
ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNp
emVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9
IHRhYmxlICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
LSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpy
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJv
YmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9u
QXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNf
UEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHBy
b2JlQ291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291
bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAg
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAg
ICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRy
YW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMt
PmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgp
OwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAt
OTI4LDkgKzEyOTIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUq
IHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVN
YXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwot
ICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC05NDMsNDAg
KzEzMDUsODYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZh
bHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9
IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhl
IGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhh
c2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgaWYgKEdyb3VwKiBncm91
cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0g
aDEoaCwgZ3JvdXBzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOwor
ICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3Jv
dXApOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAg
ICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRl
KGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRh
YmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tl
dCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRv
cjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkp
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
Z3JvdXAtPm1hdGNoRW1wdHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkK
LSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisKKyNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAg
ICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9i
ZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisg
ICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAo
aSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gZ3JvdXBI
YXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAg
IEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9z
aXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50
cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0
ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9
IGVudHJ5OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSGFzaFRy
YW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRy
eSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGsgPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7Cisg
ICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXpl
TWFzaygpOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVy
IHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAorICAgICAgICAgICAgICAgIGlmIChIYXNoRnVu
Y3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0
b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNs
YXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRy
eSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
LSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpy
ZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJv
YmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9u
QXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNf
UEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHBy
b2JlQ291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291
bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAg
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAg
ICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRl
bGV0ZWRFbnRyeSkgewpAQCAtOTg2LDYgKzEzOTQsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRy
YW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZv
cndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMt
PmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgp
OwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDI0LDYgKzE0MzQsOCBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAgICAg
ICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaCk7CisgICAgICAgIGlmIChhdXRvKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIG1f
dGFibGVdID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKIAog
ICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDQ3LDkgKzE0NTksMTIgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKytt
X3N0YXRzLT5udW1SZWluc2VydHM7CiAjZW5kaWYKIAotICAgICAgICBWYWx1ZSogbmV3RW50cnkg
PSBsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0OworICAg
ICAgICBGdWxsTG9va3VwVHlwZSBsb29rdXBSZXN1bHQgPSBmdWxsTG9va3VwRm9yV3JpdGluZzxJ
ZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKTsKKyAgICAg
ICAgVmFsdWVUeXBlKiBuZXdFbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKICAgICAg
ICAgbmV3RW50cnktPn5WYWx1ZSgpOwogICAgICAgICBuZXcgKE5vdE51bGwsIG5ld0VudHJ5KSBW
YWx1ZVR5cGUoV1RGTW92ZShlbnRyeSkpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0
aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxl
XSA9IGgyKGxvb2t1cFJlc3VsdC5zZWNvbmQpOwogCiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsK
ICAgICB9CkBAIC0xMTE4LDYgKzE1MzMsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgZGVsZXRlQnVja2V0KCpw
b3MpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAg
ICAgICAgICAgY29udHJvbHNbcG9zIC0gbV90YWJsZV0gPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7
CiAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICBz
ZXRLZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAgLTExNzksNiArMTU5Niw4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlbGV0ZUJ1Y2tldChi
dWNrZXQpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMo
KSkKKyAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IENvbnRyb2xWYWx1ZTo6RGVsZXRlZDsK
ICAgICAgICAgICAgICsrcmVtb3ZlZEJ1Y2tldENvdW50OwogICAgICAgICB9CiAgICAgICAgIGlm
IChyZW1vdmVkQnVja2V0Q291bnQpIHsKQEAgLTExOTgsMTQgKzE2MTcsMzAgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoIShtZXRhZGF0YVNpemUgJSBhbGlnbm9mKFZhbHVlVHlwZSkpKTsKIAor
ICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0
ID0gMDsKKyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7CisgICAg
ICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFs
dWVUeXBlKTsKKyAgICAgICAgICAgIG9mZnNldCA9IG1ldGFkYXRhU2l6ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGFsbG9jYXRpb25TaXplID0gbWV0YWRhdGFTaXplICsgc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpICsgc2l6ZTsKKyAgICAgICAgICAgIG9mZnNldCA9IG1ldGFkYXRh
U2l6ZSArIHNpemU7CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IG51
bGxwdHI7CisKICAgICAgICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9u
IHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAogICAgICAgICAvLyBnY2Mg
ZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CiAgICAgICAgIGlmIChUcmFpdHM6OmVtcHR5
VmFsdWVJc1plcm8pCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5
cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MobWV0
YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0YVNpemUpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNf
Y2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MoYWxsb2NhdGlvblNpemUp
KSArIG9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRl
cnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9j
OjptYWxsb2MoYWxsb2NhdGlvblNpemUpKSArIG9mZnNldCk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVC
dWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgfQogCi0gICAgICAgIFZhbHVlVHlwZSogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRh
YmxlTWFsbG9jOjptYWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUp
KSkgKyBtZXRhZGF0YVNpemUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgICAg
ICBpZiAoc2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgIG1lbXNldChi
aXR3aXNlX2Nhc3Q8Q29udHJvbCo+KHJlc3VsdCkgLSBvZmZzZXQsIENvbnRyb2xWYWx1ZTo6RW1w
dHksIHNpemUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMTIxNyw3ICsx
NjUyLDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCiAgICAgICAg
ICAgICAgICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hU
YWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0
YVNpemUpOworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAg
ICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFi
bGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSGFzaFRhYmxl
TWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6
ZSAtIHNpemUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xMjYwLDE1ICsxNjk4LDkgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
ICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0d2VlbkF2ZXJhZ2VB
bmRNYXhMb2FkUmF0aW87CiAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKGJlc3RUYWJsZVNpemUg
PD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIgZG91Ymxl
IHNtYWxsTG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc21hbGxNYXhMb2FkTnVtZXJh
dG9yKSAvIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFib3ZlVGhy
ZXNob2xkRm9yRWFnZXJFeHBhbnNpb24oc21hbGxMb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRh
YmxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgY29uc3RleHByIGRvdWJsZSBsYXJnZUxvYWRGYWN0b3IgPSBz
dGF0aWNfY2FzdDxkb3VibGU+KGxhcmdlTWF4TG9hZE51bWVyYXRvcikgLyBsYXJnZU1heExvYWRE
ZW5vbWluYXRvcjsKLSAgICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5z
aW9uKGxhcmdlTG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQotICAgICAgICAg
ICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLSAgICAgICAgfQorICAgICAgICBjb25zdGV4cHIg
ZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExvYWROdW1lcmF0b3Ip
IC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdl
ckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCisgICAgICAg
ICAgICBiZXN0VGFibGVTaXplICo9IDI7CiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1UYWJsZVNp
emUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAgICAgICAgIHJldHVybiBzdGQ6Om1h
eChiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKICAgICB9CkBAIC0xMjg4LDYgKzE3
MjAsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX3RhYmxlW2ldOwogICAgICAgICAgICAgaWYg
KGlzUmVsZWFzZWRXZWFrQnVja2V0KGVudHJ5KSkgewogICAgICAgICAgICAgICAgIGRlbGV0ZUJ1
Y2tldChlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+
Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBDb250cm9sVmFs
dWU6OkRlbGV0ZWQ7CiAgICAgICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3Vu
dCgpICsgMSk7CiAgICAgICAgICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwog
ICAgICAgICAgICAgfQpAQCAtMTMwMCw3ICsxNzM0LDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CiAKICAgICAgICAgdW5zaWduZWQgb2xkVGFibGVTaXpl
ID0gdGFibGVTaXplKCk7Ci0gICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwog
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSAhPSAw
KQpAQCAtMTMxMiw2ICsxNzQ1LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICArK21fc3RhdHMtPm51bVJlaGFzaGVzOwog
I2VuZGlmCiAKKyAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSA9PSBuZXdUYWJsZVNpemUgJiYgb2xk
VGFibGVTaXplID4gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIHJl
aGFzaEluUGxhY2UobmV3VGFibGVTaXplLCBlbnRyeSk7CisKKyAgICAgICAgVmFsdWVUeXBlKiBv
bGRUYWJsZSA9IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVkIG9sZEtleUNvdW50ID0ga2V5Q291
bnQoKTsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKICAg
ICAgICAgc2V0VGFibGVTaXplKG5ld1RhYmxlU2l6ZSk7CkBAIC0xMzQ4LDEzICsxNzg1LDExNiBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9sZFRhYmxlKQotICAgICAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxl
KSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlmIChvbGRUYWJsZSkgeworICAgICAgICAgICAg
aWYgKG9sZFRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxl
KSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSGFz
aFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1l
dGFkYXRhU2l6ZSAtIG9sZFRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
RXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3Is
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSh1bnNpZ25l
ZCB0YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh0YWJsZVNpemUgPT0gdGhpcy0+dGFibGVTaXplKCkpOworICAgICAgICBBU1NF
UlQodGFibGVTaXplID4gbWF4U21hbGxUYWJsZUNhcGFjaXR5KTsKKyAgICAgICAgdHlwZW5hbWUg
c3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFZhbHVlVHlwZSksIGFsaWdub2YoVmFsdWVUeXBl
KT46OnR5cGUgcmF3OworICAgICAgICBWYWx1ZVR5cGUqIHNsb3QgPSByZWludGVycHJldF9jYXN0
PFZhbHVlVHlwZSo+KCZyYXcpOworICAgICAgICBHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBz
KCk7CisgICAgICAgIEFTU0VSVChncm91cHMpOworCisgICAgICAgIGF1dG8gdHJhbnNmZXIgPSBb
Jl0oVmFsdWVUeXBlKiBmcm9tLCBWYWx1ZVR5cGUqIHRvKSB7CisgICAgICAgICAgICBuZXcgKE5v
dE51bGwsIHRvKSBWYWx1ZVR5cGUoV1RGTW92ZSgqZnJvbSkpOworICAgICAgICAgICAgZnJvbS0+
flZhbHVlVHlwZSgpOworICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9
IHRhYmxlU2l6ZSAvIHNpemVvZihHcm91cCk7CisgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZU1h
c2sgPSBncm91cFNpemUgLSAxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBncm91cFNpemU7ICsraW5kZXgpCisgICAgICAgICAgICBncm91cHNbaW5kZXhdLmNvbnZl
cnRTcGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQoKTsKKworICAgICAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIENvbnRyb2wqIGNvbnRyb2xzID0gdGhpcy0+Y29u
dHJvbHMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGFibGVT
aXplOyArK2luZGV4KSB7CisgICAgICAgICAgICBWYWx1ZVR5cGUqIGN1cnJlbnQgPSBtX3RhYmxl
ICsgaW5kZXg7CisgICAgICAgICAgICBpZiAoY29udHJvbHNbaW5kZXhdICE9IENvbnRyb2xWYWx1
ZTo6RGVsZXRlZCkgeworICAgICAgICAgICAgICAgIGlmIChjb250cm9sc1tpbmRleF0gPT0gQ29u
dHJvbFZhbHVlOjpFbXB0eSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5+VmFsdWVU
eXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQoKmN1cnJlbnQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICArK0hhc2hUYWJsZVN0
YXRzOjpudW1SZWluc2VydHM7CisjZW5kaWYKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUKKyAgICAgICAgICAgICsrbV9zdGF0cy0+bnVtUmVpbnNlcnRzOworI2VuZGlmCisKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqY3VycmVudCkgJiYgIWlzRGVsZXRlZEJ1
Y2tldCgqY3VycmVudCkpOworICAgICAgICAgICAgdW5zaWduZWQgaCA9IElkZW50aXR5VHJhbnNs
YXRvclR5cGU6Omhhc2goRXh0cmFjdG9yOjpleHRyYWN0KCpjdXJyZW50KSk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoLCBncm91cHMpOworCisgICAgICAgICAgICBhdXRv
IGxvb2t1cEVtcHR5T3JEZWxldGVkID0gWyZdKHVuc2lnbmVkIGdyb3VwSGFzaCkgLT4gVmFsdWVU
eXBlKiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgayA9IDA7CisgICAgICAgICAgICAgICAg
VmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGdyb3VwSGFzaCAmIGdyb3VwU2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRl
ZCgpLmxvd2VzdEJpdFNldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxl
ICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgayA9IDEg
fCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgICAgIGkgPSAoaSArIGsp
ICYgZ3JvdXBTaXplTWFzazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBhdXRvIGdyb3VwSW5kZXggPSBbJl0oVmFsdWVUeXBlKiBjdXJyZW50KSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBjdXJyZW50IC0gbV90YWJsZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gLyBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgVmFsdWVUeXBlKiBuZXdFbnRyeSA9IGxvb2t1
cEVtcHR5T3JEZWxldGVkKGdyb3VwSGFzaCk7CisKKyAgICAgICAgICAgIC8vIElmIGN1cnJlbnQg
YW5kIG5ld0VudHJ5IGFyZSBpbiB0aGUgc2FtZSBncm91cCwgd2UgZG8gbm90IG5lZWQgdG8gbW92
ZSB0aGUgY3VycmVudCBvbmUuCisgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwSW5kZXgoY3Vy
cmVudCkgPT0gZ3JvdXBJbmRleChuZXdFbnRyeSkpKSB7CisgICAgICAgICAgICAgICAgY29udHJv
bHNbaW5kZXhdID0gaDIoaCk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IGN1cnJlbnQg
JiYgIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNv
bnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPT0gQ29udHJvbFZhbHVlOjpFbXB0eSkgeworICAg
ICAgICAgICAgICAgIG5ld0VudHJ5LT5+VmFsdWVUeXBlKCk7CisgICAgICAgICAgICAgICAgdHJh
bnNmZXIoY3VycmVudCwgbmV3RW50cnkpOworICAgICAgICAgICAgICAgIGluaXRpYWxpemVCdWNr
ZXQoKmN1cnJlbnQpOworICAgICAgICAgICAgICAgIGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJs
ZV0gPSBoMihoKTsKKyAgICAgICAgICAgICAgICBjb250cm9sc1tjdXJyZW50IC0gbV90YWJsZV0g
PSBDb250cm9sVmFsdWU6OkVtcHR5OworICAgICAgICAgICAgICAgIGlmIChlbnRyeSA9PSBjdXJy
ZW50ICYmICFyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ld0VudHJ5Owor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBB
U1NFUlQoY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxlXSA9PSBDb250cm9sVmFsdWU6OkRlbGV0
ZWQpOworICAgICAgICAgICAgdHJhbnNmZXIoY3VycmVudCwgc2xvdCk7CisgICAgICAgICAgICB0
cmFuc2ZlcihuZXdFbnRyeSwgY3VycmVudCk7CisgICAgICAgICAgICB0cmFuc2ZlcihzbG90LCBu
ZXdFbnRyeSk7CisgICAgICAgICAgICBjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID0gaDIo
aCk7CisgICAgICAgICAgICBpZiAoZW50cnkgPT0gY3VycmVudCAmJiAhcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG5ld0VudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5ID09IG5l
d0VudHJ5KQorICAgICAgICAgICAgICAgIGVudHJ5ID0gY3VycmVudDsKKyAgICAgICAgICAgIC0t
aW5kZXg7IC8vIFJlcGVhdCB0aGlzIGluZGV4IGFnYWluLgorICAgICAgICB9CisgICAgICAgIHNl
dERlbGV0ZWRDb3VudCgwKTsKKyAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQg
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpjbGVhcigpCiAgICAgewpAQCAtMTQ0NSw3ICsxOTg1LDcgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB7CiAgICAgICAg
IGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKICAgICAgICAgQVNTRVJUKCFtX3Rh
YmxlIHx8ICFzaG91bGRFeHBhbmQoKSk7Ci0gICAgICAgIEFTU0VSVCghc2hvdWxkU2hyaW5rKCkp
OworICAgICAgICAvLyBBU1NFUlQoIXNob3VsZFNocmluaygpKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgpAQCAtMTQ1NywxNiArMTk5NywyNCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgICAg
IHVuc2lnbmVkIGRlbGV0ZWRDb3VudCA9IDA7CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9
IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICBDb250cm9sKiBjb250cm9scyA9IHRoaXMtPmNv
bnRyb2xzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0YWJsZVNpemU7ICsr
aikgewogICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUgKyBqOwotICAgICAg
ICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgIGlmIChpc0VtcHR5
QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJvbHMpCisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChjb250cm9sc1tqXSA9PSBDb250cm9sVmFsdWU6OkVtcHR5KTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRy
b2xzKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY29udHJvbHNbal0gPT0gQ29udHJvbFZh
bHVlOjpEZWxldGVkKTsKICAgICAgICAgICAgICAgICArK2RlbGV0ZWRDb3VudDsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGNvbnRy
b2xzKQorICAgICAgICAgICAgICAgIEFTU0VSVChjb250cm9sc1tqXSAhPSBDb250cm9sVmFsdWU6
OkVtcHR5ICYmIGNvbnRyb2xzW2pdICE9IENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAg
ICAgICBhdXRvJiBrZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsKICAgICAgICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICAgICAgQVNTRVJUKGVudHJ5
ID09IGl0Lm1fcG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1D
UFUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKaW5kZXggYmNlMjNlMDM0NmQ1NDNk
ZWQ2OWRjMmE1Yzg1ZjBlOGI0MjhkYmUyYi4uZTlmZDhmMmIwM2M5ZGRjZTc2ZjBjNzVlM2MwNDll
ZTZlMGFiMzE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1DUFUuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCkBAIC0xMDksNiArMTA5LDkgQEAKICAgICB8
fCBkZWZpbmVkKF9NX1g2NCkKICNkZWZpbmUgV1RGX0NQVV9YODZfNjQgMQogI2RlZmluZSBXVEZf
Q1BVX1g4Nl9TU0UyIDEKKyNpZiBkZWZpbmVkKF9fU1NFM19fKQorI2RlZmluZSBXVEZfQ1BVX1g4
Nl9TU0UzIDEKKyNlbmRpZgogI2RlZmluZSBXVEZfQ1BVX0tOT1dOIDEKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmggYi9Tb3VyY2UvV1RGL3d0Zi9WYWx1
ZUNoZWNrLmgKaW5kZXggMjZlYWE1MzhlYmRlYzNkMjMyZWZiY2IyYmM2ZDFlNmJmMmU5N2E1Yy4u
NDYzMmQ2NWMxNzVhM2QxNmRhMzYwYjI5NzU4MjFjOTAzOWY0YWY1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2su
aApAQCAtNDUsNiArNDUsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IFZhbHVlQ2hl
Y2s8UCo+IHsKICAgICAgICAgVmFsdWVDaGVjazxQPjo6Y2hlY2tDb25zaXN0ZW5jeSgqcCk7CiAg
ICAgfQogfTsKK3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlQ2hlY2s8dm9pZCo+IHsKKyAgICB0eXBl
ZGVmIHZvaWQqIFRyYWl0VHlwZTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNv
bnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBpZiAoIXApCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEFTU0VSVChmYXN0TWFsbG9jU2l6ZShwKSk7CisgICAgfQorfTsKICNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3Iu
aCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDk3NzYzZTBmNGRmYmY5ZWEzYWNlZDMx
NDM2OWRjMWRlYzI2NGZiY2QuLjBmMGMyYmJjZDdmODYyZjkzOTE0Yjg4YTI2YzJhMGJjYWMxMGI4
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oCkBAIC04MjksNyArODI5LDcgQEAgY2xhc3MgVmVjdG9yIDogcHJpdmF0ZSBW
ZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHksIE1hbGxvYz4gewogCiAgICAgdm9pZCByZXZl
cnNlKCk7CiAKLSAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB2b2lkIGNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcEZ1bmN0aW9uLCB0
eXBlbmFtZSBSID0gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8TWFwRnVuY3Rpb24oY29uc3QgVCYp
Pjo6dHlwZT4gVmVjdG9yPFI+IG1hcChNYXBGdW5jdGlvbikgY29uc3Q7CiAKQEAgLTE1OTYsNyAr
MTU5Niw3IEBAIGlubGluZSBNYWxsb2NQdHI8VCwgTWFsbG9jPiBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwgTWFsbG9jPjo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKSBj
b25zdAogewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplKCk7ICsraSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390223</attachid>
            <date>2020-02-09 19:23:25 -0800</date>
            <delta_ts>2020-02-09 22:11:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209192324.patch</filename>
            <type>text/plain</type>
            <size>43087</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjQ1N2UwZDZlNmFlNWVkZTM1ZjBkZGM5OWViNTgxNWI0ZDE0OTU3
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoSW5QbGFjZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0
cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUgY29uc3QpOgorICAgICAgICAqIHd0
Zi9QbGF0Zm9ybUNQVS5oOgorICAgICAgICAqIHd0Zi9WYWx1ZUNoZWNrLmg6CisgICAgICAgIChX
VEY6OlZhbHVlQ2hlY2s8dm9pZDo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgICogd3RmL1Zl
Y3Rvci5oOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToK
KyAgICAgICAgKFdURjo6TWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisKIDIw
MjAtMDItMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V1RGXSBUcnkgdXNpbmcgNzUlIGxvYWQgZmFjdG9yIGZvciBIYXNoVGFibGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgK
aW5kZXggZDNhYjExOTI0ZjRlYTJjN2RjYmUwN2MxZmI0ZWEwOGYxNDYzNzM2My4uY2U3OGZkMTJj
MTY1NGI0M2EzNGMzY2VmNDZkZWJlNTE2OGIzNjE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTE4LDYg
KzE4LDIzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKy8qCisg
KiBUaGlzIEhhc2hUYWJsZSBpbXBsZW1lbnRzIFN3aXNzVGFibGUgZm9yIGxhcmdlciBzaXplLgor
ICoKKyAqIENvcHlyaWdodCAyMDE4IFRoZSBBYnNlaWwgQXV0aG9ycy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
ICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAKICNwcmFn
bWEgb25jZQogCkBAIC0zNiw2ICs1MywxNiBAQAogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZhbHVlQ2hl
Y2suaD4KKyNpZiBDUFUoWDg2X1NTRTIpCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisjaW5jbHVk
ZSA8aW1taW50cmluLmg+CisjZW5kaWYKKyNpZiBDUFUoWDg2X1NTRTMpCisjaW5jbHVkZSA8dG1t
aW50cmluLmg+CisjZW5kaWYKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVk
ZSA8YXJtX25lb24uaD4KKyNlbmRpZgogCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxFX1NUQVRTIDAK
ICNkZWZpbmUgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFIDAKQEAgLTMwOCwxOSArMzM1
LDE2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4KICAgICBzdHJ1Y3QgSGFzaFRhYmxlQ2FwYWNp
dHlGb3JTaXplIHsKICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIHNtYWxsIHRhYmxlIGlzIDc1
JS4KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWROdW1lcmF0
b3IgPSAzOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERl
bm9taW5hdG9yID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2Fk
TnVtZXJhdG9yID0gMzsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhMb2Fk
RGVub21pbmF0b3IgPSA0OwogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3IgbGFyZ2UgdGFibGUg
aXMgNTAlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZE51
bWVyYXRvciA9IDE7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhM
b2FkRGVub21pbmF0b3IgPSAyOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eFNtYWxsVGFibGVDYXBhY2l0eSA9IDEwMjQ7CisgICAgICAgIC8vIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSA4OwogICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OwogCiAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBzaG91bGRFeHBhbmQodWludDY0X3Qga2V5QW5kRGVsZXRlQ291bnQsIHVpbnQ2
NF90IHRhYmxlU2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBt
YXhTbWFsbFRhYmxlQ2FwYWNpdHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGtleUFuZERlbGV0
ZUNvdW50ICogc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogc21hbGxNYXhM
b2FkTnVtZXJhdG9yOwotICAgICAgICAgICAgcmV0dXJuIGtleUFuZERlbGV0ZUNvdW50ICogbGFy
Z2VNYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbGFyZ2VNYXhMb2FkTnVtZXJhdG9y
OworICAgICAgICAgICAgcmV0dXJuIGtleUFuZERlbGV0ZUNvdW50ICogbWF4TG9hZERlbm9taW5h
dG9yID49IHRhYmxlU2l6ZSAqIG1heExvYWROdW1lcmF0b3I7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhcGFjaXR5Rm9yU2l6ZSh1aW50NjRfdCBzaXpl
QXJnKQpAQCAtNTM0LDYgKzU1OCw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHZvaWQgZGVsZXRlUmVsZWFzZWRXZWFrQnVja2V0
cygpOwogCiAgICAgICAgIFZhbHVlVHlwZSogcmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSwg
VmFsdWVUeXBlKiBlbnRyeSk7CisgICAgICAgIFZhbHVlVHlwZSogcmVoYXNoSW5QbGFjZSh1bnNp
Z25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwogICAgICAgICBWYWx1ZVR5cGUq
IHJlaW5zZXJ0KFZhbHVlVHlwZSYmKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
QnVja2V0KFZhbHVlVHlwZSYgYnVja2V0KTsKQEAgLTU2MCwxMSArNTg1LDggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAg
ICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6
ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6
c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJn
ZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VN
YXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkTnVtZXJh
dG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9t
aW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7Cisg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZE51bWVyYXRvciA9IEhhc2hU
YWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWF4
TG9hZERlbm9taW5hdG9yOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNt
YWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heFNtYWxsVGFibGVDYXBh
Y2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5Mb2FkID0gSGFzaFRh
YmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApAQCAtNTc0LDYgKzU5NiwxOTggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50T2Zmc2V0ID0gLTQ7CiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFTaXplID0gNCAqIHNpemVvZih1bnNpZ25lZCk7CiAK
KyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVpbnQ4X3Q7CisgICAgICAgIGVudW0gQ29udHJvbFZh
bHVlIDogQ29udHJvbCB7CisgICAgICAgICAgICBFbXB0eSAgID0gMGIxMDAwMDAwMCwKKyAgICAg
ICAgICAgIERlbGV0ZWQgPSAwYjExMTExMTExLAorICAgICAgICB9OworCisgICAgICAgIHN0cnVj
dCBHcm91cDsKKyAgICAgICAgaW5saW5lIHVuc2lnbmVkIGgxKHNpemVfdCBoYXNoLCBjb25zdCBH
cm91cCogZ3JvdXBzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGhhc2ggPj4gNykg
XiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZ3JvdXBzKSA+
PiAxMik7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgQ29udHJvbCBoMih1bnNpZ25lZCBo
YXNoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaCAmIDB4N0Y7CisgICAgICAg
IH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hpZnQ+CisgICAgICAg
IGNsYXNzIEJpdE1hc2sgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2ln
bmVkPFQ+Ojp2YWx1ZSk7CisKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdmFs
dWVfdHlwZSA9IHVuc2lnbmVkOworICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSBCaXRNYXNr
OworICAgICAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBCaXRNYXNrOworCisgICAgICAg
ICAgICBleHBsaWNpdCBjb25zdGV4cHIgQml0TWFzayhUIG1hc2spCisgICAgICAgICAgICAgICAg
OiBtX21hc2sobWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQml0TWFzayYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9tYXNrICY9IChtX21hc2sgLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX21hc2sgIT0gMDsgfQorICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0b3Iq
KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdldExTQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxvd2VzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2sp
ID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gaGlnaGVzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldE1TQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBCaXRNYXNrIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KKyAgICAgICAgICAgIEJpdE1hc2sgZW5kKCkgY29uc3QgeyByZXR1cm4gQml0TWFzaygw
KTsgfQorCisgICAgICAgICAgICB1bnNpZ25lZCB0cmFpbGluZ1plcm9zKCkgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0eihtX21hc2sp
ID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZWFkaW5n
WmVyb3MoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNr
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2x6KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0TWFz
ayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYS5tX21hc2sgPT0gYi5tX21hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrICE9IGIubV9t
YXNrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUIG1fbWFzazsKKyAgICAgICAgfTsK
KworCisjaWYgMAorLy8gI2lmIENQVShYODZfU1NFMikKKyAgICAgICAgc3RydWN0IEdyb3VwIHsK
KyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0g
MTY7CisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1aW50MTZfdCwgMD47CisgICAg
ICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KG1fdmVjdG9yKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wgY29u
dHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hdGNoID0g
X21tX3NldDFfZXBpOChjb250cm9sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhfbW1f
bW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpOChtYXRjaCwgbV92ZWN0b3IpKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7Cisj
aWYgQ1BVKFg4Nl9TU0UzKQorICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nh
c3Q8aW50OF90PihDb250cm9sVmFsdWU6OkVtcHR5KSA9PSAtMTI4KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1fc2lnbl9lcGk4KG1fdmVjdG9yLCBt
X3ZlY3RvcikpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoQnl0ZShDb250
cm9sVmFsdWU6OkVtcHR5KTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBodHRwczovL2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHAvaXNzdWVzLzIwOQorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9ODc4
NTMKKyAgICAgICAgICAgIC8vIF9tbV9jbXBndF9lcGk4IGlzIGJyb2tlbiB1bmRlciBHQ0Mgd2l0
aCAtZnVuc2lnbmVkLWNoYXIKKyAgICAgICAgICAgIGlubGluZSBzdGF0aWMgX19tMTI4aSBfbW1f
Y21wZ3RfZXBpOF9maXhlZChfX20xMjhpIGEsIF9fbTEyOGkgYikKKyAgICAgICAgICAgIHsKKyNp
ZiBDT01QSUxFUihHQ0MpCisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNfdW5zaWduZWQ8Y2hh
cj46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkgbWFzayA9IF9t
bV9zZXQxX2VwaTgoMHg4MCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkgZGlm
ZiA9IF9tbV9zdWJzX2VwaTgoYiwgYSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbW1f
Y21wZXFfZXBpOChfbW1fYW5kX3NpMTI4KGRpZmYsIG1hc2spLCBtYXNrKTsKKyAgICAgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gX21tX2NtcGd0X2VwaTgoYSwg
Yik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgY29udmVydFNwZWNpYWxUb0Vt
cHR5QW5kRnVsbFRvRGVsZXRlZCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
RGVsZXRlZCgwYjExMTExMTExKSB8IEVtcHR5KDBiMTAwMDAwMDApID0+IEVtcHR5KDBiMTAwMDAw
MDApCisgICAgICAgICAgICAgICAgLy8gRnVsbCgwYjBYWFhYWFhYKSA9PiBEZWxldGVkKDBiMTEx
MTExMTEpCisgICAgICAgICAgICAgICAgYXV0byB6ZXJvID0gX21tX3NldHplcm9fc2kxMjgoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHNwZWNpYWwgPSBfbW1fY21wZ3RfZXBpOF9maXhlZCh6ZXJv
LCBtX3ZlY3Rvcik7CisgICAgICAgICAgICAgICAgYXV0byBtc2JzID0gX21tX3NldDFfZXBpOCgw
eDgwKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlcyA9IF9tbV9vcl9zaTEyOChtc2JzLCBfbW1f
YW5kbm90X3NpMTI4KHNwZWNpYWwsIF9tbV9zZXQxX2VwaTgoMHhmZikpKTsKKyAgICAgICAgICAg
ICAgICBtX3ZlY3RvciA9IHJlczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX19tMTI4
aSBtX3ZlY3RvcjsKKyAgICAgICAgfTsKKyNlbHNlCisgICAgICAgIHN0cnVjdCBHcm91cCB7Cisg
ICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mRW50cmllcyA9IDg7
CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1zYnMgPSAweDgwODA4MDgw
ODA4MDgwODBVTEw7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGxzYnMg
PSAweDAxMDEwMTAxMDEwMTAxMDFVTEw7CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRN
YXNrPHVpbnQ2NF90LCAzPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRlZCgp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2sobV92ZWN0
b3IgJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEJ5dGUo
Q29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IEZvciB0aGUgdGVjaG5pcXVlLCBzZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2dyYXBo
aWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sIyNWYWx1ZUluV29yZAorICAg
ICAgICAgICAgICAgIC8vIChEZXRlcm1pbmUgaWYgYSB3b3JkIGhhcyBhIGJ5dGUgZXF1YWwgdG8g
bikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBDYXZlYXQ6IHRoZXJl
IGFyZSBmYWxzZSBwb3NpdGl2ZXMgYnV0OgorICAgICAgICAgICAgICAgIC8vIC0gdGhleSBvbmx5
IG9jY3VyIGlmIHRoZXJlIGlzIGEgcmVhbCBtYXRjaAorICAgICAgICAgICAgICAgIC8vIC0gdGhl
eSBuZXZlciBvY2N1ciBvbiBrRW1wdHksIGtEZWxldGVkLCBrU2VudGluZWwKKyAgICAgICAgICAg
ICAgICAvLyAtIHRoZXkgd2lsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkgYnkgc3Vic2VxdWVudCBj
aGVja3MgaW4gY29kZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gRXhh
bXBsZToKKyAgICAgICAgICAgICAgICAvLyAgIHYgPSAweDE3MTYxNTE0MTMxMjExMTAKKyAgICAg
ICAgICAgICAgICAvLyAgIGhhc2ggPSAweDEyCisgICAgICAgICAgICAgICAgLy8gICByZXR2YWwg
PSAodiAtIGxzYnMpICYgfnYgJiBtc2JzID0gMHgwMDAwMDAwMDgwODAwMDAwCisgICAgICAgICAg
ICAgICAgYXV0byB4ID0gbV92ZWN0b3IgXiAobHNicyAqIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNv
bnRyb2wpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygoeCAtIGxzYnMpICYgfnggJiBt
c2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygobV92ZWN0b3IgJiAofm1f
dmVjdG9yIDw8IDEpKSAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lk
IGNvbnZlcnRTcGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIC8vIERlbGV0ZWQoMGIxMTExMTExMSkgfCBFbXB0eSgwYjEwMDAwMDAw
KSA9PiBFbXB0eSgwYjEwMDAwMDAwKQorICAgICAgICAgICAgICAgIC8vIEZ1bGwoMGIwWFhYWFhY
WCkgPT4gRGVsZXRlZCgwYjExMTExMTExKQorICAgICAgICAgICAgICAgIGF1dG8geCA9IG1fdmVj
dG9yICYgbXNiczsKKyAgICAgICAgICAgICAgICBhdXRvIHJlcyA9IH54ICsgKHggPj4gNyk7Cisg
ICAgICAgICAgICAgICAgbV92ZWN0b3IgPSByZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHVpbnQ2NF90IG1fdmVjdG9yOworICAgICAgICB9OworI2VuZGlmCisKICAgICAgICAgdW5z
aWduZWQgdGFibGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdIDogMDsgfQogICAgICAgICB2
b2lkIHNldFRhYmxlU2l6ZSh1bnNpZ25lZCBzaXplKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gPSBz
aXplOyB9CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZU1hc2soKSBjb25zdCB7IEFTU0VSVCht
X3RhYmxlKTsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90
YWJsZSlbdGFibGVTaXplTWFza09mZnNldF0gOiAwOyB9CkBAIC01ODIsNiArNzk2LDE3IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAg
IHZvaWQgc2V0S2V5Q291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUp
OyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRdID0g
Y291bnQ7IH0KICAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50KCkgY29uc3QgeyBBU1NFUlQo
bV90YWJsZSk7IHJldHVybiByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVs
ZXRlZENvdW50T2Zmc2V0XTsgfQogICAgICAgICB2b2lkIHNldERlbGV0ZWRDb3VudCh1bnNpZ25l
ZCBjb3VudCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRPZmZzZXRdID0gY291bnQ7IH0KKyAgICAgICAgQ29u
dHJvbCogY29udHJvbHMoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PENvbnRyb2wqPihncm91cHMoKSk7CisgICAgICAgIH0KKyAgICAgICAgR3JvdXAq
IGdyb3VwcygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6
ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBtYXhT
bWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEdyb3VwKj4oYml0d2lzZV9jYXN0PENvbnRyb2wq
PihtX3RhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIHRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAg
ICAgICBWYWx1ZVR5cGUqIG1fdGFibGUgeyBudWxscHRyIH07CiAKQEAgLTY2Niw5ICs4OTEsNyBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGgg
PSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNp
emVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVT
dGF0czo6bnVtQWNjZXNzZXM7CkBAIC02NzksNiArOTAyLDM5IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVt
QWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdy
b3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoLCBncm91cHMp
OworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAgICB1
bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7CisgICAgICAg
ICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNp
Z25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5dGUoZW50cnlIYXNoKSkg
eworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3Jv
dXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRy
YWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtF
TFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2Jl
Q291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0
Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BF
Ul9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQo
cHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAg
ICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAg
ICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgIHVu
c2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwogICAgICAgICAgICAgICAgIApAQCAtNzIw
LDkgKzk3Niw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFi
bGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2so
KTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
UwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTczMyw2ICs5ODcs
NDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChH
cm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdy
b3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2gg
PSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8g
c2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXpl
IC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAg
ICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3Jv
dXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAt
Pm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSog
ZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0Rl
bGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFz
aFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC0+bWF0Y2hF
bXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRp
ZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAg
bV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91
YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7
CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9
IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+
bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNldCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTG9va3VwVHlwZSh0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsg
cG9zaXRpb24udmFsdWUoKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisg
ICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAg
ICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAg
ICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVk
RW50cnkgPSAwOwogCiAgICAgICAgIHdoaWxlICgxKSB7CkBAIC03ODEsOSArMTA3Nyw3IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAg
ICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwot
ICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5z
aWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkg
PSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hh
c2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTc5NCw2ICsxMDg4LDQ4IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9z
dGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9
IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMSho
LCBncm91cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGls
ZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5dGUoZW50
cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUg
KyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCpl
bnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjpl
cXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHko
KSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRh
YmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKwor
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3Rh
dHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhh
c2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAg
ICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91
cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNo
RW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VMb29rdXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyAr
IHBvc2l0aW9uLnZhbHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAg
ICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSogZGVs
ZXRlZEVudHJ5ID0gMDsKIAogICAgICAgICB3aGlsZSAoMSkgewpAQCAtODQ3LDkgKzExODMsNyBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAg
ICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJs
ZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAg
IHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25l
ZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAg
KytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC04NjEsMjcgKzExOTUsNTcgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgog
CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAg
ICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlz
LT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3Jv
dXBzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6
ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBz
ICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVt
cHR5KCkubG93ZXN0Qml0U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJs
ZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAg
ICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7Cisj
ZW5kaWYKIAotICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAg
ICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwor
I2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsg
aykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICAgICAgdW5z
aWduZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAg
ICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6
OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29s
bGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGlm
IChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8
VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0byog
Y29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkg
LSB0YWJsZV0gPSBoMihoKTsKIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOwogICAgIH0KQEAgLTkyOCw5ICsxMjkyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAg
ICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVN
YXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0
b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vz
c2VzOwpAQCAtOTQzLDQwICsxMzA1LDg2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkg
PSAwOwogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKLSAg
ICAgICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCkgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAg
IGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRy
eUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6
ZSgpIC8gc2l6ZW9mKEdyb3VwKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3Jv
dXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFz
azsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3Vw
ID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDog
Z3JvdXAtPm1hdGNoQnl0ZShlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
VHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRp
b247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYm
ICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtF
TFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29v
ZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5z
bGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSks
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVk
QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tl
dCgqZW50cnkpKQorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICAr
K3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxp
c2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NU
QVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0
Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAg
ICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dl
c3RCaXRTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdy
b3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCi0g
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5
KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFz
aChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CiAg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXpl
TWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGVudHJ5ID0g
dGFibGUgKyBpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHdlIGNvdW50
IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKKyAgICAgICAgICAg
ICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVu
dHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFr
ZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBr
ZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25H
b29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAg
ICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6
OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29s
bGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGlm
IChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAw
KQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChkZWxldGVkRW50cnkpIHsKQEAgLTk4Niw2ICsxMzk0LDggQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgfQog
CiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8
VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0byog
Y29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkg
LSB0YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSArIDEpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTAyNCw2ICsxNDM0LDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6
OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGgpOworICAgICAg
ICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29u
dHJvbHNbZW50cnkgLSBtX3RhYmxlXSA9IGgyKGgpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlD
b3VudCgpICsgMSk7CiAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTA0Nyw5ICsx
NDU5LDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKLSAgICAgICAg
VmFsdWUqIG5ld0VudHJ5ID0gbG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50
cnkpKS5maXJzdDsKKyAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9va3VwUmVzdWx0ID0gZnVsbExv
b2t1cEZvcldyaXRpbmc8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0
KGVudHJ5KSk7CisgICAgICAgIFZhbHVlVHlwZSogbmV3RW50cnkgPSBsb29rdXBSZXN1bHQuZmly
c3QuZmlyc3Q7CiAgICAgICAgIG5ld0VudHJ5LT5+VmFsdWUoKTsKICAgICAgICAgbmV3IChOb3RO
dWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBlKFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgaWYgKGF1
dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW25l
d0VudHJ5IC0gbV90YWJsZV0gPSBoMihsb29rdXBSZXN1bHQuc2Vjb25kKTsKIAogICAgICAgICBy
ZXR1cm4gbmV3RW50cnk7CiAgICAgfQpAQCAtMTExOCw2ICsxNTMzLDggQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAg
IGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+
Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW3BvcyAtIG1fdGFibGVdID0gQ29udHJv
bFZhbHVlOjpEZWxldGVkOwogICAgICAgICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50KCkg
KyAxKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAtIDEpOwogCkBAIC0xMTc5LDYg
KzE1OTYsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFi
bGUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWxldGVCdWNrZXQoYnVja2V0KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9
IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICAgICAgY29udHJvbHNbaV0gPSBDb250cm9s
VmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAgICAgICArK3JlbW92ZWRCdWNrZXRDb3VudDsKICAgICAg
ICAgfQogICAgICAgICBpZiAocmVtb3ZlZEJ1Y2tldENvdW50KSB7CkBAIC0xMTk4LDE0ICsxNjE3
LDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KCEobWV0YWRhdGFTaXplICUgYWxpZ25vZihW
YWx1ZVR5cGUpKSk7CiAKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gMDsKKyAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IDA7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVD
YXBhY2l0eSkgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUgKyBz
aXplICogc2l6ZW9mKFZhbHVlVHlwZSk7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNp
emU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFk
YXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSArIHNpemU7CisgICAgICAgICAgICBv
ZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBzaXplOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVU
eXBlKiByZXN1bHQgPSBudWxscHRyOworCiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRl
IG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQK
ICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgICAgICBp
ZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6
emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsg
bWV0YWRhdGFTaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFs
dWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9j
KGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+
KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAg
ICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7CisgICAgICAgIH0KIAotICAgICAgICBW
YWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nh
c3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBz
aXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVz
dWx0W2ldKTsKKyAgICAgICAgaWYgKHNpemUgPiBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAg
ICAgICAgICBtZW1zZXQoYml0d2lzZV9jYXN0PENvbnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0LCBD
b250cm9sVmFsdWU6OkVtcHR5LCBzaXplKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKQEAgLTEyMTcsNyArMTY1MiwxMCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWRCdWNrZXQodGFi
bGVbaV0pKQogICAgICAgICAgICAgICAgIHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKICAgICAgICAg
fQotICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21hbGxUYWJs
ZUNhcGFjaXR5KQorICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJs
ZSkgLSBtZXRhZGF0YVNpemUgLSBzaXplKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpAQCAtMTI2MCwx
NSArMTY5OCw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFsZldh
eUJldHdlZW5BdmVyYWdlQW5kTWF4TG9hZFJhdGlvOwogICAgICAgICB9OwogCi0gICAgICAgIGlm
IChiZXN0VGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkgewotICAgICAgICAgICAg
Y29uc3RleHByIGRvdWJsZSBzbWFsbExvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHNt
YWxsTWF4TG9hZE51bWVyYXRvcikgLyBzbWFsbE1heExvYWREZW5vbWluYXRvcjsKLSAgICAgICAg
ICAgIGlmIChhYm92ZVRocmVzaG9sZEZvckVhZ2VyRXhwYW5zaW9uKHNtYWxsTG9hZEZhY3Rvciwg
a2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQotICAgICAgICAgICAgICAgIGJlc3RUYWJsZVNpemUg
Kj0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgbGFy
Z2VMb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsYXJnZU1heExvYWROdW1lcmF0b3Ip
IC8gbGFyZ2VNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJlc2hv
bGRGb3JFYWdlckV4cGFuc2lvbihsYXJnZUxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVT
aXplKSkKLSAgICAgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0KKyAg
ICAgICAgY29uc3RleHByIGRvdWJsZSBsb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPiht
YXhMb2FkTnVtZXJhdG9yKSAvIG1heExvYWREZW5vbWluYXRvcjsKKyAgICAgICAgaWYgKGFib3Zl
VGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJs
ZVNpemUpKQorICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwogICAgICAgICB1bnNpZ25l
ZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAgICAg
ICByZXR1cm4gc3RkOjptYXgoYmVzdFRhYmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7CiAgICAg
fQpAQCAtMTI4OCw2ICsxNzIwLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIGF1dG8mIGVudHJ5ID0gbV90YWJsZVtpXTsK
ICAgICAgICAgICAgIGlmIChpc1JlbGVhc2VkV2Vha0J1Y2tldChlbnRyeSkpIHsKICAgICAgICAg
ICAgICAgICBkZWxldGVCdWNrZXQoZW50cnkpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBj
b250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xz
W2ldID0gQ29udHJvbFZhbHVlOjpEZWxldGVkOwogICAgICAgICAgICAgICAgIHNldERlbGV0ZWRD
b3VudChkZWxldGVkQ291bnQoKSArIDEpOwogICAgICAgICAgICAgICAgIHNldEtleUNvdW50KGtl
eUNvdW50KCkgLSAxKTsKICAgICAgICAgICAgIH0KQEAgLTEzMDAsNyArMTczNCw2IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOwogCiAgICAgICAgIHVuc2ln
bmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxlU2l6ZSgpOwotICAgICAgICBWYWx1ZVR5cGUqIG9sZFRh
YmxlID0gbV90YWJsZTsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgIGlmIChv
bGRUYWJsZVNpemUgIT0gMCkKQEAgLTEzMTIsNiArMTc0NSwxMCBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgKyttX3N0YXRz
LT5udW1SZWhhc2hlczsKICNlbmRpZgogCisgICAgICAgIGlmIChvbGRUYWJsZVNpemUgPT0gbmV3
VGFibGVTaXplICYmIG9sZFRhYmxlU2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAg
ICAgICAgIHJldHVybiByZWhhc2hJblBsYWNlKG5ld1RhYmxlU2l6ZSwgZW50cnkpOworCisgICAg
ICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwogICAgICAgICB1bnNpZ25lZCBvbGRL
ZXlDb3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5l
d1RhYmxlU2l6ZSk7CiAgICAgICAgIHNldFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOwpAQCAtMTM0
OCwxMyArMTc4NSwxMTYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChvbGRU
YWJsZSkKLSAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0
PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBpZiAob2xkVGFibGUp
IHsKKyAgICAgICAgICAgIGlmIChvbGRUYWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5
KQorICAgICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0
PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIq
PihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUgLSBvbGRUYWJsZVNpemUpOworICAgICAgICB9CiAK
ICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmV0dXJu
IG5ld0VudHJ5OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgYXV0byBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaGFz
aEluUGxhY2UodW5zaWduZWQgdGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5
cGUqCisgICAgeworICAgICAgICBBU1NFUlQodGFibGVTaXplID09IHRoaXMtPnRhYmxlU2l6ZSgp
KTsKKyAgICAgICAgQVNTRVJUKHRhYmxlU2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSk7Cisg
ICAgICAgIHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihWYWx1ZVR5cGUpLCBh
bGlnbm9mKFZhbHVlVHlwZSk+Ojp0eXBlIHJhdzsKKyAgICAgICAgVmFsdWVUeXBlKiBzbG90ID0g
cmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPigmcmF3KTsKKyAgICAgICAgR3JvdXAqIGdyb3Vw
cyA9IHRoaXMtPmdyb3VwcygpOworICAgICAgICBBU1NFUlQoZ3JvdXBzKTsKKworICAgICAgICBh
dXRvIHRyYW5zZmVyID0gWyZdKFZhbHVlVHlwZSogZnJvbSwgVmFsdWVUeXBlKiB0bykgeworICAg
ICAgICAgICAgbmV3IChOb3ROdWxsLCB0bykgVmFsdWVUeXBlKFdURk1vdmUoKmZyb20pKTsKKyAg
ICAgICAgICAgIGZyb20tPn5WYWx1ZVR5cGUoKTsKKyAgICAgICAgfTsKKworICAgICAgICB1bnNp
Z25lZCBncm91cFNpemUgPSB0YWJsZVNpemUgLyBzaXplb2YoR3JvdXApOworICAgICAgICB1bnNp
Z25lZCBncm91cFNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgZ3JvdXBTaXplOyArK2luZGV4KQorICAgICAgICAgICAgZ3Jv
dXBzW2luZGV4XS5jb252ZXJ0U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxldGVkKCk7CisKKyAg
ICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBDb250cm9sKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IHRhYmxlU2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWVUeXBlKiBj
dXJyZW50ID0gbV90YWJsZSArIGluZGV4OworICAgICAgICAgICAgaWYgKGNvbnRyb2xzW2luZGV4
XSAhPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJv
bHNbaW5kZXhdID09IENvbnRyb2xWYWx1ZTo6RW1wdHkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudC0+flZhbHVlVHlwZSgpOworICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplQnVj
a2V0KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAg
ICAgKytIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOworI2VuZGlmCisjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0
czsKKyNlbmRpZgorCisgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmN1cnJlbnQp
ICYmICFpc0RlbGV0ZWRCdWNrZXQoKmN1cnJlbnQpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGgg
PSBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOjpoYXNoKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqY3VycmVu
dCkpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsKKwor
ICAgICAgICAgICAgYXV0byBsb29rdXBFbXB0eU9yRGVsZXRlZCA9IFsmXSh1bnNpZ25lZCBncm91
cEhhc2gpIC0+IFZhbHVlVHlwZSogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwor
ICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBncm91cFNpemVNYXNrOworICAgICAgICAgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3Vw
cyArIGk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1h
dGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24u
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAg
ICAgICBpID0gKGkgKyBrKSAmIGdyb3VwU2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgYXV0byBncm91cEluZGV4ID0gWyZdKFZhbHVlVHlw
ZSogY3VycmVudCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gY3VycmVu
dCAtIG1fdGFibGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC8gR3JvdXA6Om51
bWJlck9mRW50cmllczsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIFZhbHVlVHlwZSog
bmV3RW50cnkgPSBsb29rdXBFbXB0eU9yRGVsZXRlZChncm91cEhhc2gpOworCisgICAgICAgICAg
ICAvLyBJZiBjdXJyZW50IGFuZCBuZXdFbnRyeSBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHdlIGRv
IG5vdCBuZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgaWYgKExJS0VM
WShncm91cEluZGV4KGN1cnJlbnQpID09IGdyb3VwSW5kZXgobmV3RW50cnkpKSkgeworICAgICAg
ICAgICAgICAgIGNvbnRyb2xzW2luZGV4XSA9IGgyKGgpOworICAgICAgICAgICAgICAgIGlmIChl
bnRyeSA9PSBjdXJyZW50ICYmICFyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChjb250cm9sc1tuZXdFbnRyeSAtIG1fdGFibGVdID09IENvbnRyb2xWYWx1
ZTo6RW1wdHkpIHsKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+flZhbHVlVHlwZSgpOworICAg
ICAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIG5ld0VudHJ5KTsKKyAgICAgICAgICAgICAg
ICBpbml0aWFsaXplQnVja2V0KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBjb250cm9sc1tu
ZXdFbnRyeSAtIG1fdGFibGVdID0gaDIoaCk7CisgICAgICAgICAgICAgICAgY29udHJvbHNbY3Vy
cmVudCAtIG1fdGFibGVdID0gQ29udHJvbFZhbHVlOjpFbXB0eTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW50cnkgPT0gY3VycmVudCAmJiAhcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBuZXdFbnRyeTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPT0gQ29u
dHJvbFZhbHVlOjpEZWxldGVkKTsKKyAgICAgICAgICAgIHRyYW5zZmVyKGN1cnJlbnQsIHNsb3Qp
OworICAgICAgICAgICAgdHJhbnNmZXIobmV3RW50cnksIGN1cnJlbnQpOworICAgICAgICAgICAg
dHJhbnNmZXIoc2xvdCwgbmV3RW50cnkpOworICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkg
LSBtX3RhYmxlXSA9IGgyKGgpOworICAgICAgICAgICAgaWYgKGVudHJ5ID09IGN1cnJlbnQgJiYg
IXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdFbnRyeTsKKyAgICAgICAgICAg
IGlmIChlbnRyeSA9PSBuZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGN1cnJlbnQ7
CisgICAgICAgICAgICAtLWluZGV4OyAvLyBSZXBlYXQgdGhpcyBpbmRleCBhZ2Fpbi4KKyAgICAg
ICAgfQorICAgICAgICBzZXREZWxldGVkQ291bnQoMCk7CisgICAgICAgIGludGVybmFsQ2hlY2tU
YWJsZUNvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2xlYXIoKQogICAgIHsKQEAgLTE0NTcsMTYgKzE5
OTcsMjQgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBkZWxldGVk
Q291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUo
KTsKKyAgICAgICAgQ29udHJvbCogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdGFibGVTaXplOyArK2opIHsKICAgICAgICAgICAg
IFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgajsKLSAgICAgICAgICAgIGlmIChpc0VtcHR5
QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoY29udHJvbHNbal0gPT0gQ29udHJvbFZhbHVlOjpFbXB0eSk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNr
ZXQoKmVudHJ5KSkgeworICAgICAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNvbnRyb2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAg
ICAgICAgICAgICAgICAgKytkZWxldGVkQ291bnQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoY29udHJvbHNbal0gIT0gQ29udHJvbFZhbHVlOjpFbXB0eSAmJiBjb250cm9s
c1tqXSAhPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgYXV0byYga2V5ID0g
RXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSk7CiAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBp
dCA9IGZpbmQoa2V5KTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThi
NDI4ZGJlMmIuLmU5ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1DUFUuaApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQp
CiAjZGVmaW5lIFdURl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisj
aWYgZGVmaW5lZChfX1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYK
ICNkZWZpbmUgV1RGX0NQVV9LTk9XTiAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVmFsdWVDaGVjay5oIGIvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCmluZGV4IDI2
ZWFhNTM4ZWJkZWMzZDIzMmVmYmNiMmJjNmQxZTZiZjJlOTdhNWMuLjQ2MzJkNjVjMTc1YTNkMTZk
YTM2MGIyOTc1ODIxYzkwMzlmNGFmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZhbHVl
Q2hlY2suaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmgKQEAgLTQ1LDYgKzQ1LDE1
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBWYWx1ZUNoZWNrPFAqPiB7CiAgICAgICAg
IFZhbHVlQ2hlY2s8UD46OmNoZWNrQ29uc2lzdGVuY3koKnApOwogICAgIH0KIH07Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBWYWx1ZUNoZWNrPHZvaWQqPiB7CisgICAgdHlwZWRlZiB2b2lkKiBUcmFpdFR5
cGU7CisgICAgc3RhdGljIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQorICAg
IHsKKyAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQo
ZmFzdE1hbGxvY1NpemUocCkpOworICAgIH0KK307CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3IuaAppbmRleCA5Nzc2M2UwZjRkZmJmOWVhM2FjZWQzMTQzNjlkYzFkZWMyNjRmYmNk
Li4wZjBjMmJiY2Q3Zjg2MmY5MzkxNGI4OGEyNmMyYTBiY2FjMTBiODg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAt
ODI5LDcgKzgyOSw3IEBAIGNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlu
bGluZUNhcGFjaXR5LCBNYWxsb2M+IHsKIAogICAgIHZvaWQgcmV2ZXJzZSgpOwogCi0gICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgUiA9IHR5cGVu
YW1lIHN0ZDo6cmVzdWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0IFQmKT46OnR5cGU+IFZlY3RvcjxS
PiBtYXAoTWFwRnVuY3Rpb24pIGNvbnN0OwogCkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBpbmxpbmUg
TWFsbG9jUHRyPFQsIE1hbGxvYz4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0
eXBlbmFtZSBNYWxsb2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5LCBNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZiBBU1NF
UlRfRU5BQkxFRAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390233</attachid>
            <date>2020-02-09 22:11:27 -0800</date>
            <delta_ts>2020-02-10 19:54:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200209221126.patch</filename>
            <type>text/plain</type>
            <size>38173</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMDg4ZTQwY2QyZTYyNzU5MTU5MTNk
ZWU3M2VlY2U4ZmE1NDZkYTYuLjk0NzU2MWIyNDQyMDM4OTQyMTA5MmE5MDViMDM1MDc0YzM4ZjBh
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDItMDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSBjb25zdCk6
CisgICAgICAgICogd3RmL1BsYXRmb3JtQ1BVLmg6CisgICAgICAgICogd3RmL1ZhbHVlQ2hlY2su
aDoKKyAgICAgICAgKFdURjo6VmFsdWVDaGVjazx2b2lkOjpjaGVja0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmNoZWNrQ29uc2lz
dGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KTog
RGVsZXRlZC4KKwogMjAyMC0wMi0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXVEZdIFRyeSB1c2luZyA3NSUgbG9hZCBmYWN0b3IgZm9yIEhhc2hUYWJs
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAppbmRleCBkM2FiMTE5MjRmNGVhMmM3ZGNiZTA3YzFmYjRlYTA4ZjE0NjM3
MzYzLi5kYWU3NWY5NGY4YTVmMDVhYmE4YTMxOWIyYmU1OWI1MmRjMGQ3NjJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFi
bGUuaApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICoKICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NUYWJsZSBmb3Ig
bGFyZ2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBBdXRob3JzLgor
ICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisgKi8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAjaW5jbHVkZSA8d3Rm
L1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRlIDxlbW1pbnRy
aW4uaD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShYODZfU1NFMykK
KyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUgRFVNUF9IQVNI
VEFCTEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUgMApA
QCAtMzA4LDE5ICszMzUsMTYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgogICAgIHN0cnVjdCBI
YXNoVGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21h
bGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxs
TWF4TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
c21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZv
ciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKKyAgICAgICAgLy8gc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSAxMDI0OworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IDg7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7CiAKICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlBbmREZWxl
dGVDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKLSAgICAgICAgICAgICAgICByZXR1
cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBzbWFsbE1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNp
emUgKiBzbWFsbE1heExvYWROdW1lcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVs
ZXRlQ291bnQgKiBsYXJnZU1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBsYXJnZU1h
eExvYWROdW1lcmF0b3I7CisgICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBt
YXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVyYXRvcjsKICAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FwYWNpdHlGb3JTaXpl
KHVpbnQ2NF90IHNpemVBcmcpCkBAIC01NjAsMTEgKzU4NCw4IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICAvLyBM
b2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4
TG9hZERlbm9taW5hdG9yOwotICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3IgbGFyZ2UgdGFibGUg
aXMgNTAlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZE51
bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OmxhcmdlTWF4TG9hZE51bWVyYXRvcjsKLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9
IEhhc2hUYWJsZVNpemVQb2xpY3k6OmxhcmdlTWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXpl
UG9saWN5OjptYXhMb2FkTnVtZXJhdG9yOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWREZW5v
bWluYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxl
Q2FwYWNpdHkgPSBIYXNoVGFibGVTaXplUG9saWN5OjptYXhTbWFsbFRhYmxlQ2FwYWNpdHk7CiAg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IEhhc2hUYWJsZVNpemVQ
b2xpY3k6Om1pbkxvYWQ7CiAKQEAgLTU3NCw2ICs1OTUsMTk4IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGRlbGV0ZWRDb3VudE9mZnNldCA9IC00OwogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1ldGFkYXRhU2l6ZSA9IDQgKiBzaXplb2YodW5zaWduZWQpOwogCisgICAgICAg
IHVzaW5nIENvbnRyb2wgPSB1aW50OF90OworICAgICAgICBlbnVtIENvbnRyb2xWYWx1ZSA6IENv
bnRyb2wgeworICAgICAgICAgICAgRW1wdHkgICA9IDBiMTAwMDAwMDAsCisgICAgICAgICAgICBE
ZWxldGVkID0gMGIxMTExMTExMSwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgR3JvdXA7
CisgICAgICAgIGlubGluZSB1bnNpZ25lZCBoMShzaXplX3QgaGFzaCwgY29uc3QgR3JvdXAqIGdy
b3VwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChoYXNoID4+IDcpIF4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGdyb3VwcykgPj4gMTIpOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIENvbnRyb2wgaDIodW5zaWduZWQgaGFzaCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiAweDdGOworICAgICAgICB9CisKKyAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIFQsIHVuc2lnbmVkIHNoaWZ0PgorICAgICAgICBjbGFzcyBC
aXRNYXNrIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6
dmFsdWUpOworCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUg
PSB1bnNpZ25lZDsKKyAgICAgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gQml0TWFzazsKKyAgICAg
ICAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gQml0TWFzazsKKworICAgICAgICAgICAgZXhw
bGljaXQgY29uc3RleHByIEJpdE1hc2soVCBtYXNrKQorICAgICAgICAgICAgICAgIDogbV9tYXNr
KG1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJpdE1h
c2smIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbWFzayAm
PSAobV9tYXNrIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9tYXNrICE9IDA7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRM
U0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBsb3dlc3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQobV9tYXNrKSA+PiBzaGlm
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGhpZ2hl
c3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9t
YXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRNU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQml0TWFzayBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgICAgICAgICBCaXRNYXNrIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEJpdE1hc2soMCk7IH0KKwor
ICAgICAgICAgICAgdW5zaWduZWQgdHJhaWxpbmdaZXJvcygpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBjdHoobV9tYXNrKSA+PiBzaGlm
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zaWduZWQgbGVhZGluZ1plcm9zKCkg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNseihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdE1hc2smIGEsIGNv
bnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEu
bV9tYXNrID09IGIubV9tYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBCaXRNYXNrJiBhLCBjb25zdCBCaXRNYXNrJiBiKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBhLm1fbWFzayAhPSBiLm1fbWFzazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgVCBtX21hc2s7CisgICAgICAgIH07CisKKworI2lm
IDAKKy8vICNpZiBDUFUoWDg2X1NTRTIpCisgICAgICAgIHN0cnVjdCBHcm91cCB7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mRW50cmllcyA9IDE2OworICAg
ICAgICAgICAgdXNpbmcgTWFzayA9IEJpdE1hc2s8dWludDE2X3QsIDA+OworICAgICAgICAgICAg
TWFzayBtYXRjaEVtcHR5T3JEZWxldGVkKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChtX3ZlY3RvcikpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBNYXNrIG1hdGNoQnl0ZShDb250cm9sIGNvbnRyb2wpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBtYXRjaCA9IF9tbV9zZXQx
X2VwaTgoY29udHJvbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNr
X2VwaTgoX21tX2NtcGVxX2VwaTgobWF0Y2gsIG1fdmVjdG9yKSkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHkoKQorICAgICAgICAgICAgeworI2lmIENQVShY
ODZfU1NFMykKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludDhf
dD4oQ29udHJvbFZhbHVlOjpFbXB0eSkgPT0gLTEyOCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE1hc2soX21tX21vdmVtYXNrX2VwaTgoX21tX3NpZ25fZXBpOChtX3ZlY3RvciwgbV92ZWN0b3Ip
KSk7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEJ5dGUoQ29udHJvbFZhbHVl
OjpFbXB0eSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaHR0cHM6
Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3BwL2lzc3Vlcy8yMDkKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTg3ODUzCisgICAg
ICAgICAgICAvLyBfbW1fY21wZ3RfZXBpOCBpcyBicm9rZW4gdW5kZXIgR0NDIHdpdGggLWZ1bnNp
Z25lZC1jaGFyCisgICAgICAgICAgICBpbmxpbmUgc3RhdGljIF9fbTEyOGkgX21tX2NtcGd0X2Vw
aThfZml4ZWQoX19tMTI4aSBhLCBfX20xMjhpIGIpCisgICAgICAgICAgICB7CisjaWYgQ09NUElM
RVIoR0NDKQorICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzX3Vuc2lnbmVkPGNoYXI+Ojp2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBfX20xMjhpIG1hc2sgPSBfbW1fc2V0MV9l
cGk4KDB4ODApOworICAgICAgICAgICAgICAgICAgICBjb25zdCBfX20xMjhpIGRpZmYgPSBfbW1f
c3Vic19lcGk4KGIsIGEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21tX2NtcGVxX2Vw
aTgoX21tX2FuZF9zaTEyOChkaWZmLCBtYXNrKSwgbWFzayk7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIF9tbV9jbXBndF9lcGk4KGEsIGIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGNvbnZlcnRTcGVjaWFsVG9FbXB0eUFuZEZ1
bGxUb0RlbGV0ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERlbGV0ZWQo
MGIxMTExMTExMSkgfCBFbXB0eSgwYjEwMDAwMDAwKSA9PiBFbXB0eSgwYjEwMDAwMDAwKQorICAg
ICAgICAgICAgICAgIC8vIEZ1bGwoMGIwWFhYWFhYWCkgPT4gRGVsZXRlZCgwYjExMTExMTExKQor
ICAgICAgICAgICAgICAgIGF1dG8gemVybyA9IF9tbV9zZXR6ZXJvX3NpMTI4KCk7CisgICAgICAg
ICAgICAgICAgYXV0byBzcGVjaWFsID0gX21tX2NtcGd0X2VwaThfZml4ZWQoemVybywgbV92ZWN0
b3IpOworICAgICAgICAgICAgICAgIGF1dG8gbXNicyA9IF9tbV9zZXQxX2VwaTgoMHg4MCk7Cisg
ICAgICAgICAgICAgICAgYXV0byByZXMgPSBfbW1fb3Jfc2kxMjgobXNicywgX21tX2FuZG5vdF9z
aTEyOChzcGVjaWFsLCBfbW1fc2V0MV9lcGk4KDB4ZmYpKSk7CisgICAgICAgICAgICAgICAgbV92
ZWN0b3IgPSByZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9fbTEyOGkgbV92ZWN0
b3I7CisgICAgICAgIH07CisjZWxzZQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSA4OworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4MDgwODA4MDgw
VUxMOworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBsc2JzID0gMHgwMTAx
MDEwMTAxMDEwMTAxVUxMOworCisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1aW50
NjRfdCwgMz47CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKG1fdmVjdG9yICYgbXNi
cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wg
Y29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhl
IHRlY2huaXF1ZSwgc2VlOgorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9ncmFwaGljcy5zdGFu
Zm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCMjVmFsdWVJbldvcmQKKyAgICAgICAgICAg
ICAgICAvLyAoRGV0ZXJtaW5lIGlmIGEgd29yZCBoYXMgYSBieXRlIGVxdWFsIHRvIG4pLgorICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQ2F2ZWF0OiB0aGVyZSBhcmUgZmFs
c2UgcG9zaXRpdmVzIGJ1dDoKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkgb25seSBvY2N1ciBp
ZiB0aGVyZSBpcyBhIHJlYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkgbmV2ZXIg
b2NjdXIgb24ga0VtcHR5LCBrRGVsZXRlZCwga1NlbnRpbmVsCisgICAgICAgICAgICAgICAgLy8g
LSB0aGV5IHdpbGwgYmUgaGFuZGxlZCBncmFjZWZ1bGx5IGJ5IHN1YnNlcXVlbnQgY2hlY2tzIGlu
IGNvZGUKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6Cisg
ICAgICAgICAgICAgICAgLy8gICB2ID0gMHgxNzE2MTUxNDEzMTIxMTEwCisgICAgICAgICAgICAg
ICAgLy8gICBoYXNoID0gMHgxMgorICAgICAgICAgICAgICAgIC8vICAgcmV0dmFsID0gKHYgLSBs
c2JzKSAmIH52ICYgbXNicyA9IDB4MDAwMDAwMDA4MDgwMDAwMAorICAgICAgICAgICAgICAgIGF1
dG8geCA9IG1fdmVjdG9yIF4gKGxzYnMgKiBzdGF0aWNfY2FzdDx1aW50OF90Pihjb250cm9sKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soKHggLSBsc2JzKSAmIH54ICYgbXNicyk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soKG1fdmVjdG9yICYgKH5tX3ZlY3RvciA8
PCAxKSkgJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBjb252ZXJ0
U3BlY2lhbFRvRW1wdHlBbmRGdWxsVG9EZWxldGVkKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBEZWxldGVkKDBiMTExMTExMTEpIHwgRW1wdHkoMGIxMDAwMDAwMCkgPT4gRW1w
dHkoMGIxMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAvLyBGdWxsKDBiMFhYWFhYWFgpID0+IERl
bGV0ZWQoMGIxMTExMTExMSkKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBtX3ZlY3RvciAmIG1z
YnM7CisgICAgICAgICAgICAgICAgYXV0byByZXMgPSB+eCArICh4ID4+IDcpOworICAgICAgICAg
ICAgICAgIG1fdmVjdG9yID0gcmVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50
NjRfdCBtX3ZlY3RvcjsKKyAgICAgICAgfTsKKyNlbmRpZgorCiAgICAgICAgIHVuc2lnbmVkIHRh
YmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA6IDA7IH0KICAgICAgICAgdm9pZCBzZXRU
YWJsZVNpemUodW5zaWduZWQgc2l6ZSkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdID0gc2l6ZTsgfQog
ICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7
IHJldHVybiBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3Rh
YmxlU2l6ZU1hc2tPZmZzZXRdIDogMDsgfQpAQCAtNTgyLDYgKzc5NSwxNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB2b2lkIHNl
dEtleUNvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2tleUNvdW50T2Zmc2V0XSA9IGNvdW50OyB9
CiAgICAgICAgIHVuc2lnbmVkIGRlbGV0ZWRDb3VudCgpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUp
OyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3Vu
dE9mZnNldF07IH0KICAgICAgICAgdm9pZCBzZXREZWxldGVkQ291bnQodW5zaWduZWQgY291bnQp
IGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90
YWJsZSlbZGVsZXRlZENvdW50T2Zmc2V0XSA9IGNvdW50OyB9CisgICAgICAgIENvbnRyb2wqIGNv
bnRyb2xzKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxDb250cm9sKj4oZ3JvdXBzKCkpOworICAgICAgICB9CisgICAgICAgIEdyb3VwKiBncm91cHMo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlz
LT50YWJsZVNpemUoKTsKKyAgICAgICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21hbGxUYWJs
ZUNhcGFjaXR5KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxHcm91cCo+KGJpdHdpc2VfY2FzdDxDb250cm9sKj4obV90YWJs
ZSkgLSBtZXRhZGF0YVNpemUgLSB0YWJsZVNpemUpOworICAgICAgICB9CiAKICAgICAgICAgVmFs
dWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OwogCkBAIC02NjYsOSArODkwLDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgaWYg
KCF0YWJsZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHVuc2lnbmVk
IHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRy
YW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsK
IAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51
bUFjY2Vzc2VzOwpAQCAtNjc5LDYgKzkwMSwzOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2Vz
OwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkg
eworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBzKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQg
Z3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5z
aWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9
IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
ICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1i
ZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0Vt
cHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3Vw
LT5tYXRjaEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50Owor
ICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHBy
b2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUK
KyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291
bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAg
ICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9
IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBp
ID0gaCAmIHNpemVNYXNrOwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IHRhYmxlICsgaTsKICAgICAgICAgICAgICAgICAKQEAgLTcyMCw5ICs5NzUs
NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
CiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90
YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAg
ICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAg
ICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC03MzMsNiArOTg2LDQ4IEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAg
ICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdy
b3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2gg
PSBoMShoLCBncm91cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihH
cm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAg
ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5tYXRjaEJ5
dGUoZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0g
dGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVj
a2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xh
dG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShlbnRyeSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
KyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2go
Z3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMg
KyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAtPm1hdGNoRW1w
dHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IExvb2t1cFR5cGUodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9u
LnZhbHVlKCksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAg
ICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgIHVuc2ln
bmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0g
MDsKIAogICAgICAgICB3aGlsZSAoMSkgewpAQCAtNzgxLDkgKzEwNzYsNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2ln
bmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAg
dW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGgg
PSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNp
emVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVT
dGF0czo6bnVtQWNjZXNzZXM7CkBAIC03OTQsNiArMTA4Nyw0OCBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51
bUFjY2Vzc2VzOwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwKiBncm91cHMgPSB0aGlzLT5n
cm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCwgZ3JvdXBz
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAg
dW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAg
ICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5z
aWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdy
b3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0
cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZW50cnksIHRydWUsIGgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAg
ICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRz
OjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAg
aWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3Vw
SGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsK
KyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JE
ZWxldGVkKCkubG93ZXN0Qml0U2V0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
TG9va3VwUmVzdWx0KHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlv
bi52YWx1ZSgpLCBmYWxzZSwgaCk7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1
bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRy
eSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTg0Nyw5ICsxMTgyLDcgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1
bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25l
ZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRh
YmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtODYxLDI3ICsxMTk0LDU3IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50
cnkgPSB0YWJsZSArIGk7CisgICAgICAgIGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBz
KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgsIGdyb3Vwcyk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91
cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3
aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eSgpLmxv
d2VzdEJpdFNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpICog
R3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzRW1w
dHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAg
ICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkg
PSBoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAg
IGVudHJ5ID0gdGFibGUgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAg
ICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0
Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9PSAw
KQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xz
ID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gdGFibGVd
ID0gaDIoaCk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAg
ICB9CkBAIC05MjgsOSArMTI5MSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZh
bHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNo
KGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hB
U0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAg
LTk0Myw0MCArMTMwNCw4NiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gMDsKICAg
ICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAg
IGVudHJ5ID0gdGFibGUgKyBpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB3ZSBjb3Vu
dCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCi0gICAgICAgICAg
ICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICBpZiAoR3Jv
dXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91
cEhhc2ggPSBoMShoLCBncm91cHMpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0g
aDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNp
emVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAt
IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAg
ICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3Vw
cyArIGk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5t
YXRjaEJ5dGUoZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hU
cmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRv
cihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KExJS0VMWShncm91cC0+bWF0Y2hFbXB0eSgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjpl
cXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgq
ZW50cnkpKQotICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5
KSkKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNv
dW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENv
dW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHBy
b2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAg
ICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkg
PSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAg
ICAgICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAo
YXV0byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVt
YmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
ZEVudHJ5ID0gZW50cnk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAgICAg
ICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJh
dG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBI
YXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwogICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0
YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsg
aTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCisgICAgICAgICAgICAgICAgaWYg
KEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtl
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdv
b2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhh
c2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJh
dG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAg
ICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0
Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9PSAw
KQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoZGVsZXRlZEVudHJ5KSB7CkBAIC05ODYsNiArMTM5Myw4IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xz
ID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gdGFibGVd
ID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwMjQsNiArMTQzMyw4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoKTsKKyAgICAgICAgaWYgKGF1
dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2Vu
dHJ5IC0gbV90YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAr
IDEpOwogCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwNDcsOSArMTQ1OCwxMiBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRpZgogCi0gICAgICAgIFZhbHVlKiBu
ZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuZmly
c3Q7CisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JX
cml0aW5nPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkp
OworICAgICAgICBWYWx1ZVR5cGUqIG5ld0VudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0LmZpcnN0
OwogICAgICAgICBuZXdFbnRyeS0+flZhbHVlKCk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgbmV3
RW50cnkpIFZhbHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgIGlmIChhdXRvKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tuZXdFbnRyeSAt
IG1fdGFibGVdID0gaDIobG9va3VwUmVzdWx0LnNlY29uZCk7CiAKICAgICAgICAgcmV0dXJuIG5l
d0VudHJ5OwogICAgIH0KQEAgLTExMTgsNiArMTUzMiw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICBkZWxldGVC
dWNrZXQoKnBvcyk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xz
KCkpCisgICAgICAgICAgICBjb250cm9sc1twb3MgLSBtX3RhYmxlXSA9IENvbnRyb2xWYWx1ZTo6
RGVsZXRlZDsKICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgMSk7CiAg
ICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgLSAxKTsKIApAQCAtMTE3OSw2ICsxNTk1LDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVsZXRl
QnVja2V0KGJ1Y2tldCk7CisgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5j
b250cm9scygpKQorICAgICAgICAgICAgICAgIGNvbnRyb2xzW2ldID0gQ29udHJvbFZhbHVlOjpE
ZWxldGVkOwogICAgICAgICAgICAgKytyZW1vdmVkQnVja2V0Q291bnQ7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHJlbW92ZWRCdWNrZXRDb3VudCkgewpAQCAtMTE5OCwxNCArMTYxNiwzMCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsK
ICAgICAgICAgc3RhdGljX2Fzc2VydCghKG1ldGFkYXRhU2l6ZSAlIGFsaWdub2YoVmFsdWVUeXBl
KSkpOwogCisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IDA7CisgICAgICAgIHNpemVf
dCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkp
IHsKKyAgICAgICAgICAgIGFsbG9jYXRpb25TaXplID0gbWV0YWRhdGFTaXplICsgc2l6ZSAqIHNp
emVvZihWYWx1ZVR5cGUpOworICAgICAgICAgICAgb2Zmc2V0ID0gbWV0YWRhdGFTaXplOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUg
KyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkgKyBzaXplOworICAgICAgICAgICAgb2Zmc2V0ID0g
bWV0YWRhdGFTaXplICsgc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlVHlwZSogcmVz
dWx0ID0gbnVsbHB0cjsKKwogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIg
ZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CiAgICAgICAg
IC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKICAgICAgICAgaWYgKFRyYWl0
czo6ZW1wdHlWYWx1ZUlzWmVybykKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9lZE1h
bGxvYyhtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSArIG1ldGFkYXRh
U2l6ZSk7CisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+
KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9lZE1hbGxvYyhhbGxvY2F0
aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQg
PSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFi
bGVNYWxsb2M6Om1hbGxvYyhhbGxvY2F0aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgICAgICB9CiAKLSAgICAgICAgVmFsdWVUeXBl
KiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIq
PihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZh
bHVlVHlwZSkpKSArIG1ldGFkYXRhU2l6ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7
CisgICAgICAgIGlmIChzaXplID4gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAg
bWVtc2V0KGJpdHdpc2VfY2FzdDxDb250cm9sKj4ocmVzdWx0KSAtIG9mZnNldCwgQ29udHJvbFZh
bHVlOjpFbXB0eSwgc2l6ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0x
MjE3LDcgKzE2NTEsMTAgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkK
ICAgICAgICAgICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAt
IG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0
eSkKKyAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNo
YXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0
YWRhdGFTaXplIC0gc2l6ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KQEAgLTEyNjAsMTUgKzE2OTcs
OSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVu
QXZlcmFnZUFuZE1heExvYWRSYXRpbzsKICAgICAgICAgfTsKIAotICAgICAgICBpZiAoYmVzdFRh
YmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBkb3VibGUgc21hbGxMb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzbWFsbE1heExv
YWROdW1lcmF0b3IpIC8gc21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAo
YWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihzbWFsbExvYWRGYWN0b3IsIGtleUNvdW50
LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIgZG91YmxlIGxhcmdlTG9hZEZh
Y3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obGFyZ2VNYXhMb2FkTnVtZXJhdG9yKSAvIGxhcmdl
TWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFn
ZXJFeHBhbnNpb24obGFyZ2VMb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0g
ICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAgICAgICB9CisgICAgICAgIGNv
bnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51
bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIGlmIChhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkK
KyAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKICAgICAgICAgdW5zaWduZWQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOwogICAgIH0KQEAgLTEy
ODgsNiArMTcxOSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1fdGFibGVbaV07CiAgICAgICAg
ICAgICBpZiAoaXNSZWxlYXNlZFdlYWtCdWNrZXQoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAg
ZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMg
PSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IENv
bnRyb2xWYWx1ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICAgICBzZXREZWxldGVkQ291bnQoZGVs
ZXRlZENvdW50KCkgKyAxKTsKICAgICAgICAgICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgp
IC0gMSk7CiAgICAgICAgICAgICB9CkBAIC0xMzAwLDcgKzE3MzMsNiBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAogICAgICAgICB1bnNpZ25lZCBvbGRU
YWJsZVNpemUgPSB0YWJsZVNpemUoKTsKLSAgICAgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1f
dGFibGU7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICBpZiAob2xkVGFibGVT
aXplICE9IDApCkBAIC0xMzEyLDYgKzE3NDQsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgKyttX3N0YXRzLT5udW1SZWhh
c2hlczsKICNlbmRpZgogCisgICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwog
ICAgICAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFi
bGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHNldFRhYmxlU2l6ZShu
ZXdUYWJsZVNpemUpOwpAQCAtMTM0OCw4ICsxNzgxLDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAob2xkVGFibGUpCi0gICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAg
ICAgICAgaWYgKG9sZFRhYmxlKSB7CisgICAgICAgICAgICBpZiAob2xkVGFibGVTaXplIDw9IG1h
eFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplIC0gb2xkVGFibGVT
aXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKQEAgLTE0NTcsMTYgKzE4OTQsMjQgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
dW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBkZWxldGVkQ291bnQgPSAwOwog
ICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAgICAg
Q29udHJvbCogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgdGFibGVTaXplOyArK2opIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSog
ZW50cnkgPSBtX3RhYmxlICsgajsKLSAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRy
eSkpCisgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY29udHJvbHNb
al0gPT0gQ29udHJvbFZhbHVlOjpFbXB0eSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkg
eworICAgICAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAg
ICAgKytkZWxldGVkQ291bnQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICBBU1NFUlQo
Y29udHJvbHNbal0gIT0gQ29udHJvbFZhbHVlOjpFbXB0eSAmJiBjb250cm9sc1tqXSAhPSBDb250
cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgYXV0byYga2V5ID0gRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSk7CiAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoa2V5
KTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThiNDI4ZGJlMmIuLmU5
ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1DUFUu
aApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQpCiAjZGVmaW5lIFdU
Rl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisjaWYgZGVmaW5lZChf
X1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYKICNkZWZpbmUgV1RG
X0NQVV9LTk9XTiAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFsdWVD
aGVjay5oIGIvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCmluZGV4IDI2ZWFhNTM4ZWJkZWMz
ZDIzMmVmYmNiMmJjNmQxZTZiZjJlOTdhNWMuLjQ2MzJkNjVjMTc1YTNkMTZkYTM2MGIyOTc1ODIx
YzkwMzlmNGFmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmgKQEAgLTQ1LDYgKzQ1LDE1IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFA+IHN0cnVjdCBWYWx1ZUNoZWNrPFAqPiB7CiAgICAgICAgIFZhbHVlQ2hlY2s8
UD46OmNoZWNrQ29uc2lzdGVuY3koKnApOwogICAgIH0KIH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBW
YWx1ZUNoZWNrPHZvaWQqPiB7CisgICAgdHlwZWRlZiB2b2lkKiBUcmFpdFR5cGU7CisgICAgc3Rh
dGljIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAg
aWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoZmFzdE1hbGxvY1Np
emUocCkpOworICAgIH0KK307CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApp
bmRleCA5Nzc2M2UwZjRkZmJmOWVhM2FjZWQzMTQzNjlkYzFkZWMyNjRmYmNkLi4wZjBjMmJiY2Q3
Zjg2MmY5MzkxNGI4OGEyNmMyYTBiY2FjMTBiODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtODI5LDcgKzgyOSw3
IEBAIGNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5
LCBNYWxsb2M+IHsKIAogICAgIHZvaWQgcmV2ZXJzZSgpOwogCi0gICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVz
dWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVu
Y3Rpb24pIGNvbnN0OwogCkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBpbmxpbmUgTWFsbG9jUHRyPFQs
IE1hbGxvYz4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQoraW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390339</attachid>
            <date>2020-02-10 19:54:39 -0800</date>
            <delta_ts>2020-02-11 14:44:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200210195438.patch</filename>
            <type>text/plain</type>
            <size>38120</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkxMGYzNzhmNjk0ZGRhYzJkYTY3NDMx
MmM0MDg4NTBiOTljMGQ0YTEuLmVjYjM0NWY3NDNiYzJlZTliMzU1NzVjYjEwODE1NGFhMWYzYTJl
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDItMTAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6bWF0Y2hFbXB0eU9yRGVsZXRlZCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6R3JvdXA6Om1hdGNoQnl0ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3Jv
dXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpfbW1fY21w
Z3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6R3JvdXA6OmNvbnZlcnRT
cGVjaWFsVG9FbXB0eUFuZEZ1bGxUb0RlbGV0ZWQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpncm91cHMgY29uc3Qp
OgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVMb29rdXApOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphZGRV
bmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZCk6
CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZSk6CisgICAgICAg
IChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlSWYpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y29tcHV0ZUJl
c3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpkZWxldGVSZWxlYXNlZFdl
YWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSBjb25zdCk6
CisgICAgICAgICogd3RmL1BsYXRmb3JtQ1BVLmg6CisgICAgICAgICogd3RmL1ZhbHVlQ2hlY2su
aDoKKyAgICAgICAgKFdURjo6VmFsdWVDaGVjazx2b2lkOjpjaGVja0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Ok1hbGxvYz46OmNoZWNrQ29uc2lz
dGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KTog
RGVsZXRlZC4KKwogMjAyMC0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHNwZWN1bGF0aXZlIGJ1aWxkIGZpeCBvbiB3YXRjaE9T
IHNpbXVsYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA5MDc0NzgyMjk1OGE4YWY5NTgyMzEyMmMxNWI4
NjM1N2U0YzgzMjIyLi4xZWFjOWFmZmNkNTQyMjE1NGQ5NmM4NTQ2M2U3NWIzNDVkYThiZTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaApAQCAtMTgsNiArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICoKICAqLworLyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NU
YWJsZSBmb3IgbGFyZ2VyIHNpemUuCisgKgorICogQ29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBB
dXRob3JzLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisgKi8KIAogI3ByYWdtYSBvbmNlCiAKQEAgLTM2LDYgKzUzLDE2IEBACiAjaW5j
bHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVmFsdWVDaGVjay5oPgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRl
IDxlbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShY
ODZfU1NFMykKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUg
RFVNUF9IQVNIVEFCTEVfU1RBVFMgMAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJf
VEFCTEUgMApAQCAtMzA4LDE5ICszMzUsMTYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPgogICAg
IHN0cnVjdCBIYXNoVGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICAvLyBMb2FkLWZhY3Rv
ciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IDM7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSA0OworICAgICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IDQ7CiAgICAgICAgIC8vIExvYWQt
ZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7Ci0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKKyAgICAg
ICAgLy8gc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSAx
MDI0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBh
Y2l0eSA9IDg7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7
CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBr
ZXlBbmREZWxldGVDb3VudCwgdWludDY0X3QgdGFibGVTaXplKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBzbWFsbE1heExvYWREZW5vbWluYXRvciA+
PSB0YWJsZVNpemUgKiBzbWFsbE1heExvYWROdW1lcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4g
a2V5QW5kRGVsZXRlQ291bnQgKiBsYXJnZU1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUg
KiBsYXJnZU1heExvYWROdW1lcmF0b3I7CisgICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRl
Q291bnQgKiBtYXhMb2FkRGVub21pbmF0b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVyYXRv
cjsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FwYWNp
dHlGb3JTaXplKHVpbnQzMl90IHNpemVBcmcpCkBAIC01NjYsMTEgKzU5MCw4IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAg
ICAgICAvLyBMb2FkLWZhY3RvciBmb3Igc21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNp
emVQb2xpY3k6OnNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
OnNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3IgbGFy
Z2UgdGFibGUgaXMgNTAlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdl
TWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OmxhcmdlTWF4TG9hZE51bWVy
YXRvcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5v
bWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OmxhcmdlTWF4TG9hZERlbm9taW5hdG9yOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSBIYXNo
VGFibGVTaXplUG9saWN5OjptYXhMb2FkTnVtZXJhdG9yOworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1h
eExvYWREZW5vbWluYXRvcjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhT
bWFsbFRhYmxlQ2FwYWNpdHkgPSBIYXNoVGFibGVTaXplUG9saWN5OjptYXhTbWFsbFRhYmxlQ2Fw
YWNpdHk7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IEhhc2hU
YWJsZVNpemVQb2xpY3k6Om1pbkxvYWQ7CiAKQEAgLTU4MCw2ICs2MDEsMTk4IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGRlbGV0ZWRDb3VudE9mZnNldCA9IC00OwogICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1ldGFkYXRhU2l6ZSA9IDQgKiBzaXplb2YodW5zaWduZWQpOwog
CisgICAgICAgIHVzaW5nIENvbnRyb2wgPSB1aW50OF90OworICAgICAgICBlbnVtIENvbnRyb2xW
YWx1ZSA6IENvbnRyb2wgeworICAgICAgICAgICAgRW1wdHkgICA9IDBiMTAwMDAwMDAsCisgICAg
ICAgICAgICBEZWxldGVkID0gMGIxMTExMTExMSwKKyAgICAgICAgfTsKKworICAgICAgICBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGgxKHVuc2lnbmVkIGhhc2gpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBoYXNoOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgZXh0cmFjdCBbMTcs
IDI0XSBiaXRzIHNpbmNlIFN0cmluZ0ltcGwgb25seSBvZmZlcnMgMjQgYml0cy4KKyAgICAgICAg
aW5saW5lIENvbnRyb2wgaDIodW5zaWduZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIChoYXNoID4+IDE3KSAmIDB4N0Y7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hpZnQ+CisgICAgICAgIGNsYXNzIEJpdE1hc2sgeworICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSk7CisKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHVuc2lnbmVkOwor
ICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSBCaXRNYXNrOworICAgICAgICAgICAgdXNpbmcg
Y29uc3RfaXRlcmF0b3IgPSBCaXRNYXNrOworCisgICAgICAgICAgICBleHBsaWNpdCBjb25zdGV4
cHIgQml0TWFzayhUIG1hc2spCisgICAgICAgICAgICAgICAgOiBtX21hc2sobWFzaykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQml0TWFzayYgb3BlcmF0b3Ir
KygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9tYXNrICY9IChtX21hc2sgLSAx
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX21hc2sgIT0g
MDsgfQorICAgICAgICAgICAgdW5zaWduZWQgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2sp
ID4+IHNoaWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IGxvd2VzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gaGlnaGVzdEJpdFNldCgpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdldE1TQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBCaXRNYXNrIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgICAgIEJp
dE1hc2sgZW5kKCkgY29uc3QgeyByZXR1cm4gQml0TWFzaygwKTsgfQorCisgICAgICAgICAgICB1
bnNpZ25lZCB0cmFpbGluZ1plcm9zKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGN0eihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBsZWFkaW5nWmVyb3MoKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2x6KG1fbWFzaykg
Pj4gc2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0TWFzayYg
YikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5tX21hc2sgPT0gYi5t
X21hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGEubV9tYXNrICE9IGIubV9tYXNrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBUIG1fbWFzazsKKyAgICAgICAgfTsKKworCisjaWYgMAorLy8gI2lmIENQ
VShYODZfU1NFMikKKyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gMTY7CisgICAgICAgICAgICB1c2lu
ZyBNYXNrID0gQml0TWFzazx1aW50MTZfdCwgMD47CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1w
dHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KG1fdmVjdG9yKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIE1hc2sgbWF0Y2hCeXRlKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hdGNoID0gX21tX3NldDFfZXBpOChjb250cm9s
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1fY21w
ZXFfZXBpOChtYXRjaCwgbV92ZWN0b3IpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7CisjaWYgQ1BVKFg4Nl9TU0UzKQorICAg
ICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50OF90PihDb250cm9sVmFs
dWU6OkVtcHR5KSA9PSAtMTI4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92
ZW1hc2tfZXBpOChfbW1fc2lnbl9lcGk4KG1fdmVjdG9yLCBtX3ZlY3RvcikpKTsKKyNlbHNlCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoQnl0ZShDb250cm9sVmFsdWU6OkVtcHR5KTsKKyNl
bmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
YWJzZWlsL2Fic2VpbC1jcHAvaXNzdWVzLzIwOQorICAgICAgICAgICAgLy8gaHR0cHM6Ly9nY2Mu
Z251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9ODc4NTMKKyAgICAgICAgICAgIC8vIF9t
bV9jbXBndF9lcGk4IGlzIGJyb2tlbiB1bmRlciBHQ0Mgd2l0aCAtZnVuc2lnbmVkLWNoYXIKKyAg
ICAgICAgICAgIGlubGluZSBzdGF0aWMgX19tMTI4aSBfbW1fY21wZ3RfZXBpOF9maXhlZChfX20x
MjhpIGEsIF9fbTEyOGkgYikKKyAgICAgICAgICAgIHsKKyNpZiBDT01QSUxFUihHQ0MpCisgICAg
ICAgICAgICAgICAgaWYgKHN0ZDo6aXNfdW5zaWduZWQ8Y2hhcj46OnZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkgbWFzayA9IF9tbV9zZXQxX2VwaTgoMHg4MCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbTEyOGkgZGlmZiA9IF9tbV9zdWJzX2VwaTgoYiwg
YSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbW1fY21wZXFfZXBpOChfbW1fYW5kX3Np
MTI4KGRpZmYsIG1hc2spLCBtYXNrKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX21tX2NtcGd0X2VwaTgoYSwgYik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZvaWQgY29udmVydFNwZWNpYWxUb0VtcHR5QW5kRnVsbFRvRGVsZXRlZCgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRlZCgwYjExMTExMTExKSB8
IEVtcHR5KDBiMTAwMDAwMDApID0+IEVtcHR5KDBiMTAwMDAwMDApCisgICAgICAgICAgICAgICAg
Ly8gRnVsbCgwYjBYWFhYWFhYKSA9PiBEZWxldGVkKDBiMTExMTExMTEpCisgICAgICAgICAgICAg
ICAgYXV0byB6ZXJvID0gX21tX3NldHplcm9fc2kxMjgoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHNwZWNpYWwgPSBfbW1fY21wZ3RfZXBpOF9maXhlZCh6ZXJvLCBtX3ZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgYXV0byBtc2JzID0gX21tX3NldDFfZXBpOCgweDgwKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHJlcyA9IF9tbV9vcl9zaTEyOChtc2JzLCBfbW1fYW5kbm90X3NpMTI4KHNwZWNpYWws
IF9tbV9zZXQxX2VwaTgoMHhmZikpKTsKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IHJlczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX19tMTI4aSBtX3ZlY3RvcjsKKyAgICAgICAg
fTsKKyNlbHNlCisgICAgICAgIHN0cnVjdCBHcm91cCB7CisgICAgICAgICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mRW50cmllcyA9IDg7CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ2NF90IG1zYnMgPSAweDgwODA4MDgwODA4MDgwODBVTEw7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGxzYnMgPSAweDAxMDEwMTAxMDEwMTAxMDFV
TEw7CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVpbnQ2NF90LCAzPjsKKyAg
ICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2sobV92ZWN0b3IgJiBtc2JzKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEJ5dGUoQ29udHJvbCBjb250cm9sKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgdGVjaG5pcXVlLCBz
ZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2Vh
bmRlci9iaXRoYWNrcy5odG1sIyNWYWx1ZUluV29yZAorICAgICAgICAgICAgICAgIC8vIChEZXRl
cm1pbmUgaWYgYSB3b3JkIGhhcyBhIGJ5dGUgZXF1YWwgdG8gbikuCisgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAvLyBDYXZlYXQ6IHRoZXJlIGFyZSBmYWxzZSBwb3NpdGl2ZXMg
YnV0OgorICAgICAgICAgICAgICAgIC8vIC0gdGhleSBvbmx5IG9jY3VyIGlmIHRoZXJlIGlzIGEg
cmVhbCBtYXRjaAorICAgICAgICAgICAgICAgIC8vIC0gdGhleSBuZXZlciBvY2N1ciBvbiBrRW1w
dHksIGtEZWxldGVkLCBrU2VudGluZWwKKyAgICAgICAgICAgICAgICAvLyAtIHRoZXkgd2lsbCBi
ZSBoYW5kbGVkIGdyYWNlZnVsbHkgYnkgc3Vic2VxdWVudCBjaGVja3MgaW4gY29kZQorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gRXhhbXBsZToKKyAgICAgICAgICAgICAg
ICAvLyAgIHYgPSAweDE3MTYxNTE0MTMxMjExMTAKKyAgICAgICAgICAgICAgICAvLyAgIGhhc2gg
PSAweDEyCisgICAgICAgICAgICAgICAgLy8gICByZXR2YWwgPSAodiAtIGxzYnMpICYgfnYgJiBt
c2JzID0gMHgwMDAwMDAwMDgwODAwMDAwCisgICAgICAgICAgICAgICAgYXV0byB4ID0gbV92ZWN0
b3IgXiAobHNicyAqIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbnRyb2wpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWFzaygoeCAtIGxzYnMpICYgfnggJiBtc2JzKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWFzaygobV92ZWN0b3IgJiAofm1fdmVjdG9yIDw8IDEpKSAmIG1zYnMp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGNvbnZlcnRTcGVjaWFsVG9FbXB0
eUFuZEZ1bGxUb0RlbGV0ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERl
bGV0ZWQoMGIxMTExMTExMSkgfCBFbXB0eSgwYjEwMDAwMDAwKSA9PiBFbXB0eSgwYjEwMDAwMDAw
KQorICAgICAgICAgICAgICAgIC8vIEZ1bGwoMGIwWFhYWFhYWCkgPT4gRGVsZXRlZCgwYjExMTEx
MTExKQorICAgICAgICAgICAgICAgIGF1dG8geCA9IG1fdmVjdG9yICYgbXNiczsKKyAgICAgICAg
ICAgICAgICBhdXRvIHJlcyA9IH54ICsgKHggPj4gNyk7CisgICAgICAgICAgICAgICAgbV92ZWN0
b3IgPSByZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ2NF90IG1fdmVjdG9y
OworICAgICAgICB9OworI2VuZGlmCisKICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxl
KVt0YWJsZVNpemVPZmZzZXRdIDogMDsgfQogICAgICAgICB2b2lkIHNldFRhYmxlU2l6ZSh1bnNp
Z25lZCBzaXplKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gPSBzaXplOyB9CiAgICAgICAgIHVuc2ln
bmVkIHRhYmxlU2l6ZU1hc2soKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmV0dXJuIG1fdGFi
bGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplTWFza09m
ZnNldF0gOiAwOyB9CkBAIC01ODgsNiArODAxLDE3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHZvaWQgc2V0S2V5Q291bnQodW5z
aWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkKj4obV90YWJsZSlba2V5Q291bnRPZmZzZXRdID0gY291bnQ7IH0KICAgICAgICAgdW5z
aWduZWQgZGVsZXRlZENvdW50KCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50T2Zmc2V0XTsgfQog
ICAgICAgICB2b2lkIHNldERlbGV0ZWRDb3VudCh1bnNpZ25lZCBjb3VudCkgY29uc3QgeyBBU1NF
UlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVk
Q291bnRPZmZzZXRdID0gY291bnQ7IH0KKyAgICAgICAgQ29udHJvbCogY29udHJvbHMoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PENvbnRyb2wqPihn
cm91cHMoKSk7CisgICAgICAgIH0KKyAgICAgICAgR3JvdXAqIGdyb3VwcygpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgp
OworICAgICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEdyb3VwKj4oYml0d2lzZV9jYXN0PENvbnRyb2wqPihtX3RhYmxlKSAtIG1ldGFkYXRh
U2l6ZSAtIHRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBWYWx1ZVR5cGUqIG1fdGFi
bGUgeyBudWxscHRyIH07CiAKQEAgLTY3Miw5ICs4OTYsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBpZiAoIXRhYmxlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0
YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFz
aChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBA
IC02ODUsNiArOTA3LDM5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAor
ICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5
SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXpl
KCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91
cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNr
OworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAg
PSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBn
cm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlv
bjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYg
IWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VM
WShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmIERVTVBfSEFTSFRBQkxFX1NU
QVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisK
KyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0
YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAg
ICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVI
YXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
dGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAg
ICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsg
aTsKICAgICAgICAgICAgICAgICAKQEAgLTcyNiw5ICs5ODEsNyBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsg
PSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNo
VHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNr
OwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6
bnVtQWNjZXNzZXM7CkBAIC03MzksNiArOTkyLDQ4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNz
ZXM7CiAjZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3Vwcygp
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBT
aXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3Vw
SGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAg
ICBHcm91cCogZ3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcG9zaXRpb24gOiBncm91cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVu
dHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVj
a2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5
cGUoZW50cnksIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
TElLRUxZKGdyb3VwLT5tYXRjaEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50
OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50
KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFC
TEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2Jl
Q291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAg
aSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBn
cm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAg
ICAgICAgR3JvdXAqIGdyb3VwID0gZ3JvdXBzICsgaTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byBwb3NpdGlvbiA9IGdyb3VwLT5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0KCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKHRhYmxlICsgaSAqIEdyb3Vw
OjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNo
KGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFi
bGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAg
ICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAg
LTc4Nyw5ICsxMDgyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBl
KiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXpl
TWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsK
LSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxF
X1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtODAwLDYg
KzEwOTMsNDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRh
YmxlKTsKICAgICAgICAgKyttX3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAg
IGlmIChHcm91cCogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0g
aDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNp
emVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAt
IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAg
ICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3Vw
cyArIGk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLT5t
YXRjaEJ5dGUoZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVu
dHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hU
cmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwg
aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAt
Pm1hdGNoRW1wdHkoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAg
ICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAg
ICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5k
aWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0g
MSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNp
emVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCog
Z3JvdXAgPSBncm91cHMgKyBpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBvc2l0aW9uID0g
Z3JvdXAtPm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJl
ck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3Jv
dXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNp
emVNYXNrKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIFZh
bHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gMDsKIAogICAgICAgICB3aGlsZSAoMSkgewpAQCAtODUz
LDkgKzExODgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRh
YmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNr
KCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAg
ICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC04NjcsMjcgKzEy
MDAsNTcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICNlbmRpZgogCiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgx
KSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgaWYgKEdyb3VwKiBn
cm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNo
ID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAv
IHNpemVvZihHcm91cCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6
ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7Cisg
ICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdy
b3VwcyArIGk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0
Y2hFbXB0eSgpLmxvd2VzdEJpdFNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0g
dGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAg
ICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9i
ZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisg
ICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAo
aSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAg
ICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKGlz
RW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAg
ICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7Cisg
ICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0
YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBE
VU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29y
ZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+
cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAg
ICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAg
ICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKGsg
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAg
ICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3
YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYgKGF1
dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2Vu
dHJ5IC0gdGFibGVdID0gaDIoaCk7CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lz
dGVuY3koKTsKICAgICB9CkBAIC05MzQsOSArMTI5Nyw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBz
aXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFu
c2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAK
ICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1B
Y2Nlc3NlczsKQEAgLTk0OSw0MCArMTMxMCw4NiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVu
dHJ5ID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNo
Ci0gICAgICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAg
ICAgICBpZiAoR3JvdXAqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFz
aCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkg
LyBzaXplb2YoR3JvdXApOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNp
emUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCogZ3JvdXAgPSBn
cm91cHMgKyBpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91
cC0+bWF0Y2hCeXRlKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlz
RGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShI
YXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChMSUtFTFkoZ3JvdXAtPm1hdGNoRW1wdHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRv
cjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFs
c2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNr
ZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJv
YmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9u
QXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNf
UEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAg
ICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAg
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAg
ICAgICAgICAgICAgIEdyb3VwKiBncm91cCA9IGdyb3VwcyArIGk7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC0+bWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJp
dFNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6
Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZWRFbnRyeSA9IGVudHJ5OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBr
ZXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdy
b3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFz
azsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJs
ZSArIGk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gd2UgY291bnQgb24g
dGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAorICAgICAgICAgICAgICAg
IGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkp
LCBrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25v
d25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJ
dGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKLSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAg
ICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVj
b3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNp
b25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENv
bGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsg
PT0gMCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAg
ICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisg
ICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAg
ICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGRlbGV0ZWRFbnRyeSkgewpAQCAtOTkyLDYgKzEzOTksOCBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihr
ZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRh
YmxlXSA9IGgyKGgpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDMwLDYgKzE0MzksOCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwgaCk7CisgICAgICAgIGlm
IChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9s
c1tlbnRyeSAtIG1fdGFibGVdID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50
KCkgKyAxKTsKIAogICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkpCkBAIC0xMDUzLDkgKzE0NjQs
MTIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgKyttX3N0YXRzLT5udW1SZWluc2VydHM7CiAjZW5kaWYKIAotICAgICAgICBWYWx1
ZSogbmV3RW50cnkgPSBsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkp
LmZpcnN0OworICAgICAgICBGdWxsTG9va3VwVHlwZSBsb29rdXBSZXN1bHQgPSBmdWxsTG9va3Vw
Rm9yV3JpdGluZzxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihFeHRyYWN0b3I6OmV4dHJhY3QoZW50
cnkpKTsKKyAgICAgICAgVmFsdWVUeXBlKiBuZXdFbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5m
aXJzdDsKICAgICAgICAgbmV3RW50cnktPn5WYWx1ZSgpOwogICAgICAgICBuZXcgKE5vdE51bGws
IG5ld0VudHJ5KSBWYWx1ZVR5cGUoV1RGTW92ZShlbnRyeSkpOworICAgICAgICBpZiAoYXV0byog
Y29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbbmV3RW50
cnkgLSBtX3RhYmxlXSA9IGgyKGxvb2t1cFJlc3VsdC5zZWNvbmQpOwogCiAgICAgICAgIHJldHVy
biBuZXdFbnRyeTsKICAgICB9CkBAIC0xMTI0LDYgKzE1MzgsOCBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgZGVs
ZXRlQnVja2V0KCpwb3MpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250
cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbcG9zIC0gbV90YWJsZV0gPSBDb250cm9sVmFs
dWU6OkRlbGV0ZWQ7CiAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEp
OwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAgLTExODUsNiArMTYw
MSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
bGV0ZUJ1Y2tldChidWNrZXQpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhp
cy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IENvbnRyb2xWYWx1
ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICsrcmVtb3ZlZEJ1Y2tldENvdW50OwogICAgICAgICB9
CiAgICAgICAgIGlmIChyZW1vdmVkQnVja2V0Q291bnQpIHsKQEAgLTEyMDQsMTQgKzE2MjIsMzAg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShtZXRhZGF0YVNpemUgJSBhbGlnbm9mKFZhbHVl
VHlwZSkpKTsKIAorICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSAwOworICAgICAgICBz
aXplX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFj
aXR5KSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFkYXRhU2l6ZSArIHNpemUg
KiBzaXplb2YoVmFsdWVUeXBlKTsKKyAgICAgICAgICAgIG9mZnNldCA9IG1ldGFkYXRhU2l6ZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbG9jYXRpb25TaXplID0gbWV0YWRhdGFT
aXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpICsgc2l6ZTsKKyAgICAgICAgICAgIG9mZnNl
dCA9IG1ldGFkYXRhU2l6ZSArIHNpemU7CisgICAgICAgIH0KKworICAgICAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IG51bGxwdHI7CisKICAgICAgICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVt
YmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAogICAg
ICAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CiAgICAgICAgIGlmIChU
cmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJv
ZWRNYWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRh
ZGF0YVNpemUpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5
cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJvZWRNYWxsb2MoYWxs
b2NhdGlvblNpemUpKSArIG9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFz
aFRhYmxlTWFsbG9jOjptYWxsb2MoYWxsb2NhdGlvblNpemUpKSArIG9mZnNldCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
IGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgfQogCi0gICAgICAgIFZhbHVl
VHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxj
aGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVv
ZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0YVNpemUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRb
aV0pOworICAgICAgICBpZiAoc2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAg
ICAgIG1lbXNldChiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KHJlc3VsdCkgLSBvZmZzZXQsIENvbnRy
b2xWYWx1ZTo6RW1wdHksIHNpemUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApA
QCAtMTIyMyw3ICsxNjU3LDEwIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtp
XSkpCiAgICAgICAgICAgICAgICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0g
ICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJs
ZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2Fw
YWNpdHkpCisgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAt
IG1ldGFkYXRhU2l6ZSAtIHNpemUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xMjY2LDE1ICsx
NzAzLDkgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgICAgIHJldHVybiBrZXlDb3VudCA+PSB0YWJsZVNpemUgKiBoYWxmV2F5QmV0
d2VlbkF2ZXJhZ2VBbmRNYXhMb2FkUmF0aW87CiAgICAgICAgIH07CiAKLSAgICAgICAgaWYgKGJl
c3RUYWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBjb25z
dGV4cHIgZG91YmxlIHNtYWxsTG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc21hbGxN
YXhMb2FkTnVtZXJhdG9yKSAvIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAg
aWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNpb24oc21hbGxMb2FkRmFjdG9yLCBrZXlD
b3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAy
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3RleHByIGRvdWJsZSBsYXJnZUxv
YWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGxhcmdlTWF4TG9hZE51bWVyYXRvcikgLyBs
YXJnZU1heExvYWREZW5vbWluYXRvcjsKLSAgICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZv
ckVhZ2VyRXhwYW5zaW9uKGxhcmdlTG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUp
KQotICAgICAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLSAgICAgICAgfQorICAgICAg
ICBjb25zdGV4cHIgZG91YmxlIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heExv
YWROdW1lcmF0b3IpIC8gbWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBpZiAoYWJvdmVUaHJl
c2hvbGRGb3JFYWdlckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6
ZSkpCisgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CiAgICAgICAgIHVuc2lnbmVkIG1p
bmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAgICAgICAgIHJl
dHVybiBzdGQ6Om1heChiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKICAgICB9CkBA
IC0xMjk0LDYgKzE3MjUsOCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX3RhYmxlW2ldOwogICAg
ICAgICAgICAgaWYgKGlzUmVsZWFzZWRXZWFrQnVja2V0KGVudHJ5KSkgewogICAgICAgICAgICAg
ICAgIGRlbGV0ZUJ1Y2tldChlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnRy
b2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbHNbaV0g
PSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAgICAgICAgICAgc2V0RGVsZXRlZENvdW50
KGRlbGV0ZWRDb3VudCgpICsgMSk7CiAgICAgICAgICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291
bnQoKSAtIDEpOwogICAgICAgICAgICAgfQpAQCAtMTMwNiw3ICsxNzM5LDYgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCk7CiAKICAgICAgICAgdW5zaWduZWQg
b2xkVGFibGVTaXplID0gdGFibGVTaXplKCk7Ci0gICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUg
PSBtX3RhYmxlOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgaWYgKG9sZFRh
YmxlU2l6ZSAhPSAwKQpAQCAtMTMxOCw2ICsxNzUwLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgICsrbV9zdGF0cy0+bnVt
UmVoYXNoZXM7CiAjZW5kaWYKIAorICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJs
ZTsKICAgICAgICAgdW5zaWduZWQgb2xkS2V5Q291bnQgPSBrZXlDb3VudCgpOwogICAgICAgICBt
X3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNpemUpOwogICAgICAgICBzZXRUYWJsZVNp
emUobmV3VGFibGVTaXplKTsKQEAgLTEzNTQsOCArMTc4NywxMiBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG9sZFRhYmxlKQotICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7
CisgICAgICAgIGlmIChvbGRUYWJsZSkgeworICAgICAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSA8
PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFRhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIG9sZFRh
YmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0
ZW5jeSgpOwogICAgICAgICByZXR1cm4gbmV3RW50cnk7CkBAIC0xNDYzLDE2ICsxOTAwLDI0IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50ID0g
MDsKICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAg
ICAgIENvbnRyb2wqIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHRhYmxlU2l6ZTsgKytqKSB7CiAgICAgICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7Ci0gICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKQorICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RW1wdHkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRy
eSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJvbHMpCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChjb250cm9sc1tqXSA9PSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAg
ICAgICAgICsrZGVsZXRlZENvdW50OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udHJvbHMpCisgICAgICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xzW2pdICE9IENvbnRyb2xWYWx1ZTo6RW1wdHkgJiYgY29udHJvbHNbal0gIT0g
Q29udHJvbFZhbHVlOjpEZWxldGVkKTsKICAgICAgICAgICAgIGF1dG8mIGtleSA9IEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpOwogICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5k
KGtleSk7CiAgICAgICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1DUFUuaAppbmRleCBiY2UyM2UwMzQ2ZDU0M2RlZDY5ZGMyYTVjODVmMGU4YjQyOGRiZTJi
Li5lOWZkOGYyYjAzYzlkZGNlNzZmMGM3NWUzYzA0OWVlNmUwYWIzMTY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
Q1BVLmgKQEAgLTEwOSw2ICsxMDksOSBAQAogICAgIHx8IGRlZmluZWQoX01fWDY0KQogI2RlZmlu
ZSBXVEZfQ1BVX1g4Nl82NCAxCiAjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTIgMQorI2lmIGRlZmlu
ZWQoX19TU0UzX18pCisjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTMgMQorI2VuZGlmCiAjZGVmaW5l
IFdURl9DUFVfS05PV04gMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Zh
bHVlQ2hlY2suaCBiL1NvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaAppbmRleCAyNmVhYTUzOGVi
ZGVjM2QyMzJlZmJjYjJiYzZkMWU2YmYyZTk3YTVjLi40NjMyZDY1YzE3NWEzZDE2ZGEzNjBiMjk3
NTgyMWM5MDM5ZjRhZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmgK
KysrIGIvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCkBAIC00NSw2ICs0NSwxNSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgVmFsdWVDaGVjazxQKj4gewogICAgICAgICBWYWx1ZUNo
ZWNrPFA+OjpjaGVja0NvbnNpc3RlbmN5KCpwKTsKICAgICB9CiB9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgVmFsdWVDaGVjazx2b2lkKj4geworICAgIHR5cGVkZWYgdm9pZCogVHJhaXRUeXBlOworICAg
IHN0YXRpYyB2b2lkIGNoZWNrQ29uc2lzdGVuY3koY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAg
ICAgIGlmICghcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGZhc3RNYWxs
b2NTaXplKHApKTsKKyAgICB9Cit9OwogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9y
LmgKaW5kZXggOTc3NjNlMGY0ZGZiZjllYTNhY2VkMzE0MzY5ZGMxZGVjMjY0ZmJjZC4uMGYwYzJi
YmNkN2Y4NjJmOTM5MTRiODhhMjZjMmEwYmNhYzEwYjg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTgyOSw3ICs4
MjksNyBAQCBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBh
Y2l0eSwgTWFsbG9jPiB7CiAKICAgICB2b2lkIHJldmVyc2UoKTsKIAotICAgIHZvaWQgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWFwRnVuY3Rpb24sIHR5cGVuYW1lIFIgPSB0eXBlbmFtZSBzdGQ6
OnJlc3VsdF9vZjxNYXBGdW5jdGlvbihjb25zdCBUJik+Ojp0eXBlPiBWZWN0b3I8Uj4gbWFwKE1h
cEZ1bmN0aW9uKSBjb25zdDsKIApAQCAtMTU5Niw3ICsxNTk2LDcgQEAgaW5saW5lIE1hbGxvY1B0
cjxULCBNYWxsb2M+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2kKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eSwgdHlwZW5hbWUg
TWFsbG9jPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KCkKK2lubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eSwgTWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAjaWYgQVNTRVJUX0VOQUJM
RUQKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390429</attachid>
            <date>2020-02-11 14:44:07 -0800</date>
            <delta_ts>2020-02-11 18:56:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200211144406.patch</filename>
            <type>text/plain</type>
            <size>40209</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDkxMGYzNzhmNjk0ZGRhYzJkYTY3NDMx
MmM0MDg4NTBiOTljMGQ0YTEuLjUxMmM4ZDg1NjZjMjA4NjVmODU1ZjNmMDFlMmQ5NDU5YzFkMThl
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDItMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6R3JvdXApOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjptYXRjaEVtcHR5
T3JEZWxldGVkIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpHcm91cDo6bWF0Y2gg
Y29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjptYXRjaEVtcHR5KToKKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjpHcm91cDo6X21tX2NtcGd0X2VwaThfZml4ZWQpOgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpncm91cHMgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVM
b29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphZGRVbmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3Np
bmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6
S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSBjb25zdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtQ1BVLmg6CisgICAg
ICAgICogd3RmL1ZhbHVlQ2hlY2suaDoKKyAgICAgICAgKFdURjo6VmFsdWVDaGVjazx2b2lkOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6
Ok1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpNYWxsb2M+
OjpjaGVja0NvbnNpc3RlbmN5KTogRGVsZXRlZC4KKwogMjAyMC0wMi0xMCAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHNwZWN1bGF0aXZl
IGJ1aWxkIGZpeCBvbiB3YXRjaE9TIHNpbXVsYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA5MDc0Nzgy
Mjk1OGE4YWY5NTgyMzEyMmMxNWI4NjM1N2U0YzgzMjIyLi4wNTU0NTI1MWEzZDRhNjNhMjU3OTE3
ZjRlZmI0N2QwZGFjNmEwMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMTgsNyArMTgsMzcgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLwotCisvKgorICogVGhpcyBIYXNo
VGFibGUgaW1wbGVtZW50cyBTd2lzc1RhYmxlIGZyb20gQWJzZWlsIGFuZCB1c2luZyBzb21lIHRl
Y2huaXF1ZXMgZGVzY3JpYmVkIGluIEYxNCB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBU
aGUgQWJzZWlsIEF1dGhvcnMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHBzOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMu
IGFuZCBpdHMgYWZmaWxpYXRlcy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLwogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxhdG9t
aWM+CkBAIC0zNiw2ICs2NiwxNiBAQAogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZhbHVlQ2hlY2suaD4K
KyNpZiBDUFUoWDg2X1NTRTIpCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisjaW5jbHVkZSA8aW1t
aW50cmluLmg+CisjZW5kaWYKKyNpZiBDUFUoWDg2X1NTRTMpCisjaW5jbHVkZSA8dG1taW50cmlu
Lmg+CisjZW5kaWYKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJt
X25lb24uaD4KKyNlbmRpZgogCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxFX1NUQVRTIDAKICNkZWZp
bmUgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFIDAKQEAgLTMwOCwxOSArMzQ4LDE0IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
dGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4KICAgICBzdHJ1Y3QgSGFzaFRhYmxlQ2FwYWNpdHlGb3JT
aXplIHsKICAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIHNtYWxsIHRhYmxlIGlzIDc1JS4KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWROdW1lcmF0b3IgPSAz
OwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5h
dG9yID0gNDsKLSAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIGxhcmdlIHRhYmxlIGlzIDUwJS4K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWROdW1lcmF0b3Ig
PSAxOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9t
aW5hdG9yID0gMjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRh
YmxlQ2FwYWNpdHkgPSAxMDI0OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eExvYWROdW1lcmF0b3IgPSA3OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eExvYWREZW5vbWluYXRvciA9IDg7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gODsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtaW5Mb2FkID0gNjsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2hvdWxk
RXhwYW5kKHVpbnQ2NF90IGtleUFuZERlbGV0ZUNvdW50LCB1aW50NjRfdCB0YWJsZVNpemUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFj
aXR5KQotICAgICAgICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIHNtYWxsTWF4
TG9hZERlbm9taW5hdG9yID49IHRhYmxlU2l6ZSAqIHNtYWxsTWF4TG9hZE51bWVyYXRvcjsKLSAg
ICAgICAgICAgIHJldHVybiBrZXlBbmREZWxldGVDb3VudCAqIGxhcmdlTWF4TG9hZERlbm9taW5h
dG9yID49IHRhYmxlU2l6ZSAqIGxhcmdlTWF4TG9hZE51bWVyYXRvcjsKKyAgICAgICAgICAgIHJl
dHVybiBrZXlBbmREZWxldGVDb3VudCAqIG1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUg
KiBtYXhMb2FkTnVtZXJhdG9yOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjYXBhY2l0eUZvclNpemUodWludDMyX3Qgc2l6ZUFyZykKQEAgLTU2NiwxMSAr
NjAxLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICNlbmRpZgogCiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3
NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJh
dG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkTnVtZXJhdG9yOwotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNtYWxsTWF4TG9hZERlbm9taW5hdG9yID0gSGFz
aFRhYmxlU2l6ZVBvbGljeTo6c21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgIC8vIExv
YWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6
bGFyZ2VNYXhMb2FkTnVtZXJhdG9yOwotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bGFyZ2VNYXhM
b2FkRGVub21pbmF0b3I7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9h
ZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWROdW1lcmF0b3I7CisgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZERlbm9taW5hdG9yID0gSGFzaFRh
YmxlU2l6ZVBvbGljeTo6bWF4TG9hZERlbm9taW5hdG9yOwogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IEhhc2hUYWJsZVNpemVQb2xpY3k6
Om1heFNtYWxsVGFibGVDYXBhY2l0eTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtaW5Mb2FkID0gSGFzaFRhYmxlU2l6ZVBvbGljeTo6bWluTG9hZDsKIApAQCAtNTgwLDYgKzYx
MiwyMzggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGVsZXRlZENvdW50T2Zmc2V0ID0gLTQ7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWV0YWRhdGFTaXplID0gNCAqIHNp
emVvZih1bnNpZ25lZCk7CiAKKyAgICAgICAgdXNpbmcgQ29udHJvbCA9IHVpbnQ4X3Q7CisgICAg
ICAgIGVudW0gQ29udHJvbFZhbHVlIDogQ29udHJvbCB7CisgICAgICAgICAgICBFbXB0eSAgID0g
MGIxMDAwMDAwMCwKKyAgICAgICAgICAgIERlbGV0ZWQgPSAwYjExMTExMTExLAorICAgICAgICB9
OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgaDEodW5zaWduZWQgaGFzaCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgIH0KKworICAgICAgICAv
LyBXZSBleHRyYWN0IFsxNywgMjRdIGJpdHMgc2luY2UgU3RyaW5nSW1wbCBvbmx5IG9mZmVycyAy
NCBiaXRzLgorICAgICAgICBpbmxpbmUgQ29udHJvbCBoMih1bnNpZ25lZCBoYXNoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKGhhc2ggPj4gMTcpICYgMHg3RjsKKyAgICAgICAgfQor
CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBULCB1bnNpZ25lZCBzaGlmdD4KKyAgICAgICAgY2xh
c3MgQml0TWFzayB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8
VD46OnZhbHVlKTsKKworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB1c2luZyB2YWx1ZV90
eXBlID0gdW5zaWduZWQ7CisgICAgICAgICAgICB1c2luZyBpdGVyYXRvciA9IEJpdE1hc2s7Cisg
ICAgICAgICAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IEJpdE1hc2s7CisKKyAgICAgICAgICAg
IGV4cGxpY2l0IGNvbnN0ZXhwciBCaXRNYXNrKFQgbWFzaykKKyAgICAgICAgICAgICAgICA6IG1f
bWFzayhtYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBC
aXRNYXNrJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX21h
c2sgJj0gKG1fbWFzayAtIDEpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFzayAhPSAwOyB9CisgICAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRvciooKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0TFNCU2V0KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gbG93ZXN0Qml0U2V0KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TFNCU2V0KG1fbWFzaykgPj4g
c2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBo
aWdoZXN0Qml0U2V0KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2V0TVNCU2V0KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEJpdE1hc2sgYmVnaW4oKSBjb25zdCB7IHJldHVybiAqdGhpczsg
fQorICAgICAgICAgICAgQml0TWFzayBlbmQoKSBjb25zdCB7IHJldHVybiBCaXRNYXNrKDApOyB9
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHRyYWlsaW5nWmVyb3MoKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVUlOVDMyX01BWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3R6KG1fbWFzaykgPj4g
c2hpZnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlYWRpbmdaZXJv
cygpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJl
dHVybiBjbHoobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaXRNYXNrJiBh
LCBjb25zdCBCaXRNYXNrJiBiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBhLm1fbWFzayA9PSBiLm1fbWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yIT0oY29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5tX21hc2sgIT0gYi5tX21hc2s7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQgbV9tYXNrOworICAgICAgICB9OworCisK
KyAgICAgICAgc3RydWN0IEdyb3VwU3RvcmFnZTsKKyNpZiBDUFUoWDg2X1NTRTIpCisgICAgICAg
IHN0cnVjdCBHcm91cCB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51
bWJlck9mRW50cmllcyA9IDE2OworCisgICAgICAgICAgICBleHBsaWNpdCBHcm91cChHcm91cFN0
b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92ZWN0b3Ig
PSBfbW1fbG9hZHVfc2kxMjgoYml0d2lzZV9jYXN0PGNvbnN0IF9fbTEyOGkqPihzdG9yYWdlKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVpbnQx
Nl90LCAvKiAxIGJpdCAqLyAwPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRl
ZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soX21t
X21vdmVtYXNrX2VwaTgobV92ZWN0b3IpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
TWFzayBtYXRjaChDb250cm9sIGNvbnRyb2wpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byBwYXR0ZXJuID0gX21tX3NldDFfZXBpOChjb250cm9sKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpOChwYXR0
ZXJuLCBtX3ZlY3RvcikpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRj
aEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyNpZiBDUFUoWDg2X1NTRTMpCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxpbnQ4X3Q+KENvbnRyb2xWYWx1ZTo6RW1wdHkp
ID09IC0xMjgpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4
KF9tbV9zaWduX2VwaTgobV92ZWN0b3IsIG1fdmVjdG9yKSkpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2goQ29udHJvbFZhbHVlOjpFbXB0eSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwt
Y3BwL2lzc3Vlcy8yMDkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemls
bGEvc2hvd19idWcuY2dpP2lkPTg3ODUzCisgICAgICAgICAgICAvLyBfbW1fY21wZ3RfZXBpOCBp
cyBicm9rZW4gdW5kZXIgR0NDIHdpdGggLWZ1bnNpZ25lZC1jaGFyCisgICAgICAgICAgICBpbmxp
bmUgc3RhdGljIF9fbTEyOGkgX21tX2NtcGd0X2VwaThfZml4ZWQoX19tMTI4aSBhLCBfX20xMjhp
IGIpCisgICAgICAgICAgICB7CisjaWYgQ09NUElMRVIoR0NDKQorICAgICAgICAgICAgICAgIGlm
IChzdGQ6OmlzX3Vuc2lnbmVkPGNoYXI+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBfX20xMjhpIG1hc2sgPSBfbW1fc2V0MV9lcGk4KDB4ODApOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfX20xMjhpIGRpZmYgPSBfbW1fc3Vic19lcGk4KGIsIGEpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX21tX2NtcGVxX2VwaTgoX21tX2FuZF9zaTEyOChkaWZmLCBtYXNr
KSwgbWFzayk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0
dXJuIF9tbV9jbXBndF9lcGk4KGEsIGIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBf
X20xMjhpIG1fdmVjdG9yOworICAgICAgICB9OworI2VsaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSAxNjsKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgwODA4MFVMTDsKKworICAgICAgICAg
ICAgZXhwbGljaXQgR3JvdXAoR3JvdXBTdG9yYWdlKiBzdG9yYWdlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1fdmVjdG9yID0gdmxkMXFfdTgoYml0d2lzZV9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihzdG9yYWdlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVzaW5nIE1h
c2sgPSBCaXRNYXNrPHVpbnQ2NF90LCAvKiA0Yml0cyAqLyAyPjsKKyAgICAgICAgICAgIE1hc2sg
bWF0Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSB2cmVpbnRlcnByZXRxX3U4X3M4KHZzaHJxX25fczgodnJlaW50ZXJw
cmV0cV9zOF91OChtX3ZlY3RvciksIDcpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlZHVjZWQg
PSB2c2hybl9uX3UxNih2cmVpbnRlcnByZXRxX3UxNl91OChyZXN1bHQpLCA0KTsgLy8gMTExMTEx
MTF8MDAwMDAwMDAgPT4gMTExMTAwMDAKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN1bHQg
PSB2Z2V0X2xhbmVfdTY0KHZyZWludGVycHJldF91NjRfdTgocmVkdWNlZCksIDApOworICAgICAg
ICAgICAgICAgIHJldHVybiBNYXNrKHJlc3VsdCAmIG1zYnMpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBNYXNrIG1hdGNoKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHBhdHRlcm4gPSB2ZHVwcV9uX3U4KGNvbnRyb2wpOyAv
LyBYWFhYID0+IFhYWFggeDgKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHZjZXFxX3U4
KHBhdHRlcm4sIG1fdmVjdG9yKTsgLy8gWFhYWCB4OCA8PT4gdmVjdG9yCisgICAgICAgICAgICAg
ICAgYXV0byByZWR1Y2VkID0gdnNocm5fbl91MTYodnJlaW50ZXJwcmV0cV91MTZfdTgocmVzdWx0
KSwgNCk7IC8vIDExMTExMTExfDAwMDAwMDAwID0+IDExMTEwMDAwCisgICAgICAgICAgICAgICAg
dWludDY0X3QgcmVzdWx0ID0gdmdldF9sYW5lX3U2NCh2cmVpbnRlcnByZXRfdTY0X3U4KHJlZHVj
ZWQpLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhyZXN1bHQgJiBtc2JzKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5KCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2goQ29udHJvbFZhbHVlOjpFbXB0eSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ4eDE2X3QgbV92ZWN0b3I7CisgICAgICAg
IH07CisjZWxzZQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSA4OworICAgICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgwODA4MDgwODA4MDgwVUxMOworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBsc2JzID0gMHgwMTAxMDEwMTAxMDEwMTAx
VUxMOworCisgICAgICAgICAgICBleHBsaWNpdCBHcm91cChHcm91cFN0b3JhZ2UqIHN0b3JhZ2Up
CisgICAgICAgICAgICB7CisjaWYgQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICAgICAg
bV92ZWN0b3IgPSAqKGJpdHdpc2VfY2FzdDxjb25zdCB1aW50NjRfdCo+KHN0b3JhZ2UpKTsKKyNl
bHNlIC8vICFDUFUoTElUVExFX0VORElBTikKKyNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisg
ICAgICAgICAgICAgICAgbV92ZWN0b3IgPSBfX2J1aWx0aW5fYnN3YXA2NCgqKGJpdHdpc2VfY2Fz
dDxjb25zdCB1aW50NjRfdCo+KHN0b3JhZ2UpKSk7CisjZWxpZiBDT01QSUxFUihNU1ZDKQorICAg
ICAgICAgICAgICAgIG1fdmVjdG9yID0gX2J5dGVzd2FwX3VpbnQ2NCgqKGJpdHdpc2VfY2FzdDxj
b25zdCB1aW50NjRfdCo+KHN0b3JhZ2UpKSk7CisjZWxzZQorI2Vycm9yICJOb3Qgc3VwcG9ydGVk
IGNvbXBpbGVyIgorI2VuZGlmCisjZW5kaWYgLy8gQ1BVKExJVFRMRV9FTkRJQU4pCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sgPSBCaXRNYXNrPHVpbnQ2NF90LCAvKiA4
Yml0cyAqLyAzPjsKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2sobV92ZWN0b3IgJiBt
c2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaChDb250cm9sIGNv
bnRyb2wpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSB0
ZWNobmlxdWUsIHNlZToKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vZ3JhcGhpY3Muc3RhbmZv
cmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjI1ZhbHVlSW5Xb3JkCisgICAgICAgICAgICAg
ICAgLy8gKERldGVybWluZSBpZiBhIHdvcmQgaGFzIGEgYnl0ZSBlcXVhbCB0byBuKS4KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIENhdmVhdDogdGhlcmUgYXJlIGZhbHNl
IHBvc2l0aXZlcyBidXQ6CisgICAgICAgICAgICAgICAgLy8gLSB0aGV5IG9ubHkgb2NjdXIgaWYg
dGhlcmUgaXMgYSByZWFsIG1hdGNoCisgICAgICAgICAgICAgICAgLy8gLSB0aGV5IG5ldmVyIG9j
Y3VyIG9uIGtFbXB0eSwga0RlbGV0ZWQsIGtTZW50aW5lbAorICAgICAgICAgICAgICAgIC8vIC0g
dGhleSB3aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSBieSBzdWJzZXF1ZW50IGNoZWNrcyBpbiBj
b2RlCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOgorICAg
ICAgICAgICAgICAgIC8vICAgdiA9IDB4MTcxNjE1MTQxMzEyMTExMAorICAgICAgICAgICAgICAg
IC8vICAgaGFzaCA9IDB4MTIKKyAgICAgICAgICAgICAgICAvLyAgIHJldHZhbCA9ICh2IC0gbHNi
cykgJiB+diAmIG1zYnMgPSAweDAwMDAwMDAwODA4MDAwMDAKKyAgICAgICAgICAgICAgICBhdXRv
IHggPSBtX3ZlY3RvciBeIChsc2JzICogc3RhdGljX2Nhc3Q8dWludDhfdD4oY29udHJvbCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKCh4IC0gbHNicykgJiB+eCAmIG1zYnMpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHkoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKChtX3ZlY3RvciAmICh+bV92ZWN0b3IgPDwg
MSkpICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ2NF90IG1fdmVj
dG9yOworICAgICAgICB9OworI2VuZGlmCisgICAgICAgIHN0cnVjdCBHcm91cFN0b3JhZ2Ugewor
ICAgICAgICAgICAgQ29udHJvbCBtX2NvbnRyb2xzW0dyb3VwOjpudW1iZXJPZkVudHJpZXNdOwor
ICAgICAgICB9OworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihHcm91cFN0b3JhZ2UpID09
IHNpemVvZihHcm91cCkpOworCiAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFi
bGVTaXplT2Zmc2V0XSA6IDA7IH0KICAgICAgICAgdm9pZCBzZXRUYWJsZVNpemUodW5zaWduZWQg
c2l6ZSkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQq
PihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdID0gc2l6ZTsgfQogICAgICAgICB1bnNpZ25lZCB0
YWJsZVNpemVNYXNrKCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJldHVybiBtX3RhYmxlID8g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU1hc2tPZmZzZXRd
IDogMDsgfQpAQCAtNTg4LDYgKzg1MiwxNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB2b2lkIHNldEtleUNvdW50KHVuc2lnbmVk
IGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KG1fdGFibGUpW2tleUNvdW50T2Zmc2V0XSA9IGNvdW50OyB9CiAgICAgICAgIHVuc2lnbmVk
IGRlbGV0ZWRDb3VudCgpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0ZWRDb3VudE9mZnNldF07IH0KICAgICAg
ICAgdm9pZCBzZXREZWxldGVkQ291bnQodW5zaWduZWQgY291bnQpIGNvbnN0IHsgQVNTRVJUKG1f
dGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbZGVsZXRlZENvdW50
T2Zmc2V0XSA9IGNvdW50OyB9CisgICAgICAgIENvbnRyb2wqIGNvbnRyb2xzKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb250cm9sKj4oZ3JvdXBz
KCkpOworICAgICAgICB9CisgICAgICAgIEdyb3VwU3RvcmFnZSogZ3JvdXBzKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXpl
KCk7CisgICAgICAgICAgICBpZiAodGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8R3JvdXBTdG9yYWdlKj4oYml0d2lzZV9jYXN0PENvbnRyb2wqPihtX3RhYmxlKSAt
IG1ldGFkYXRhU2l6ZSAtIHRhYmxlU2l6ZSk7CisgICAgICAgIH0KIAogICAgICAgICBWYWx1ZVR5
cGUqIG1fdGFibGUgeyBudWxscHRyIH07CiAKQEAgLTY3Miw5ICs5NDcsNyBAQCBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBpZiAoIXRh
YmxlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgdW5zaWduZWQgc2l6
ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNs
YXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNj
ZXNzZXM7CkBAIC02ODUsNiArOTU4LDM5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAj
ZW5kaWYKIAorICAgICAgICBpZiAoR3JvdXBTdG9yYWdlKiBncm91cHMgPSB0aGlzLT5ncm91cHMo
KSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3Vw
U2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwU3RvcmFnZSk7CisgICAgICAgICAgICB1
bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBp
ID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAg
ICAgICAgICAgIEdyb3VwIGdyb3VwKGdyb3VwcyArIGkpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcG9zaXRpb24gOiBncm91cC5tYXRjaChlbnRyeUhhc2gpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZF
bnRyaWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1
Y2tldCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFj
dCgqZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC5tYXRj
aEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAg
ICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291
bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAg
ICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwor
I2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsg
aykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICB1bnNpZ25lZCBpID0gaCAm
IHNpemVNYXNrOwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IHRhYmxlICsgaTsKICAgICAgICAgICAgICAgICAKQEAgLTcyNiw5ICsxMDMyLDcgQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAg
ICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7
Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1
bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQg
aSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsr
SGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNzM5LDYgKzEwNDMsNDggQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKytt
X3N0YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cFN0b3JhZ2Uq
IGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhh
c2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAg
ICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXBT
dG9yYWdlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAgZ3JvdXAoZ3JvdXBzICsgaSk7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLm1hdGNoKGVu
dHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxl
ICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgq
ZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6
ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZW50cnksIHRydWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLm1hdGNoRW1wdHkoKSkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAg
ICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6
OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29y
ZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBp
ZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBI
YXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLm1hdGNoRW1wdHlPckRlbGV0
ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5
cGUodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uLnZhbHVlKCks
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkg
KyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBo
ICYgc2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVudHJ5ID0gMDsKIAogICAg
ICAgICB3aGlsZSAoMSkgewpAQCAtNzg3LDkgKzExMzMsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAw
OwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJh
bnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwog
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVt
QWNjZXNzZXM7CkBAIC04MDAsNiArMTE0NCw0OCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2Vz
OwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBzID0gdGhpcy0+Z3Jv
dXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAg
ICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBn
cm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0b3JhZ2UpOworICAgICAgICAg
ICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAubWF0Y2goZW50cnlIYXNoKSkgeworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJl
ck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1w
dHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4
dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAubWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAg
ICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29s
bGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9u
QXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDAp
CisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAg
ICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkg
eworICAgICAgICAgICAgICAgIEdyb3VwIGdyb3VwKGdyb3VwcyArIGkpOworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHBvc2l0aW9uID0gZ3JvdXAubWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2Vz
dEJpdFNldCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdCh0
YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKSwgZmFs
c2UsIGgpOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAg
IGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSAr
IGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNp
Z25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwogCiAgICAg
ICAgIHdoaWxlICgxKSB7CkBAIC04NTMsOSArMTIzOSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBz
aXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFu
c2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAK
ICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1B
Y2Nlc3NlczsKQEAgLTg2NywyNyArMTI1MSw1NyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAKICAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBp
OworICAgICAgICBpZiAoR3JvdXBTdG9yYWdlKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0b3JhZ2UpOworICAg
ICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAg
dW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLm1hdGNoRW1wdHkoKS5sb3dlc3RCaXRTZXQo
KSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1i
ZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
KyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2go
Z3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVN
YXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRh
YmxlICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAg
ICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgICsrcHJvYmVD
b3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRD
b3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVS
X1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2Jl
Q291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQo
cHJvYmVDb3VudCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAg
ICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAm
IHNpemVNYXNrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSGFzaFRyYW5z
bGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndh
cmQ8RXh0cmE+KGV4dHJhKSk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNv
bnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tlbnRyeSAtIHRhYmxlXSA9IGgyKGgpOwog
CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtOTM0
LDkgKzEzNDgsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNo
VGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRh
YmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNr
KCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAg
ICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RB
VFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC05NDksNDAgKzEz
NjEsODYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxl
KTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZhbHVl
VHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRh
YmxlICsgaTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNv
bXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hG
dW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSog
Z3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFz
aCA9IGgxKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0
b3JhZ2UpOworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOwor
ICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAg
ICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAubWF0Y2goZW50
cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUg
KyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCpl
bnRyeSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjpl
cXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91
cC5tYXRjaEVtcHR5KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRk
UmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQorCisjaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAg
ICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3Vu
dCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAg
ICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBr
ID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBr
KSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAm
IHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91
cCBncm91cChncm91cHMgKyBpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9
IGdyb3VwLm1hdGNoRW1wdHlPckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkgeworICAgICAgICAg
ICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBw
b3NpdGlvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0
KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9y
OjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAg
ICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAg
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CiAgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGls
ZSAoMSkgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRp
bWl6ZSBvdXQgdGhpcyBicmFuY2gKKyAgICAgICAgICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xh
dG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5
KSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
ZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxl
dGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkg
PSBlbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVx
dWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgfQogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAg
ICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29s
bGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7
CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQo
cHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJM
RQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2Jl
Q291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAg
ICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXpl
TWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBr
ID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXpl
TWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChkZWxldGVkRW50
cnkpIHsKQEAgLTk5Miw2ICsxNDUwLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgfQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9y
Ojp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4
dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9s
cygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkgLSB0YWJsZV0gPSBoMihoKTsKICAgICAg
ICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSArIDEpOwogICAgICAgICAKICAgICAgICAgaWYgKHNo
b3VsZEV4cGFuZCgpKQpAQCAtMTAzMCw2ICsxNDkwLDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgfQogCiAgICAgICAgIEhhc2hU
cmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpm
b3J3YXJkPEV4dHJhPihleHRyYSksIGgpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0
aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkgLSBtX3RhYmxlXSA9
IGgyKGgpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7CiAKICAgICAgICAg
aWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTA1Myw5ICsxNTE1LDEyIEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICsrbV9zdGF0cy0+
bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKLSAgICAgICAgVmFsdWUqIG5ld0VudHJ5ID0gbG9va3Vw
Rm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5maXJzdDsKKyAgICAgICAgRnVs
bExvb2t1cFR5cGUgbG9va3VwUmVzdWx0ID0gZnVsbExvb2t1cEZvcldyaXRpbmc8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSk7CisgICAgICAgIFZhbHVl
VHlwZSogbmV3RW50cnkgPSBsb29rdXBSZXN1bHQuZmlyc3QuZmlyc3Q7CiAgICAgICAgIG5ld0Vu
dHJ5LT5+VmFsdWUoKTsKICAgICAgICAgbmV3IChOb3ROdWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBl
KFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29u
dHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW25ld0VudHJ5IC0gbV90YWJsZV0gPSBoMihs
b29rdXBSZXN1bHQuc2Vjb25kKTsKIAogICAgICAgICByZXR1cm4gbmV3RW50cnk7CiAgICAgfQpA
QCAtMTEyNCw2ICsxNTg5LDggQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIGRlbGV0ZUJ1Y2tldCgqcG9zKTsKKyAg
ICAgICAgaWYgKGF1dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAg
IGNvbnRyb2xzW3BvcyAtIG1fdGFibGVdID0gQ29udHJvbFZhbHVlOjpEZWxldGVkOwogICAgICAg
ICBzZXREZWxldGVkQ291bnQoZGVsZXRlZENvdW50KCkgKyAxKTsKICAgICAgICAgc2V0S2V5Q291
bnQoa2V5Q291bnQoKSAtIDEpOwogCkBAIC0xMTg1LDYgKzE2NTIsOCBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWxldGVCdWNrZXQoYnVja2V0KTsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAg
ICAgICAgICAgICAgY29udHJvbHNbaV0gPSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAg
ICAgICArK3JlbW92ZWRCdWNrZXRDb3VudDsKICAgICAgICAgfQogICAgICAgICBpZiAocmVtb3Zl
ZEJ1Y2tldENvdW50KSB7CkBAIC0xMjA0LDE0ICsxNjczLDMwIEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgewogICAgICAgICBzdGF0aWNf
YXNzZXJ0KCEobWV0YWRhdGFTaXplICUgYWxpZ25vZihWYWx1ZVR5cGUpKSk7CiAKKyAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7Cisg
ICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkgeworICAgICAgICAgICAg
YWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSk7
CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNpemU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2Yo
VmFsdWVUeXBlKSArIHNpemU7CisgICAgICAgICAgICBvZmZzZXQgPSBtZXRhZGF0YVNpemUgKyBz
aXplOworICAgICAgICB9CisKKyAgICAgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBudWxscHRyOwor
CiAgICAgICAgIC8vIHdvdWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4
cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3Qg
YXBwZWFyIHRvIHN1cHBvcnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNa
ZXJvKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3Rh
dGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKG1ldGFkYXRhU2l6
ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0YWRhdGFTaXplKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hh
cio+KEhhc2hUYWJsZU1hbGxvYzo6emVyb2VkTWFsbG9jKGFsbG9jYXRpb25TaXplKSkgKyBvZmZz
ZXQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxvYzo6bWFsbG9j
KGFsbG9jYXRpb25TaXplKSkgKyBvZmZzZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJl
c3VsdFtpXSk7CisgICAgICAgIH0KIAotICAgICAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VmFsdWVUeXBlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KEhhc2hUYWJsZU1hbGxv
Yzo6bWFsbG9jKG1ldGFkYXRhU2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpICsgbWV0
YWRhdGFTaXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykK
LSAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgaWYgKHNp
emUgPiBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICBtZW1zZXQoYml0d2lzZV9j
YXN0PENvbnRyb2wqPihyZXN1bHQpIC0gb2Zmc2V0LCBDb250cm9sVmFsdWU6OkVtcHR5LCBzaXpl
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEyMjMsNyArMTcwOCwxMCBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICAgICAgaWYgKCFpc0RlbGV0ZWRCdWNrZXQodGFibGVbaV0pKQogICAgICAgICAgICAgICAg
IHRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKICAgICAgICAgfQotICAgICAgICBIYXNoVGFibGVNYWxs
b2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0YWRhdGFTaXplKTsK
KyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAg
SGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1l
dGFkYXRhU2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6
ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUgLSBzaXpl
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpAQCAtMTI2NiwxNSArMTc1NCw5IEBAIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICByZXR1
cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4TG9h
ZFJhdGlvOwogICAgICAgICB9OwogCi0gICAgICAgIGlmIChiZXN0VGFibGVTaXplIDw9IG1heFNt
YWxsVGFibGVDYXBhY2l0eSkgewotICAgICAgICAgICAgY29uc3RleHByIGRvdWJsZSBzbWFsbExv
YWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHNtYWxsTWF4TG9hZE51bWVyYXRvcikgLyBz
bWFsbE1heExvYWREZW5vbWluYXRvcjsKLSAgICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9sZEZv
ckVhZ2VyRXhwYW5zaW9uKHNtYWxsTG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUp
KQotICAgICAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgbGFyZ2VMb2FkRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihsYXJnZU1heExvYWROdW1lcmF0b3IpIC8gbGFyZ2VNYXhMb2FkRGVub21pbmF0
b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihsYXJn
ZUxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAgICAgICAgICBi
ZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0KKyAgICAgICAgY29uc3RleHByIGRvdWJsZSBs
b2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXhMb2FkTnVtZXJhdG9yKSAvIG1heExv
YWREZW5vbWluYXRvcjsKKyAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFnZXJFeHBhbnNp
b24obG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNpemUpKQorICAgICAgICAgICAgYmVz
dFRhYmxlU2l6ZSAqPSAyOwogICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5
VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogICAgICAgICByZXR1cm4gc3RkOjptYXgoYmVzdFRh
YmxlU2l6ZSwgbWluaW11bVRhYmxlU2l6ZSk7CiAgICAgfQpAQCAtMTI5NCw2ICsxNzc2LDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgICAgIGF1dG8mIGVudHJ5ID0gbV90YWJsZVtpXTsKICAgICAgICAgICAgIGlmIChpc1JlbGVh
c2VkV2Vha0J1Y2tldChlbnRyeSkpIHsKICAgICAgICAgICAgICAgICBkZWxldGVCdWNrZXQoZW50
cnkpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xz
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzW2ldID0gQ29udHJvbFZhbHVlOjpEZWxl
dGVkOwogICAgICAgICAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVkQ291bnQoKSArIDEp
OwogICAgICAgICAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgLSAxKTsKICAgICAgICAg
ICAgIH0KQEAgLTEzMDYsNyArMTc5MCw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSgpOwogCiAgICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IHRhYmxl
U2l6ZSgpOwotICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgIGlmIChvbGRUYWJsZVNpemUgIT0gMCkKQEAgLTEz
MTgsNiArMTgwMSw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICArK21fc3RhdHMtPm51bVJlaGFzaGVzOwogI2VuZGlmCiAK
KyAgICAgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVk
IG9sZEtleUNvdW50ID0ga2V5Q291bnQoKTsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFi
bGUobmV3VGFibGVTaXplKTsKICAgICAgICAgc2V0VGFibGVTaXplKG5ld1RhYmxlU2l6ZSk7CkBA
IC0xMzU0LDggKzE4MzgsMTIgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChv
bGRUYWJsZSkKLSAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9j
YXN0PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBpZiAob2xkVGFi
bGUpIHsKKyAgICAgICAgICAgIGlmIChvbGRUYWJsZVNpemUgPD0gbWF4U21hbGxUYWJsZUNhcGFj
aXR5KQorICAgICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9j
YXN0PGNoYXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNo
YXIqPihvbGRUYWJsZSkgLSBtZXRhZGF0YVNpemUgLSBvbGRUYWJsZVNpemUpOworICAgICAgICB9
CiAKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmV0
dXJuIG5ld0VudHJ5OwpAQCAtMTQ2MywxNiArMTk1MSwyNCBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgICAgIHVuc2lnbmVkIGRlbGV0ZWRDb3VudCA9IDA7CiAgICAgICAgIHVuc2lnbmVk
IHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICBDb250cm9sKiBjb250cm9s
cyA9IHRoaXMtPmNvbnRyb2xzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0
YWJsZVNpemU7ICsraikgewogICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IG1fdGFibGUg
KyBqOwotICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAg
IGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJv
bHMpCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb250cm9sc1tqXSA9PSBDb250cm9sVmFs
dWU6OkVtcHR5KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY29udHJvbHNbal0g
PT0gQ29udHJvbFZhbHVlOjpEZWxldGVkKTsKICAgICAgICAgICAgICAgICArK2RlbGV0ZWRDb3Vu
dDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgIEFTU0VSVChjb250cm9sc1tqXSAhPSBD
b250cm9sVmFsdWU6OkVtcHR5ICYmIGNvbnRyb2xzW2pdICE9IENvbnRyb2xWYWx1ZTo6RGVsZXRl
ZCk7CiAgICAgICAgICAgICBhdXRvJiBrZXkgPSBFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KTsK
ICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICAgICAg
QVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1DUFUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKaW5kZXggYmNl
MjNlMDM0NmQ1NDNkZWQ2OWRjMmE1Yzg1ZjBlOGI0MjhkYmUyYi4uZTlmZDhmMmIwM2M5ZGRjZTc2
ZjBjNzVlM2MwNDllZTZlMGFiMzE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZv
cm1DUFUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCkBAIC0xMDksNiArMTA5
LDkgQEAKICAgICB8fCBkZWZpbmVkKF9NX1g2NCkKICNkZWZpbmUgV1RGX0NQVV9YODZfNjQgMQog
I2RlZmluZSBXVEZfQ1BVX1g4Nl9TU0UyIDEKKyNpZiBkZWZpbmVkKF9fU1NFM19fKQorI2RlZmlu
ZSBXVEZfQ1BVX1g4Nl9TU0UzIDEKKyNlbmRpZgogI2RlZmluZSBXVEZfQ1BVX0tOT1dOIDEKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9WYWx1ZUNoZWNrLmgKaW5kZXggMjZlYWE1MzhlYmRlYzNkMjMyZWZiY2IyYmM2ZDFl
NmJmMmU5N2E1Yy4uNDYzMmQ2NWMxNzVhM2QxNmRhMzYwYjI5NzU4MjFjOTAzOWY0YWY1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1ZhbHVlQ2hlY2suaApAQCAtNDUsNiArNDUsMTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3Ry
dWN0IFZhbHVlQ2hlY2s8UCo+IHsKICAgICAgICAgVmFsdWVDaGVjazxQPjo6Y2hlY2tDb25zaXN0
ZW5jeSgqcCk7CiAgICAgfQogfTsKK3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlQ2hlY2s8dm9pZCo+
IHsKKyAgICB0eXBlZGVmIHZvaWQqIFRyYWl0VHlwZTsKKyAgICBzdGF0aWMgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAgICBpZiAoIXApCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChmYXN0TWFsbG9jU2l6ZShwKSk7CisgICAgfQor
fTsKICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4IDk3NzYzZTBmNGRm
YmY5ZWEzYWNlZDMxNDM2OWRjMWRlYzI2NGZiY2QuLjBmMGMyYmJjZDdmODYyZjkzOTE0Yjg4YTI2
YzJhMGJjYWMxMGI4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC04MjksNyArODI5LDcgQEAgY2xhc3MgVmVjdG9y
IDogcHJpdmF0ZSBWZWN0b3JCdWZmZXI8VCwgaW5saW5lQ2FwYWNpdHksIE1hbGxvYz4gewogCiAg
ICAgdm9pZCByZXZlcnNlKCk7CiAKLSAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB2
b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cEZ1bmN0aW9uLCB0eXBlbmFtZSBSID0gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8TWFwRnVuY3Rp
b24oY29uc3QgVCYpPjo6dHlwZT4gVmVjdG9yPFI+IG1hcChNYXBGdW5jdGlvbikgY29uc3Q7CiAK
QEAgLTE1OTYsNyArMTU5Niw3IEBAIGlubGluZSBNYWxsb2NQdHI8VCwgTWFsbG9jPiBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHksIHR5cGVuYW1lIE1hbGxvYz4KLWlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eSwg
TWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSgpCitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdAogewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplKCk7ICsraSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390478</attachid>
            <date>2020-02-11 18:56:54 -0800</date>
            <delta_ts>2020-02-14 00:13:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200211185654.patch</filename>
            <type>text/plain</type>
            <size>40225</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJkMTIwYWVkNTVjMzVmZmVjODk5YWMz
NTFmNzAwNWI3ZWU4ZjkyZDkuLjdjYTVkYWZkMmRmNzZkMDM4NGQyOWQzZjNiOGU0NzhkZTVjMjQ5
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDItMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVD
YXBhY2l0eUZvclNpemU6OnNob3VsZEV4cGFuZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
aDEpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmgyKToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjpCaXRNYXNrOjpCaXRNYXNrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciBib29sIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Omxvd2VzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6aGlnaGVzdEJpdFNl
dCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6YmVnaW4gY29uc3Qp
OgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OmVuZCBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6dHJhaWxpbmdaZXJvcyBjb25zdCk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Qml0TWFzazo6bGVhZGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SGFzaFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpCaXRNYXNrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpH
cm91cDo6R3JvdXApOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjptYXRjaEVtcHR5
T3JEZWxldGVkIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpHcm91cDo6bWF0Y2gg
Y29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjptYXRjaEVtcHR5KToKKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjpHcm91cDo6X21tX2NtcGd0X2VwaThfZml4ZWQpOgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFz
aFRhYmxlOjpncm91cHMgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjppbmxpbmVM
b29rdXApOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOgorICAgICAgICAo
V1RGOjpLZXlUcmFpdHM+OjphZGRVbmlxdWVGb3JJbml0aWFsaXphdGlvbik6CisgICAgICAgIChX
VEY6OktleVRyYWl0cz46OmFkZCk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFBhc3Np
bmdIYXNoQ29kZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OnJlaW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6S2V5VHJhaXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
cmVtb3ZlSWYpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6
S2V5VHJhaXRzPjo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFp
dHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6cmVoYXNoKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSBjb25zdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtQ1BVLmg6CisgICAg
ICAgICogd3RmL1ZhbHVlQ2hlY2suaDoKKyAgICAgICAgKFdURjo6VmFsdWVDaGVjazx2b2lkOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6
Ok1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpNYWxsb2M+
OjpjaGVja0NvbnNpc3RlbmN5KTogRGVsZXRlZC4KKwogMjAyMC0wMi0xMSAgRXJpYyBDYXJsc29u
ICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGluLWJhbmQgVlRU
IGNhcHRpb25zIHdoZW4gbG9hZGluZyBtZWRpYSBpbiB0aGUgR1BVIFByb2Nlc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKaW5kZXggOTA3NDc4MjI5NThhOGFmOTU4MjMxMjJjMTViODYzNTdlNGM4MzIyMi4uYTQyNjEy
MDE3NjNlY2RhMGExMzc1NmE3ZGUxODEyMmE3YjNjN2Q4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKQEAgLTE4
LDcgKzE4LDM3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KLQor
LyoKKyAqIFRoaXMgSGFzaFRhYmxlIGltcGxlbWVudHMgU3dpc3NUYWJsZSBmcm9tIEFic2VpbCBh
bmQgdXNpbmcgc29tZSB0ZWNobmlxdWVzIGRlc2NyaWJlZCBpbiBGMTQgdGFibGUuCisgKgorICog
Q29weXJpZ2h0IDIwMTggVGhlIEFic2VpbCBBdXRob3JzLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
ICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogQ29weXJpZ2h0IChj
KSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCisgKgorICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisg
KiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8YXRvbWljPgpAQCAtMzYsNiArNjYsMTYgQEAKICNpbmNsdWRlIDx3dGYvUmFu
ZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9WYWx1ZUNoZWNrLmg+CisjaWYgQ1BVKFg4Nl9TU0UyKQorI2luY2x1ZGUgPGVtbWludHJpbi5o
PgorI2luY2x1ZGUgPGltbWludHJpbi5oPgorI2VuZGlmCisjaWYgQ1BVKFg4Nl9TU0UzKQorI2lu
Y2x1ZGUgPHRtbWludHJpbi5oPgorI2VuZGlmCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKIAogI2RlZmluZSBEVU1QX0hBU0hUQUJM
RV9TVEFUUyAwCiAjZGVmaW5lIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRSAwCkBAIC0z
MDgsMTkgKzM0OCwxNCBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihI
YXNoVGFibGUpOwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+CiAgICAgc3RydWN0IEhhc2hU
YWJsZUNhcGFjaXR5Rm9yU2l6ZSB7CiAgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0
YWJsZSBpcyA3NSUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhM
b2FkTnVtZXJhdG9yID0gMzsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFs
bE1heExvYWREZW5vbWluYXRvciA9IDQ7Ci0gICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJn
ZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VN
YXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBs
YXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4U21hbGxUYWJsZUNhcGFjaXR5ID0gMTAyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtYXhMb2FkTnVtZXJhdG9yID0gNzsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtYXhMb2FkRGVub21pbmF0b3IgPSA4OworICAgICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG1heFNtYWxsVGFibGVDYXBhY2l0eSA9IDg7CiAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IDY7CiAKICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNob3VsZEV4cGFuZCh1aW50NjRfdCBrZXlBbmREZWxldGVDb3VudCwgdWludDY0
X3QgdGFibGVTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFibGVTaXplIDw9IG1h
eFNtYWxsVGFibGVDYXBhY2l0eSkKLSAgICAgICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRl
Q291bnQgKiBzbWFsbE1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBzbWFsbE1heExv
YWROdW1lcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBsYXJn
ZU1heExvYWREZW5vbWluYXRvciA+PSB0YWJsZVNpemUgKiBsYXJnZU1heExvYWROdW1lcmF0b3I7
CisgICAgICAgICAgICByZXR1cm4ga2V5QW5kRGVsZXRlQ291bnQgKiBtYXhMb2FkRGVub21pbmF0
b3IgPj0gdGFibGVTaXplICogbWF4TG9hZE51bWVyYXRvcjsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FwYWNpdHlGb3JTaXplKHVpbnQzMl90IHNpemVB
cmcpCkBAIC01NjYsMTEgKzYwMSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3Ig
c21hbGwgdGFibGUgaXMgNzUlLgotICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNt
YWxsTWF4TG9hZE51bWVyYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4TG9hZE51
bWVyYXRvcjsKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWRE
ZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6OnNtYWxsTWF4TG9hZERlbm9taW5hdG9y
OwotICAgICAgICAvLyBMb2FkLWZhY3RvciBmb3IgbGFyZ2UgdGFibGUgaXMgNTAlLgotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZE51bWVyYXRvciA9IEhhc2hU
YWJsZVNpemVQb2xpY3k6OmxhcmdlTWF4TG9hZE51bWVyYXRvcjsKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IEhhc2hUYWJsZVNpemVQ
b2xpY3k6OmxhcmdlTWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjptYXhMb2Fk
TnVtZXJhdG9yOworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWREZW5v
bWluYXRvciA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1heExvYWREZW5vbWluYXRvcjsKICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSBIYXNo
VGFibGVTaXplUG9saWN5OjptYXhTbWFsbFRhYmxlQ2FwYWNpdHk7CiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWluTG9hZCA9IEhhc2hUYWJsZVNpemVQb2xpY3k6Om1pbkxvYWQ7
CiAKQEAgLTU4MCw2ICs2MTIsMjM4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRlbGV0ZWRD
b3VudE9mZnNldCA9IC00OwogICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1ldGFk
YXRhU2l6ZSA9IDQgKiBzaXplb2YodW5zaWduZWQpOwogCisgICAgICAgIHVzaW5nIENvbnRyb2wg
PSB1aW50OF90OworICAgICAgICBlbnVtIENvbnRyb2xWYWx1ZSA6IENvbnRyb2wgeworICAgICAg
ICAgICAgRW1wdHkgICA9IDBiMTAwMDAwMDAsCisgICAgICAgICAgICBEZWxldGVkID0gMGIxMTEx
MTExMSwKKyAgICAgICAgfTsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGgxKHVu
c2lnbmVkIGhhc2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBoYXNoOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2UgZXh0cmFjdCBbMTcsIDI0XSBiaXRzIHNpbmNlIFN0cmluZ0lt
cGwgb25seSBvZmZlcnMgMjQgYml0cy4KKyAgICAgICAgaW5saW5lIENvbnRyb2wgaDIodW5zaWdu
ZWQgaGFzaCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChoYXNoID4+IDE3KSAmIDB4
N0Y7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgc2hp
ZnQ+CisgICAgICAgIGNsYXNzIEJpdE1hc2sgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSk7CisKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgdXNpbmcgdmFsdWVfdHlwZSA9IHVuc2lnbmVkOworICAgICAgICAgICAgdXNpbmcgaXRlcmF0
b3IgPSBCaXRNYXNrOworICAgICAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBCaXRNYXNr
OworCisgICAgICAgICAgICBleHBsaWNpdCBjb25zdGV4cHIgQml0TWFzayhUIG1hc2spCisgICAg
ICAgICAgICAgICAgOiBtX21hc2sobWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQml0TWFzayYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9tYXNrICY9IChtX21hc2sgLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX21hc2sgIT0gMDsgfQorICAgICAgICAgICAgdW5zaWdu
ZWQgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fbWFzaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldExTQlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxvd2VzdEJpdFNldCgpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldExT
QlNldChtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gaGlnaGVzdEJpdFNldCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldE1TQlNldChtX21hc2spID4+IHNo
aWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCaXRNYXNrIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgICAgIEJpdE1hc2sgZW5kKCkgY29uc3QgeyByZXR1
cm4gQml0TWFzaygwKTsgfQorCisgICAgICAgICAgICB1bnNpZ25lZCB0cmFpbGluZ1plcm9zKCkg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGN0eihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNp
Z25lZCBsZWFkaW5nWmVyb3MoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVDMyX01BWDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2x6KG1fbWFzaykgPj4gc2hpZnQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQml0TWFzayYgYSwgY29uc3QgQml0TWFzayYgYikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYS5tX21hc2sgPT0gYi5tX21hc2s7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpdE1hc2smIGEsIGNvbnN0
IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEubV9t
YXNrICE9IGIubV9tYXNrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUIG1fbWFzazsK
KyAgICAgICAgfTsKKworCisgICAgICAgIHN0cnVjdCBHcm91cFN0b3JhZ2U7CisjaWYgQ1BVKFg4
Nl9TU0UyKQorICAgICAgICBzdHJ1Y3QgR3JvdXAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMgPSAxNjsKKworICAgICAgICAgICAgZXhwbGlj
aXQgR3JvdXAoR3JvdXBTdG9yYWdlKiBzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1fdmVjdG9yID0gX21tX2xvYWR1X3NpMTI4KGJpdHdpc2VfY2FzdDxjb25zdCBfX20x
MjhpKj4oc3RvcmFnZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1c2luZyBNYXNr
ID0gQml0TWFzazx1aW50MTZfdCwgLyogMSBiaXQgKi8gMD47CisgICAgICAgICAgICBNYXNrIG1h
dGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KG1fdmVjdG9yKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2goQ29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gcGF0dGVybiA9IF9tbV9zZXQxX2VwaTgoY29u
dHJvbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNrX2VwaTgoX21t
X2NtcGVxX2VwaTgocGF0dGVybiwgbV92ZWN0b3IpKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIE1hc2sgbWF0Y2hFbXB0eSgpCisgICAgICAgICAgICB7CisjaWYgQ1BVKFg4Nl9TU0Uz
KQorICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8aW50OF90PihDb250
cm9sVmFsdWU6OkVtcHR5KSA9PSAtMTI4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhf
bW1fbW92ZW1hc2tfZXBpOChfbW1fc2lnbl9lcGk4KG1fdmVjdG9yLCBtX3ZlY3RvcikpKTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoKENvbnRyb2xWYWx1ZTo6RW1wdHkpOwor
I2VuZGlmCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9hYnNlaWwvYWJzZWlsLWNwcC9pc3N1ZXMvMjA5CisgICAgICAgICAgICAvLyBodHRwczovL2dj
Yy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD04Nzg1MworICAgICAgICAgICAgLy8g
X21tX2NtcGd0X2VwaTggaXMgYnJva2VuIHVuZGVyIEdDQyB3aXRoIC1mdW5zaWduZWQtY2hhcgor
ICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBfX20xMjhpIF9tbV9jbXBndF9lcGk4X2ZpeGVkKF9f
bTEyOGkgYSwgX19tMTI4aSBiKQorICAgICAgICAgICAgeworI2lmIENPTVBJTEVSKEdDQykKKyAg
ICAgICAgICAgICAgICBpZiAoc3RkOjppc191bnNpZ25lZDxjaGFyPjo6dmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX19tMTI4aSBtYXNrID0gX21tX3NldDFfZXBpOCgweDgwKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tMTI4aSBkaWZmID0gX21tX3N1YnNfZXBpOChi
LCBhKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9tbV9jbXBlcV9lcGk4KF9tbV9hbmRf
c2kxMjgoZGlmZiwgbWFzayksIG1hc2spOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICAgICAgICAgIHJldHVybiBfbW1fY21wZ3RfZXBpOChhLCBiKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgX19tMTI4aSBtX3ZlY3RvcjsKKyAgICAgICAgfTsKKyNlbGlmIEhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKKyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gMTY7CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1zYnMgPSAweDg4ODg4ODg4ODg4ODg4ODhV
TEw7CisKKyAgICAgICAgICAgIGV4cGxpY2l0IEdyb3VwKEdyb3VwU3RvcmFnZSogc3RvcmFnZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IHZsZDFxX3U4KGJpdHdp
c2VfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RvcmFnZSkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB1c2luZyBNYXNrID0gQml0TWFzazx1aW50NjRfdCwgLyogNGJpdHMgKi8gMj47Cisg
ICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlPckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdnJlaW50ZXJwcmV0cV91OF9zOCh2c2hy
cV9uX3M4KHZyZWludGVycHJldHFfczhfdTgobV92ZWN0b3IpLCA3KSk7CisgICAgICAgICAgICAg
ICAgYXV0byByZWR1Y2VkID0gdnNocm5fbl91MTYodnJlaW50ZXJwcmV0cV91MTZfdTgocmVzdWx0
KSwgNCk7IC8vIDExMTExMTExfDAwMDAwMDAwID0+IDExMTEwMDAwCisgICAgICAgICAgICAgICAg
dWludDY0X3QgcmVzdWx0ID0gdmdldF9sYW5lX3U2NCh2cmVpbnRlcnByZXRfdTY0X3U4KHJlZHVj
ZWQpLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhyZXN1bHQgJiBtc2JzKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaChDb250cm9sIGNvbnRyb2wpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gdmR1cHFf
bl91OChjb250cm9sKTsgLy8gWFhYWCA9PiBYWFhYIHg4CisgICAgICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSB2Y2VxcV91OChwYXR0ZXJuLCBtX3ZlY3Rvcik7IC8vIFhYWFggeDggPD0+IHZlY3Rv
cgorICAgICAgICAgICAgICAgIGF1dG8gcmVkdWNlZCA9IHZzaHJuX25fdTE2KHZyZWludGVycHJl
dHFfdTE2X3U4KHJlc3VsdCksIDQpOyAvLyAxMTExMTExMXwwMDAwMDAwMCA9PiAxMTExMDAwMAor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHZnZXRfbGFuZV91NjQodnJlaW50ZXJw
cmV0X3U2NF91OChyZWR1Y2VkKSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2socmVz
dWx0ICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sgbWF0Y2hFbXB0
eSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoKENvbnRyb2xW
YWx1ZTo6RW1wdHkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50OHgxNl90IG1f
dmVjdG9yOworICAgICAgICB9OworI2Vsc2UKKyAgICAgICAgc3RydWN0IEdyb3VwIHsKKyAgICAg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzID0gODsKKyAg
ICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbXNicyA9IDB4ODA4MDgwODA4MDgw
ODA4MFVMTDsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbHNicyA9IDB4
MDEwMTAxMDEwMTAxMDEwMVVMTDsKKworICAgICAgICAgICAgZXhwbGljaXQgR3JvdXAoR3JvdXBT
dG9yYWdlKiBzdG9yYWdlKQorICAgICAgICAgICAgeworI2lmIENQVShMSVRUTEVfRU5ESUFOKQor
ICAgICAgICAgICAgICAgIG1fdmVjdG9yID0gKihiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDY0X3Qq
PihzdG9yYWdlKSk7CisjZWxzZSAvLyAhQ1BVKExJVFRMRV9FTkRJQU4pCisjaWYgQ09NUElMRVIo
R0NDX09SX0NMQU5HKQorICAgICAgICAgICAgICAgIG1fdmVjdG9yID0gX19idWlsdGluX2Jzd2Fw
NjQoKihiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDY0X3QqPihzdG9yYWdlKSkpOworI2VsaWYgQ09N
UElMRVIoTVNWQykKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IF9ieXRlc3dhcF91aW50NjQo
KihiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDY0X3QqPihzdG9yYWdlKSkpOworI2Vsc2UKKyNlcnJv
ciAiTm90IHN1cHBvcnRlZCBjb21waWxlciIKKyNlbmRpZgorI2VuZGlmIC8vIENQVShMSVRUTEVf
RU5ESUFOKQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1c2luZyBNYXNrID0gQml0TWFz
azx1aW50NjRfdCwgLyogOGJpdHMgKi8gMz47CisgICAgICAgICAgICBNYXNrIG1hdGNoRW1wdHlP
ckRlbGV0ZWQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBN
YXNrKG1fdmVjdG9yICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hc2sg
bWF0Y2goQ29udHJvbCBjb250cm9sKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIEZvciB0aGUgdGVjaG5pcXVlLCBzZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDov
L2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sIyNWYWx1ZUluV29y
ZAorICAgICAgICAgICAgICAgIC8vIChEZXRlcm1pbmUgaWYgYSB3b3JkIGhhcyBhIGJ5dGUgZXF1
YWwgdG8gbikuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBDYXZlYXQ6
IHRoZXJlIGFyZSBmYWxzZSBwb3NpdGl2ZXMgYnV0OgorICAgICAgICAgICAgICAgIC8vIC0gdGhl
eSBvbmx5IG9jY3VyIGlmIHRoZXJlIGlzIGEgcmVhbCBtYXRjaAorICAgICAgICAgICAgICAgIC8v
IC0gdGhleSBuZXZlciBvY2N1ciBvbiBrRW1wdHksIGtEZWxldGVkLCBrU2VudGluZWwKKyAgICAg
ICAgICAgICAgICAvLyAtIHRoZXkgd2lsbCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkgYnkgc3Vic2Vx
dWVudCBjaGVja3MgaW4gY29kZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
Ly8gRXhhbXBsZToKKyAgICAgICAgICAgICAgICAvLyAgIHYgPSAweDE3MTYxNTE0MTMxMjExMTAK
KyAgICAgICAgICAgICAgICAvLyAgIGhhc2ggPSAweDEyCisgICAgICAgICAgICAgICAgLy8gICBy
ZXR2YWwgPSAodiAtIGxzYnMpICYgfnYgJiBtc2JzID0gMHgwMDAwMDAwMDgwODAwMDAwCisgICAg
ICAgICAgICAgICAgYXV0byB4ID0gbV92ZWN0b3IgXiAobHNicyAqIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGNvbnRyb2wpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygoeCAtIGxzYnMpICYg
fnggJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzaygobV92ZWN0b3Ig
JiAofm1fdmVjdG9yIDw8IDEpKSAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB1aW50NjRfdCBtX3ZlY3RvcjsKKyAgICAgICAgfTsKKyNlbmRpZgorICAgICAgICBzdHJ1Y3Qg
R3JvdXBTdG9yYWdlIHsKKyAgICAgICAgICAgIENvbnRyb2wgbV9jb250cm9sc1tHcm91cDo6bnVt
YmVyT2ZFbnRyaWVzXTsKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
R3JvdXBTdG9yYWdlKSA9PSBzaXplb2YoR3JvdXApKTsKKwogICAgICAgICB1bnNpZ25lZCB0YWJs
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KG1fdGFibGUpW3RhYmxlU2l6ZU9mZnNldF0gOiAwOyB9CiAgICAgICAgIHZvaWQgc2V0VGFi
bGVTaXplKHVuc2lnbmVkIHNpemUpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA9IHNpemU7IH0KICAg
ICAgICAgdW5zaWduZWQgdGFibGVTaXplTWFzaygpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyBy
ZXR1cm4gbV90YWJsZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJs
ZVNpemVNYXNrT2Zmc2V0XSA6IDA7IH0KQEAgLTU4OCw2ICs4NTIsMTcgQEAgREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgdm9pZCBzZXRL
ZXlDb3VudCh1bnNpZ25lZCBjb3VudCkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVtrZXlDb3VudE9mZnNldF0gPSBjb3VudDsgfQog
ICAgICAgICB1bnNpZ25lZCBkZWxldGVkQ291bnQoKSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVtkZWxldGVkQ291bnRP
ZmZzZXRdOyB9CiAgICAgICAgIHZvaWQgc2V0RGVsZXRlZENvdW50KHVuc2lnbmVkIGNvdW50KSBj
b25zdCB7IEFTU0VSVChtX3RhYmxlKTsgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFi
bGUpW2RlbGV0ZWRDb3VudE9mZnNldF0gPSBjb3VudDsgfQorICAgICAgICBDb250cm9sKiBjb250
cm9scygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Q29udHJvbCo+KGdyb3VwcygpKTsKKyAgICAgICAgfQorICAgICAgICBHcm91cFN0b3JhZ2UqIGdy
b3VwcygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9
IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBtYXhTbWFs
bFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEdyb3VwU3RvcmFnZSo+KGJpdHdpc2VfY2FzdDxDb250
cm9sKj4obV90YWJsZSkgLSBtZXRhZGF0YVNpemUgLSB0YWJsZVNpemUpOworICAgICAgICB9CiAK
ICAgICAgICAgVmFsdWVUeXBlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OwogCkBAIC02NzIsOSArOTQ3
LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsK
ICAgICAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25l
ZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRh
YmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtNjg1LDYgKzk1OCwzOSBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMt
Pm51bUFjY2Vzc2VzOwogI2VuZGlmCiAKKyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBz
ID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgx
KGgpOworICAgICAgICAgICAgdW5zaWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBncm91cFNpemUgPSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0b3JhZ2Up
OworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAg
ICAgICAgdW5zaWduZWQgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvc2l0aW9uIDogZ3JvdXAubWF0Y2goZW50cnlIYXNo
KSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICog
R3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChF
eHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChM
SUtFTFkoZ3JvdXAubWF0Y2hFbXB0eSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJv
YmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9u
QXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNf
UEVSX1RBQkxFCisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3Vu
dChwcm9iZUNvdW50KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAg
ICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAg
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAg
dW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7CiAgICAgICAgICAgICAgICAgCkBAIC03
MjYsOSArMTAzMiw3IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAKICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSog
dGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1h
c2soKTsKICAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9T
VEFUUwogICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTczOSw2ICsx
MDQzLDQ4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJs
ZSk7CiAgICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7CiAjZW5kaWYKIAorICAgICAgICBp
ZiAoR3JvdXBTdG9yYWdlKiBncm91cHMgPSB0aGlzLT5ncm91cHMoKSkgeworICAgICAgICAgICAg
dW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhh
c2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgp
IC8gc2l6ZW9mKEdyb3VwU3RvcmFnZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIEdyb3VwIGdy
b3VwKGdyb3VwcyArIGkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24g
OiBncm91cC5tYXRjaChlbnRyeUhhc2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlVHlw
ZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFp
c0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMSUtFTFko
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC5tYXRj
aEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworI2lmIERVTVBfSEFTSFRB
QkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAg
IEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2Vu
ZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAg
ICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisg
ICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBk
b3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXpl
TWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBncm91cEhhc2ggJiBzaXplTWFz
azsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAgZ3JvdXAo
Z3JvdXBzICsgaSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC5t
YXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBMb29rdXBUeXBlKHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBw
b3NpdGlvbi52YWx1ZSgpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAg
ICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAg
ICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRF
bnRyeSA9IDA7CiAKICAgICAgICAgd2hpbGUgKDEpIHsKQEAgLTc4Nyw5ICsxMTMzLDcgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAg
ICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0g
ICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNp
Z25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9
IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpAQCAtODAwLDYgKzExNDQsNDggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgKyttX3N0
YXRzLT5udW1BY2Nlc3NlczsKICNlbmRpZgogCisgICAgICAgIGlmIChHcm91cFN0b3JhZ2UqIGdy
b3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cEhhc2gg
PSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFzaCA9IGgyKGgpOworICAgICAg
ICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXBTdG9y
YWdlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAgZ3JvdXAoZ3JvdXBzICsgaSk7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6IGdyb3VwLm1hdGNoKGVudHJ5
SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRhYmxlICsg
aSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlzRGVsZXRlZEJ1Y2tldCgqZW50
cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShIYXNoVHJhbnNsYXRvcjo6ZXF1
YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZW50cnksIHRydWUsIGgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoTElLRUxZKGdyb3VwLm1hdGNoRW1wdHkoKSkp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMK
KyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2go
Z3JvdXBIYXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBp
KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLm1hdGNoRW1wdHlP
ckRlbGV0ZWQoKS5sb3dlc3RCaXRTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VMb29rdXBSZXN1bHQodGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyArIHBvc2l0
aW9uLnZhbHVlKCksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNoKTsKKyAgICAgICAg
ICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CisgICAgICAg
IHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgICAgIFZhbHVlVHlwZSogZGVsZXRlZEVu
dHJ5ID0gMDsKIAogICAgICAgICB3aGlsZSAoMSkgewpAQCAtODUzLDkgKzEyMzksNyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAg
IHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAg
ICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2ln
bmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0g
aCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNo
VGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC04NjcsMjcgKzEyNTEsNTcgQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBl
bnRyeSA9IHRhYmxlICsgaTsKKyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBzID0gdGhp
cy0+Z3JvdXBzKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOwor
ICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3Jv
dXBTdG9yYWdlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAgZ3JvdXAoZ3JvdXBzICsg
aSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC5tYXRjaEVtcHR5
KCkubG93ZXN0Qml0U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSAr
IGkgKiBHcm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
aXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50OworICAgICAgICAg
ICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQp
OworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAg
ICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9
IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykg
JiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNpemVNYXNrID0gdGFibGVTaXplTWFzaygpOworICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAg
ICAgICAgZW50cnkgPSB0YWJsZSArIGk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1
Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAgICBIYXNo
VGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAg
ICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJl
Y29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGlmIChr
ID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAgICAg
ICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAgICAgICAgICAg
ICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4o
a2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAoYXV0byogY29u
dHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkgLSB0
YWJsZV0gPSBoMihoKTsKIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
OwogICAgIH0KQEAgLTkzNCw5ICsxMzQ4LDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAg
ICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6
Omhhc2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwpAQCAtOTQ5LDQwICsxMzYxLDg2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEhhc2hUYWJsZSk7CiAKICAgICAgICAgVmFsdWVUeXBlKiBkZWxldGVkRW50cnkgPSAw
OwogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAg
ICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHdl
IGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKLSAgICAg
ICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkg
ewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgIGlm
IChHcm91cFN0b3JhZ2UqIGdyb3VwcyA9IHRoaXMtPmdyb3VwcygpKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBncm91cEhhc2ggPSBoMShoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5SGFz
aCA9IGgyKGgpOworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBTaXplID0gdGFibGVTaXplKCkg
LyBzaXplb2YoR3JvdXBTdG9yYWdlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
Z3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBncm91cEhhc2ggJiBzaXpl
TWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgR3JvdXAgZ3Jv
dXAoZ3JvdXBzICsgaSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwb3NpdGlvbiA6
IGdyb3VwLm1hdGNoKGVudHJ5SGFzaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBl
KiBlbnRyeSA9IHRhYmxlICsgaSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbjsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0VtcHR5QnVja2V0KCplbnRyeSkgJiYgIWlz
RGVsZXRlZEJ1Y2tldCgqZW50cnkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShI
YXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRl
cmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChMSUtFTFkoZ3JvdXAubWF0Y2hFbXB0eSgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9y
OjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tl
dCgqZW50cnkpKQotICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkKKworI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICAgICAgKytwcm9i
ZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19Q
RVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50
KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3VwSGFzaCk7CisgICAgICAgICAg
ICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgR3JvdXAgZ3JvdXAoZ3JvdXBzICsgaSk7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8gcG9zaXRpb24gPSBncm91cC5tYXRjaEVtcHR5T3JEZWxldGVkKCkubG93ZXN0Qml0U2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVt
YmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
ZEVudHJ5ID0gZW50cnk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAgICAg
ICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJh
dG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBI
YXNoKTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwogICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSB0
YWJsZVNpemVNYXNrKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsg
aTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb3VudCBvbiB0aGUg
Y29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJhbmNoCisgICAgICAgICAgICAgICAgaWYg
KEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtl
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdv
b2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhh
c2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5KSwga2V5KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJh
dG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAg
ICAgKytwcm9iZUNvdW50OworICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJM
RV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0
Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9PSAw
KQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkg
PSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoZGVsZXRlZEVudHJ5KSB7CkBAIC05OTIsNiArMTQ1MCw4IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSks
IHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpKTsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xz
ID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2VudHJ5IC0gdGFibGVd
ID0gaDIoaCk7CiAgICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgKyAxKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwMzAsNiArMTQ5MCw4IEBAIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJk
PFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRyYT4oZXh0cmEpLCBoKTsKKyAgICAgICAgaWYgKGF1
dG8qIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgIGNvbnRyb2xzW2Vu
dHJ5IC0gbV90YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAr
IDEpOwogCiAgICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKQEAgLTEwNTMsOSArMTUxNSwxMiBA
QCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAg
ICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0czsKICNlbmRpZgogCi0gICAgICAgIFZhbHVlKiBu
ZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuZmly
c3Q7CisgICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JX
cml0aW5nPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdChlbnRyeSkp
OworICAgICAgICBWYWx1ZVR5cGUqIG5ld0VudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0LmZpcnN0
OwogICAgICAgICBuZXdFbnRyeS0+flZhbHVlKCk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgbmV3
RW50cnkpIFZhbHVlVHlwZShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgIGlmIChhdXRvKiBjb250
cm9scyA9IHRoaXMtPmNvbnRyb2xzKCkpCisgICAgICAgICAgICBjb250cm9sc1tuZXdFbnRyeSAt
IG1fdGFibGVdID0gaDIobG9va3VwUmVzdWx0LnNlY29uZCk7CiAKICAgICAgICAgcmV0dXJuIG5l
d0VudHJ5OwogICAgIH0KQEAgLTExMjQsNiArMTU4OSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAjZW5kaWYKIAogICAgICAgICBkZWxldGVC
dWNrZXQoKnBvcyk7CisgICAgICAgIGlmIChhdXRvKiBjb250cm9scyA9IHRoaXMtPmNvbnRyb2xz
KCkpCisgICAgICAgICAgICBjb250cm9sc1twb3MgLSBtX3RhYmxlXSA9IENvbnRyb2xWYWx1ZTo6
RGVsZXRlZDsKICAgICAgICAgc2V0RGVsZXRlZENvdW50KGRlbGV0ZWRDb3VudCgpICsgMSk7CiAg
ICAgICAgIHNldEtleUNvdW50KGtleUNvdW50KCkgLSAxKTsKIApAQCAtMTE4NSw2ICsxNjUyLDgg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVsZXRl
QnVja2V0KGJ1Y2tldCk7CisgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5j
b250cm9scygpKQorICAgICAgICAgICAgICAgIGNvbnRyb2xzW2ldID0gQ29udHJvbFZhbHVlOjpE
ZWxldGVkOwogICAgICAgICAgICAgKytyZW1vdmVkQnVja2V0Q291bnQ7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHJlbW92ZWRCdWNrZXRDb3VudCkgewpAQCAtMTIwNCwxNCArMTY3MywzMCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgIHsK
ICAgICAgICAgc3RhdGljX2Fzc2VydCghKG1ldGFkYXRhU2l6ZSAlIGFsaWdub2YoVmFsdWVUeXBl
KSkpOwogCisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IDA7CisgICAgICAgIHNpemVf
dCBvZmZzZXQgPSAwOworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkp
IHsKKyAgICAgICAgICAgIGFsbG9jYXRpb25TaXplID0gbWV0YWRhdGFTaXplICsgc2l6ZSAqIHNp
emVvZihWYWx1ZVR5cGUpOworICAgICAgICAgICAgb2Zmc2V0ID0gbWV0YWRhdGFTaXplOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZXRhZGF0YVNpemUg
KyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkgKyBzaXplOworICAgICAgICAgICAgb2Zmc2V0ID0g
bWV0YWRhdGFTaXplICsgc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIFZhbHVlVHlwZSogcmVz
dWx0ID0gbnVsbHB0cjsKKwogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIg
ZnVuY3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CiAgICAgICAg
IC8vIGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKICAgICAgICAgaWYgKFRyYWl0
czo6ZW1wdHlWYWx1ZUlzWmVybykKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9lZE1h
bGxvYyhtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKSArIG1ldGFkYXRh
U2l6ZSk7CisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+
KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFibGVNYWxsb2M6Onplcm9lZE1hbGxvYyhhbGxvY2F0
aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQg
PSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIqPihIYXNoVGFi
bGVNYWxsb2M6Om1hbGxvYyhhbGxvY2F0aW9uU2l6ZSkpICsgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOworICAgICAgICB9CiAKLSAgICAgICAgVmFsdWVUeXBl
KiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSo+KHN0YXRpY19jYXN0PGNoYXIq
PihIYXNoVGFibGVNYWxsb2M6Om1hbGxvYyhtZXRhZGF0YVNpemUgKyBzaXplICogc2l6ZW9mKFZh
bHVlVHlwZSkpKSArIG1ldGFkYXRhU2l6ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7
CisgICAgICAgIGlmIChzaXplID4gbWF4U21hbGxUYWJsZUNhcGFjaXR5KQorICAgICAgICAgICAg
bWVtc2V0KGJpdHdpc2VfY2FzdDxDb250cm9sKj4ocmVzdWx0KSAtIG9mZnNldCwgQ29udHJvbFZh
bHVlOjpFbXB0eSwgc2l6ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0x
MjIzLDcgKzE3MDgsMTAgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
SGFzaFRhYmxlKTsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkK
ICAgICAgICAgICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgSGFzaFRhYmxlTWFsbG9jOjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAt
IG1ldGFkYXRhU2l6ZSk7CisgICAgICAgIGlmIChzaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0
eSkKKyAgICAgICAgICAgIEhhc2hUYWJsZU1hbGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNo
YXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBI
YXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0gbWV0
YWRhdGFTaXplIC0gc2l6ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KQEAgLTEyNjYsMTUgKzE3NTQs
OSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGtleUNvdW50ID49IHRhYmxlU2l6ZSAqIGhhbGZXYXlCZXR3ZWVu
QXZlcmFnZUFuZE1heExvYWRSYXRpbzsKICAgICAgICAgfTsKIAotICAgICAgICBpZiAoYmVzdFRh
YmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBkb3VibGUgc21hbGxMb2FkRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzbWFsbE1heExv
YWROdW1lcmF0b3IpIC8gc21hbGxNYXhMb2FkRGVub21pbmF0b3I7Ci0gICAgICAgICAgICBpZiAo
YWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihzbWFsbExvYWRGYWN0b3IsIGtleUNvdW50
LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdGV4cHIgZG91YmxlIGxhcmdlTG9hZEZh
Y3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obGFyZ2VNYXhMb2FkTnVtZXJhdG9yKSAvIGxhcmdl
TWF4TG9hZERlbm9taW5hdG9yOwotICAgICAgICAgICAgaWYgKGFib3ZlVGhyZXNob2xkRm9yRWFn
ZXJFeHBhbnNpb24obGFyZ2VMb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRhYmxlU2l6ZSkpCi0g
ICAgICAgICAgICAgICAgYmVzdFRhYmxlU2l6ZSAqPSAyOwotICAgICAgICB9CisgICAgICAgIGNv
bnN0ZXhwciBkb3VibGUgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4TG9hZE51
bWVyYXRvcikgLyBtYXhMb2FkRGVub21pbmF0b3I7CisgICAgICAgIGlmIChhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uKGxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkK
KyAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKICAgICAgICAgdW5zaWduZWQgbWluaW11
bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOwogICAgIH0KQEAgLTEy
OTQsNiArMTc3Niw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhh
c2hUYWJsZSk7CiAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1fdGFibGVbaV07CiAgICAgICAg
ICAgICBpZiAoaXNSZWxlYXNlZFdlYWtCdWNrZXQoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAg
ZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY29udHJvbHMg
PSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9IENv
bnRyb2xWYWx1ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICAgICBzZXREZWxldGVkQ291bnQoZGVs
ZXRlZENvdW50KCkgKyAxKTsKICAgICAgICAgICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgp
IC0gMSk7CiAgICAgICAgICAgICB9CkBAIC0xMzA2LDcgKzE3OTAsNiBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICBpbnRlcm5hbENo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAogICAgICAgICB1bnNpZ25lZCBvbGRU
YWJsZVNpemUgPSB0YWJsZVNpemUoKTsKLSAgICAgICAgVmFsdWVUeXBlKiBvbGRUYWJsZSA9IG1f
dGFibGU7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICBpZiAob2xkVGFibGVT
aXplICE9IDApCkBAIC0xMzE4LDYgKzE4MDEsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgKyttX3N0YXRzLT5udW1SZWhh
c2hlczsKICNlbmRpZgogCisgICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUgPSBtX3RhYmxlOwog
ICAgICAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAgICAgICAgIG1fdGFi
bGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHNldFRhYmxlU2l6ZShu
ZXdUYWJsZVNpemUpOwpAQCAtMTM1NCw4ICsxODM4LDEyIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAob2xkVGFibGUpCi0gICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAg
ICAgICAgaWYgKG9sZFRhYmxlKSB7CisgICAgICAgICAgICBpZiAob2xkVGFibGVTaXplIDw9IG1h
eFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZy
ZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXplIC0gb2xkVGFibGVT
aXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5
KCk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKQEAgLTE0NjMsMTYgKzE5NTEsMjQgQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
dW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICB1bnNpZ25lZCBkZWxldGVkQ291bnQgPSAwOwog
ICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemUgPSB0aGlzLT50YWJsZVNpemUoKTsKKyAgICAgICAg
Q29udHJvbCogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgdGFibGVTaXplOyArK2opIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSog
ZW50cnkgPSBtX3RhYmxlICsgajsKLSAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRy
eSkpCisgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRyb2xzKQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY29udHJvbHNb
al0gPT0gQ29udHJvbFZhbHVlOjpFbXB0eSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkg
eworICAgICAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RGVsZXRlZCk7CiAgICAgICAgICAgICAg
ICAgKytkZWxldGVkQ291bnQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICBBU1NFUlQo
Y29udHJvbHNbal0gIT0gQ29udHJvbFZhbHVlOjpFbXB0eSAmJiBjb250cm9sc1tqXSAhPSBDb250
cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAgICAgYXV0byYga2V5ID0gRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSk7CiAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoa2V5
KTsKICAgICAgICAgICAgIEFTU0VSVChlbnRyeSA9PSBpdC5tX3Bvc2l0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUNQVS5oCmluZGV4IGJjZTIzZTAzNDZkNTQzZGVkNjlkYzJhNWM4NWYwZThiNDI4ZGJlMmIuLmU5
ZmQ4ZjJiMDNjOWRkY2U3NmYwYzc1ZTNjMDQ5ZWU2ZTBhYjMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtQ1BVLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1DUFUu
aApAQCAtMTA5LDYgKzEwOSw5IEBACiAgICAgfHwgZGVmaW5lZChfTV9YNjQpCiAjZGVmaW5lIFdU
Rl9DUFVfWDg2XzY0IDEKICNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMiAxCisjaWYgZGVmaW5lZChf
X1NTRTNfXykKKyNkZWZpbmUgV1RGX0NQVV9YODZfU1NFMyAxCisjZW5kaWYKICNkZWZpbmUgV1RG
X0NQVV9LTk9XTiAxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFsdWVD
aGVjay5oIGIvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCmluZGV4IDI2ZWFhNTM4ZWJkZWMz
ZDIzMmVmYmNiMmJjNmQxZTZiZjJlOTdhNWMuLjQ2MzJkNjVjMTc1YTNkMTZkYTM2MGIyOTc1ODIx
YzkwMzlmNGFmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmgKQEAgLTQ1LDYgKzQ1LDE1IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFA+IHN0cnVjdCBWYWx1ZUNoZWNrPFAqPiB7CiAgICAgICAgIFZhbHVlQ2hlY2s8
UD46OmNoZWNrQ29uc2lzdGVuY3koKnApOwogICAgIH0KIH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBW
YWx1ZUNoZWNrPHZvaWQqPiB7CisgICAgdHlwZWRlZiB2b2lkKiBUcmFpdFR5cGU7CisgICAgc3Rh
dGljIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAg
aWYgKCFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoZmFzdE1hbGxvY1Np
emUocCkpOworICAgIH0KK307CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApp
bmRleCA5Nzc2M2UwZjRkZmJmOWVhM2FjZWQzMTQzNjlkYzFkZWMyNjRmYmNkLi4wZjBjMmJiY2Q3
Zjg2MmY5MzkxNGI4OGEyNmMyYTBiY2FjMTBiODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtODI5LDcgKzgyOSw3
IEBAIGNsYXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5
LCBNYWxsb2M+IHsKIAogICAgIHZvaWQgcmV2ZXJzZSgpOwogCi0gICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVz
dWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVu
Y3Rpb24pIGNvbnN0OwogCkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBpbmxpbmUgTWFsbG9jUHRyPFQs
IE1hbGxvYz4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxs
b2M+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQoraW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBN
YWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390734</attachid>
            <date>2020-02-14 00:13:11 -0800</date>
            <delta_ts>2020-02-18 11:39:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207426-20200214001310.patch</filename>
            <type>text/plain</type>
            <size>47173</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJjOTFjMzBlN2UwMjZjMzc4ZjY3MzEw
MDg2NTJjNDBkMzEyNGU0NzkuLmNiOGRkOTI0OTRlYmRhMjNlMWQxNzc1OTRlYTczMDc0YTBjOTg5
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsODQgQEAKKzIwMjAtMDItMTQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBVc2UgU3dpc3NUYWJsZSBhbGdvcml0aG0g
Zm9yIGxhcmdlciBIYXNoVGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNzQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0YWJsZSBsZXZlcmFnaW5nIGFsZ29y
aXRobSBvZiBTd2lzc1RhYmxlWzFdIHRvIGdldAorICAgICAgICBoaWdoZXIgcGVyZm9ybWFuY2Ug
Zm9yIGxhcmdlLXNpemVkIHRhYmxlcywgdGhlbiB3ZSBpbmNyZWFzZSBsb2FkLWZhY3RvciBmb3IK
KyAgICAgICAgbGFyZ2Utc2l6ZWQgdGFibGVzIGZyb20gNTAlIHRvIDc1JS4KKworICAgICAgICBT
d2lzc1RhYmxlIGlzIGNvbXBvc2VkIG9mIFZlY3RvcjxHcm91cD4sIGVhY2ggR3JvdXAgaGFzIDE2
IGJ1Y2tldHMuIEFuZCBoYXNoIGNvZGUgaXMgdXNlZAorICAgICAgICB0byBzZWxlY3QgR3JvdXAg
d2Ugd2lsbCBzZWFyY2guIFRoZSBrZXkgaXMgdGhhdCB3ZSBtYWludGFpbnMgQ29udHJvbCBieXRl
cyBhcyBhIHNpZGUgZGF0YSwKKyAgICAgICAgd2hpY2ggaXMgMSBieXRlIHBlciBidWNrZXQuIFNv
LCBmb3Igb25lIEdyb3VwLCB0aGVyZSBpcyAxNiBjb250cm9sIGJ5dGVzLgorCisgICAgICAgIEZv
ciBlYWNoIGJ1Y2tldCwgd2Ugc3RvcmUgZWl0aGVyIG9mICgxKSA3IGJpdCBoYXNoIGNvZGUsICgy
KSBlbXB0eSBtYXJrZXIsIG9yICgzKSBkZWxldGVkIG1hcmtlci4KKyAgICAgICAgMiBhbmQgMyBo
YXMgMSB0b3AgYml0LCBzbyB3ZSBjYW4gZWFzaWx5IGRpc3Rpbmd1aXNoIHRoZXNlIHRocmVlIGJ5
dGVzLiBUaGVuLCB3ZSBsZXZlcmFnZSBTSU1ECisgICAgICAgIG9wZXJhdGlvbiB0byBtYXRjaCAx
NiBidWNrZXQgaGFzaCBjb2RlcyBpbiBwYXJhbGxlbCwgdG8gZmlsdGVyIG91dCBzZWFyY2ggY2Fu
ZGlkYXRlIGJ1Y2tldHMgaW4KKyAgICAgICAgb25lIEdyb3VwLiBBbmQgd2UgY2FuIHNlZSBsYXN0
IGVtcHR5IGJ1Y2tldCBpZiBhbnkgYnVja2V0IG9mIEdyb3VwIGlzIGVtcHR5LiBTbywgYWxtb3N0
IGFsbCBjYXNlcywKKyAgICAgICAgZmlyc3QgMTYgYnVja2V0cyBpbmNsdWRlIHNlYXJjaCB0YXJn
ZXQgb3IgZW1wdHkuIFRoZSBwcm9iZS1sZW5ndGggb2YgR3JvdXBzIGJlY29tZXMgc21hbGwsIHdo
aWNoCisgICAgICAgIGFjY2VsZXJhdGVzIHBlcmZvcm1hbmNlIGluIGxhcmdlLXNpemVkIHRhYmxl
LgorCisgICAgICAgIFdlIG9ubHkgdXNlIHRoaXMgZGVzaWduIG9mIHRhYmxlIGZvciBsYXJnZS1z
aXplZCBvbmVzLiBGb3Igc21hbGxlci1zaXplZCB0YWJsZXMsIGN1cnJlbnQgSGFzaFRhYmxlCisg
ICAgICAgIGltcGxlbWVudGF0aW9uIHdvcmtzIHdlbGwsIGFuZCBuZXcgb25lIHJlcXVpcmVzIGFk
ZGl0aW9uYWwgc2lkZSBkYXRhLCAxIGJ5dGUgcGVyIGJ1Y2tldDogY29udHJvbCBieXRlcy4KKyAg
ICAgICAgU28ga2VlcGluZyB0aGUgY3VycmVudCBvbmUgZm9yIHNtYWxsLXNpemVkIHRhYmxlLCB1
c2luZyB0aGlzIGFsZ29yaXRobSBmb3IgbGFyZ2Utc2l6ZWQgdGFibGVzLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggaW1wbGVtZW50cyB4NjQgU1NFMi9TU0UzLCBBUk0gTkVPTiwgYW5kIHBvcnRhYmxl
IHZlcnNpb24gb2YgR3JvdXAuCisKKyAgICAgICAgV2hpbGUgSmV0U3RyZWFtMiBpcyBuZXV0cmFs
LCB3ZSBnZXQgc3ViLTElIGltcHJvdmVtZW50IGluIE1lbWJ1c3Rlci4KKworICAgICAgICBbMV06
IGh0dHBzOi8vYWJzZWlsLmlvL2Jsb2cvMjAxODA5Mjctc3dpc3N0YWJsZXMKKworICAgICAgICAq
IHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpsb29rdXBGb3JXcml0
aW5nKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpoMSk6CisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6aDIpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6OkJpdE1hc2spOgor
ICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Om9wZXJhdG9yKyspOgorICAgICAgICAo
V1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAo
V1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6
Okhhc2hUYWJsZTo6Qml0TWFzazo6bG93ZXN0Qml0U2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjpCaXRNYXNrOjpoaWdoZXN0Qml0U2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjpCaXRNYXNrOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZTo6Qml0TWFzazo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
Ojp0cmFpbGluZ1plcm9zIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpCaXRNYXNr
OjpsZWFkaW5nWmVyb3MgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OkJpdE1hc2s6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjpHcm91cCk6CisgICAgICAgIChX
VEY6Okhhc2hUYWJsZTo6R3JvdXA6Om1hdGNoRW1wdHlPckRlbGV0ZWQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpIYXNoVGFibGU6Okdyb3VwOjptYXRjaCBjb25zdCk6CisgICAgICAgIChXVEY6Okhh
c2hUYWJsZTo6R3JvdXA6Om1hdGNoRW1wdHkpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6Okdy
b3VwOjpfbW1fY21wZ3RfZXBpOF9maXhlZCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y29u
dHJvbHMgY29uc3QpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmNvbnRyb2xzTm9uTnVsbCBj
b25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Z3JvdXBzIGNvbnN0KToKKyAgICAgICAg
KFdURjo6S2V5VHJhaXRzPjo6aW5saW5lTG9va3VwKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6bG9va3VwRm9yV3JpdGluZyk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkKToKKyAg
ICAgICAgKFdURjo6S2V5VHJhaXRzPjo6YWRkUGFzc2luZ0hhc2hDb2RlKToKKyAgICAgICAgKFdU
Rjo6S2V5VHJhaXRzPjo6cmVpbnNlcnQpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1v
dmUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZW1vdmVJZik6CisgICAgICAgIChXVEY6
OktleVRyYWl0cz46OmFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpk
ZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpjb21wdXRlQmVzdFRh
YmxlU2l6ZSk6CisgICAgICAgIChXVEY6OktleVRyYWl0cz46OmRlbGV0ZVJlbGVhc2VkV2Vha0J1
Y2tldHMpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpyZWhhc2gpOgorICAgICAgICAoV1RG
OjpLZXlUcmFpdHM+OjpIYXNoVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVj
a1RhYmxlQ29uc2lzdGVuY3kgY29uc3QpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVj
a1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SGFzaFRh
YmxlOjptYWtlTG9va3VwUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZnVsbExvb2t1cEZvcldyaXRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bUNQVS5oOgorICAgICAgICAqIHd0Zi9WYWx1ZUNoZWNrLmg6CisgICAgICAgIChXVEY6OlZhbHVl
Q2hlY2s8dm9pZDo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgICogd3RmL1ZlY3Rvci5oOgor
ICAgICAgICAoV1RGOjpNYWxsb2M+OjpjaGVja0NvbnNpc3RlbmN5IGNvbnN0KToKKyAgICAgICAg
KFdURjo6TWFsbG9jPjo6Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisKIDIwMjAtMDItMTIg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWJQIGltYWdlIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCmluZGV4IDkwNzQ3
ODIyOTU4YThhZjk1ODIzMTIyYzE1Yjg2MzU3ZTRjODMyMjIuLjkzN2FkNWI1N2E4MGNkOTZhMzUy
NmQ0Y2M4YWQ0MTk4NmUwMzk1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJs
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBAIC0xOCw3ICsxOCwzNyBAQAog
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCi0KKy8qCisgKiBUaGlzIEhh
c2hUYWJsZSBpbXBsZW1lbnRzIFN3aXNzVGFibGUgZnJvbSBBYnNlaWwgYW5kIHVzaW5nIHNvbWUg
dGVjaG5pcXVlcyBkZXNjcmliZWQgaW4gRjE0IHRhYmxlLgorICoKKyAqIENvcHlyaWdodCAyMDE4
IFRoZSBBYnNlaWwgQXV0aG9ycy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cHM6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIElu
Yy4gYW5kIGl0cyBhZmZpbGlhdGVzLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPGF0
b21pYz4KQEAgLTM2LDYgKzY2LDE2IEBACiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmFsdWVDaGVjay5o
PgorI2lmIENQVShYODZfU1NFMikKKyNpbmNsdWRlIDxlbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxp
bW1pbnRyaW4uaD4KKyNlbmRpZgorI2lmIENQVShYODZfU1NFMykKKyNpbmNsdWRlIDx0bW1pbnRy
aW4uaD4KKyNlbmRpZgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxh
cm1fbmVvbi5oPgorI2VuZGlmCiAKICNkZWZpbmUgRFVNUF9IQVNIVEFCTEVfU1RBVFMgMAogI2Rl
ZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUgMApAQCAtMzEwLDkgKzM1MCw5IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
ICAgIC8vIExvYWQtZmFjdG9yIGZvciBzbWFsbCB0YWJsZSBpcyA3NSUuCiAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgc21hbGxNYXhMb2FkTnVtZXJhdG9yID0gMzsKICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWREZW5vbWluYXRvciA9IDQ7Ci0g
ICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA1MCUuCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkTnVtZXJhdG9yID0gMTsKLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWREZW5vbWluYXRvciA9IDI7
CisgICAgICAgIC8vIExvYWQtZmFjdG9yIGZvciBsYXJnZSB0YWJsZSBpcyA4MS4yNSUgKGNsb3Nl
IHRvIDgwJSksIHNpbmNlIGl0IHVzZXMgU3dpc3NUYWJsZS4KKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBsYXJnZU1heExvYWROdW1lcmF0b3IgPSAzOworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yID0gNDsKICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSAxMDI0Owog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1pbkxvYWQgPSA2OwogCkBAIC01MTUs
MTEgKzU1NSw5IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRh
YmxlKTsKIAogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCBib29sPiBMb29r
dXBUeXBlOwotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxMb29rdXBUeXBlLCB1bnNpZ25lZD4g
RnVsbExvb2t1cFR5cGU7CiAKLSAgICAgICAgTG9va3VwVHlwZSBsb29rdXBGb3JXcml0aW5nKGNv
bnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXBGb3JXcml0aW5nPElkZW50aXR5VHJhbnNsYXRv
clR5cGU+KGtleSk7IH07Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBGdWxsTG9va3VwVHlwZSBmdWxsTG9va3VwRm9yV3JpdGluZyhjb25zdCBU
Jik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
PiBMb29rdXBUeXBlIGxvb2t1cEZvcldyaXRpbmcoY29uc3QgVCYpOworICAgICAgICBMb29rdXBU
eXBlIGxvb2t1cEZvcldyaXRpbmcoY29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cEZvcldy
aXRpbmc8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5LCBJZGVudGl0eVRyYW5zbGF0b3JUeXBl
OjpoYXNoKGtleSkpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBMb29rdXBUeXBlIGxvb2t1cEZvcldyaXRpbmcoY29uc3QgVCYsIHVuc2ln
bmVkIGhhc2gpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4gdm9pZCBhZGRVbmlxdWVGb3JJbml0aWFsaXphdGlv
bihUJiYga2V5LCBFeHRyYSYmKTsKIApAQCAtNTQ1LDkgKzU4Myw2IEBAIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBkZWxldGVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpIHsgaGFzaFRyYWl0c0RlbGV0ZUJ1Y2tl
dDxUcmFpdHM+KGJ1Y2tldCk7IH0KIAotICAgICAgICBGdWxsTG9va3VwVHlwZSBtYWtlTG9va3Vw
UmVzdWx0KFZhbHVlVHlwZSogcG9zaXRpb24sIGJvb2wgZm91bmQsIHVuc2lnbmVkIGhhc2gpCi0g
ICAgICAgICAgICB7IHJldHVybiBGdWxsTG9va3VwVHlwZShMb29rdXBUeXBlKHBvc2l0aW9uLCBm
b3VuZCksIGhhc2gpOyB9Ci0KICAgICAgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKFZhbHVlVHlw
ZSogcG9zKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBwb3MsIG1fdGFibGUgKyB0YWJsZVNpemUo
KSk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgbWFrZUNvbnN0SXRlcmF0b3IoVmFsdWVUeXBl
KiBwb3MpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSAr
IHRhYmxlU2l6ZSgpKTsgfQogICAgICAgICBpdGVyYXRvciBtYWtlS25vd25Hb29kSXRlcmF0b3Io
VmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHBvcywgbV90YWJsZSArIHRh
YmxlU2l6ZSgpLCBIYXNoSXRlbUtub3duR29vZCk7IH0KQEAgLTU2NSwxMCArNjAwLDggQEAgREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAg
c3RhdGljIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQogI2VuZGlmCiAKLSAgICAgICAg
Ly8gTG9hZC1mYWN0b3IgZm9yIHNtYWxsIHRhYmxlIGlzIDc1JS4KICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBzbWFsbE1heExvYWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9s
aWN5OjpzbWFsbE1heExvYWROdW1lcmF0b3I7CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgc21hbGxNYXhMb2FkRGVub21pbmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpzbWFs
bE1heExvYWREZW5vbWluYXRvcjsKLSAgICAgICAgLy8gTG9hZC1mYWN0b3IgZm9yIGxhcmdlIHRh
YmxlIGlzIDUwJS4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBsYXJnZU1heExv
YWROdW1lcmF0b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpsYXJnZU1heExvYWROdW1lcmF0b3I7
CiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbGFyZ2VNYXhMb2FkRGVub21pbmF0
b3IgPSBIYXNoVGFibGVTaXplUG9saWN5OjpsYXJnZU1heExvYWREZW5vbWluYXRvcjsKICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkgPSBIYXNo
VGFibGVTaXplUG9saWN5OjptYXhTbWFsbFRhYmxlQ2FwYWNpdHk7CkBAIC01ODAsNiArNjEzLDIz
NiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBkZWxldGVkQ291bnRPZmZzZXQgPSAtNDsKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtZXRhZGF0YVNpemUgPSA0ICogc2l6ZW9m
KHVuc2lnbmVkKTsKIAorICAgICAgICB1c2luZyBDb250cm9sID0gdWludDhfdDsKKyAgICAgICAg
ZW51bSBDb250cm9sVmFsdWUgOiBDb250cm9sIHsKKyAgICAgICAgICAgIEVtcHR5ICAgPSAwYjEw
MDAwMDAwLAorICAgICAgICAgICAgRGVsZXRlZCA9IDBiMTExMTExMTEsCisgICAgICAgIH07CisK
KyAgICAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBoMSh1bnNpZ25lZCBoYXNoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdl
IGV4dHJhY3QgWzE3LCAyNF0gYml0cyBzaW5jZSBTdHJpbmdJbXBsIG9ubHkgb2ZmZXJzIDI0IGJp
dHMuCisgICAgICAgIGlubGluZSBDb250cm9sIGgyKHVuc2lnbmVkIGhhc2gpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAoaGFzaCA+PiAxNykgJiAweDdGOworICAgICAgICB9CisKKyAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIFQsIHVuc2lnbmVkIHNoaWZ0PgorICAgICAgICBjbGFzcyBC
aXRNYXNrIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6
dmFsdWUpOworCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUg
PSB1bnNpZ25lZDsKKyAgICAgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gQml0TWFzazsKKyAgICAg
ICAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gQml0TWFzazsKKworICAgICAgICAgICAgZXhw
bGljaXQgY29uc3RleHByIEJpdE1hc2soVCBtYXNrKQorICAgICAgICAgICAgICAgIDogbV9tYXNr
KG1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEJpdE1h
c2smIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbWFzayAm
PSAobV9tYXNrIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9tYXNrICE9IDA7IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRM
U0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBsb3dlc3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghbV9tYXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVybiBnZXRMU0JTZXQobV9tYXNrKSA+PiBzaGlm
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGhpZ2hl
c3RCaXRTZXQoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghbV9t
YXNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRNU0JTZXQobV9tYXNrKSA+PiBzaGlmdDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgQml0TWFzayBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgICAgICAgICBCaXRNYXNrIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEJpdE1hc2soMCk7IH0KKwor
ICAgICAgICAgICAgdW5zaWduZWQgdHJhaWxpbmdaZXJvcygpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX21hc2spCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBVSU5UMzJfTUFYOworICAgICAgICAgICAgICAgIHJldHVybiBjdHoobV9tYXNrKSA+PiBzaGlm
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zaWduZWQgbGVhZGluZ1plcm9zKCkg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbWFzaykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFVJTlQzMl9NQVg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNseihtX21hc2spID4+IHNoaWZ0OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpdE1hc2smIGEsIGNv
bnN0IEJpdE1hc2smIGIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEu
bV9tYXNrID09IGIubV9tYXNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBCaXRNYXNrJiBhLCBjb25zdCBCaXRNYXNrJiBiKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBhLm1fbWFzayAhPSBiLm1fbWFzazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgVCBtX21hc2s7CisgICAgICAgIH07CisKKworICAg
ICAgICBzdHJ1Y3QgR3JvdXBTdG9yYWdlOworI2lmIENQVShYODZfU1NFMikKKyAgICAgICAgc3Ry
dWN0IEdyb3VwIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVy
T2ZFbnRyaWVzID0gMTY7CisKKyAgICAgICAgICAgIGV4cGxpY2l0IEdyb3VwKEdyb3VwU3RvcmFn
ZSogc3RvcmFnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZlY3RvciA9IF9t
bV9sb2FkdV9zaTEyOChiaXR3aXNlX2Nhc3Q8Y29uc3QgX19tMTI4aSo+KHN0b3JhZ2UpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdXNpbmcgTWFzayA9IEJpdE1hc2s8dWludDE2X3Qs
IC8qIDEgYml0ICovIDA+OworICAgICAgICAgICAgTWFzayBtYXRjaEVtcHR5T3JEZWxldGVkKCkg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWFzayhfbW1fbW92
ZW1hc2tfZXBpOChtX3ZlY3RvcikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNr
IG1hdGNoKENvbnRyb2wgY29udHJvbCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHBhdHRlcm4gPSBfbW1fc2V0MV9lcGk4KGNvbnRyb2wpOworICAgICAgICAgICAg
ICAgIHJldHVybiBNYXNrKF9tbV9tb3ZlbWFza19lcGk4KF9tbV9jbXBlcV9lcGk4KHBhdHRlcm4s
IG1fdmVjdG9yKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNrIG1hdGNoRW1w
dHkoKQorICAgICAgICAgICAgeworI2lmIENQVShYODZfU1NFMykKKyAgICAgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PGludDhfdD4oQ29udHJvbFZhbHVlOjpFbXB0eSkgPT0g
LTEyOCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hc2soX21tX21vdmVtYXNrX2VwaTgoX21t
X3NpZ25fZXBpOChtX3ZlY3RvciwgbV92ZWN0b3IpKSk7CisjZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaChDb250cm9sVmFsdWU6OkVtcHR5KTsKKyNlbmRpZgorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHAv
aXNzdWVzLzIwOQorICAgICAgICAgICAgLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9z
aG93X2J1Zy5jZ2k/aWQ9ODc4NTMKKyAgICAgICAgICAgIC8vIF9tbV9jbXBndF9lcGk4IGlzIGJy
b2tlbiB1bmRlciBHQ0Mgd2l0aCAtZnVuc2lnbmVkLWNoYXIKKyAgICAgICAgICAgIGlubGluZSBz
dGF0aWMgX19tMTI4aSBfbW1fY21wZ3RfZXBpOF9maXhlZChfX20xMjhpIGEsIF9fbTEyOGkgYikK
KyAgICAgICAgICAgIHsKKyNpZiBDT01QSUxFUihHQ0MpCisgICAgICAgICAgICAgICAgaWYgKHN0
ZDo6aXNfdW5zaWduZWQ8Y2hhcj46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fbTEyOGkgbWFzayA9IF9tbV9zZXQxX2VwaTgoMHg4MCk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fbTEyOGkgZGlmZiA9IF9tbV9zdWJzX2VwaTgoYiwgYSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfbW1fY21wZXFfZXBpOChfbW1fYW5kX3NpMTI4KGRpZmYsIG1hc2spLCBt
YXNrKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4g
X21tX2NtcGd0X2VwaTgoYSwgYik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9fbTEy
OGkgbV92ZWN0b3I7CisgICAgICAgIH07CisjZWxpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CisgICAgICAgIHN0cnVjdCBHcm91cCB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG51bWJlck9mRW50cmllcyA9IDE2OworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50NjRfdCBtc2JzID0gMHg4ODg4ODg4ODg4ODg4ODg4VUxMOworCisgICAgICAgICAgICBl
eHBsaWNpdCBHcm91cChHcm91cFN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV92ZWN0b3IgPSB2bGQxcV91OChiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHN0b3JhZ2UpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXNpbmcgTWFzayA9
IEJpdE1hc2s8dWludDY0X3QsIC8qIDRiaXRzICovIDI+OworICAgICAgICAgICAgTWFzayBtYXRj
aEVtcHR5T3JEZWxldGVkKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHZyZWludGVycHJldHFfdThfczgodnNocnFfbl9zOCh2cmVpbnRlcnByZXRx
X3M4X3U4KG1fdmVjdG9yKSwgNykpOworICAgICAgICAgICAgICAgIGF1dG8gcmVkdWNlZCA9IHZz
aHJuX25fdTE2KHZyZWludGVycHJldHFfdTE2X3U4KHJlc3VsdCksIDQpOyAvLyAxMTExMTExMXww
MDAwMDAwMCA9PiAxMTExMDAwMAorICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKHZnZXRfbGFu
ZV91NjQodnJlaW50ZXJwcmV0X3U2NF91OChyZWR1Y2VkKSwgMCkgJiBtc2JzKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgTWFzayBtYXRjaChDb250cm9sIGNvbnRyb2wpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gdmR1cHFfbl91OChj
b250cm9sKTsgLy8gWFhYWCA9PiBYWFhYIHg4CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSB2Y2VxcV91OChwYXR0ZXJuLCBtX3ZlY3Rvcik7IC8vIFhYWFggeDggPD0+IHZlY3RvcgorICAg
ICAgICAgICAgICAgIGF1dG8gcmVkdWNlZCA9IHZzaHJuX25fdTE2KHZyZWludGVycHJldHFfdTE2
X3U4KHJlc3VsdCksIDQpOyAvLyAxMTExMTExMXwwMDAwMDAwMCA9PiAxMTExMDAwMAorICAgICAg
ICAgICAgICAgIHJldHVybiBNYXNrKHZnZXRfbGFuZV91NjQodnJlaW50ZXJwcmV0X3U2NF91OChy
ZWR1Y2VkKSwgMCkgJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFzayBt
YXRjaEVtcHR5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2go
Q29udHJvbFZhbHVlOjpFbXB0eSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnQ4
eDE2X3QgbV92ZWN0b3I7CisgICAgICAgIH07CisjZWxzZQorICAgICAgICBzdHJ1Y3QgR3JvdXAg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMg
PSA4OworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtc2JzID0gMHg4MDgw
ODA4MDgwODA4MDgwVUxMOworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBs
c2JzID0gMHgwMTAxMDEwMTAxMDEwMTAxVUxMOworCisgICAgICAgICAgICBleHBsaWNpdCBHcm91
cChHcm91cFN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgICAgICB7CisjaWYgQ1BVKExJVFRMRV9F
TkRJQU4pCisgICAgICAgICAgICAgICAgbV92ZWN0b3IgPSAqKGJpdHdpc2VfY2FzdDxjb25zdCB1
aW50NjRfdCo+KHN0b3JhZ2UpKTsKKyNlbHNlIC8vICFDUFUoTElUVExFX0VORElBTikKKyNpZiBD
T01QSUxFUihHQ0NfT1JfQ0xBTkcpCisgICAgICAgICAgICAgICAgbV92ZWN0b3IgPSBfX2J1aWx0
aW5fYnN3YXA2NCgqKGJpdHdpc2VfY2FzdDxjb25zdCB1aW50NjRfdCo+KHN0b3JhZ2UpKSk7Cisj
ZWxpZiBDT01QSUxFUihNU1ZDKQorICAgICAgICAgICAgICAgIG1fdmVjdG9yID0gX2J5dGVzd2Fw
X3VpbnQ2NCgqKGJpdHdpc2VfY2FzdDxjb25zdCB1aW50NjRfdCo+KHN0b3JhZ2UpKSk7CisjZWxz
ZQorI2Vycm9yICJOb3Qgc3VwcG9ydGVkIGNvbXBpbGVyIgorI2VuZGlmCisjZW5kaWYgLy8gQ1BV
KExJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVzaW5nIE1hc2sg
PSBCaXRNYXNrPHVpbnQ2NF90LCAvKiA4Yml0cyAqLyAzPjsKKyAgICAgICAgICAgIE1hc2sgbWF0
Y2hFbXB0eU9yRGVsZXRlZCgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE1hc2sobV92ZWN0b3IgJiBtc2JzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgTWFzayBtYXRjaChDb250cm9sIGNvbnRyb2wpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gRm9yIHRoZSB0ZWNobmlxdWUsIHNlZToKKyAgICAgICAgICAgICAgICAv
LyBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjI1Zh
bHVlSW5Xb3JkCisgICAgICAgICAgICAgICAgLy8gKERldGVybWluZSBpZiBhIHdvcmQgaGFzIGEg
Ynl0ZSBlcXVhbCB0byBuKS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IENhdmVhdDogdGhlcmUgYXJlIGZhbHNlIHBvc2l0aXZlcyBidXQ6CisgICAgICAgICAgICAgICAg
Ly8gLSB0aGV5IG9ubHkgb2NjdXIgaWYgdGhlcmUgaXMgYSByZWFsIG1hdGNoCisgICAgICAgICAg
ICAgICAgLy8gLSB0aGV5IG5ldmVyIG9jY3VyIG9uIGtFbXB0eSwga0RlbGV0ZWQsIGtTZW50aW5l
bAorICAgICAgICAgICAgICAgIC8vIC0gdGhleSB3aWxsIGJlIGhhbmRsZWQgZ3JhY2VmdWxseSBi
eSBzdWJzZXF1ZW50IGNoZWNrcyBpbiBjb2RlCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBFeGFtcGxlOgorICAgICAgICAgICAgICAgIC8vICAgdiA9IDB4MTcxNjE1MTQx
MzEyMTExMAorICAgICAgICAgICAgICAgIC8vICAgaGFzaCA9IDB4MTIKKyAgICAgICAgICAgICAg
ICAvLyAgIHJldHZhbCA9ICh2IC0gbHNicykgJiB+diAmIG1zYnMgPSAweDAwMDAwMDAwODA4MDAw
MDAKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBtX3ZlY3RvciBeIChsc2JzICogc3RhdGljX2Nh
c3Q8dWludDhfdD4oY29udHJvbCkpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKCh4IC0g
bHNicykgJiB+eCAmIG1zYnMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNYXNrIG1h
dGNoRW1wdHkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXNrKCht
X3ZlY3RvciAmICh+bV92ZWN0b3IgPDwgMSkpICYgbXNicyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHVpbnQ2NF90IG1fdmVjdG9yOworICAgICAgICB9OworI2VuZGlmCisgICAgICAg
IHN0cnVjdCBHcm91cFN0b3JhZ2UgeworICAgICAgICAgICAgQ29udHJvbCBtX2NvbnRyb2xzW0dy
b3VwOjpudW1iZXJPZkVudHJpZXNdOworICAgICAgICB9OworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihHcm91cFN0b3JhZ2UpID09IHNpemVvZihHcm91cCkpOworCiAgICAgICAgIHVuc2ln
bmVkIHRhYmxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUgPyByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkKj4obV90YWJsZSlbdGFibGVTaXplT2Zmc2V0XSA6IDA7IH0KICAgICAgICAgdm9p
ZCBzZXRUYWJsZVNpemUodW5zaWduZWQgc2l6ZSkgY29uc3QgeyBBU1NFUlQobV90YWJsZSk7IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3RhYmxlKVt0YWJsZVNpemVPZmZzZXRdID0gc2l6
ZTsgfQogICAgICAgICB1bnNpZ25lZCB0YWJsZVNpemVNYXNrKCkgY29uc3QgeyBBU1NFUlQobV90
YWJsZSk7IHJldHVybiBtX3RhYmxlID8gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFi
bGUpW3RhYmxlU2l6ZU1hc2tPZmZzZXRdIDogMDsgfQpAQCAtNTg4LDYgKzg1MSwyMyBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICB2
b2lkIHNldEtleUNvdW50KHVuc2lnbmVkIGNvdW50KSBjb25zdCB7IEFTU0VSVChtX3RhYmxlKTsg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2tleUNvdW50T2Zmc2V0XSA9IGNv
dW50OyB9CiAgICAgICAgIHVuc2lnbmVkIGRlbGV0ZWRDb3VudCgpIGNvbnN0IHsgQVNTRVJUKG1f
dGFibGUpOyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fdGFibGUpW2RlbGV0
ZWRDb3VudE9mZnNldF07IH0KICAgICAgICAgdm9pZCBzZXREZWxldGVkQ291bnQodW5zaWduZWQg
Y291bnQpIGNvbnN0IHsgQVNTRVJUKG1fdGFibGUpOyByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4obV90YWJsZSlbZGVsZXRlZENvdW50T2Zmc2V0XSA9IGNvdW50OyB9CisgICAgICAgIENvbnRy
b2wqIGNvbnRyb2xzKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxDb250cm9sKj4oZ3JvdXBzKCkpOworICAgICAgICB9CisgICAgICAgIENvbnRyb2wq
IGNvbnRyb2xzTm9uTnVsbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHRhYmxl
U2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0eSk7CisgICAgICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PENvbnRyb2wqPihtX3RhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIHRhYmxlU2l6ZTsKKyAg
ICAgICAgfQorICAgICAgICBHcm91cFN0b3JhZ2UqIGdyb3VwcygpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IHRoaXMtPnRhYmxlU2l6ZSgpOworICAg
ICAgICAgICAgaWYgKHRhYmxlU2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEdyb3VwU3RvcmFnZSo+KGJpdHdpc2VfY2FzdDxDb250cm9sKj4obV90YWJsZSkgLSBtZXRhZGF0
YVNpemUgLSB0YWJsZVNpemUpOworICAgICAgICB9CiAKICAgICAgICAgVmFsdWVUeXBlKiBtX3Rh
YmxlIHsgbnVsbHB0ciB9OwogCkBAIC02NzIsOSArOTUyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgaWYgKCF0YWJsZSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
dGFibGVTaXplTWFzaygpOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwpA
QCAtNjg1LDYgKzk2MywzOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihIYXNoVGFibGUpOwogICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAK
KyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAgICAgICAgdW5zaWdu
ZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUgPSB0
YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0b3JhZ2UpOworICAgICAgICAgICAgdW5zaWduZWQg
c2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdyb3Vw
SGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAg
ICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHBvc2l0aW9uIDogZ3JvdXAubWF0Y2goZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmllcyAr
IHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVudHJ5
KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoZ3JvdXAubWF0Y2hFbXB0eSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUworICAgICAgICAgICAgICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAg
ICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNl
bmRpZgorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCisgICAgICAgICAgICAg
ICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6
ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
TWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFz
azsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0
YWJsZSArIGk7CiAgICAgICAgICAgICAgICAgCkBAIC03MTksMTYgKzEwMzAsMTMgQEAgREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKGNvbnN0IFQmIGtleSkgLT4g
TG9va3VwVHlwZQorICAgIGlubGluZSBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6bG9va3VwRm9yV3JpdGluZyhj
b25zdCBUJiBrZXksIHVuc2lnbmVkIGgpIC0+IExvb2t1cFR5cGUKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3RhYmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAK
ICAgICAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3Rh
YmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKLSAgICAg
ICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2ln
bmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAg
ICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTczOSw2NyArMTA0Nyw0OCBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwogI2VuZGlmCiAKLSAgICAgICAgVmFsdWVUeXBlKiBk
ZWxldGVkRW50cnkgPSAwOworICAgICAgICBpZiAoR3JvdXBTdG9yYWdlKiBncm91cHMgPSB0aGlz
LT5ncm91cHMoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ3JvdXBIYXNoID0gaDEoaCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBlbnRyeUhhc2ggPSBoMihoKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGdyb3VwU2l6ZSA9IHRhYmxlU2l6ZSgpIC8gc2l6ZW9mKEdyb3VwU3RvcmFnZSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IGdyb3VwU2l6ZSAtIDE7CisgICAgICAgICAgICB1
bnNpZ25lZCBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkg
eworICAgICAgICAgICAgICAgIEdyb3VwIGdyb3VwKGdyb3VwcyArIGkpOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgcG9zaXRpb24gOiBncm91cC5tYXRjaChlbnRyeUhhc2gpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6
bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aXNFbXB0eUJ1Y2tldCgqZW50cnkpICYmICFpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChMSUtFTFkoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKExJS0VMWShncm91cC5tYXRjaEVtcHR5KCkpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgVmFsdWVUeXBlKiBl
bnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gd2UgY291bnQg
b24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAotICAgICAgICAgICAg
aWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIExvb2t1cFR5cGUoZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnks
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5z
bGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShlbnRyeSwgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAg
ICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDog
ZW50cnksIGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0
ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50
cnk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJh
Y3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TG9va3VwVHlwZShlbnRyeSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9CiAjaWYgRFVNUF9IQVNIVEFC
TEVfU1RBVFMKLSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hUYWJs
ZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAg
ICAgICsrcHJvYmVDb3VudDsKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKICNlbmRpZgogCiAjaWYgRFVNUF9IQVNIVEFC
TEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25B
dENvdW50KHByb2JlQ291bnQpOworICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxp
c2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKLQotICAgICAgICAgICAgaWYgKGsgPT0g
MCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0gICAgICAgICAgICBp
ID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAgICAgIGlmIChrID09IDApCisgICAg
ICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAg
ICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpID0gZ3JvdXBIYXNoICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAg
ICAgICAgICAgICAgIEdyb3VwIGdyb3VwKGdyb3VwcyArIGkpOworICAgICAgICAgICAgICAgIGlm
IChhdXRvIHBvc2l0aW9uID0gZ3JvdXAubWF0Y2hFbXB0eU9yRGVsZXRlZCgpLmxvd2VzdEJpdFNl
dCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZSh0YWJsZSArIGkgKiBH
cm91cDo6bnVtYmVyT2ZFbnRyaWVzICsgcG9zaXRpb24udmFsdWUoKSwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91Ymxl
SGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRv
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZvcldyaXRpbmcoY29uc3QgVCYga2V5KSAtPiBGdWxsTG9v
a3VwVHlwZQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGFibGUpOwotICAgICAgICBjaGVja0tl
eTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKLQotICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAg
ICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVkIHNpemVNYXNr
ID0gdGFibGVTaXplTWFzaygpOwotICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6
Omhhc2goa2V5KTsKICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKLQotI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwotICAgICAgICB1bnNpZ25lZCBwcm9iZUNvdW50ID0gMDsKLSNlbmRpZgotCi0jaWYgRFVNUF9I
QVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7
Ci0jZW5kaWYKLQogICAgICAgICBWYWx1ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7CiAKICAgICAg
ICAgd2hpbGUgKDEpIHsKQEAgLTgwOCwyMSArMTA5NywyMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgLy8gd2UgY291bnQg
b24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlzIGJyYW5jaAogICAgICAgICAgICAg
aWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1bHQoZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDog
ZW50cnksIGZhbHNlLCBoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUo
ZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZUxvb2t1cFJlc3VsdChlbnRyeSwgdHJ1ZSwgaCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCiAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZWRFbnRyeSA9IGVudHJ5OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZUxvb2t1cFJlc3VsdChkZWxldGVkRW50cnkgPyBkZWxldGVkRW50cnkgOiBlbnRyeSwgZmFs
c2UsIGgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShkZWxldGVkRW50
cnkgPyBkZWxldGVkRW50cnkgOiBlbnRyeSwgZmFsc2UpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgICAgICAg
ICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJh
bnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0KGVudHJ5LCB0cnVlLCBoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIExvb2t1cFR5cGUoZW50cnksIHRydWUpOwogICAgICAg
ICAgICAgfQogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICAgICArK3Byb2JlQ291
bnQ7CkBAIC04NDcsMTUgKzExMzYsOSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihr
ZXkpOwogCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLQotICAgICAgICBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwotCiAgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAg
ICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZU1h
c2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRv
cjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNz
ZXM7CkBAIC04NjcsMjkgKzExNTAsNTYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoSGFzaFRhYmxlKTsKICNlbmRpZgogCiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7
Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKKyAg
ICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAgICAgICAgdW5zaWduZWQg
Z3JvdXBTaXplID0gdGFibGVTaXplKCkgLyBzaXplb2YoR3JvdXBTdG9yYWdlKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHNpemVNYXNrID0gZ3JvdXBTaXplIC0gMTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGkgPSBncm91cEhhc2ggJiBzaXplTWFzazsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgICAgICAgICAgR3JvdXAgZ3JvdXAoZ3JvdXBzICsgaSk7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gcG9zaXRpb24gPSBncm91cC5tYXRjaEVtcHR5KCkubG93ZXN0Qml0U2V0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGkgKiBHcm91cDo6bnVtYmVyT2ZF
bnRyaWVzICsgcG9zaXRpb24udmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgICAg
ICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29y
ZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKIAotICAgICAgICAgICAgaWYg
KGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKKyAgICAgICAgICAgICAgICBtX3N0YXRzLT5yZWNv
cmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOworI2VuZGlmCisgICAgICAgICAgICAgICAg
aWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGdyb3Vw
SGFzaCk7CisgICAgICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbnRyb2xzTm9uTnVsbCgpW2VudHJ5IC0gdGFibGVdID0gaDIo
aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IHRh
YmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7Cisg
ICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBp
OworCisgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAg
ICAgKytwcm9iZUNvdW50OwotICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxp
c2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisgICAgICAgICAgICAgICAgKytwcm9iZUNvdW50Owor
ICAgICAgICAgICAgICAgIEhhc2hUYWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHBy
b2JlQ291bnQpOwogI2VuZGlmCiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUK
LSAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7
CisgICAgICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNv
dW50KTsKICNlbmRpZgogCi0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAg
IGsgPSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgayA9
IDEgfCBkb3VibGVIYXNoKGgpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6
dHJhbnNsYXRlKCplbnRyeSwgc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxFeHRy
YT4oZXh0cmEpKTsKLQotICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPGJvb2wgZW1wdHlWYWx1ZUlzWmVybz4gc3RydWN0IEhhc2hU
YWJsZUJ1Y2tldEluaXRpYWxpemVyOwpAQCAtOTM0LDkgKzEyNDQsNyBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgICAgIHVuc2lnbmVk
IGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgdW5z
aWduZWQgc2l6ZU1hc2sgPSB0YWJsZVNpemVNYXNrKCk7CiAgICAgICAgIHVuc2lnbmVkIGggPSBI
YXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVN
YXNrOwogCiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0
czo6bnVtQWNjZXNzZXM7CkBAIC05NDksNDAgKzEyNTcsODYgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIGRl
bGV0ZWRFbnRyeSA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnk7Ci0gICAgICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsgaTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gd2UgY291bnQgb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGlz
IGJyYW5jaAotICAgICAgICAgICAgaWYgKEhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5
KSkKKyAgICAgICAgaWYgKEdyb3VwU3RvcmFnZSogZ3JvdXBzID0gdGhpcy0+Z3JvdXBzKCkpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGdyb3VwSGFzaCA9IGgxKGgpOworICAgICAgICAgICAgdW5z
aWduZWQgZW50cnlIYXNoID0gaDIoaCk7CisgICAgICAgICAgICB1bnNpZ25lZCBncm91cFNpemUg
PSB0YWJsZVNpemUoKSAvIHNpemVvZihHcm91cFN0b3JhZ2UpOworICAgICAgICAgICAgdW5zaWdu
ZWQgc2l6ZU1hc2sgPSBncm91cFNpemUgLSAxOworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGdy
b3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAg
ICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBvc2l0aW9uIDogZ3JvdXAubWF0Y2goZW50cnlIYXNoKSkgeworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpICogR3JvdXA6Om51bWJlck9mRW50cmll
cyArIHBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRW1wdHlCdWNrZXQo
KmVudHJ5KSAmJiAhaXNEZWxldGVkQnVja2V0KCplbnRyeSkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoTElLRUxZKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3QoKmVu
dHJ5KSwga2V5KSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1h
a2VLbm93bkdvb2RJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKExJS0VMWShncm91cC5tYXRjaEVtcHR5KCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
SGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50cnkpLCBrZXkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VLbm93bkdvb2RJdGVyYXRv
cihlbnRyeSksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
aXNEZWxldGVkQnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRy
eSA9IGVudHJ5OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNF
bXB0eUJ1Y2tldCgqZW50cnkpKQorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAg
ICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJl
Y29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKworI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTX1BFUl9UQUJMRQorICAgICAgICAgICAgICAgIG1fc3RhdHMtPnJlY29yZENv
bGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAo
ayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goZ3JvdXBIYXNo
KTsKKyAgICAgICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaSA9IGdyb3VwSGFzaCAmIHNpemVNYXNrOworICAgICAgICAgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgICAgICAgICBHcm91cCBncm91cChncm91cHMgKyBpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byBwb3NpdGlvbiA9IGdyb3VwLm1hdGNoRW1wdHlPckRlbGV0ZWQo
KS5sb3dlc3RCaXRTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHRhYmxlICsg
aSAqIEdyb3VwOjpudW1iZXJPZkVudHJpZXMgKyBwb3NpdGlvbi52YWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRy
eSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtl
S25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChrID09IDApCisgICAgICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91
YmxlSGFzaChncm91cEhhc2gpOworICAgICAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1h
c2s7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IHRhYmxlU2l6ZU1hc2soKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBo
ICYgc2l6ZU1hc2s7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGVu
dHJ5ID0gdGFibGUgKyBpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHdl
IGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKKyAgICAg
ICAgICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJh
Y3QoKmVudHJ5KSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1
bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVu
dHJ5KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEV4dHJhY3Rvcjo6ZXh0cmFjdCgqZW50
cnkpLCBrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtl
S25vd25Hb29kSXRlcmF0b3IoZW50cnkpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAg
ICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsK
KyAgICAgICAgICAgICAgICArK3Byb2JlQ291bnQ7CisgICAgICAgICAgICAgICAgSGFzaFRhYmxl
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7CiAjZW5kaWYKIAogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAgICAgbV9zdGF0cy0+cmVj
b3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRz
LT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwogI2VuZGlmCiAKLSAgICAgICAg
ICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwot
ICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgICAgICBpZiAo
ayA9PSAwKQorICAgICAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7CisgICAg
ICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChkZWxldGVkRW50cnkpIHsKQEAgLTk5Miw2ICsxMzQ2LDggQEAg
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZv
cndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSkpOworICAgICAgICBpZiAo
YXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNb
ZW50cnkgLSB0YWJsZV0gPSBoMihoKTsKICAgICAgICAgc2V0S2V5Q291bnQoa2V5Q291bnQoKSAr
IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTAxNSwxMSAr
MTM3MSwxMSBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFi
bGUpOwogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAKLSAgICAg
ICAgRnVsbExvb2t1cFR5cGUgbG9va3VwUmVzdWx0ID0gZnVsbExvb2t1cEZvcldyaXRpbmc8SGFz
aFRyYW5zbGF0b3I+KGtleSk7CisgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpOworICAgICAgICBMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGxvb2t1cEZvcldy
aXRpbmc8SGFzaFRyYW5zbGF0b3I+KGtleSwgaCk7CiAKLSAgICAgICAgVmFsdWVUeXBlKiBlbnRy
eSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGxvb2t1
cFJlc3VsdC5maXJzdC5zZWNvbmQ7Ci0gICAgICAgIHVuc2lnbmVkIGggPSBsb29rdXBSZXN1bHQu
c2Vjb25kOworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0Owor
ICAgICAgICBib29sIGZvdW5kID0gbG9va3VwUmVzdWx0LnNlY29uZDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29v
ZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwpAQCAtMTAzMCw2ICsxMzg2LDggQEAgREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAgICAgICAgfQogCiAg
ICAgICAgIEhhc2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBzdGQ6OmZvcndhcmQ8VD4o
a2V5KSwgc3RkOjpmb3J3YXJkPEV4dHJhPihleHRyYSksIGgpOworICAgICAgICBpZiAoYXV0byog
Y29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbZW50cnkg
LSBtX3RhYmxlXSA9IGgyKGgpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpICsgMSk7
CiAKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKQpAQCAtMTA1Myw5ICsxNDExLDEzIEBAIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAg
ICsrbV9zdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKLSAgICAgICAgVmFsdWUqIG5ld0Vu
dHJ5ID0gbG9va3VwRm9yV3JpdGluZyhFeHRyYWN0b3I6OmV4dHJhY3QoZW50cnkpKS5maXJzdDsK
KyAgICAgICAgY29uc3QgYXV0byYga2V5ID0gRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KTsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aXR5VHJhbnNsYXRvclR5cGU6Omhhc2goa2V5KTsK
KyAgICAgICAgVmFsdWVUeXBlKiBuZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmc8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oa2V5LCBoYXNoKS5maXJzdDsKICAgICAgICAgbmV3RW50cnktPn5WYWx1
ZSgpOwogICAgICAgICBuZXcgKE5vdE51bGwsIG5ld0VudHJ5KSBWYWx1ZVR5cGUoV1RGTW92ZShl
bnRyeSkpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQor
ICAgICAgICAgICAgY29udHJvbHNbbmV3RW50cnkgLSBtX3RhYmxlXSA9IGgyKGhhc2gpOwogCiAg
ICAgICAgIHJldHVybiBuZXdFbnRyeTsKICAgICB9CkBAIC0xMTI0LDYgKzE0ODYsOCBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAK
ICAgICAgICAgZGVsZXRlQnVja2V0KCpwb3MpOworICAgICAgICBpZiAoYXV0byogY29udHJvbHMg
PSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgY29udHJvbHNbcG9zIC0gbV90YWJsZV0g
PSBDb250cm9sVmFsdWU6OkRlbGV0ZWQ7CiAgICAgICAgIHNldERlbGV0ZWRDb3VudChkZWxldGVk
Q291bnQoKSArIDEpOwogICAgICAgICBzZXRLZXlDb3VudChrZXlDb3VudCgpIC0gMSk7CiAKQEAg
LTExODUsNiArMTU0OSw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEhhc2hUYWJsZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlbGV0ZUJ1Y2tldChidWNrZXQpOworICAgICAgICAgICAgaWYgKGF1dG8qIGNv
bnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKSkKKyAgICAgICAgICAgICAgICBjb250cm9sc1tpXSA9
IENvbnRyb2xWYWx1ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICsrcmVtb3ZlZEJ1Y2tldENvdW50
OwogICAgICAgICB9CiAgICAgICAgIGlmIChyZW1vdmVkQnVja2V0Q291bnQpIHsKQEAgLTEyMDQs
MjYgKzE1NzAsNDUgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFz
aFRhYmxlKTsKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShtZXRhZGF0YVNpemUgJSBh
bGlnbm9mKFZhbHVlVHlwZSkpKTsKIAorICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSAw
OworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKHNpemUgPD0gbWF4U21h
bGxUYWJsZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IG1ldGFkYXRh
U2l6ZSArIHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKTsKKyAgICAgICAgICAgIG9mZnNldCA9IG1l
dGFkYXRhU2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsbG9jYXRpb25TaXpl
ID0gbWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpICsgc2l6ZTsKKyAgICAg
ICAgICAgIG9mZnNldCA9IG1ldGFkYXRhU2l6ZSArIHNpemU7CisgICAgICAgIH0KKworICAgICAg
ICBWYWx1ZVR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisKICAgICAgICAgLy8gd291bGQgdXNlIGEg
dGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhl
cmUsIGJ1dAogICAgICAgICAvLyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CiAg
ICAgICAgIGlmIChUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8pCi0gICAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxl
TWFsbG9jOjp6ZXJvZWRNYWxsb2MobWV0YWRhdGFTaXplICsgc2l6ZSAqIHNpemVvZihWYWx1ZVR5
cGUpKSkgKyBtZXRhZGF0YVNpemUpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjp6ZXJv
ZWRNYWxsb2MoYWxsb2NhdGlvblNpemUpKSArIG9mZnNldCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihzdGF0aWNfY2Fz
dDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2MoYWxsb2NhdGlvblNpemUpKSArIG9mZnNl
dCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVCdWNrZXQocmVzdWx0W2ldKTsKKyAgICAgICAgfQogCi0g
ICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUqPihz
dGF0aWNfY2FzdDxjaGFyKj4oSGFzaFRhYmxlTWFsbG9jOjptYWxsb2MobWV0YWRhdGFTaXplICsg
c2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSkgKyBtZXRhZGF0YVNpemUpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1
Y2tldChyZXN1bHRbaV0pOworICAgICAgICBpZiAoc2l6ZSA+IG1heFNtYWxsVGFibGVDYXBhY2l0
eSkKKyAgICAgICAgICAgIG1lbXNldChiaXR3aXNlX2Nhc3Q8Q29udHJvbCo+KHJlc3VsdCkgLSBv
ZmZzZXQsIENvbnRyb2xWYWx1ZTo6RW1wdHksIHNpemUpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmRlYWxsb2NhdGVUYWJs
ZShWYWx1ZVR5cGUqIHRhYmxlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPih0YWJsZSlbdGFibGVTaXplT2Zmc2V0XTsKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSA9IGJpdHdpc2VfY2FzdDx1bnNpZ25lZCo+KHRhYmxlKVt0YWJsZVNpemVP
ZmZzZXRdOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAg
ICAgICAgICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCiAgICAgICAgICAgICAg
ICAgdGFibGVbaV0uflZhbHVlVHlwZSgpOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hUYWJsZU1h
bGxvYzo6ZnJlZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0YWJsZSkgLSBtZXRhZGF0YVNpemUp
OworICAgICAgICBpZiAoc2l6ZSA8PSBtYXhTbWFsbFRhYmxlQ2FwYWNpdHkpCisgICAgICAgICAg
ICBIYXNoVGFibGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGFibGUpIC0g
bWV0YWRhdGFTaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSGFzaFRhYmxlTWFsbG9j
OjpmcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRhYmxlKSAtIG1ldGFkYXRhU2l6ZSAtIHNp
emUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xMjY2LDE1ICsxNjUxLDE0IEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICBy
ZXR1cm4ga2V5Q291bnQgPj0gdGFibGVTaXplICogaGFsZldheUJldHdlZW5BdmVyYWdlQW5kTWF4
TG9hZFJhdGlvOwogICAgICAgICB9OwogCi0gICAgICAgIGlmIChiZXN0VGFibGVTaXplIDw9IG1h
eFNtYWxsVGFibGVDYXBhY2l0eSkgewotICAgICAgICAgICAgY29uc3RleHByIGRvdWJsZSBzbWFs
bExvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHNtYWxsTWF4TG9hZE51bWVyYXRvcikg
LyBzbWFsbE1heExvYWREZW5vbWluYXRvcjsKLSAgICAgICAgICAgIGlmIChhYm92ZVRocmVzaG9s
ZEZvckVhZ2VyRXhwYW5zaW9uKHNtYWxsTG9hZEZhY3Rvciwga2V5Q291bnQsIGJlc3RUYWJsZVNp
emUpKQotICAgICAgICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBkb3VibGUgbGFyZ2VMb2FkRmFjdG9yID0gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihsYXJnZU1heExvYWROdW1lcmF0b3IpIC8gbGFyZ2VNYXhMb2FkRGVub21p
bmF0b3I7Ci0gICAgICAgICAgICBpZiAoYWJvdmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihs
YXJnZUxvYWRGYWN0b3IsIGtleUNvdW50LCBiZXN0VGFibGVTaXplKSkKLSAgICAgICAgICAgICAg
ICBiZXN0VGFibGVTaXplICo9IDI7Ci0gICAgICAgIH0KKyAgICAgICAgZG91YmxlIGxvYWRGYWN0
b3IgPSAwLjA7CisgICAgICAgIGlmIChiZXN0VGFibGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBh
Y2l0eSkKKyAgICAgICAgICAgIGxvYWRGYWN0b3IgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHNtYWxs
TWF4TG9hZE51bWVyYXRvcikgLyBzbWFsbE1heExvYWREZW5vbWluYXRvcjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbG9hZEZhY3RvciA9IHN0YXRpY19jYXN0PGRvdWJsZT4obGFyZ2VNYXhM
b2FkTnVtZXJhdG9yKSAvIGxhcmdlTWF4TG9hZERlbm9taW5hdG9yOworICAgICAgICBpZiAoYWJv
dmVUaHJlc2hvbGRGb3JFYWdlckV4cGFuc2lvbihsb2FkRmFjdG9yLCBrZXlDb3VudCwgYmVzdFRh
YmxlU2l6ZSkpCisgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisKICAgICAgICAgdW5z
aWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOwog
ICAgIH0KQEAgLTEyOTQsNiArMTY3OCw4IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICBhdXRvJiBlbnRyeSA9IG1fdGFibGVb
aV07CiAgICAgICAgICAgICBpZiAoaXNSZWxlYXNlZFdlYWtCdWNrZXQoZW50cnkpKSB7CiAgICAg
ICAgICAgICAgICAgZGVsZXRlQnVja2V0KGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byogY29udHJvbHMgPSB0aGlzLT5jb250cm9scygpKQorICAgICAgICAgICAgICAgICAgICBjb250
cm9sc1tpXSA9IENvbnRyb2xWYWx1ZTo6RGVsZXRlZDsKICAgICAgICAgICAgICAgICBzZXREZWxl
dGVkQ291bnQoZGVsZXRlZENvdW50KCkgKyAxKTsKICAgICAgICAgICAgICAgICBzZXRLZXlDb3Vu
dChrZXlDb3VudCgpIC0gMSk7CiAgICAgICAgICAgICB9CkBAIC0xMzA2LDcgKzE2OTIsNiBAQCBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAg
ICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAogICAgICAgICB1
bnNpZ25lZCBvbGRUYWJsZVNpemUgPSB0YWJsZVNpemUoKTsKLSAgICAgICAgVmFsdWVUeXBlKiBv
bGRUYWJsZSA9IG1fdGFibGU7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICBp
ZiAob2xkVGFibGVTaXplICE9IDApCkBAIC0xMzE4LDYgKzE3MDMsNyBAQCBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogICAgICAgICAgICAgKyttX3N0
YXRzLT5udW1SZWhhc2hlczsKICNlbmRpZgogCisgICAgICAgIFZhbHVlVHlwZSogb2xkVGFibGUg
PSBtX3RhYmxlOwogICAgICAgICB1bnNpZ25lZCBvbGRLZXlDb3VudCA9IGtleUNvdW50KCk7CiAg
ICAgICAgIG1fdGFibGUgPSBhbGxvY2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CiAgICAgICAgIHNl
dFRhYmxlU2l6ZShuZXdUYWJsZVNpemUpOwpAQCAtMTM1NCw4ICsxNzQwLDEyIEBAIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2xkVGFibGUpCi0gICAgICAgICAgICBIYXNoVGFi
bGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRh
dGFTaXplKTsKKyAgICAgICAgaWYgKG9sZFRhYmxlKSB7CisgICAgICAgICAgICBpZiAob2xkVGFi
bGVTaXplIDw9IG1heFNtYWxsVGFibGVDYXBhY2l0eSkKKyAgICAgICAgICAgICAgICBIYXNoVGFi
bGVNYWxsb2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRh
dGFTaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBIYXNoVGFibGVNYWxs
b2M6OmZyZWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2xkVGFibGUpIC0gbWV0YWRhdGFTaXpl
IC0gb2xkVGFibGVTaXplKTsKKyAgICAgICAgfQogCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJs
ZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJldHVybiBuZXdFbnRyeTsKQEAgLTEzOTQsOCArMTc4
NCwxMiBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUp
OwogICAgICAgICBzZXRLZXlDb3VudChvdGhlcktleUNvdW50KTsKICAgICAgICAgc2V0RGVsZXRl
ZENvdW50KDApOwogCisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKwogICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIG90aGVyVmFsdWUgOiBvdGhlcikKICAgICAgICAgICAgIGFkZFVuaXF1
ZUZvckluaXRpYWxpemF0aW9uPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0
cmFjdChvdGhlclZhbHVlKSwgb3RoZXJWYWx1ZSk7CisKKyAgICAgICAgaW50ZXJuYWxDaGVja1Rh
YmxlQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpAQCAtMTQ1MSw3ICsxODQ1LDYg
QEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSGFzaFRhYmxlKTsKICAg
ICB7CiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKICAgICAgICAg
QVNTRVJUKCFtX3RhYmxlIHx8ICFzaG91bGRFeHBhbmQoKSk7Ci0gICAgICAgIEFTU0VSVCghc2hv
dWxkU2hyaW5rKCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkBAIC0xNDYzLDE2ICsxODU2LDI0IEBA
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAgICAg
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50ID0g
MDsKICAgICAgICAgdW5zaWduZWQgdGFibGVTaXplID0gdGhpcy0+dGFibGVTaXplKCk7CisgICAg
ICAgIENvbnRyb2wqIGNvbnRyb2xzID0gdGhpcy0+Y29udHJvbHMoKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHRhYmxlU2l6ZTsgKytqKSB7CiAgICAgICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7Ci0gICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgq
ZW50cnkpKQorICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb250cm9scykKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRy
b2xzW2pdID09IENvbnRyb2xWYWx1ZTo6RW1wdHkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRy
eSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJvbHMpCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChjb250cm9sc1tqXSA9PSBDb250cm9sVmFsdWU6OkRlbGV0ZWQpOwogICAgICAgICAg
ICAgICAgICsrZGVsZXRlZENvdW50OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udHJvbHMpCisgICAgICAgICAgICAgICAgQVNT
RVJUKGNvbnRyb2xzW2pdICE9IENvbnRyb2xWYWx1ZTo6RW1wdHkgJiYgY29udHJvbHNbal0gIT0g
Q29udHJvbFZhbHVlOjpEZWxldGVkKTsKICAgICAgICAgICAgIGF1dG8mIGtleSA9IEV4dHJhY3Rv
cjo6ZXh0cmFjdCgqZW50cnkpOwogICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5k
KGtleSk7CiAgICAgICAgICAgICBBU1NFUlQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1DUFUuaAppbmRleCBiY2UyM2UwMzQ2ZDU0M2RlZDY5ZGMyYTVjODVmMGU4YjQyOGRiZTJi
Li5lOWZkOGYyYjAzYzlkZGNlNzZmMGM3NWUzYzA0OWVlNmUwYWIzMTY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNQVS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
Q1BVLmgKQEAgLTEwOSw2ICsxMDksOSBAQAogICAgIHx8IGRlZmluZWQoX01fWDY0KQogI2RlZmlu
ZSBXVEZfQ1BVX1g4Nl82NCAxCiAjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTIgMQorI2lmIGRlZmlu
ZWQoX19TU0UzX18pCisjZGVmaW5lIFdURl9DUFVfWDg2X1NTRTMgMQorI2VuZGlmCiAjZGVmaW5l
IFdURl9DUFVfS05PV04gMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Zh
bHVlQ2hlY2suaCBiL1NvdXJjZS9XVEYvd3RmL1ZhbHVlQ2hlY2suaAppbmRleCAyNmVhYTUzOGVi
ZGVjM2QyMzJlZmJjYjJiYzZkMWU2YmYyZTk3YTVjLi45ZWY3MDNmZjhiMGRlZTk1ZTBmYzgyZTY2
YWI5ZDJjOWZhZTA3YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmgK
KysrIGIvU291cmNlL1dURi93dGYvVmFsdWVDaGVjay5oCkBAIC00NSw2ICs0NSwyNSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgVmFsdWVDaGVjazxQKj4gewogICAgICAgICBWYWx1ZUNo
ZWNrPFA+OjpjaGVja0NvbnNpc3RlbmN5KCpwKTsKICAgICB9CiB9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgVmFsdWVDaGVjazx2b2lkKj4geworICAgIHR5cGVkZWYgdm9pZCogVHJhaXRUeXBlOworICAg
IHN0YXRpYyB2b2lkIGNoZWNrQ29uc2lzdGVuY3koY29uc3Qgdm9pZCogcCkKKyAgICB7CisgICAg
ICAgIGlmICghcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGZhc3RNYWxs
b2NTaXplKHApKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZUNoZWNrPGNv
bnN0IHZvaWQqPiB7CisgICAgdHlwZWRlZiB2b2lkKiBUcmFpdFR5cGU7CisgICAgc3RhdGljIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgaWYgKCFw
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoZmFzdE1hbGxvY1NpemUocCkp
OworICAgIH0KK307CiAjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCA5
Nzc2M2UwZjRkZmJmOWVhM2FjZWQzMTQzNjlkYzFkZWMyNjRmYmNkLi4wZjBjMmJiY2Q3Zjg2MmY5
MzkxNGI4OGEyNmMyYTBiY2FjMTBiODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0
b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtODI5LDcgKzgyOSw3IEBAIGNs
YXNzIFZlY3RvciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5LCBNYWxs
b2M+IHsKIAogICAgIHZvaWQgcmV2ZXJzZSgpOwogCi0gICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNYXBGdW5jdGlvbiwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29m
PE1hcEZ1bmN0aW9uKGNvbnN0IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVuY3Rpb24p
IGNvbnN0OwogCkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBpbmxpbmUgTWFsbG9jUHRyPFQsIE1hbGxv
Yz4gVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5LCB0eXBlbmFtZSBNYWxsb2M+Ci1p
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHksIE1hbGxvYz46OmNoZWNrQ29uc2lzdGVuY3koKQoraW5saW5lIHZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5LCBNYWxsb2M+
OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCg==
</data>
<flag name="review"
          id="406336"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>