<?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>174750</bug_id>
          
          <creation_ts>2017-07-21 22:46:25 -0700</creation_ts>
          <short_desc>B3 should do LICM</short_desc>
          <delta_ts>2017-07-25 18:59:00 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174762</blocked>
    
    <blocked>174763</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331302</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-21 22:46:25 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331303</commentid>
    <comment_count>1</comment_count>
      <attachid>316175</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-21 22:47:33 -0700</bug_when>
    <thetext>Created attachment 316175
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331350</commentid>
    <comment_count>2</comment_count>
      <attachid>316194</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-22 08:26:09 -0700</bug_when>
    <thetext>Created attachment 316194
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331351</commentid>
    <comment_count>3</comment_count>
      <attachid>316195</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-22 09:00:24 -0700</bug_when>
    <thetext>Created attachment 316195
more

The LICM itself is written, now I need to write the pre-header creator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331354</commentid>
    <comment_count>4</comment_count>
      <attachid>316196</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-22 09:56:21 -0700</bug_when>
    <thetext>Created attachment 316196
wrote the pre-header creation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331355</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-22 10:03:02 -0700</bug_when>
    <thetext>Actually, as awesome as this is, I don&apos;t think this is the way we want to handle optimizing caging.  If a butterfly is used both caged and uncaged, we want to do the caging once and drop the uncaged value just to relieve register pressure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331419</commentid>
    <comment_count>6</comment_count>
      <attachid>316223</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-22 21:11:44 -0700</bug_when>
    <thetext>Created attachment 316223
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331437</commentid>
    <comment_count>7</comment_count>
      <attachid>316229</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-23 11:26:19 -0700</bug_when>
    <thetext>Created attachment 316229
better version

I realized that InnerMostLoopIndices should be managed by a typename Graph::template Map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331441</commentid>
    <comment_count>8</comment_count>
      <attachid>316230</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-23 13:00:41 -0700</bug_when>
    <thetext>Created attachment 316230
added comprehensive tests and made them pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331444</commentid>
    <comment_count>9</comment_count>
      <attachid>316231</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-23 13:10:19 -0700</bug_when>
    <thetext>Created attachment 316231
added changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331449</commentid>
    <comment_count>10</comment_count>
      <attachid>316232</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-23 13:18:31 -0700</bug_when>
    <thetext>Created attachment 316232
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331477</commentid>
    <comment_count>11</comment_count>
      <attachid>316241</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-23 15:38:47 -0700</bug_when>
    <thetext>Created attachment 316241
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331902</commentid>
    <comment_count>12</comment_count>
      <attachid>316241</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-07-25 00:34:37 -0700</bug_when>
    <thetext>Comment on attachment 316241
the patch

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

r=me with some nits.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Added a LICM phase to B3. This phase is called hoistLoopInvariantValues, to conform to the B3 naming

I dunno HLIV doesn&apos;t roll off the tongue the same way LICM does...

&gt; Source/JavaScriptCore/b3/B3BasicBlock.cpp:60
&gt; -    m_values[m_values.size() - 1] = value;
&gt; +    m_values[m_values.size() - 2] = value;

legit...

&gt; Source/JavaScriptCore/b3/B3CFG.h:62
&gt; +    

revert please.

&gt; Source/JavaScriptCore/b3/B3EnsureLoopPreHeaders.cpp:71
&gt; +        loop.header()-&gt;addPredecessor(preHeader);

Nit: It would probably be a little clearer if you moved this line to where you set the successor of the preHeader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332010</commentid>
    <comment_count>13</comment_count>
      <attachid>316241</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-07-25 11:13:45 -0700</bug_when>
    <thetext>Comment on attachment 316241
the patch

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

&gt; Source/WTF/wtf/NaturalLoops.h:279
&gt; +            return 0;

Nit: nullptr

&gt; Source/WTF/wtf/NaturalLoops.h:293
&gt; +            return 0;

ditto

&gt; Source/WTF/wtf/NaturalLoops.h:300
&gt; +            return 0;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332038</commentid>
    <comment_count>14</comment_count>
      <attachid>316241</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-07-25 12:15:51 -0700</bug_when>
    <thetext>Comment on attachment 316241
the patch

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

LGTM too

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        This isn&apos;t super important. It&apos;s perf-neutral on JS benchmarks. FTL already does LICM on DFG SSA IR, and
&gt; +        probably all current WebAssembly content has had LICM done to it. That being said, this is a cheap phase
&gt; +        so it doesn&apos;t hurt to have it.

It&apos;d be interesting to compile some Wasm using -O0 and see if this is a speedup. I&apos;d bet it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332039</commentid>
    <comment_count>15</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-07-25 12:17:54 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; Comment on attachment 316241 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316241&amp;action=review
&gt; 
&gt; LGTM too
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:20
&gt; &gt; +        This isn&apos;t super important. It&apos;s perf-neutral on JS benchmarks. FTL already does LICM on DFG SSA IR, and
&gt; &gt; +        probably all current WebAssembly content has had LICM done to it. That being said, this is a cheap phase
&gt; &gt; +        so it doesn&apos;t hurt to have it.
&gt; 
&gt; It&apos;d be interesting to compile some Wasm using -O0 and see if this is a
&gt; speedup. I&apos;d bet it is.

I&apos;m not sure it would be since we don&apos;t have abstract heaps yet in wasm. That was on my todo but I never got around to it. But we should totally do this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332044</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 12:37:15 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #15)
&gt; (In reply to Saam Barati from comment #14)
&gt; &gt; Comment on attachment 316241 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316241&amp;action=review
&gt; &gt; 
&gt; &gt; LGTM too
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:20
&gt; &gt; &gt; +        This isn&apos;t super important. It&apos;s perf-neutral on JS benchmarks. FTL already does LICM on DFG SSA IR, and
&gt; &gt; &gt; +        probably all current WebAssembly content has had LICM done to it. That being said, this is a cheap phase
&gt; &gt; &gt; +        so it doesn&apos;t hurt to have it.
&gt; &gt; 
&gt; &gt; It&apos;d be interesting to compile some Wasm using -O0 and see if this is a
&gt; &gt; speedup. I&apos;d bet it is.
&gt; 
&gt; I&apos;m not sure it would be since we don&apos;t have abstract heaps yet in wasm.
&gt; That was on my todo but I never got around to it. But we should totally do
&gt; this...

It&apos;ll be a speed-up if we hoist division or multiplication.  Also, for float code, if you can hoist basically anything then you get faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332046</commentid>
    <comment_count>17</comment_count>
      <attachid>316241</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 12:39:53 -0700</bug_when>
    <thetext>Comment on attachment 316241
the patch

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

&gt;&gt; Source/JavaScriptCore/b3/B3EnsureLoopPreHeaders.cpp:71
&gt;&gt; +        loop.header()-&gt;addPredecessor(preHeader);
&gt; 
&gt; Nit: It would probably be a little clearer if you moved this line to where you set the successor of the preHeader.

Good point.  Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332211</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:24:24 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #13)
&gt; Comment on attachment 316241 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316241&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/NaturalLoops.h:279
&gt; &gt; +            return 0;
&gt; 
&gt; Nit: nullptr
&gt; 
&gt; &gt; Source/WTF/wtf/NaturalLoops.h:293
&gt; &gt; +            return 0;
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/WTF/wtf/NaturalLoops.h:300
&gt; &gt; +            return 0;
&gt; 
&gt; ditto

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332212</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:25:27 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #12)
&gt; Comment on attachment 316241 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316241&amp;action=review
&gt; 
&gt; r=me with some nits.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        Added a LICM phase to B3. This phase is called hoistLoopInvariantValues, to conform to the B3 naming
&gt; 
&gt; I dunno HLIV doesn&apos;t roll off the tongue the same way LICM does...
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlock.cpp:60
&gt; &gt; -    m_values[m_values.size() - 1] = value;
&gt; &gt; +    m_values[m_values.size() - 2] = value;
&gt; 
&gt; legit...
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CFG.h:62
&gt; &gt; +    
&gt; 
&gt; revert please.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3EnsureLoopPreHeaders.cpp:71
&gt; &gt; +        loop.header()-&gt;addPredecessor(preHeader);
&gt; 
&gt; Nit: It would probably be a little clearer if you moved this line to where
&gt; you set the successor of the preHeader.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332213</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:26:48 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #19)
&gt; (In reply to Keith Miller from comment #12)
&gt; &gt; Comment on attachment 316241 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=316241&amp;action=review
&gt; &gt; 
&gt; &gt; r=me with some nits.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; &gt; +        Added a LICM phase to B3. This phase is called hoistLoopInvariantValues, to conform to the B3 naming
&gt; &gt; 
&gt; &gt; I dunno HLIV doesn&apos;t roll off the tongue the same way LICM does...
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3BasicBlock.cpp:60
&gt; &gt; &gt; -    m_values[m_values.size() - 1] = value;
&gt; &gt; &gt; +    m_values[m_values.size() - 2] = value;
&gt; &gt; 
&gt; &gt; legit...
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3CFG.h:62
&gt; &gt; &gt; +    
&gt; &gt; 
&gt; &gt; revert please.
&gt; 
&gt; Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3EnsureLoopPreHeaders.cpp:71
&gt; &gt; &gt; +        loop.header()-&gt;addPredecessor(preHeader);
&gt; &gt; 
&gt; &gt; Nit: It would probably be a little clearer if you moved this line to where
&gt; &gt; you set the successor of the preHeader.
&gt; 
&gt; Fixed.

Actually no!  My original ordering means that we first remove predecessors and then add.  Your reordering, while clearer, would mean adding and then removing.  It&apos;s a bit more efficient to remove then add, so I&apos;ll keep the current ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1332219</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-25 18:59:00 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/219898/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316175</attachid>
            <date>2017-07-21 22:47:33 -0700</date>
            <delta_ts>2017-07-22 08:26:09 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29693</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2Myw4IEBACiAJCTBGNUE2Mjg0MTg4Qzk4
RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVS
YW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNUFFMkM0MURGNEYyODAwMDY2RUZFMSAvKiBWTUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjVCNEEzMzFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCNEEzMjFD
ODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1QkYxNjMxRjIzMTcxMjAwMjlEOTFE
IC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi87IH07CisJCTBGNUJGMTY0MUYyMzE3MTIwMDI5
RDkxRCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi87IH07CiAJCTBGNUNGOTgxMUU5NkYxN0YwMEMx
ODY5MiAvKiBBaXJUbXBNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLzsgfTsK
IAkJMEY1Q0Y5ODQxRTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MzFFOUQ1Mzc1
MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLzsgfTsKIAkJMEY1Q0Y5ODUxRTlENTM3
QTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJM
b3dlclN0YWNrQXJncy5jcHAgKi87IH07CkBAIC0zMDI4LDYgKzMwMzAsOCBAQAogCQkwRjVBNjI4
MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1
ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThE
NDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQ
YXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0
aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjExRjIz
MTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmg7IHBhdGggPSBiMy9C
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcE1hcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcE1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIg
LyogQWlyTG93ZXJTdGFja0FyZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODMxRTlENTM3NTAw
QzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpckxvd2VyU3RhY2tBcmdzLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFja0Fy
Z3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2MjEsNiArNTYyNSw4IEBACiAJ
CQkJMEYyQzYzQUQxRTYwQUUzQzAwQzEzODM5IC8qIEIzV2lkdGguY3BwICovLAogCQkJCTBGMkM2
M0FFMUU2MEFFM0QwMEMxMzgzOSAvKiBCM1dpZHRoLmggKi8sCiAJCQkJMEZFQzg1QUUxQkRCNUQ1
RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8sCisJCQkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFE
IC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLywKKwkJCQkwRjVCRjE2MjFGMjMx
NzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gYjM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtOTE2Myw2ICs5MTY5
LDcgQEAKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8q
IE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY0MUYyMzE3
MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZBREQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMkFCMjQ0MURDRDc1RjQwMEQ3NTMz
QSAvKiBNYWNyb0Fzc2VtYmxlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjMsNiAr
MTA3MzAsNyBAQAogCQkJCUFEMkZDQkU4MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkVBMURCNThEQUQwMEIz
RTczNiAvKiBKU1dlYkFzc2VtYmx5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2
NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFw
cGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8q
IEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NiArMTYyLDggQEAgcHVibGljOgogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgVmFsdWUqIGFwcGVuZE5ld0NvbnRyb2xWYWx1ZShQcm9jZWR1cmUmLCBP
cGNvZGUsIE9yaWdpbiwgVmFsdWUqLCBjb25zdCBGcmVxdWVudGVkQmxvY2smLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smKTsKICAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyYgaW5uZXJNb3N0
TG9vcEluZGljZXMoKSB7IHJldHVybiBtX2lubmVyTW9zdExvb3BJbmRpY2VzOyB9CisgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQg
Y2xhc3MgSW5zZXJ0aW9uU2V0OwpAQCAtMTc2LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgUHJl
ZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNz
b3JzOwogICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBt
X2lubmVyTW9zdExvb3BJbmRpY2VzOwogfTsKIAogY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTks
OCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVy
biBub2RlLT5pbmRleCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3Byb2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7
IHJldHVybiBtX3Byb2Muc2l6ZSgpOyB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMm
IGlubmVyTW9zdExvb3BJbmRpY2VzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+aW5uZXJNb3N0
TG9vcEluZGljZXMoKTsgfQogCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2Rl
IG5vZGUpIGNvbnN0IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMu
aCIKICNpbmNsdWRlICJCM0ZpeFNTQS5oIgogI2luY2x1ZGUgIkIzRm9sZFBhdGhDb25zdGFudHMu
aCIKKyNpbmNsdWRlICJCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIgogI2luY2x1ZGUgIkIz
SW5mZXJTd2l0Y2hlcy5oIgogI2luY2x1ZGUgIkIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmgiCiAj
aW5jbHVkZSAiQjNMb3dlck1hY3Jvcy5oIgpAQCAtODMsNiArODQsNyBAQCB2b2lkIGdlbmVyYXRl
VG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCiAgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgp
ID49IDIpIHsKICAgICAgICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAg
ICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICBob2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMocHJvY2VkdXJlKTsKICAgICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMo
cHJvY2VkdXJlKTsKICAgICAgICAgaW5mZXJTd2l0Y2hlcyhwcm9jZWR1cmUpOwogICAgICAgICBk
dXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3Bl
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgaG9pc3RM
b29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUocHJvYywgImhvaXN0TG9vcEludmFyaWFudFZhbHVlcyIpOworICAgIAorICAgIEZJ
WE1FOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFy
aWFudFZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgbG9v
cC1pbnZhcmlhbnQgY29kZSBtb3Rpb24uCisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVz
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw4ICsyMjksOCBAQCBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7
CiAgICAgCiAgICAgLy8gVGhlc2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3Bz
LgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2Vz
ID0gMjsKLSAgICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9z
dExvb3BJbmRpY2VzXTsKKyAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBpbm5lck1vc3RM
b29wSW5kaWNlczsKIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHJldmlzaW9u
IDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KE5vZGUg
bm9kZSkgY29uc3QgeyByZXR1cm4gbm9kZS0+aW5kZXg7IH0KICAgICBOb2RlIG5vZGUodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soaW5kZXgpOyB9CiAgICAgdW5z
aWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoLm51bUJsb2NrcygpOyB9Cisg
ICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMmIGlubmVyTW9kZUxvb3BJbmRpY2VzKE5vZGUg
bm9kZSkgY29uc3QgeyByZXR1cm4gbm9kZS0+aW5uZXJNb3N0TG9vcEluZGljZXM7IH0KIAogICAg
IFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBw
b2ludGVyRHVtcChub2RlKTsgfQogCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsNyBAQAogCQkw
RjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVy
YWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3Ry
ZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50
U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQx
QjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM0Miw4ICszNDMsOCBAQAogCQk5QkM3MEYwNDE3NkMzNzlEMDAxMDFE
RUMgLyogQXRvbWljU3RyaW5nVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQXRvbWljU3RyaW5nVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QkQ4RjQwQTE3NkMyQUQ4MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXRvbWljU3RyaW5nVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkQ29udGFpbmVySXRl
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTMwRDQxMkMxRjBERTBCQTAw
QjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFNvZnRMaW5raW5nLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNvZnRM
aW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMEQ0MTJDMUYwREUwQkEw
MEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzBENDEyRDFG
MERFMTNGMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUw
OThBRkYxQzE2OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2FuZGJveFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTA5OEIwMTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJpdHlTUEkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTU2MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXByZWNhdGVkT3B0aW9uYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1Niw2ICs4NTcsNyBAQAogCQkJCTBGNjZC
MjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLywKIAkJCQkwRjY2QjI4
MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICovLAogCQkJCUZFODIyNTMwMUIy
QTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAorCQkJCTBGNUJGMTY1MUYyMzE3ODMwMDI5
RDkxRCAvKiBOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcg
LyogTmV2ZXJEZXN0cm95ZWQuaCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyog
Tm9Mb2NrLmggKi8sCiAJCQkJQThBNDcyRDAxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxl
LmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJKHJldmlzaW9uIDIxOTYwMCkKKysr
IFNvdXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0dy
YXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL05hdHVyYWxMb29wcy5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApA
QCAtMjQ4LDYgKzI0OSwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFw
aC5udW1Ob2RlcygpICsgMTsKICAgICB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMm
IGlubmVyTW9zdExvb3BJbmRpY2VzKE5vZGUgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChub2RlLmlzUm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcm9vdElubmVyTW9zdExvb3BJ
bmRpY2VzOworICAgICAgICByZXR1cm4gbV9ncmFwaC5pbm5lck1vc3RMb29wSW5kaWNlcyhub2Rl
Lm5vZGUoKSk7CisgICAgfQogCiAgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29uc3QKICAg
ICB7CkBAIC0yODUsNiArMjkzLDcgQEAgcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKICAg
ICBMaXN0IG1fcm9vdFN1Y2Nlc3Nvckxpc3Q7CiAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBtX3Jv
b3RTdWNjZXNzb3JTZXQ7CisgICAgbXV0YWJsZSBJbm5lck1vc3RMb29wSW5kaWNlcyBtX3Jvb3RJ
bm5lck1vc3RMb29wSW5kaWNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291
cmNlL1dURi93dGYvTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TmF0dXJhbExvb3BzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTmF0dXJhbExv
b3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9Eb21pbmF0b3JzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wczsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3Jh
cGg+CitjbGFzcyBOYXR1cmFsTG9vcCB7CitwdWJsaWM6CisgICAgTmF0dXJhbExvb3AoKQorICAg
ICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgLCBtX2hlYWRlcihudWxscHRyKQorICAg
ICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBOYXR1cmFsTG9vcChHcmFwaCYgZ3JhcGgsIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGhlYWRlciwg
dW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgICwgbV9o
ZWFkZXIoaGVhZGVyKQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdyYXBoKiBncmFw
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQorICAgIAorICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9CisgICAgdHlwZW5hbWUg
R3JhcGg6Ok5vZGUgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9Cisg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgc2xvd2VyLCBidXQgc2ltcGxlciwg
d2F5IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KKyAgICAvLyBhIG5hdHVyYWwgbG9v
cC4gSXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJlbG9uZ3NUbygpLCB3aGljaAor
ICAgIC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVyIHRoYW4gTyhsb29wIHNpemUp
LiBMb29wIGRlcHRoIGlzCisgICAgLy8gYWxtb3N0IGFsd2F5cyBzbWFsbGVyIHRoYW4gbG9vcCBz
aXplLiBBICpsb3QqIHNtYWxsZXIuCisgICAgYm9vbCBjb250YWlucyh0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYm9k
eS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxvY2spCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGJs
b2NrICE9IGhlYWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWluZWQuCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgaW5kZXggb2YgdGhpcyBsb29wIGlu
IE5hdHVyYWxMb29wcy4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXg7IH0KKyAgICAKKyAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVg7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiW0hlYWRlcjogIiwg
bV9ncmFwaC0+ZHVtcChoZWFkZXIoKSksICIsIEJvZHk6Iik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2JvZHkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiAiLCBtX2dyYXBoLT5kdW1wKG1fYm9keVtpXSkpOworICAgICAgICBvdXQucHJpbnQoIl0iKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7Cisg
ICAgCisgICAgdm9pZCBhZGRCbG9jayh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgeyBtX2Jv
ZHkuYXBwZW5kKGJsb2NrKTsgfQorCisgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgdHlwZW5hbWUg
R3JhcGg6Ok5vZGUgbV9oZWFkZXI7CisgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCA0
PiBtX2JvZHk7CisgICAgdW5zaWduZWQgbV9vdXRlckxvb3BJbmRleDsKKyAgICB1bnNpZ25lZCBt
X2luZGV4OworfTsKKwordHlwZWRlZiBzdGQ6OmFycmF5PHVuc2lnbmVkLCAyPiBJbm5lck1vc3RM
b29wSW5kaWNlczsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9v
cHMgeworcHVibGljOgorICAgIE5hdHVyYWxMb29wcyhHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnM8
R3JhcGg+JiBkb21pbmF0b3JzKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAg
ICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9taW5hdG9yLWJhc2VkIG5hdHVyYWwgbG9v
cCBmaW5kZXIuIFRoZSBmaXJzdAorICAgICAgICAvLyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNvbnRy
b2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KKyAgICAgICAgLy8gVGhl
biBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2FyZCBicmFuY2hpbmcgYmxvY2su
IFdlIHdpbGwKKyAgICAgICAgLy8gdGhlbiBhY2N1bXVsYXRlLCBmb3IgZWFjaCBsb29wIGhlYWRl
ciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAgIC8vIGJsb2Nrcy4gVGhlbiB3
ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3YXJkIGJyYW5jaGluZworICAg
ICAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBnaXZlcyB1cyBhbGwg
b2YgdGhlIGJsb2NrcyBpbiB0aGUKKyAgICAgICAgLy8gbG9vcCBib2R5LgorICAgIAorICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCisgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxuIik7CisgICAgICAg
ICAgICBkb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBi
bG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2Nr
KS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBz
dWNjZXNzb3IgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2NrKVtpXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXplKCk7IGotLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVhZGVyKCkgPT0gc3VjY2Vzc29y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJsb2NrKGJsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3IsIG1fbG9vcHMuc2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3Rz
dHJhcDogIiwgKnRoaXMsICJcbiIpOworICAgIAorICAgICAgICBGYXN0Qml0VmVjdG9yIHNlZW5C
bG9ja3M7CisgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZSwgND4gYmxvY2tXb3Jr
bGlzdDsKKyAgICAgICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubnVtTm9kZXMoKSk7CisgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xvb3BzW2ldOworICAgICAgICAK
KyAgICAgICAgICAgIHNlZW5CbG9ja3MuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9ja1dvcmtsaXN0LmlzRW1wdHkoKSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGxvb3AgIiwgbG9vcCwg
IlxuIik7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXpl
KCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBzZWVuQmxvY2tzW2dyYXBoLmluZGV4KGxvb3Bb
al0pXSA9IHRydWU7CisgICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtq
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKCFibG9ja1dv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBE
ZWFsaW5nIHdpdGggIiwgZ3JhcGguZHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGotLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3IgPSBncmFwaC5w
cmVkZWNlc3NvcnMoYmxvY2spW2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbkJsb2Nr
c1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxv
Y2socHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVu
ZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHNlZW5CbG9ja3NbZ3JhcGguaW5k
ZXgocHJlZGVjZXNzb3IpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmlndXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJv
bSBibG9ja3MgdG8gbG9vcHMuCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdy
YXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdy
YXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzOyBpLS07
KQorICAgICAgICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1tpXSA9IFVJTlRf
TUFYOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29w
cy5zaXplKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3AmIGxvb3Ag
PSBtX2xvb3BzW2xvb3BJbmRleF07CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBibG9ja0luZGV4SW5Mb29wID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsK
KyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGxvb3BbYmxvY2tJbmRleEluTG9v
cF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlczsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29w
SW5kaWNlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNJbmRleCA9PSBVSU5UX01B
WCB8fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhpc0luZGV4XS5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9yKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlcywgQmFzaWNCbG9jazo6bnVt
YmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b29wSW5kZXgsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAKKyAgICAgICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRzIGlubmVyLW1vc3QgbG9v
cCBhbmQgaXRzIG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKKyAgICAgICAgLy8gdGhpcyB0
byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBt
X2xvb3BzW2ldOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9vcC5oZWFkZXIoKS0+aW5u
ZXJNb3N0TG9vcEluZGljZXNbMF0gPT0gaSk7CisgICAgICAgIAorICAgICAgICAgICAgbG9vcC5t
X291dGVyTG9vcEluZGV4ID0gbG9vcC5oZWFkZXIoKS0+aW5uZXJNb3N0TG9vcEluZGljZXNbMV07
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAg
ICAgICAgICAgIC8vIERvIHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBkb25lIHNv
bWUgb2YgdGhpcyBjb3JyZWN0bHkuCisgICAgICAgIAorICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExv
b3AqPiBzaW1wbGVMb29wc09mOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1fbG9vcHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGZh
bmN5TG9vcHNPZiA9IGxvb3BzT2YoYmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgc3RkOjpzb3J0KHNpbXBsZUxvb3BzT2YuYmVnaW4oKSwgc2ltcGxlTG9vcHNPZi5lbmQoKSk7
CisgICAgICAgICAgICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5iZWdpbigpLCBmYW5jeUxv
b3BzT2YuZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2ltcGxlTG9vcHNPZiA9PSBmYW5jeUxvb3BzT2YpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiUmVz
dWx0czogIiwgKnRoaXMsICJcbiIpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1Mb29w
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sb29wcy5zaXplKCk7CisgICAgfQor
ICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9sb29wc1tpXTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGVpdGhl
ciBudWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKKyAgICAvLyBs
b29wIGl0IGJlbG9uZ3MgdG8uCisgICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxv
b3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICBpZiAoIWxvb3ApCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuIGxvb3A7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBmb3IgKDsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkp
CisgICAgICAgICAgICAgICAgQVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0dXJhbExv
b3AqIGlubmVyTW9zdExvb3BPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzWzBdOworICAg
ICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0dXJh
bExvb3AqIGlubmVyTW9zdE91dGVyTG9vcChjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRl
ckxvb3BJbmRleF07CisgICAgfQorICAgIAorICAgIGJvb2wgYmVsb25nc1RvKEJhc2ljQmxvY2sq
IGJsb2NrLCBjb25zdCBOYXR1cmFsTG9vcCYgY2FuZGlkYXRlTG9vcCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIC8vIEl0J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNl
bGYsIGlmIGl0J3Mgc21hbGwuCisgICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQp
CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9v
cE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpIHsKKyAg
ICAgICAgICAgIGlmIChsb29wID09ICZjYW5kaWRhdGVMb29wKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgbG9vcERlcHRoKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgZGVwdGggPSAwOworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxM
b29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9z
dE91dGVyTG9vcCgqbG9vcCkpCisgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICByZXR1cm4g
ZGVwdGg7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybiB0aGUgaW5kaWNlcyBvZiBhbGwgbG9v
cHMgdGhpcyBiZWxvbmdzIHRvLgorICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3Bz
T2YoQmFzaWNCbG9jayopIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJh
bExvb3AqPiByZXN1bHQ7CisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBp
bm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCps
b29wKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9vcCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QKKyAgICB7
CisgICAgICAgIG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sb29wcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbV9sb29wc1tpXSk7CisgICAg
ICAgIG91dC5wcmludCgifSIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gSWYgd2Ug
ZXZlciBoYWQgYSBzY2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVy
LCB3ZSBjb3VsZAorICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBm
ZWVscyBhIGhlY2sgb2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgorICAgIFZlY3RvcjxOYXR1cmFs
TG9vcDxHcmFwaD4sIDQ+IG1fbG9vcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316194</attachid>
            <date>2017-07-22 08:26:09 -0700</date>
            <delta_ts>2017-07-22 09:00:24 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67614</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxNCBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTZEMUYyM0EyNUEwMDI5
RDkxRCAvKiBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyog
QjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQkwRjVCRjE3MDFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyog
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNG
OTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU3LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAq
LzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1
MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjgs
NiArMzAzNSwxNCBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdl
LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRs
L0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIz
L0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM05h
dHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9
IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHBhdGgg
PSBiMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBw
YXRoID0gYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMx
ODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzksNiBAQAogCQlB
NzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3Bz
LmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRo
ID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtH
ZW5lcmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ3
MCw4IEBACiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNw
cCAqLywKIAkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICov
LAorCQkJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAor
CQkJCTBGNUJGMTZBMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAq
LywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkw
RjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NDk4LDYgKzU1MTQsNyBA
QAogCQkJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywK
IAkJCQkwRjMzOERGMzFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmgg
Ki8sCisJCQkJMEY1QkYxNkMxRjIzQTI1QTAwMjlEOTFEIC8qIEIzQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmgg
Ki8sCkBAIC01NTA3LDYgKzU1MjQsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAw
QUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCisJ
CQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAq
LywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywK
IAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmggKi8sCiAJCQkJ
MEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmNwcCAqLywKQEAgLTU1MjEsNiAr
NTU0MCw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLAogCQkJCTBGRUM4NUI0MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCkBAIC01NTQ0LDYgKzU1NjUsNyBA
QAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICov
LAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywK
IAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCAqLywKKwkJ
CQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkw
RjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKIAkJCQkw
RjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKIAkJ
CQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCkBA
IC03MzY4LDcgKzczOTAsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDksNyBAQAogCQkJCTBGQkI3M0JCMURF
Rjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5NCw3IEBACiAJCQkJMEYxRkIzOTcxRTFBRjdF
MzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJl
TG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYx
RjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMCArODg3OSwxMiBAQAogCQkJ
CUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFE
IC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY3MUYyM0EwOTgwMDI5RDkx
RCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzkyMTIxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTE1NCw2ICs5MTc5LDcgQEAKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
RDFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjA4QUQ3MURGMDkyNUQwMDdEMzI2OSAvKiBMb2NrRHVyaW5n
TWFya2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTYzLDYgKzkxODksNyBAQAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBG
RERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2Miw3ICsxMDM4OSw2IEBACiAJCQkJ
MEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyog
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNzgxMEQx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDcyMyw2ICsxMDc0OSw3IEBACiAJCQkJ
QUQyRkNCRTgxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0
OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNjMxRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc4OSw2ICsxMDgxNiw3IEBACiAJCQkJMEZE
M0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTcwMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NTAxMDdFQzBENzAwMTNFN0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0JhY2t3YXJkc0dyYXBoLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2FyZHNDRkcg
OiBwdWJsaWMgQmFja3dhcmRzR3JhcGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFja3dhcmRzQ0ZHKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBCYWNrd2FyZHNDRkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBo
PENGRz4ocHJvYy5jZmcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWluYXRvcnMoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+KHByb2MuYmFja3dh
cmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAg
cHVibGljOgogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVmFsdWUqIGFwcGVuZE5ld0NvbnRyb2xWYWx1ZShQcm9jZWR1cmUmLCBPcGNvZGUsIE9yaWdp
biwgVmFsdWUqLCBjb25zdCBGcmVxdWVudGVkQmxvY2smLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
KTsKICAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMo
KSB7IHJldHVybiBtX2lubmVyTW9zdExvb3BJbmRpY2VzOyB9CisgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwpAQCAtMTc2LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgUHJlZGVjZXNzb3JMaXN0
IG1fcHJlZGVjZXNzb3JzOwogICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOwogICAgIGRv
dWJsZSBtX2ZyZXF1ZW5jeTsKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBtX2lubmVyTW9zdExv
b3BJbmRpY2VzOwogfTsKIAogY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5pbmRl
eCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3By
b2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX3By
b2Muc2l6ZSgpOyB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMmIGlubmVyTW9zdExv
b3BJbmRpY2VzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+aW5uZXJNb3N0TG9vcEluZGljZXMo
KTsgfQogCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2RlIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5j
bHVkZSAiQjNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKFByb2NlZHVy
ZSYgcHJvYykKKyAgICAgICAgOiBtX2RvbWluYXRvcnMocHJvYy5kb21pbmF0b3JzKCkpCisgICAg
ICAgICwgbV9iYWNrd2FyZHNEb21pbmF0b3JzKHByb2MuYmFja3dhcmRzRG9taW5hdG9ycygpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmOgorICAgIC8v
CisgICAgLy8gLSBJZiBiIGV4ZWN1dGVzIHRoZW4gYSBtdXN0IGhhdmUgZXhlY3V0ZWQgYmVmb3Jl
IGl0IChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBiIHdpbGwg
ZXhlY3V0ZSBhZnRlciBpdCAoYiBiYWNrd2FyZHMtZG9taW5hdGVzIGEpLgorICAgIGJvb2wgZG9t
aW5hdGVzRXF1aXZhbGVudGx5KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9kb21pbmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAgICAgICAg
JiYgbV9iYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmIHRoZSBleGVjdXRpb24gb2YgYSBpbXBsaWVzIHRo
YXQgYiBhbHNvIGV4ZWN1dGVzIGFuZCB2aWNlLXZlcnNhLgorICAgIGJvb2wgYXJlRXF1aXZhbGVu
dChCYXNpY0Jsb2NrKiBhLCBCYXNpY0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRv
bWluYXRlc0VxdWl2YWxlbnRseShhLCBiKQorICAgICAgICAgICAgfHwgZG9taW5hdGVzRXF1aXZh
bGVudGx5KGIsIGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEb21pbmF0b3JzJiBtX2RvbWlu
YXRvcnM7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21pbmF0b3JzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQ
cmVIZWFkZXJzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBA
CisvLworLy8gIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCisvLyAgSmF2YVNjcmlwdENvcmUK
Ky8vCisvLyAgQ3JlYXRlZCBieSBGaWxpcCBQaXpsbyBvbiA3LzIyLzE3LgorLy8KKworI2luY2x1
ZGUgIkIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaHBwIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorLy8KKy8vICBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJz
LmhwcAorLy8gIEphdmFTY3JpcHRDb3JlCisvLworLy8gIENyZWF0ZWQgYnkgRmlsaXAgUGl6bG8g
b24gNy8yMi8xNy4KKy8vCisKKyNpZm5kZWYgQjNFbnN1cmVMb29wUHJlSGVhZGVyc19ocHAKKyNk
ZWZpbmUgQjNFbnN1cmVMb29wUHJlSGVhZGVyc19ocHAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisK
KyNlbmRpZiAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzX2hwcCAqLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgog
I2luY2x1ZGUgIkIzRml4U1NBLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgor
I2luY2x1ZGUgIkIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVkZSAiQjNJbmZl
clN3aXRjaGVzLmgiCiAjaW5jbHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCIKICNpbmNs
dWRlICJCM0xvd2VyTWFjcm9zLmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0Fp
cihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVl
cyhwcm9jZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9j
ZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxp
Y2F0ZVRhaWxzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzLmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJC
M1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiaG9pc3RMb29wSW52YXJpYW50VmFsdWVzIik7Cisg
ICAgCisgICAgZW5zdXJlTG9vcFByZUhlYWRlcnMoKTsKKyAgICAKKyAgICBOYXR1cmFsTG9vcHMm
IGxvb3BzID0gcHJvYy5uYXR1cmFsTG9vcHMoKTsKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcyYgY29udHJvbEVxdWl2YWxlbmNlID0gcHJvYy5jb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cygpOworICAgIAorICAgIHN0cnVjdCBMb29wRGF0YSB7CisgICAgICAgIFJhbmdlU2V0PEhlYXBS
YW5nZT4gd3JpdGVzOworICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXI7CisgICAgfTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lzdExvb3BJ
bnZhcmlhbnRWYWx1ZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhpcyBkb2VzIGxvb3AtaW52YXJp
YW50IGNvZGUgbW90aW9uLgorCitib29sIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhQcm9jZWR1
cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTmF0dXJhbExvb3BzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTmF0dXJhbExvb3BzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTmF0dXJhbExvb3BzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0NGRy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVk
ZSA8d3RmL05hdHVyYWxMb29wcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJhbExvb3A7CisKK2NsYXNzIE5h
dHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxDRkc+IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShOYXR1cmFsTG9vcHMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIE5hdHVyYWxMb29wcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDog
V1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPihwcm9jLmNmZygpLCBwcm9jLmRvbWluYXRvcnMoKSkKKyAg
ICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxNiBAQAogI2lmIEVOQUJM
RShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNCYWNrd2FyZHND
RkcuaCIKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKICNpbmNs
dWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJCM0NGRy5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCM0RhdGFTZWN0aW9uLmgi
CiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIK
ICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVu
LmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKQEAgLTIwMCw2ICsyMDQsMTAgQEAgdm9pZCBQ
cm9jZWR1cmU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKIHZvaWQgUHJvY2VkdXJlOjppbnZhbGlkYXRl
Q0ZHKCkKIHsKICAgICBtX2RvbWluYXRvcnMgPSBudWxscHRyOworICAgIG1fbmF0dXJhbExvb3Bz
ID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0NGRyA9IG51bGxwdHI7CisgICAgbV9iYWNrd2Fy
ZHNEb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKQEAgLTI5MSw2ICsyOTksMzQgQEAgRG9taW5hdG9ycyYgUHJvY2VkdXJlOjpkb21pbmF0
b3JzKCkKICAgICByZXR1cm4gKm1fZG9taW5hdG9yczsKIH0KIAorTmF0dXJhbExvb3BzJiBQcm9j
ZWR1cmU6Om5hdHVyYWxMb29wcygpCit7CisgICAgaWYgKCFtX25hdHVyYWxMb29wcykKKyAgICAg
ICAgbV9uYXR1cmFsTG9vcHMgPSBzdGQ6OnVuaXF1ZV9wdHI8TmF0dXJhbExvb3BzPigqdGhpcyk7
CisgICAgcmV0dXJuICptX25hdHVyYWxMb29wczsKK30KKworQmFja3dhcmRzQ0ZHJiBQcm9jZWR1
cmU6OmJhY2t3YXJkc0NGRygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0NGRykKKyAgICAgICAg
bV9iYWNrd2FyZHNDRkcgPSBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPigqdGhpcyk7Cisg
ICAgcmV0dXJuICptX2JhY2t3YXJkc0NGRzsKK30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgUHJv
Y2VkdXJlOjpiYWNrd2FyZHNEb21pbmF0b3JzKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzRG9t
aW5hdG9ycykKKyAgICAgICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gc3RkOjp1bmlxdWVfcHRy
PEJhY2t3YXJkc0RvbWluYXRvcnM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fYmFja3dhcmRzRG9t
aW5hdG9yczsKK30KKworQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIFByb2NlZHVyZTo6Y29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKQoreworICAgIGlmICghbV9jb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcykKKyAgICAgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IHN0ZDo6
dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcz4oKnRoaXMpOworICAgIHJldHVy
biAqbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKK30KKwogdm9pZCBQcm9jZWR1cmU6OmFk
ZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtleSYgY29uc3RhbnQpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDE0IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCitjbGFzcyBCYWNrd2FyZHNDRkc7Citj
bGFzcyBCYWNrd2FyZHNEb21pbmF0b3JzOwogY2xhc3MgQmFzaWNCbG9jazsKIGNsYXNzIEJsb2Nr
SW5zZXJ0aW9uU2V0OwogY2xhc3MgQ0ZHOworY2xhc3MgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlz
aXM7CiBjbGFzcyBEb21pbmF0b3JzOworY2xhc3MgTmF0dXJhbExvb3BzOwogY2xhc3MgU3RhY2tT
bG90OwogY2xhc3MgVmFsdWU7CiBjbGFzcyBWYXJpYWJsZTsKQEAgLTE3NSw2ICsxNzksMTAgQEAg
cHVibGljOgogICAgIENGRyYgY2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAKICAgICBE
b21pbmF0b3JzJiBkb21pbmF0b3JzKCk7CisgICAgTmF0dXJhbExvb3BzJiBuYXR1cmFsTG9vcHMo
KTsKKyAgICBCYWNrd2FyZHNDRkcmIGJhY2t3YXJkc0NGRygpOworICAgIEJhY2t3YXJkc0RvbWlu
YXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMoKTsKKyAgICBDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpcyYgY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKIAogICAgIHZvaWQgYWRkRmFzdENv
bnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CiAgICAgYm9vbCBpc0Zhc3RDb25zdGFudChjb25zdCBW
YWx1ZUtleSYpOwpAQCAtMjcxLDYgKzI3OSwxMCBAQCBwcml2YXRlOgogICAgIFNwYXJzZUNvbGxl
Y3Rpb248VmFsdWU+IG1fdmFsdWVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21pbmF0b3JzPiBtX2RvbWluYXRvcnM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE5hdHVyYWxMb29wcz4gbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2FyZHNDRkc7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJh
Y2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dhcmRzRG9taW5hdG9yczsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXM7CiAgICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0Q29uc3RhbnRzOwogICAgIHVuc2ln
bmVkIG1fbnVtRW50cnlwb2ludHMgeyAxIH07CiAgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VO
YW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDggQEAgc3RydWN0IEJhc2ljQmxvY2sg
OiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGZsb2F0IGV4ZWN1dGlvbkNvdW50OwogICAgIAog
ICAgIC8vIFRoZXNlIGZpZWxkcyBhcmUgcmVzZXJ2ZWQgZm9yIE5hdHVyYWxMb29wcy4KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlcyA9IDI7Ci0g
ICAgdW5zaWduZWQgaW5uZXJNb3N0TG9vcEluZGljZXNbbnVtYmVyT2ZJbm5lck1vc3RMb29wSW5k
aWNlc107CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMgaW5uZXJNb3N0TG9vcEluZGlj
ZXM7CiAKICAgICBzdHJ1Y3QgU1NBRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCShyZXZpc2lvbiAyMTk2MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleChOb2RlIG5vZGUpIGNv
bnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4OyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLmJsb2NrKGluZGV4KTsgfQogICAgIHVuc2lnbmVkIG51
bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaC5udW1CbG9ja3MoKTsgfQorICAgIAorICAg
IElubmVyTW9zdExvb3BJbmRpY2VzJiBpbm5lck1vZGVMb29wSW5kaWNlcyhOb2RlIG5vZGUpIGNv
bnN0IHsgcmV0dXJuIG5vZGUtPmlubmVyTW9zdExvb3BJbmRpY2VzOyB9CiAKICAgICBQb2ludGVy
RHVtcDxCYXNpY0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1
bXAobm9kZSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFs
TG9vcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0
dXJhbExvb3BzLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLSNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAiREZHR3JhcGgu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgTmF0dXJhbExvb3A6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIltIZWFkZXI6
ICIsICpoZWFkZXIoKSwgIiwgQm9keToiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ib2R5LnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoIiAiLCAqbV9ib2R5W2ldKTsK
LSAgICBvdXQucHJpbnQoIl0iKTsKLX0KLQotTmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMoR3Jh
cGgmIGdyYXBoKQotewotICAgIEFTU0VSVChncmFwaC5tX2RvbWluYXRvcnMpOwotCi0gICAgLy8g
SW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1cmFsIGxvb3AgZmluZGVy
LiBUaGUgZmlyc3QKLSAgICAvLyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdl
cyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KLSAgICAvLyBUaGVuIEIgaXMgYSBsb29wIGhl
YWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4gV2Ugd2lsbAotICAgIC8v
IHRoZW4gYWNjdW11bGF0ZSwgZm9yIGVhY2ggbG9vcCBoZWFkZXIsIG11bHRpcGxlIGJhY2t3YXJk
IGJyYW5jaGluZwotICAgIC8vIGJsb2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNo
IGZyb20gdGhlIGJhY2t3YXJkIGJyYW5jaGluZwotICAgIC8vIGJsb2NrcyB0byB0aGVpciBsb29w
IGhlYWRlcnMsIHdoaWNoIGdpdmVzIHVzIGFsbCBvZiB0aGUgYmxvY2tzIGluIHRoZQotICAgIC8v
IGxvb3AgYm9keS4KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiRG9taW5hdG9yczpc
biIpOwotICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgbV9sb29wcy5yZXNpemUoMCk7Ci0gICAgCi0gICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewot
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGkpOwotICAg
ICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhzdWNjZXNzb3IsIGJs
b2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBq
LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVhZGVyKCkgPT0gc3VjY2Vz
c29yKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbal0uYWRkQmxvY2soYmxvY2spOwot
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChm
b3VuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIE5hdHVyYWxMb29w
IGxvb3Aoc3VjY2Vzc29yLCBtX2xvb3BzLnNpemUoKSk7Ci0gICAgICAgICAgICBsb29wLmFkZEJs
b2NrKGJsb2NrKTsKLSAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3ApOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZnRlciBi
b290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAgICBGYXN0Qml0VmVjdG9yIHNlZW5C
bG9ja3M7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBibG9ja1dvcmtsaXN0OwotICAgIHNl
ZW5CbG9ja3MucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKLSAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9v
cCA9IG1fbG9vcHNbaV07Ci0gICAgICAgIAotICAgICAgICBzZWVuQmxvY2tzLmNsZWFyQWxsKCk7
Ci0gICAgICAgIEFTU0VSVChibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29w
ICIsIGxvb3AsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9v
cC5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgIHNlZW5CbG9ja3NbbG9vcFtqXS0+aW5kZXhd
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKGxvb3Bbal0pOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGJsb2NrV29ya2xpc3QudGFrZUxh
c3QoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCAqYmxvY2ssICJcbiIpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoYmxvY2sgPT0gbG9vcC5oZWFkZXIoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07Ci0gICAg
ICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3NbcHJlZGVjZXNzb3ItPmluZGV4XSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
bG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlz
dC5hcHBlbmQocHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIHNlZW5CbG9ja3NbcHJlZGVj
ZXNzb3ItPmluZGV4XSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBGaWd1cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4K
LSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29w
SW5kaWNlczsgaS0tOykKLSAgICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1tp
XSA9IFVJTlRfTUFYOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fbG9v
cHMuc2l6ZSgpOyBsb29wSW5kZXgtLTspIHsKLSAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBt
X2xvb3BzW2xvb3BJbmRleF07Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXhJbkxvb3AgPSBsb29wLnNpemUoKTsgYmxvY2tJbmRleEluTG9vcC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBsb29wW2Jsb2NrSW5kZXhJbkxvb3BdOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFzaWNCbG9jazo6
bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgdGhpc0luZGV4ID0gYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzW2ldOwotICAgICAg
ICAgICAgICAgIGlmICh0aGlzSW5kZXggPT0gVUlOVF9NQVggfHwgbG9vcC5zaXplKCkgPCBtX2xv
b3BzW3RoaXNJbmRleF0uc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydEludG9C
b3VuZGVkVmVjdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmlubmVyTW9zdExv
b3BJbmRpY2VzLCBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbG9vcEluZGV4LCBpKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIC8vIE5vdyBlYWNoIGJsb2NrIGtub3dzIGl0cyBpbm5lci1tb3N0IGxvb3Ag
YW5kIGl0cyBuZXh0LXRvLWlubmVyLW1vc3QgbG9vcC4gVXNlCi0gICAgLy8gdGhpcyB0byBmaWd1
cmUgb3V0IGxvb3AgcGFyZW50aW5nLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tpXTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobG9vcC5oZWFkZXIoKS0+aW5uZXJNb3N0TG9vcEluZGljZXNb
MF0gPT0gaSk7Ci0gICAgICAgIAotICAgICAgICBsb29wLm1fb3V0ZXJMb29wSW5kZXggPSBsb29w
LmhlYWRlcigpLT5pbm5lck1vc3RMb29wSW5kaWNlc1sxXTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRG8gc29tZSBzZWxmLXZlcmlmaWNh
dGlvbiB0aGF0IHdlJ3ZlIGRvbmUgc29tZSBvZiB0aGlzIGNvcnJlY3RseS4KLSAgICAgICAgCi0g
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJh
bExvb3AqPiBzaW1wbGVMb29wc09mOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmICht
X2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrKSkKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxlTG9v
cHNPZi5hcHBlbmQoJm1fbG9vcHNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBmYW5jeUxvb3BzT2YgPSBsb29w
c09mKGJsb2NrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RkOjpzb3J0KHNpbXBsZUxv
b3BzT2YuYmVnaW4oKSwgc2ltcGxlTG9vcHNPZi5lbmQoKSk7Ci0gICAgICAgICAgICBzdGQ6OnNv
cnQoZmFuY3lMb29wc09mLmJlZ2luKCksIGZhbmN5TG9vcHNPZi5lbmQoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpbXBsZUxvb3BzT2YgPT0gZmFuY3lMb29w
c09mKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiUmVzdWx0czogIiwgKnRoaXMsICJcbiIpOwotfQotCi1OYXR1cmFsTG9vcHM6On5O
YXR1cmFsTG9vcHMoKSB7IH0KLQotVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExv
b3BzOjpsb29wc09mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotewotICAgIFZlY3Rvcjxjb25z
dCBOYXR1cmFsTG9vcCo+IHJlc3VsdDsKLSAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
ID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9v
cCgqbG9vcCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobG9vcCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBOYXR1cmFsTG9vcHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoIk5hdHVyYWxMb29wczp7Iik7Ci0gICAgQ29tbWFQcmludGVyIGNv
bW1hOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xvb3BzLnNpemUoKTsgKytpKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1fbG9vcHNbaV0pOwotICAgIG91dC5wcmludCgifSIp
OwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29w
cy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05h
dHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0MiArMjcsMjMgQEAKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0NG
Ry5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05hdHVyYWxM
b29wcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIE5hdHVyYWxMb29wczsKK3R5cGVkZWYgV1RGOjpOYXR1
cmFsTG9vcDxDRkc+IE5hdHVyYWxMb29wOwogCi1jbGFzcyBOYXR1cmFsTG9vcCB7Ci1wdWJsaWM6
Ci0gICAgTmF0dXJhbExvb3AoKQotICAgICAgICA6IG1faGVhZGVyKDApCi0gICAgICAgICwgbV9v
dXRlckxvb3BJbmRleChVSU5UX01BWCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIE5hdHVyYWxM
b29wKEJhc2ljQmxvY2sqIGhlYWRlciwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgIDogbV9oZWFk
ZXIoaGVhZGVyKQotICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCi0gICAgICAg
ICwgbV9pbmRleChpbmRleCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIGhl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keS5zaXplKCk7IH0KLSAgICBCYXNpY0Jsb2NrKiBhdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlbaV07IH0KLSAgICBCYXNpY0Jsb2NrKiBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0KLSAgICAvLyBU
aGlzIGlzIHRoZSBzbG93ZXIsIGJ1dCBzaW1wbGVyLCB3YXkgb2YgYXNraW5nIGlmIGEgYmxvY2sg
YmVsb25ncyB0bwotICAgIC8vIGEgbmF0dXJhbCBsb29wLiBJdCdzIGZhc3RlciB0byBjYWxsIE5h
dHVyYWxMb29wczo6YmVsb25nc1RvKCksIHdoaWNoCi0gICAgLy8gdHJpZXMgdG8gYmUgTyhsb29w
IGRlcHRoKSByYXRoZXIgdGhhbiBPKGxvb3Agc2l6ZSkuIExvb3AgZGVwdGggaXMKLSAgICAvLyBh
bG1vc3QgYWx3YXlzIHNtYWxsZXIgdGhhbiBsb29wIHNpemUuIEEgKmxvdCogc21hbGxlci4KLSAg
ICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYg
KG1fYm9keVtpXSA9PSBibG9jaykKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBBU1NFUlQoYmxvY2sgIT0gaGVhZGVyKCkpOyAvLyBIZWFkZXIgc2hvdWxk
IGJlIGNvbnRhaW5lZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRo
ZSBpbmRleCBvZiB0aGlzIGxvb3AgaW4gTmF0dXJhbExvb3BzLgotICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIAotICAgIGJvb2wgaXNPdXRlck1vc3RM
b29wKCkgY29uc3QgeyByZXR1cm4gbV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWDsgfQotICAg
IAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgTmF0dXJhbExvb3BzOwotICAgIAotICAgIHZvaWQgYWRkQmxvY2soQmFzaWNCbG9j
ayogYmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KLSAgICAKLSAgICBCYXNpY0Jsb2Nr
KiBtX2hlYWRlcjsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IG1fYm9keTsKLSAgICB1bnNp
Z25lZCBtX291dGVyTG9vcEluZGV4OwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci19OwotCi1jbGFz
cyBOYXR1cmFsTG9vcHMgeworY2xhc3MgTmF0dXJhbExvb3BzIDogcHVibGljIFdURjo6TmF0dXJh
bExvb3BzPENGRz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5hdHVyYWxMb29wcyk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgTmF0dXJhbExvb3BzKEdy
YXBoJik7Ci0gICAgfk5hdHVyYWxMb29wcygpOwotICAgIAotICAgIHVuc2lnbmVkIG51bUxvb3Bz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xvb3BzLnNpemUoKTsKLSAgICB9Ci0g
ICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AodW5zaWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xvb3BzW2ldOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gZWl0aGVy
IG51bGwgaWYgdGhlIGJsb2NrIGlzbid0IGEgbG9vcCBoZWFkZXIsIG9yIHRoZQotICAgIC8vIGxv
b3AgaXQgYmVsb25ncyB0by4KLSAgICBjb25zdCBOYXR1cmFsTG9vcCogaGVhZGVyT2YoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9v
cCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7Ci0gICAgICAgIGlmICghbG9vcCkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBpZiAobG9vcC0+aGVhZGVyKCkgPT0gYmxvY2spCi0gICAg
ICAgICAgICByZXR1cm4gbG9vcDsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAg
ICAgICAgICAgIGZvciAoOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkK
LSAgICAgICAgICAgICAgICBBU1NFUlQobG9vcC0+aGVhZGVyKCkgIT0gYmxvY2spOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBOYXR1cmFsTG9v
cCogaW5uZXJNb3N0TG9vcE9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbMF07Ci0gICAg
ICAgIGlmIChpbmRleCA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gJm1fbG9vcHNbaW5kZXhdOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBOYXR1cmFs
TG9vcCogaW5uZXJNb3N0T3V0ZXJMb29wKGNvbnN0IE5hdHVyYWxMb29wJiBsb29wKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKGxvb3AubV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWCkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fbG9vcHNbbG9vcC5tX291dGVy
TG9vcEluZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBiZWxvbmdzVG8oQmFzaWNCbG9jayog
YmxvY2ssIGNvbnN0IE5hdHVyYWxMb29wJiBjYW5kaWRhdGVMb29wKSBjb25zdAotICAgIHsKLSAg
ICAgICAgLy8gSXQncyBmYXN0ZXIgdG8gZG8gdGhpcyB0ZXN0IHVzaW5nIHRoZSBsb29wIGl0c2Vs
ZiwgaWYgaXQncyBzbWFsbC4KLSAgICAgICAgaWYgKGNhbmRpZGF0ZUxvb3Auc2l6ZSgpIDwgNCkK
LSAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMb29wLmNvbnRhaW5zKGJsb2NrKTsKLSAgICAg
ICAgCi0gICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29w
T2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkgewotICAg
ICAgICAgICAgaWYgKGxvb3AgPT0gJmNhbmRpZGF0ZUxvb3ApCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICB1bnNpZ25lZCBsb29wRGVwdGgoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgTmF0
dXJhbExvb3BzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBXVEY6Ok5hdHVyYWxMb29wczxDRkc+
KCpncmFwaC5tX2NmZywgZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpKQogICAgIHsKLSAgICAgICAg
dW5zaWduZWQgZGVwdGggPSAwOwotICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
ID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9v
cCgqbG9vcCkpCi0gICAgICAgICAgICBkZXB0aCsrOwotICAgICAgICByZXR1cm4gZGVwdGg7CiAg
ICAgfQotICAgIAotICAgIC8vIFJldHVybiB0aGUgaW5kaWNlcyBvZiBhbGwgbG9vcHMgdGhpcyBi
ZWxvbmdzIHRvLgotICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzT2YoQmFzaWNC
bG9jayopIGNvbnN0OwotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci1wcml2
YXRlOgotICAgIC8vIElmIHdlIGV2ZXIgaGFkIGEgc2NhbGFiaWxpdHkgcHJvYmxlbSBpbiBvdXIg
bmF0dXJhbCBsb29wIGZpbmRlciwgd2UgY291bGQKLSAgICAvLyB1c2Ugc29tZSBIYXNoTWFwJ3Mg
aGVyZS4gQnV0IGl0IGp1c3QgZmVlbHMgYSBoZWNrIG9mIGEgbG90IGxlc3MgY29udmVuaWVudC4K
LSAgICBWZWN0b3I8TmF0dXJhbExvb3AsIDQ+IG1fbG9vcHM7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsNyBAQAogCQkwRjQzRDhGMDFE
QjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExvY2tlZFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZC
MjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM0Miw4ICszNDMsOCBAQAogCQk5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRv
bWljU3RyaW5nVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXRvbWljU3RyaW5nVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4
RjQwQTE3NkMyQUQ4MDAwMkQ4NjUgLyogQXRvbWljU3RyaW5nVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQXRvbWljU3RyaW5nVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUM2
N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTMwRDQxMkMxRjBERTBCQTAwQjcxOTU0IC8q
IFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvZnRMaW5r
aW5nLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBMzBENDEyRDFGMERFMTNGMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMEQ0MTJDMUYwREUwQkEwMEI3MTk1NCAv
KiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlu
a2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzBENDEyRDFGMERFMTNGMDBC
NzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwOThBRkYxQzE2
OUUwNzAwMDg3Nzk3IC8qIFNhbmRib3hTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2FuZGJveFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTA5OEIw
MTFDMTZBNEY5MDAwODc3OTcgLyogU2VjdXJpdHlTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2VjdXJpdHlTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU2MUYzMEYxREYyNjQyMTAwRkY2NzVEIC8qIERlcHJlY2F0ZWRPcHRpb25hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXByZWNhdGVkT3B0aW9uYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1Niw2ICs4NTcsNyBAQAogCQkJCTBGNjZCMjgyMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLywKIAkJCQkwRjY2QjI4MzFEQzk3QkFC
MDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJB
NjhGRCAvKiBOYWtlZFB0ci5oICovLAorCQkJCTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAvKiBO
YXR1cmFsTG9vcHMuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJE
ZXN0cm95ZWQuaCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki8sCiAJCQkJQThBNDcyRDAxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggKi8sCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9X
VEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdv
cmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL05hdHVyYWxMb29wcy5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMjQ4LDYg
KzI0OSwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaC5udW1Ob2Rl
cygpICsgMTsKICAgICB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMmIGlubmVyTW9z
dExvb3BJbmRpY2VzKE5vZGUgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChub2RlLmlz
Um9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcm9vdElubmVyTW9zdExvb3BJbmRpY2VzOwor
ICAgICAgICByZXR1cm4gbV9ncmFwaC5pbm5lck1vc3RMb29wSW5kaWNlcyhub2RlLm5vZGUoKSk7
CisgICAgfQogCiAgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29uc3QKICAgICB7CkBAIC0y
ODUsNiArMjkzLDcgQEAgcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBMaXN0IG1f
cm9vdFN1Y2Nlc3Nvckxpc3Q7CiAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBtX3Jvb3RTdWNjZXNz
b3JTZXQ7CisgICAgbXV0YWJsZSBJbm5lck1vc3RMb29wSW5kaWNlcyBtX3Jvb3RJbm5lck1vc3RM
b29wSW5kaWNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTmF0dXJhbExv
b3BzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTmF0dXJhbExvb3BzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9E
b21pbmF0b3JzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFw
aD4KK2NsYXNzIE5hdHVyYWxMb29wczsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFz
cyBOYXR1cmFsTG9vcCB7CitwdWJsaWM6CisgICAgTmF0dXJhbExvb3AoKQorICAgICAgICA6IG1f
Z3JhcGgobnVsbHB0cikKKyAgICAgICAgLCBtX2hlYWRlcihudWxscHRyKQorICAgICAgICAsIG1f
b3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOYXR1cmFs
TG9vcChHcmFwaCYgZ3JhcGgsIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGhlYWRlciwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAgICwgbV9oZWFkZXIoaGVh
ZGVyKQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdyYXBoKiBncmFwaCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBoZWFk
ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQorICAgIAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9CisgICAgdHlwZW5h
bWUgR3JhcGg6Ok5vZGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChp
KTsgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgc2xvd2VyLCBidXQgc2ltcGxlciwgd2F5IG9mIGFz
a2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KKyAgICAvLyBhIG5hdHVyYWwgbG9vcC4gSXQncyBm
YXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJlbG9uZ3NUbygpLCB3aGljaAorICAgIC8vIHRy
aWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVyIHRoYW4gTyhsb29wIHNpemUpLiBMb29wIGRl
cHRoIGlzCisgICAgLy8gYWxtb3N0IGFsd2F5cyBzbWFsbGVyIHRoYW4gbG9vcCBzaXplLiBBICps
b3QqIHNtYWxsZXIuCisgICAgYm9vbCBjb250YWlucyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYm9keS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxvY2spCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGJsb2NrICE9IGhl
YWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWluZWQuCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgaW5kZXggb2YgdGhpcyBsb29wIGluIE5hdHVyYWxM
b29wcy4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAg
ICAKKyAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJMb29w
SW5kZXggPT0gVUlOVF9NQVg7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFwaCkgeworICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgb3V0LnByaW50KCJbSGVhZGVyOiAiLCBtX2dyYXBoLT5kdW1wKGhlYWRlcigp
KSwgIiwgQm9keToiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICIsIG1fZ3JhcGgtPmR1bXAobV9i
b2R5W2ldKSk7CisgICAgICAgIG91dC5wcmludCgiXSIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIE5hdHVyYWxMb29wczsKKyAgICAKKyAgICB2b2lkIGFkZEJsb2Nr
KHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CisK
KyAgICBHcmFwaCogbV9ncmFwaDsKKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBtX2hlYWRlcjsK
KyAgICBWZWN0b3I8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIDQ+IG1fYm9keTsKKyAgICB1bnNpZ25l
ZCBtX291dGVyTG9vcEluZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCit0eXBlZGVm
IHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IElubmVyTW9zdExvb3BJbmRpY2VzOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wcyB7CitwdWJsaWM6CisgICAgTmF0
dXJhbExvb3BzKEdyYXBoJiBncmFwaCwgRG9taW5hdG9yczxHcmFwaD4mIGRvbWluYXRvcnMpCisg
ICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudCB0aGUg
Y2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0Cisg
ICAgICAgIC8vIHN0ZXAgaXMgdG8gZmluZCBhbGwgY29udHJvbCBmbG93IGVkZ2VzIEEgLT4gQiB3
aGVyZSBCIGRvbWluYXRlcyBBLgorICAgICAgICAvLyBUaGVuIEIgaXMgYSBsb29wIGhlYWRlciBh
bmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4gV2Ugd2lsbAorICAgICAgICAvLyB0
aGVuIGFjY3VtdWxhdGUsIGZvciBlYWNoIGxvb3AgaGVhZGVyLCBtdWx0aXBsZSBiYWNrd2FyZCBi
cmFuY2hpbmcKKyAgICAgICAgLy8gYmxvY2tzLiBUaGVuIHdlIGJhY2t3YXJkcyBncmFwaCBzZWFy
Y2ggZnJvbSB0aGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAgIC8vIGJsb2NrcyB0byB0aGVp
ciBsb29wIGhlYWRlcnMsIHdoaWNoIGdpdmVzIHVzIGFsbCBvZiB0aGUgYmxvY2tzIGluIHRoZQor
ICAgICAgICAvLyBsb29wIGJvZHkuCisgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKKyAgICAgICAgICAgIGRvbWluYXRvcnMuZHVtcChX
VEY6OmRhdGFGaWxlKCkpOworICAgICAgICB9CisgICAgCisgICAgICAgIG1fbG9vcHMucmVzaXpl
KDApOworICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBncmFwaC5udW1O
b2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHN1Y2Nlc3NvciA9IGdyYXBoLnN1Y2Nl
c3NvcnMoYmxvY2spW2ldOworICAgICAgICAgICAgICAgIGlmICghZG9taW5hdG9ycy5kb21pbmF0
ZXMoc3VjY2Vzc29yLCBibG9jaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9sb29wc1tqXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbG9vcHNbal0uYWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZv
dW5kKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBOYXR1
cmFsTG9vcDxHcmFwaD4gbG9vcChncmFwaCwgc3VjY2Vzc29yLCBtX2xvb3BzLnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICAgICAgbV9s
b29wcy5hcHBlbmQobG9vcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIs
ICp0aGlzLCAiXG4iKTsKKyAgICAKKyAgICAgICAgRmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOwor
ICAgICAgICBWZWN0b3I8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIDQ+IGJsb2NrV29ya2xpc3Q7Cisg
ICAgICAgIHNlZW5CbG9ja3MucmVzaXplKGdyYXBoLm51bU5vZGVzKCkpOworICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
TmF0dXJhbExvb3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgCisgICAgICAg
ICAgICBzZWVuQmxvY2tzLmNsZWFyQWxsKCk7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tXb3Jr
bGlzdC5pc0VtcHR5KCkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIpOwor
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07
KSB7CisgICAgICAgICAgICAgICAgc2VlbkJsb2Nrc1tncmFwaC5pbmRleChsb29wW2pdKV0gPSB0
cnVlOworICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKGxvb3Bbal0pOworICAg
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9
IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVhbGluZyB3
aXRoICIsIGdyYXBoLmR1bXAoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChibG9jayA9PSBsb29wLmhlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29yID0gZ3JhcGgucHJlZGVjZXNz
b3JzKGJsb2NrKVtqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3NbZ3JhcGgu
aW5kZXgocHJlZGVjZXNzb3IpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKHByZWRl
Y2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRl
Y2Vzc29yKV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgcmV2ZXJzZSBtYXBwaW5nIGZyb20gYmxvY2tz
IHRvIGxvb3BzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBncmFwaC5udW1O
b2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlczsgaS0tOykKKyAgICAg
ICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbaV0gPSBVSU5UX01BWDsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fbG9vcHMuc2l6ZSgp
OyBsb29wSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCA9
IG1fbG9vcHNbbG9vcEluZGV4XTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGJsb2NrSW5kZXhJbkxvb3AgPSBsb29wLnNpemUoKTsgYmxvY2tJbmRleEluTG9vcC0tOykgewor
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gbG9vcFtibG9ja0lu
ZGV4SW5Mb29wXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGQ6OnR1YmxlX3NpemU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZTsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9IGdyYXBoLmlu
bmVyTW9zdExvb3BJbmRpY2VzKGJsb2NrKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXNJbmRleCA9PSBVSU5UX01BWCB8fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhpc0luZGV4XS5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9y
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoLmlubmVyTW9zdExvb3BJbmRpY2Vz
KGJsb2NrKSwgc3RkOjp0dWJsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEluZGV4LCBpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBlYWNoIGJs
b2NrIGtub3dzIGl0cyBpbm5lci1tb3N0IGxvb3AgYW5kIGl0cyBuZXh0LXRvLWlubmVyLW1vc3Qg
bG9vcC4gVXNlCisgICAgICAgIC8vIHRoaXMgdG8gZmlndXJlIG91dCBsb29wIHBhcmVudGluZy4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCA9IG1fbG9vcHNbaV07CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChncmFwaC5pbm5lck1vc3RMb29wSW5kaWNlcyhsb29wLmhlYWRlcigp
KVswXSA9PSBpKTsKKyAgICAgICAgCisgICAgICAgICAgICBsb29wLm1fb3V0ZXJMb29wSW5kZXgg
PSBncmFwaC5pbm5lck1vc3RMb29wSW5kaWNlcyhsb29wLmhlYWRlcigpKVsxXTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAg
Ly8gRG8gc29tZSBzZWxmLXZlcmlmaWNhdGlvbiB0aGF0IHdlJ3ZlIGRvbmUgc29tZSBvZiB0aGlz
IGNvcnJlY3RseS4KKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5k
ZXggPSBncmFwaC5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdy
YXBoPio+IHNpbXBsZUxvb3BzT2Y7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzaW1wbGVMb29wc09mLmFwcGVuZCgmbV9sb29wc1tpXSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdy
YXBoPio+IGZhbmN5TG9vcHNPZiA9IGxvb3BzT2YoYmxvY2spOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RkOjpzb3J0KHNpbXBsZUxvb3BzT2YuYmVnaW4oKSwgc2ltcGxlTG9vcHNP
Zi5lbmQoKSk7CisgICAgICAgICAgICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5iZWdpbigp
LCBmYW5jeUxvb3BzT2YuZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2ltcGxlTG9vcHNPZiA9PSBmYW5jeUxvb3BzT2YpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiUmVzdWx0czogIiwgKnRoaXMsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYg
Z3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCisgICAgdW5zaWduZWQgbnVtTG9vcHMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9vcHMuc2l6ZSgpOworICAgIH0KKyAg
ICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AodW5zaWduZWQgaSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2xvb3BzW2ldOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4g
ZWl0aGVyIG51bGwgaWYgdGhlIGJsb2NrIGlzbid0IGEgbG9vcCBoZWFkZXIsIG9yIHRoZQorICAg
IC8vIGxvb3AgaXQgYmVsb25ncyB0by4KKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGhl
YWRlck9mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAg
Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsK
KyAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChs
b29wLT5oZWFkZXIoKSA9PSBibG9jaykKKyAgICAgICAgICAgIHJldHVybiBsb29wOworICAgICAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICg7IGxvb3A7IGxvb3Ag
PSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgICAgIEFTU0VSVChsb29w
LT5oZWFkZXIoKSAhPSBibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIAorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogaW5uZXJNb3N0TG9vcE9mKHR5
cGVuYW1lIEdyYWg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXTsKKyAgICAgICAgaWYgKGluZGV4
ID09IFVJTlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9s
b29wc1tpbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiog
aW5uZXJNb3N0T3V0ZXJMb29wKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRl
ckxvb3BJbmRleF07CisgICAgfQorICAgIAorICAgIGJvb2wgYmVsb25nc1RvKHR5cGVuYW1lIEdy
YXBoOjpOb2RlIGJsb2NrLCBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4mIGNhbmRpZGF0ZUxvb3Ap
IGNvbnN0CisgICAgeworICAgICAgICAvLyBJdCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3QgdXNp
bmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBpdCdzIHNtYWxsLgorICAgICAgICBpZiAoY2FuZGlkYXRl
TG9vcC5zaXplKCkgPCA0KQorICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29udGFp
bnMoYmxvY2spOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcDxHcmFw
aD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0
T3V0ZXJMb29wKCpsb29wKSkgeworICAgICAgICAgICAgaWYgKGxvb3AgPT0gJmNhbmRpZGF0ZUxv
b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsb29wRGVwdGgodHlwZW5hbWUg
R3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBkZXB0aCA9
IDA7CisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJN
b3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkp
CisgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICByZXR1cm4gZGVwdGg7CisgICAgfQorICAg
IAorICAgIC8vIFJldHVybiB0aGUgaW5kaWNlcyBvZiBhbGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRv
LgorICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBsb29wc09mKHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPGNvbnN0IE5h
dHVyYWxMb29wPEdyYXBoPio+IHJlc3VsdDsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9v
cDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5u
ZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9vcCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsK
KyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9sb29wcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
bV9sb29wc1tpXSk7CisgICAgICAgIG91dC5wcmludCgifSIpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgCisgICAgLy8gSWYgd2UgZXZlciBoYWQgYSBz
Y2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAor
ICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sg
b2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgorICAgIFZlY3RvcjxOYXR1cmFsTG9vcDxHcmFwaD4s
IDQ+IG1fbG9vcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbm5l
ck1vc3RMb29wSW5kaWNlczsKK3VzaW5nIFdURjo6TmF0dXJhbExvb3A7Cit1c2luZyBXVEY6Ok5h
dHVyYWxMb29wczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316195</attachid>
            <date>2017-07-22 09:00:24 -0700</date>
            <delta_ts>2017-07-22 09:56:21 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>72174</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxNCBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTZEMUYyM0EyNUEwMDI5
RDkxRCAvKiBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyog
QjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQkwRjVCRjE3MDFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyog
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNG
OTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU3LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAq
LzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1
MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjgs
NiArMzAzNSwxNCBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdl
LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRs
L0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIz
L0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM05h
dHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9
IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHBhdGgg
PSBiMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBw
YXRoID0gYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMx
ODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzksNiBAQAogCQlB
NzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3Bz
LmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRo
ID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtH
ZW5lcmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ3
MCw4IEBACiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNw
cCAqLywKIAkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICov
LAorCQkJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAor
CQkJCTBGNUJGMTZBMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAq
LywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkw
RjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NDk4LDYgKzU1MTQsNyBA
QAogCQkJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywK
IAkJCQkwRjMzOERGMzFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmgg
Ki8sCisJCQkJMEY1QkYxNkMxRjIzQTI1QTAwMjlEOTFEIC8qIEIzQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmgg
Ki8sCkBAIC01NTA3LDYgKzU1MjQsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAw
QUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCisJ
CQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAq
LywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywK
IAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmggKi8sCiAJCQkJ
MEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmNwcCAqLywKQEAgLTU1MjEsNiAr
NTU0MCw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLAogCQkJCTBGRUM4NUI0MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCkBAIC01NTQ0LDYgKzU1NjUsNyBA
QAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICov
LAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywK
IAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCAqLywKKwkJ
CQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkw
RjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKIAkJCQkw
RjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKIAkJ
CQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCkBA
IC03MzY4LDcgKzczOTAsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDksNyBAQAogCQkJCTBGQkI3M0JCMURF
Rjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5NCw3IEBACiAJCQkJMEYxRkIzOTcxRTFBRjdF
MzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJl
TG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYx
RjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMCArODg3OSwxMiBAQAogCQkJ
CUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFE
IC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY3MUYyM0EwOTgwMDI5RDkx
RCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzkyMTIxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTE1NCw2ICs5MTc5LDcgQEAKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
RDFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjA4QUQ3MURGMDkyNUQwMDdEMzI2OSAvKiBMb2NrRHVyaW5n
TWFya2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTYzLDYgKzkxODksNyBAQAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBG
RERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2Miw3ICsxMDM4OSw2IEBACiAJCQkJ
MEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyog
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNzgxMEQx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDcyMyw2ICsxMDc0OSw3IEBACiAJCQkJ
QUQyRkNCRTgxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0
OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNjMxRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc4OSw2ICsxMDgxNiw3IEBACiAJCQkJMEZE
M0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTcwMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NTAxMDdFQzBENzAwMTNFN0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0JhY2t3YXJkc0dyYXBoLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2FyZHNDRkcg
OiBwdWJsaWMgQmFja3dhcmRzR3JhcGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFja3dhcmRzQ0ZHKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBCYWNrd2FyZHNDRkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBo
PENGRz4ocHJvYy5jZmcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWluYXRvcnMoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+KHByb2MuYmFja3dh
cmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAg
cHVibGljOgogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVmFsdWUqIGFwcGVuZE5ld0NvbnRyb2xWYWx1ZShQcm9jZWR1cmUmLCBPcGNvZGUsIE9yaWdp
biwgVmFsdWUqLCBjb25zdCBGcmVxdWVudGVkQmxvY2smLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
KTsKICAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMo
KSB7IHJldHVybiBtX2lubmVyTW9zdExvb3BJbmRpY2VzOyB9CisgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwpAQCAtMTc2LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgUHJlZGVjZXNzb3JMaXN0
IG1fcHJlZGVjZXNzb3JzOwogICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOwogICAgIGRv
dWJsZSBtX2ZyZXF1ZW5jeTsKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBtX2lubmVyTW9zdExv
b3BJbmRpY2VzOwogfTsKIAogY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5pbmRl
eCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3By
b2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX3By
b2Muc2l6ZSgpOyB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMmIGlubmVyTW9zdExv
b3BJbmRpY2VzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+aW5uZXJNb3N0TG9vcEluZGljZXMo
KTsgfQogCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2RlIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5j
bHVkZSAiQjNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKFByb2NlZHVy
ZSYgcHJvYykKKyAgICAgICAgOiBtX2RvbWluYXRvcnMocHJvYy5kb21pbmF0b3JzKCkpCisgICAg
ICAgICwgbV9iYWNrd2FyZHNEb21pbmF0b3JzKHByb2MuYmFja3dhcmRzRG9taW5hdG9ycygpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmOgorICAgIC8v
CisgICAgLy8gLSBJZiBiIGV4ZWN1dGVzIHRoZW4gYSBtdXN0IGhhdmUgZXhlY3V0ZWQgYmVmb3Jl
IGl0IChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBiIHdpbGwg
ZXhlY3V0ZSBhZnRlciBpdCAoYiBiYWNrd2FyZHMtZG9taW5hdGVzIGEpLgorICAgIGJvb2wgZG9t
aW5hdGVzRXF1aXZhbGVudGx5KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9kb21pbmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAgICAgICAg
JiYgbV9iYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmIHRoZSBleGVjdXRpb24gb2YgYSBpbXBsaWVzIHRo
YXQgYiBhbHNvIGV4ZWN1dGVzIGFuZCB2aWNlLXZlcnNhLgorICAgIGJvb2wgYXJlRXF1aXZhbGVu
dChCYXNpY0Jsb2NrKiBhLCBCYXNpY0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRv
bWluYXRlc0VxdWl2YWxlbnRseShhLCBiKQorICAgICAgICAgICAgfHwgZG9taW5hdGVzRXF1aXZh
bGVudGx5KGIsIGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEb21pbmF0b3JzJiBtX2RvbWlu
YXRvcnM7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21pbmF0b3JzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQ
cmVIZWFkZXJzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBA
CisvLworLy8gIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCisvLyAgSmF2YVNjcmlwdENvcmUK
Ky8vCisvLyAgQ3JlYXRlZCBieSBGaWxpcCBQaXpsbyBvbiA3LzIyLzE3LgorLy8KKworI2luY2x1
ZGUgIkIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaHBwIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorLy8KKy8vICBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJz
LmhwcAorLy8gIEphdmFTY3JpcHRDb3JlCisvLworLy8gIENyZWF0ZWQgYnkgRmlsaXAgUGl6bG8g
b24gNy8yMi8xNy4KKy8vCisKKyNpZm5kZWYgQjNFbnN1cmVMb29wUHJlSGVhZGVyc19ocHAKKyNk
ZWZpbmUgQjNFbnN1cmVMb29wUHJlSGVhZGVyc19ocHAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisK
KyNlbmRpZiAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzX2hwcCAqLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgog
I2luY2x1ZGUgIkIzRml4U1NBLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgor
I2luY2x1ZGUgIkIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVkZSAiQjNJbmZl
clN3aXRjaGVzLmgiCiAjaW5jbHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCIKICNpbmNs
dWRlICJCM0xvd2VyTWFjcm9zLmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0Fp
cihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0g
MikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJl
ZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVl
cyhwcm9jZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9j
ZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxp
Y2F0ZVRhaWxzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkIz
TmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVz
KFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImhv
aXN0TG9vcEludmFyaWFudFZhbHVlcyIpOworICAgIAorICAgIGVuc3VyZUxvb3BQcmVIZWFkZXJz
KCk7CisgICAgCisgICAgcHJvYy5yZXNldEJsb2NrT3duZXJzKCk7CisgICAgRG9taW5hdG9ycyYg
ZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygpOworICAgIE5hdHVyYWxMb29wcyYgbG9vcHMg
PSBwcm9jLm5hdHVyYWxMb29wcygpOworICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBj
b250cm9sRXF1aXZhbGVuY2UgPSBwcm9jLmNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7Cisg
ICAgCisgICAgc3RydWN0IExvb3BEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3
cml0ZXM7CisgICAgICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAgYm9vbCB3cml0
ZXNQaW5uZWQ7CisgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciB7IG51bGxwdHIgfTsKKyAg
ICB9OworICAgIAorICAgIEluZGV4TWFwPE5hdHVyYWxMb29wLCBMb29wRGF0YT4gZGF0YShsb29w
cy5udW1Mb29wcygpKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IGxvb3Bz
Lm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYg
bG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAg
ICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29yLCBsb29wKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhW2xvb3BdLnByZUhl
YWRlcik7CisgICAgICAgICAgICBkYXRhW2xvb3BdLnByZUhlYWRlciA9IHByZWRlY2Vzc29yOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9j
KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbG9vcHMuaW5uZXJNb3N0TG9v
cE9mKGJsb2NrKTsKKyAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3Rz
IGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgZGF0YVsqbG9vcF0ud3Jp
dGVzLmFkZChlZmZlY3RzLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWypsb29wXS53cml0ZXNM
b2NhbFN0YXRlIHw9IGVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAgICAgIGRhdGFb
Kmxvb3BdLndyaXRlc1Bpbm5lZCB8PSBlZmZlY3RzLndyaXRlc1Bpbm5lZDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IGxvb3BzLm51bUxvb3Bz
KCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IGxv
b3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogY3Vy
cmVudCA9ICZsb29wOyBjdXJyZW50OyBjdXJyZW50ID0gbG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29w
KCpjdXJyZW50KSkgeworICAgICAgICAgICAgZGF0YVsqY3VycmVudF0ud3JpdGVzLmFkZEFsbChk
YXRhW2xvb3BdLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWypjdXJyZW50XS53cml0ZXNMb2Nh
bFN0YXRlIHw9IGRhdGFbbG9vcF0ud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAgICAgIGRhdGFb
KmN1cnJlbnRdLndyaXRlc1Bpbm5lZCB8PSBkYXRhW2xvb3BdLndyaXRlc1Bpbm5lZDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0
dXJhbExvb3AqPiBsb29wcyA9IGxvb3BzLmxvb3BzT2YoYmxvY2spOworICAgICAgICBpZiAobG9v
cHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBm
b3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0
cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAgICAgICAgICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9ICpsb29wc1tpXTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZG9taW5hdG9ycy5kb21pbmF0ZXMoY2hpbGQtPm93bmVyLCBsb29wLnByZUhlYWRlcikpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZWZmZWN0cy5jb250cm9sRGVwZW5k
ZW50CisgICAgICAgICAgICAgICAgICAgICYmICFjb250cm9sRXF1aXZhbGVuY2UuZG9taW5hdGVz
RXF1aXZhbGVudGx5KGRhdGEucHJlSGVhZGVyLCBibG9jaykpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChlZmZlY3Rz
LnJlYWRzUGlubmVkICYmIGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZWZm
ZWN0cy5yZWFkc0xvY2FsU3RhdGUgJiYgZGF0YVtsb29wXS5yZWFkc0xvY2FsU3RhdGUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChkYXRhW2xvb3BdLndyaXRlcy5jb250YWlucyhlZmZlY3RzLnJlYWRzKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbG9vcC5wcmVIZWFkZXItPmFwcGVuZE5vblRlcm1pbmFsKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHByb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVlLT5vcmlnaW4oKSk7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52
YXJpYW50VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBsb29wLWludmFyaWFudCBjb2RlIG1vdGlvbi4K
KworYm9vbCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjND
RkcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9v
cHMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3R5cGVkZWYgV1RGOjpO
YXR1cmFsTG9vcDxDRkc+IE5hdHVyYWxMb29wOworCitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJs
aWMgV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0
dXJhbExvb3BzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBO
YXR1cmFsTG9vcHMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3Bz
PENGRz4ocHJvYy5jZmcoKSwgcHJvYy5kb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAy
MTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSAi
QjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmts
aXN0LmgiCiAjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xFcXVpdmFsZW5j
ZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgogI2luY2x1ZGUgIkIzRG9t
aW5hdG9ycy5oIgorI2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiQjNPcGFx
dWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNQaGlDaGlsZHJlbi5oIgogI2luY2x1ZGUgIkIz
U3RhY2tTbG90LmgiCkBAIC0yMDAsNiArMjA0LDEwIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJl
YWNoYWJpbGl0eSgpCiB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiB7CiAgICAgbV9k
b21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CisgICAg
bV9iYWNrd2FyZHNDRkcgPSBudWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51
bGxwdHI7CisgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CiB9CiAK
IHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0yOTEsNiAr
Mjk5LDM0IEBAIERvbWluYXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCiAgICAgcmV0dXJu
ICptX2RvbWluYXRvcnM7CiB9CiAKK05hdHVyYWxMb29wcyYgUHJvY2VkdXJlOjpuYXR1cmFsTG9v
cHMoKQoreworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3Bz
ID0gc3RkOjp1bmlxdWVfcHRyPE5hdHVyYWxMb29wcz4oKnRoaXMpOworICAgIHJldHVybiAqbV9u
YXR1cmFsTG9vcHM7Cit9CisKK0JhY2t3YXJkc0NGRyYgUHJvY2VkdXJlOjpiYWNrd2FyZHNDRkco
KQoreworICAgIGlmICghbV9iYWNrd2FyZHNDRkcpCisgICAgICAgIG1fYmFja3dhcmRzQ0ZHID0g
c3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNr
d2FyZHNDRkc7Cit9CisKK0JhY2t3YXJkc0RvbWluYXRvcnMmIFByb2NlZHVyZTo6YmFja3dhcmRz
RG9taW5hdG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRvcnMpCisgICAgICAg
IG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0
b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7Cit9CisKK0Nv
bnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBQcm9jZWR1cmU6OmNvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzKCkKK3sKKyAgICBpZiAoIW1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpCisgICAg
ICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY29udHJvbEVxdWl2
YWxlbmNlQW5hbHlzaXM7Cit9CisKIHZvaWQgUHJvY2VkdXJlOjphZGRGYXN0Q29uc3RhbnQoY29u
c3QgVmFsdWVLZXkmIGNvbnN0YW50KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50Lmlz
Q29uc3RhbnQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAko
cmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKIAorY2xhc3MgQmFja3dhcmRzQ0ZHOworY2xhc3MgQmFja3dhcmRzRG9t
aW5hdG9yczsKIGNsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNs
YXNzIENGRzsKK2NsYXNzIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5h
dG9yczsKK2NsYXNzIE5hdHVyYWxMb29wczsKIGNsYXNzIFN0YWNrU2xvdDsKIGNsYXNzIFZhbHVl
OwogY2xhc3MgVmFyaWFibGU7CkBAIC0xNzUsNiArMTc5LDEwIEBAIHB1YmxpYzoKICAgICBDRkcm
IGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQogCiAgICAgRG9taW5hdG9ycyYgZG9taW5h
dG9ycygpOworICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dhcmRz
Q0ZHJiBiYWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzKCk7CisgICAgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIGNvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzKCk7CiAKICAgICB2b2lkIGFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1
ZUtleSYpOwogICAgIGJvb2wgaXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsKQEAgLTI3
MSw2ICsyNzksMTAgQEAgcHJpdmF0ZToKICAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiBtX3Zh
bHVlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFs
TG9vcHM+IG1fbmF0dXJhbExvb3BzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+
IG1fYmFja3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3Jz
PiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogICAgIEhhc2hT
ZXQ8VmFsdWVLZXk+IG1fZmFzdENvbnN0YW50czsKICAgICB1bnNpZ25lZCBtX251bUVudHJ5cG9p
bnRzIHsgMSB9OwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMTk2MDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjI5LDggKzIyOSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNp
Y0Jsb2MKICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAKICAgICAvLyBUaGVzZSBmaWVs
ZHMgYXJlIHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXMgPSAyOwotICAgIHVuc2lnbmVkIGlubmVy
TW9zdExvb3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOworICAgIAorICAg
IElubmVyTW9zdExvb3BJbmRpY2VzIGlubmVyTW9zdExvb3BJbmRpY2VzOwogCiAgICAgc3RydWN0
IFNTQURhdGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2Rl
LT5pbmRleDsgfQogICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9ncmFwaC5ibG9jayhpbmRleCk7IH0KICAgICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhcGgubnVtQmxvY2tzKCk7IH0KKyAgICAKKyAgICBJbm5lck1vc3RMb29wSW5k
aWNlcyYgaW5uZXJNb2RlTG9vcEluZGljZXMoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2Rl
LT5pbm5lck1vc3RMb29wSW5kaWNlczsgfQogCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4g
ZHVtcChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJl
dmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExv
b3BzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJERkdOYXR1cmFsTG9vcHMuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVk
ZSAiREZHRG9taW5hdG9ycy5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLQotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIE5hdHVyYWxMb29wOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJbSGVhZGVyOiAiLCAqaGVhZGVyKCksICIs
IEJvZHk6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5zaXplKCk7ICsr
aSkKLSAgICAgICAgb3V0LnByaW50KCIgIiwgKm1fYm9keVtpXSk7Ci0gICAgb3V0LnByaW50KCJd
Iik7Ci19Ci0KLU5hdHVyYWxMb29wczo6TmF0dXJhbExvb3BzKEdyYXBoJiBncmFwaCkKLXsKLSAg
ICBBU1NFUlQoZ3JhcGgubV9kb21pbmF0b3JzKTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUgY2xh
c3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0Ci0gICAg
Ly8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdoZXJlIEIg
ZG9taW5hdGVzIEEuCi0gICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBi
YWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKLSAgICAvLyB0aGVuIGFjY3VtdWxhdGUs
IGZvciBlYWNoIGxvb3AgaGVhZGVyLCBtdWx0aXBsZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAv
LyBibG9ja3MuIFRoZW4gd2UgYmFja3dhcmRzIGdyYXBoIHNlYXJjaCBmcm9tIHRoZSBiYWNrd2Fy
ZCBicmFuY2hpbmcKLSAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBn
aXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKLSAgICAvLyBsb29wIGJvZHkuCi0gICAg
Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIAotICAgIGlmICh2
ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAgICAgZ3Jh
cGgubV9kb21pbmF0b3JzLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgfQotICAgIAotICAg
IG1fbG9vcHMucmVzaXplKDApOwotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKLSAgICAgICAgICAgIGlmICghZ3Jh
cGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgewotICAgICAgICAg
ICAgICAgIGlmIChtX2xvb3BzW2pdLmhlYWRlcigpID09IHN1Y2Nlc3NvcikgewotICAgICAgICAg
ICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBOYXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3Nvciwg
bV9sb29wcy5zaXplKCkpOwotICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7Ci0gICAg
ICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhp
cywgIlxuIik7Ci0gICAgCi0gICAgRmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOwotICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgND4gYmxvY2tXb3JrbGlzdDsKLSAgICBzZWVuQmxvY2tzLnJlc2l6ZShn
cmFwaC5udW1CbG9ja3MoKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwot
ICAgICAgICAKLSAgICAgICAgc2VlbkJsb2Nrcy5jbGVhckFsbCgpOwotICAgICAgICBBU1NFUlQo
YmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07KSB7
Ci0gICAgICAgICAgICBzZWVuQmxvY2tzW2xvb3Bbal0tPmluZGV4XSA9IHRydWU7Ci0gICAgICAg
ICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgd2hpbGUgKCFibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBEZWFsaW5nIHdpdGggIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOwotICAgICAgICAgICAgICAgIGlmIChz
ZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJl
ZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vz
c29yKTsKLSAgICAgICAgICAgICAgICBzZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRleF0gPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmlndXJlIG91
dCByZXZlcnNlIG1hcHBpbmcgZnJvbSBibG9ja3MgdG8gbG9vcHMuCi0gICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7IGktLTspCi0g
ICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbaV0gPSBVSU5UX01BWDsKLSAg
ICB9Ci0gICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9vcElu
ZGV4LS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tsb29wSW5kZXhd
OwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4SW5Mb29wID0gbG9v
cC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbG9vcFtibG9ja0luZGV4SW5Mb29wXTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0
TG9vcEluZGljZXM7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9
IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
c0luZGV4ID09IFVJTlRfTUFYIHx8IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNp
emUoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbnRvQm91bmRlZFZlY3RvcigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlcywgQmFzaWNC
bG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb3BJbmRleCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBO
b3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5uZXItbW9zdCBsb29wIGFuZCBpdHMgbmV4dC10by1p
bm5lci1tb3N0IGxvb3AuIFVzZQotICAgIC8vIHRoaXMgdG8gZmlndXJlIG91dCBsb29wIHBhcmVu
dGluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbaV07Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxvb3AuaGVhZGVyKCktPmlubmVyTW9zdExvb3BJbmRpY2VzWzBdID09IGkpOwotICAgICAg
ICAKLSAgICAgICAgbG9vcC5tX291dGVyTG9vcEluZGV4ID0gbG9vcC5oZWFkZXIoKS0+aW5uZXJN
b3N0TG9vcEluZGljZXNbMV07Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIC8vIERvIHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBk
b25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHkuCi0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwot
ICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gc2ltcGxlTG9v
cHNPZjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29w
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5jb250YWlu
cyhibG9jaykpCi0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5kKCZtX2xv
b3BzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gZmFuY3lMb29wc09mID0gbG9vcHNPZihibG9jayk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6c29ydChzaW1wbGVMb29wc09mLmJlZ2luKCksIHNp
bXBsZUxvb3BzT2YuZW5kKCkpOwotICAgICAgICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5i
ZWdpbigpLCBmYW5jeUxvb3BzT2YuZW5kKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzaW1wbGVMb29wc09mID09IGZhbmN5TG9vcHNPZik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlJlc3VsdHM6
ICIsICp0aGlzLCAiXG4iKTsKLX0KLQotTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9
Ci0KLVZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNp
Y0Jsb2NrKiBibG9jaykgY29uc3QKLXsKLSAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBy
ZXN1bHQ7Ci0gICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BP
ZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKGxvb3ApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTmF0
dXJhbExvb3BzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50
KCJOYXR1cmFsTG9vcHM6eyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9sb29wcy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBtX2xvb3BzW2ldKTsKLSAgICBvdXQucHJpbnQoIn0iKTsKLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkocmV2aXNpb24gMjE5
NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNywxNDIgKzI3LDIzIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdDRkcuaCIKICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1jbGFzcyBOYXR1cmFsTG9vcHM7Cit0eXBlZGVmIFdURjo6TmF0dXJhbExvb3A8Q0ZHPiBOYXR1
cmFsTG9vcDsKIAotY2xhc3MgTmF0dXJhbExvb3AgewotcHVibGljOgotICAgIE5hdHVyYWxMb29w
KCkKLSAgICAgICAgOiBtX2hlYWRlcigwKQotICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlO
VF9NQVgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBOYXR1cmFsTG9vcChCYXNpY0Jsb2NrKiBo
ZWFkZXIsIHVuc2lnbmVkIGluZGV4KQotICAgICAgICA6IG1faGVhZGVyKGhlYWRlcikKLSAgICAg
ICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBoZWFkZXIoKSBjb25zdCB7IHJl
dHVybiBtX2hlYWRlcjsgfQotICAgIAotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2JvZHkuc2l6ZSgpOyB9Ci0gICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5W2ldOyB9Ci0gICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUgc2xvd2Vy
LCBidXQgc2ltcGxlciwgd2F5IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KLSAgICAv
LyBhIG5hdHVyYWwgbG9vcC4gSXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJlbG9u
Z3NUbygpLCB3aGljaAotICAgIC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVyIHRo
YW4gTyhsb29wIHNpemUpLiBMb29wIGRlcHRoIGlzCi0gICAgLy8gYWxtb3N0IGFsd2F5cyBzbWFs
bGVyIHRoYW4gbG9vcCBzaXplLiBBICpsb3QqIHNtYWxsZXIuCi0gICAgYm9vbCBjb250YWlucyhC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fYm9keS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxv
Y2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNT
RVJUKGJsb2NrICE9IGhlYWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWluZWQuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgaW5kZXggb2YgdGhpcyBs
b29wIGluIE5hdHVyYWxMb29wcy4KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KLSAgICAKLSAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVg7IH0KLSAgICAKLSAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5hdHVyYWxM
b29wczsKLSAgICAKLSAgICB2b2lkIGFkZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fYm9k
eS5hcHBlbmQoYmxvY2spOyB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogbV9oZWFkZXI7Ci0gICAg
VmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBtX2JvZHk7Ci0gICAgdW5zaWduZWQgbV9vdXRlckxvb3BJ
bmRleDsKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotfTsKLQotY2xhc3MgTmF0dXJhbExvb3BzIHsK
K2NsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxDRkc+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYXR1cmFsTG9vcHMpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIE5hdHVyYWxMb29wcyhHcmFwaCYpOwotICAgIH5OYXR1
cmFsTG9vcHMoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1Mb29wcygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9sb29wcy5zaXplKCk7Ci0gICAgfQotICAgIGNvbnN0IE5hdHVyYWxM
b29wJiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sb29w
c1tpXTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRoZSBibG9j
ayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKLSAgICAvLyBsb29wIGl0IGJlbG9uZ3MgdG8u
Ci0gICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAotICAgIHsKLSAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29w
T2YoYmxvY2spOwotICAgICAgICBpZiAoIWxvb3ApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2NrKQotICAgICAgICAgICAgcmV0dXJuIGxv
b3A7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBmb3IgKDsg
bG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCi0gICAgICAgICAgICAgICAg
QVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9zdExvb3BP
ZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzWzBdOwotICAgICAgICBpZiAoaW5kZXggPT0g
VUlOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2xvb3Bz
W2luZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9zdE91
dGVyTG9vcChjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRlckxvb3BJbmRleF07Ci0gICAg
fQotICAgIAotICAgIGJvb2wgYmVsb25nc1RvKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBOYXR1
cmFsTG9vcCYgY2FuZGlkYXRlTG9vcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEl0J3MgZmFz
dGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0J3Mgc21hbGwu
Ci0gICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCi0gICAgICAgICAgICByZXR1
cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsg
bG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpIHsKLSAgICAgICAgICAgIGlmIChsb29w
ID09ICZjYW5kaWRhdGVMb29wKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbG9v
cERlcHRoKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIE5hdHVyYWxMb29wcyhHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPigqZ3JhcGgubV9jZmcsIGdy
YXBoLmVuc3VyZURvbWluYXRvcnMoKSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGRlcHRoID0g
MDsKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BP
ZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAg
ICAgICAgZGVwdGgrKzsKLSAgICAgICAgcmV0dXJuIGRlcHRoOwogICAgIH0KLSAgICAKLSAgICAv
LyBSZXR1cm4gdGhlIGluZGljZXMgb2YgYWxsIGxvb3BzIHRoaXMgYmVsb25ncyB0by4KLSAgICBW
ZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxvY2sqKSBjb25zdDsKLQot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotcHJpdmF0ZToKLSAgICAvLyBJZiB3
ZSBldmVyIGhhZCBhIHNjYWxhYmlsaXR5IHByb2JsZW0gaW4gb3VyIG5hdHVyYWwgbG9vcCBmaW5k
ZXIsIHdlIGNvdWxkCi0gICAgLy8gdXNlIHNvbWUgSGFzaE1hcCdzIGhlcmUuIEJ1dCBpdCBqdXN0
IGZlZWxzIGEgaGVjayBvZiBhIGxvdCBsZXNzIGNvbnZlbmllbnQuCi0gICAgVmVjdG9yPE5hdHVy
YWxMb29wLCA0PiBtX2xvb3BzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2
MDApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsNiArMTc4LDcgQEAKIAkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8q
IEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRv
bWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIxQkU1
QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzA0
NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAvKiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJEMURG
Q0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNjBGMzJFMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrZWRQcmludFN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFE
M0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDIsOCArMzQz
LDggQEAKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0b21pY1N0cmluZ1RhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJEOEY0MEExNzZDMkFEODAwMDJE
ODY1IC8qIEF0b21pY1N0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21pY1N0cmluZ1Rh
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0
OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUEzMEQ0MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2Z0TGlua2luZy5oOyBwYXRoID0gU29m
dExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTMwRDQxMkQxRjBERTEz
RjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFNvZnRMaW5raW5nLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTMwRDQxMkQxRjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5r
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QUZGMUMxNjlFMDcwMDA4Nzc5NyAvKiBT
YW5kYm94U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbmRib3hTUEku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwOThCMDExQzE2QTRGOTAwMDg3Nzk3
IC8qIFNlY3VyaXR5U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3Vy
aXR5U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NjFGMzBGMURGMjY0MjEw
MEZGNjc1RCAvKiBEZXByZWNhdGVkT3B0aW9uYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVwcmVjYXRlZE9wdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04NTYsNiArODU3LDcgQEAKIAkJCQkwRjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5jcHAgKi8sCiAJCQkJMEY2NkIyODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQdHIu
aCAqLywKKwkJCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmggKi8s
CiAJCQkJMUEzRjZCRTYxNzRBREEyMTAwQjJFRUE3IC8qIE5ldmVyRGVzdHJveWVkLmggKi8sCiAJ
CQkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovLAogCQkJCUE4QTQ3MkQw
MTUxQTgyNUIwMDQxMjNGRiAvKiBOb25jb3B5YWJsZS5oICovLApJbmRleDogU291cmNlL1dURi93
dGYvQmFja3dhcmRzR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWNrd2Fy
ZHNHcmFwaC5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWNrd2FyZHNH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1
ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTI0OCw2ICsyNDksMTMgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZ3JhcGgubnVtTm9kZXMoKSArIDE7CiAgICAgfQor
ICAgIAorICAgIElubmVyTW9zdExvb3BJbmRpY2VzJiBpbm5lck1vc3RMb29wSW5kaWNlcyhOb2Rl
IG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobm9kZS5pc1Jvb3QoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3Jvb3RJbm5lck1vc3RMb29wSW5kaWNlczsKKyAgICAgICAgcmV0dXJuIG1f
Z3JhcGguaW5uZXJNb3N0TG9vcEluZGljZXMobm9kZS5ub2RlKCkpOworICAgIH0KIAogICAgIENT
dHJpbmcgZHVtcChOb2RlIG5vZGUpIGNvbnN0CiAgICAgewpAQCAtMjg1LDYgKzI5Myw3IEBAIHBy
aXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgTGlzdCBtX3Jvb3RTdWNjZXNzb3JMaXN0
OwogICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgbV9yb290U3VjY2Vzc29yU2V0OworICAgIG11dGFi
bGUgSW5uZXJNb3N0TG9vcEluZGljZXMgbV9yb290SW5uZXJNb3N0TG9vcEluZGljZXM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFs
TG9vcHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExvb3Agewor
cHVibGljOgorICAgIE5hdHVyYWxMb29wKCkKKyAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisg
ICAgICAgICwgbV9oZWFkZXIobnVsbHB0cikKKyAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJ
TlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTmF0dXJhbExvb3AoR3JhcGgmIGdyYXBo
LCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBoZWFkZXIsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICA6
IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAsIG1faGVhZGVyKGhlYWRlcikKKyAgICAgICAgLCBt
X291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBHcmFwaCogZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBo
OyB9CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gbV9oZWFkZXI7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ib2R5LnNpemUoKTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKworICAgIC8vIFRo
aXMgaXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBi
ZWxvbmdzIHRvCisgICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0
dXJhbExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKKyAgICAvLyB0cmllcyB0byBiZSBPKGxvb3Ag
ZGVwdGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcworICAgIC8vIGFs
bW9zdCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgorICAg
IGJvb2wgY29udGFpbnModHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIoKSk7IC8vIEhlYWRl
ciBzaG91bGQgYmUgY29udGFpbmVkLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMuCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgYm9vbCBpc091
dGVyTW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFY
OyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIW1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dC5w
cmludCgiW0hlYWRlcjogIiwgbV9ncmFwaC0+ZHVtcChoZWFkZXIoKSksICIsIEJvZHk6Iik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JvZHkuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAiLCBtX2dyYXBoLT5kdW1wKG1fYm9keVtpXSkpOworICAgICAg
ICBvdXQucHJpbnQoIl0iKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBOYXR1cmFsTG9vcHM7CisgICAgCisgICAgdm9pZCBhZGRCbG9jayh0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQorCisgICAgR3JhcGgqIG1fZ3Jh
cGg7CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgbV9oZWFkZXI7CisgICAgVmVjdG9yPHR5cGVu
YW1lIEdyYXBoOjpOb2RlLCA0PiBtX2JvZHk7CisgICAgdW5zaWduZWQgbV9vdXRlckxvb3BJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKwordHlwZWRlZiBzdGQ6OmFycmF5PHVuc2ln
bmVkLCAyPiBJbm5lck1vc3RMb29wSW5kaWNlczsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+
CitjbGFzcyBOYXR1cmFsTG9vcHMgeworcHVibGljOgorICAgIE5hdHVyYWxMb29wcyhHcmFwaCYg
Z3JhcGgsIERvbWluYXRvcnM8R3JhcGg+JiBkb21pbmF0b3JzKQorICAgICAgICA6IG1fZ3JhcGgo
Z3JhcGgpCisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9taW5hdG9y
LWJhc2VkIG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdAorICAgICAgICAvLyBzdGVwIGlz
IHRvIGZpbmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMg
QS4KKyAgICAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2Fy
ZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKKyAgICAgICAgLy8gdGhlbiBhY2N1bXVsYXRlLCBm
b3IgZWFjaCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAg
IC8vIGJsb2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3
YXJkIGJyYW5jaGluZworICAgICAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3
aGljaCBnaXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKKyAgICAgICAgLy8gbG9vcCBi
b2R5LgorICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cisg
ICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJEb21pbmF0
b3JzOlxuIik7CisgICAgICAgICAgICBkb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICAgICAgfQorICAgIAorICAgICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKKyAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5u
b2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFw
aC5zdWNjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBzdWNjZXNzb3IgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2NrKVtpXTsK
KyAgICAgICAgICAgICAgICBpZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxv
Y2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29w
cy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVh
ZGVyKCkgPT0gc3VjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pd
LmFkZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+IGxv
b3AoZ3JhcGgsIHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGxv
b3AuYWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3Ap
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7Cisg
ICAgCisgICAgICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKKyAgICAgICAgVmVjdG9yPHR5
cGVuYW1lIEdyYXBoOjpOb2RlLCA0PiBibG9ja1dvcmtsaXN0OworICAgICAgICBzZWVuQmxvY2tz
LnJlc2l6ZShncmFwaC5udW1Ob2RlcygpKTsKKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBo
PiYgbG9vcCA9IG1fbG9vcHNbaV07CisgICAgICAgIAorICAgICAgICAgICAgc2VlbkJsb2Nrcy5j
bGVhckFsbCgpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKTsK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAg
ICAgIHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgobG9vcFtqXSldID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRh
a2VMYXN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCBncmFwaC5kdW1w
KGJsb2NrKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2sg
PT0gbG9vcC5oZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBncmFwaC5wcmVkZWNlc3Nv
cnMoYmxvY2spLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBwcmVkZWNlc3NvciA9IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbal07Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRlY2Vzc29y
KV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2VlbkJsb2Nrc1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBGaWd1cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5u
b2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEJhc2ljQmxvY2s6Om51
bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7IGktLTspCisgICAgICAgICAgICAgICAgYmxvY2st
PmlubmVyTW9zdExvb3BJbmRpY2VzW2ldID0gVUlOVF9NQVg7CisgICAgICAgIH0KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9vcEluZGV4LS07KSB7
CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xvb3BzW2xvb3BJbmRl
eF07CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4SW5Mb29w
ID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsKKyAgICAgICAgICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGxvb3BbYmxvY2tJbmRleEluTG9vcF07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjp0
dWJsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWU7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0aGlzSW5kZXggPSBncmFwaC5pbm5lck1vc3RMb29wSW5kaWNl
cyhibG9jaylbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzSW5kZXggPT0gVUlOVF9N
QVggfHwgbG9vcC5zaXplKCkgPCBtX2xvb3BzW3RoaXNJbmRleF0uc2l6ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRJbnRvQm91bmRlZFZlY3RvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncmFwaC5pbm5lck1vc3RMb29wSW5kaWNlcyhibG9jayksIHN0ZDo6dHVi
bGVfc2l6ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvb3BJbmRleCwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5u
ZXItbW9zdCBsb29wIGFuZCBpdHMgbmV4dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQorICAgICAg
ICAvLyB0aGlzIHRvIGZpZ3VyZSBvdXQgbG9vcCBwYXJlbnRpbmcuCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOYXR1cmFsTG9v
cDxHcmFwaD4mIGxvb3AgPSBtX2xvb3BzW2ldOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Z3JhcGguaW5uZXJNb3N0TG9vcEluZGljZXMobG9vcC5oZWFkZXIoKSlbMF0gPT0gaSk7CisgICAg
ICAgIAorICAgICAgICAgICAgbG9vcC5tX291dGVyTG9vcEluZGV4ID0gZ3JhcGguaW5uZXJNb3N0
TG9vcEluZGljZXMobG9vcC5oZWFkZXIoKSlbMV07CisgICAgICAgIH0KKyAgICAKKyAgICAgICAg
aWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIERvIHNvbWUgc2VsZi12
ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHkuCisgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9k
ZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpO
b2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBzaW1wbGVMb29w
c09mOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0u
Y29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlTG9vcHNPZi5h
cHBlbmQoJm1fbG9vcHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBmYW5jeUxvb3Bz
T2YgPSBsb29wc09mKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ZDo6
c29ydChzaW1wbGVMb29wc09mLmJlZ2luKCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOworICAgICAg
ICAgICAgICAgIHN0ZDo6c29ydChmYW5jeUxvb3BzT2YuYmVnaW4oKSwgZmFuY3lMb29wc09mLmVu
ZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpbXBs
ZUxvb3BzT2YgPT0gZmFuY3lMb29wc09mKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIs
ICp0aGlzLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4g
bV9ncmFwaDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUxvb3BzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xvb3BzLnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgTmF0dXJhbExv
b3A8R3JhcGg+JiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9sb29wc1tpXTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRo
ZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKKyAgICAvLyBsb29wIGl0IGJlbG9u
Z3MgdG8uCisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBoZWFkZXJPZih0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29w
PEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgIGlmICghbG9v
cCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobG9vcC0+aGVhZGVyKCkgPT0g
YmxvY2spCisgICAgICAgICAgICByZXR1cm4gbG9vcDsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAoOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJM
b29wKCpsb29wKSkKKyAgICAgICAgICAgICAgICBBU1NFUlQobG9vcC0+aGVhZGVyKCkgIT0gYmxv
Y2spOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBOYXR1cmFsTG9vcDxHcmFwaD4qIGlubmVyTW9zdExvb3BPZih0eXBlbmFtZSBHcmFoOjpOb2Rl
IGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBibG9jay0+aW5u
ZXJNb3N0TG9vcEluZGljZXNbMF07CisgICAgICAgIGlmIChpbmRleCA9PSBVSU5UX01BWCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJm1fbG9vcHNbaW5kZXhdOworICAg
IH0KKyAgICAKKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGlubmVyTW9zdE91dGVyTG9v
cChjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3ApIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobG9vcC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOworICAg
IH0KKyAgICAKKyAgICBib29sIGJlbG9uZ3NUbyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaywg
Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+JiBjYW5kaWRhdGVMb29wKSBjb25zdAorICAgIHsKKyAg
ICAgICAgLy8gSXQncyBmYXN0ZXIgdG8gZG8gdGhpcyB0ZXN0IHVzaW5nIHRoZSBsb29wIGl0c2Vs
ZiwgaWYgaXQncyBzbWFsbC4KKyAgICAgICAgaWYgKGNhbmRpZGF0ZUxvb3Auc2l6ZSgpIDwgNCkK
KyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMb29wLmNvbnRhaW5zKGJsb2NrKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJN
b3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkp
IHsKKyAgICAgICAgICAgIGlmIChsb29wID09ICZjYW5kaWRhdGVMb29wKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgbG9vcERlcHRoKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgZGVwdGggPSAwOworICAgICAgICBmb3Ig
KGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7
IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgZGVw
dGgrKzsKKyAgICAgICAgcmV0dXJuIGRlcHRoOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4g
YWxsIGxvb3BzIHRoaXMgYmVsb25ncyB0by4gVGhlIGZpcnN0IGVudHJ5IGluIHRoZSB2ZWN0b3Ig
aXMgdGhlIGlubmVybW9zdCBsb29wLiBUaGUgbGFzdCBpcyB0aGUKKyAgICAvLyBvdXRlcm1vc3Qg
bG9vcC4KKyAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gbG9vcHNPZih0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjxjb25z
dCBOYXR1cmFsTG9vcDxHcmFwaD4qPiByZXN1bHQ7CisgICAgICAgIGZvciAoY29uc3QgTmF0dXJh
bExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9
IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxv
b3ApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIk5hdHVyYWxMb29wczp7
Iik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbG9vcHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG1fbG9vcHNbaV0pOworICAgICAgICBvdXQucHJpbnQoIn0iKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIC8vIElmIHdlIGV2ZXIgaGFk
IGEgc2NhbGFiaWxpdHkgcHJvYmxlbSBpbiBvdXIgbmF0dXJhbCBsb29wIGZpbmRlciwgd2UgY291
bGQKKyAgICAvLyB1c2Ugc29tZSBIYXNoTWFwJ3MgaGVyZS4gQnV0IGl0IGp1c3QgZmVlbHMgYSBo
ZWNrIG9mIGEgbG90IGxlc3MgY29udmVuaWVudC4KKyAgICBWZWN0b3I8TmF0dXJhbExvb3A8R3Jh
cGg+LCA0PiBtX2xvb3BzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
SW5uZXJNb3N0TG9vcEluZGljZXM7Cit1c2luZyBXVEY6Ok5hdHVyYWxMb29wOwordXNpbmcgV1RG
OjpOYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNv
dXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAg
bmFtZXNwYWNlIFdURiB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBSYW5nZVR5cGU+CiBjbGFzcyBSYW5n
ZVNldCB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8UmFuZ2UsIDg+IFZlY3RvclR5cGU7
CisgICAgCiAgICAgdHlwZWRlZiBSYW5nZVR5cGUgUmFuZ2U7CiAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBSYW5nZTo6VHlwZSBUeXBlOwogCkBAIC0xMjUsOCArMTI3LDIzIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIG91dC5wcmludCgieyIsIGxpc3REdW1wKG1fcmFuZ2VzKSwgIiwgaXNDb21wYWN0
ID0gIiwgbV9pc0NvbXBhY3QsICJ9Iik7CiAgICAgfQorICAgIAorICAgIFZlY3RvclR5cGU6OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jhbmdl
cy5iZWdpbigpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3JUeXBlOjpjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2VzLmVuZCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZEFsbChjb25zdCBSYW5nZVNldCYgb3RoZXIpCisgICAgeworICAg
ICAgICBmb3IgKFJhbmdlIHJhbmdlIDogb3RoZXIpCisgICAgICAgICAgICBhZGQocmFuZ2UpOwor
ICAgIH0KIAotcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3QoKQogICAgIHsKICAgICAgICAgaWYg
KG1faXNDb21wYWN0KQpAQCAtMTY0LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faXND
b21wYWN0ID0gdHJ1ZTsKICAgICB9CiAgICAgCitwcml2YXRlOgogICAgIHN0YXRpYyBib29sIG92
ZXJsYXBzTm9uRW1wdHkoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdlJiBiKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChhLmJlZ2luKCksIGEuZW5kKCksIGIu
YmVnaW4oKSwgYi5lbmQoKSk7CkBAIC0xODcsNyArMjA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8UmFuZ2UsIDg+IG1fcmFu
Z2VzOworICAgIFZlY3RvclR5cGUgbV9yYW5nZXM7CiAgICAgYm9vbCBtX2lzQ29tcGFjdCB7IHRy
dWUgfTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316196</attachid>
            <date>2017-07-22 09:56:21 -0700</date>
            <delta_ts>2017-07-22 21:11:44 -0700</delta_ts>
            <desc>wrote the pre-header creation</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78781</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxNCBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTZEMUYyM0EyNUEwMDI5
RDkxRCAvKiBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyog
QjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQkwRjVCRjE3MDFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyog
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNG
OTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU3LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAq
LzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1
MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjgs
NiArMzAzNSwxNCBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdl
LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRs
L0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIz
L0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM05h
dHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9
IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHBhdGgg
PSBiMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBw
YXRoID0gYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMx
ODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzksNiBAQAogCQlB
NzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3Bz
LmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRo
ID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtH
ZW5lcmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ3
MCw4IEBACiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNw
cCAqLywKIAkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICov
LAorCQkJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAor
CQkJCTBGNUJGMTZBMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAq
LywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkw
RjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NDk4LDYgKzU1MTQsNyBA
QAogCQkJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywK
IAkJCQkwRjMzOERGMzFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmgg
Ki8sCisJCQkJMEY1QkYxNkMxRjIzQTI1QTAwMjlEOTFEIC8qIEIzQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmgg
Ki8sCkBAIC01NTA3LDYgKzU1MjQsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAw
QUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCisJ
CQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAq
LywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywK
IAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmggKi8sCiAJCQkJ
MEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmNwcCAqLywKQEAgLTU1MjEsNiAr
NTU0MCw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLAogCQkJCTBGRUM4NUI0MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCkBAIC01NTQ0LDYgKzU1NjUsNyBA
QAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICov
LAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywK
IAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCAqLywKKwkJ
CQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkw
RjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKIAkJCQkw
RjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKIAkJ
CQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCkBA
IC03MzY4LDcgKzczOTAsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDksNyBAQAogCQkJCTBGQkI3M0JCMURF
Rjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5NCw3IEBACiAJCQkJMEYxRkIzOTcxRTFBRjdF
MzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJl
TG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYx
RjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMCArODg3OSwxMiBAQAogCQkJ
CUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFE
IC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY3MUYyM0EwOTgwMDI5RDkx
RCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzkyMTIxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTE1NCw2ICs5MTc5LDcgQEAKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
RDFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjA4QUQ3MURGMDkyNUQwMDdEMzI2OSAvKiBMb2NrRHVyaW5n
TWFya2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTYzLDYgKzkxODksNyBAQAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBG
RERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2Miw3ICsxMDM4OSw2IEBACiAJCQkJ
MEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyog
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNzgxMEQx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDcyMyw2ICsxMDc0OSw3IEBACiAJCQkJ
QUQyRkNCRTgxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0
OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNjMxRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc4OSw2ICsxMDgxNiw3IEBACiAJCQkJMEZE
M0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTcwMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NTAxMDdFQzBENzAwMTNFN0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0JhY2t3YXJkc0dyYXBoLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2FyZHNDRkcg
OiBwdWJsaWMgQmFja3dhcmRzR3JhcGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFja3dhcmRzQ0ZHKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBCYWNrd2FyZHNDRkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBo
PENGRz4ocHJvYy5jZmcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWluYXRvcnMoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+KHByb2MuYmFja3dh
cmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDggQEAg
cHVibGljOgogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVmFsdWUqIGFwcGVuZE5ld0NvbnRyb2xWYWx1ZShQcm9jZWR1cmUmLCBPcGNvZGUsIE9yaWdp
biwgVmFsdWUqLCBjb25zdCBGcmVxdWVudGVkQmxvY2smLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
KTsKICAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMo
KSB7IHJldHVybiBtX2lubmVyTW9zdExvb3BJbmRpY2VzOyB9CisgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwpAQCAtMTc2LDYgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgUHJlZGVjZXNzb3JMaXN0
IG1fcHJlZGVjZXNzb3JzOwogICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOwogICAgIGRv
dWJsZSBtX2ZyZXF1ZW5jeTsKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBtX2lubmVyTW9zdExv
b3BJbmRpY2VzOwogfTsKIAogY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5pbmRl
eCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3By
b2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX3By
b2Muc2l6ZSgpOyB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMmIGlubmVyTW9zdExv
b3BJbmRpY2VzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+aW5uZXJNb3N0TG9vcEluZGljZXMo
KTsgfQogCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2RlIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgiCisjaW5j
bHVkZSAiQjNEb21pbmF0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKFByb2NlZHVy
ZSYgcHJvYykKKyAgICAgICAgOiBtX2RvbWluYXRvcnMocHJvYy5kb21pbmF0b3JzKCkpCisgICAg
ICAgICwgbV9iYWNrd2FyZHNEb21pbmF0b3JzKHByb2MuYmFja3dhcmRzRG9taW5hdG9ycygpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmOgorICAgIC8v
CisgICAgLy8gLSBJZiBiIGV4ZWN1dGVzIHRoZW4gYSBtdXN0IGhhdmUgZXhlY3V0ZWQgYmVmb3Jl
IGl0IChhIGRvbWluYXRlcyBiKS4KKyAgICAvLyAtIElmIGEgZXhlY3V0ZXMgdGhlbiBiIHdpbGwg
ZXhlY3V0ZSBhZnRlciBpdCAoYiBiYWNrd2FyZHMtZG9taW5hdGVzIGEpLgorICAgIGJvb2wgZG9t
aW5hdGVzRXF1aXZhbGVudGx5KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9kb21pbmF0b3JzLmRvbWluYXRlcyhhLCBiKQorICAgICAgICAgICAg
JiYgbV9iYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyhiLCBhKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWZmIHRoZSBleGVjdXRpb24gb2YgYSBpbXBsaWVzIHRo
YXQgYiBhbHNvIGV4ZWN1dGVzIGFuZCB2aWNlLXZlcnNhLgorICAgIGJvb2wgYXJlRXF1aXZhbGVu
dChCYXNpY0Jsb2NrKiBhLCBCYXNpY0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRv
bWluYXRlc0VxdWl2YWxlbnRseShhLCBiKQorICAgICAgICAgICAgfHwgZG9taW5hdGVzRXF1aXZh
bGVudGx5KGIsIGEpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEb21pbmF0b3JzJiBtX2RvbWlu
YXRvcnM7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgbV9iYWNrd2FyZHNEb21pbmF0b3JzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjE5NjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw2ICs3NSw5IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAvLyBNZW1vcnkgZmVuY2Vz
IGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVp
ciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQKICAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEg
bWVtb3J5IGZlbmNlLgogICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OworICAgIAorICAgIC8vIFdB
Uk5JTkc6IFRoZSBCMzo6aG9pc3RMb29wSW52YXJpYW50VmFsdWVzKCkgcGhhc2UgdGhpbmtzIHRo
YXQgaXQgdW5kZXJzdGFuZHMgdGhpcyBleGhhdXN0aXZlbHkuIElmIHlvdQorICAgIC8vIGFkZCBh
bnkgbmV3IGtpbmRzIG9mIHRoaW5ncyB0aGF0IGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4sIHlvdSBz
aG91bGQgY2hlY2sgdGhhdCBwaGFzZS4KIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVh
cFJhbmdlIHJlYWRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9v
cFByZUhlYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVy
cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNOYXR1
cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9v
bCBlbnN1cmVMb29wUHJlSGVhZGVycyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgTmF0dXJhbExv
b3BzJiBsb29wcyA9IHByb2MubmF0dXJhbExvb3BzKCk7CisgICAgCisgICAgQmxvY2tJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcElu
ZGV4ID0gbG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5h
dHVyYWxMb29wJiBsb29wID0gbG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBvdXRPZkJvZHlQcmVkZWNlc3NvcnM7CisgICAgICAg
IGRvdWJsZSB0b3RhbEZyZXF1ZW5jeSA9IDA7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IgOiBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAg
aWYgKGxvb3BzLmJlbG9uZ3NUbyhwcmVkZWNlc3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dE9mQm9keVByZWRlY2Vzc29y
cy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgdG90YWxGcmVxdWVuY3kgKz0gcHJl
ZGVjZXNzb3ItPmZyZXF1ZW5jeSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
b3V0T2ZCb2R5UHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVyKCksIHRvdGFsRnJlcXVlbmN5KTsKKyAgICAgICAgcHJl
SGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIGxvb3AuaGVhZGVyKCktPmF0KDAp
LT5vcmlnaW4oKSk7CisgICAgICAgIHByZUhlYWRlci0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVk
QmxvY2sobG9vcC5oZWFkZXIoKSkpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA6IG91dE9mQm9keVByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgcHJl
ZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3IobG9vcC5oZWFkZXIoKSwgcHJlSGVhZGVyKTsKKyAg
ICAgICAgICAgIHByZUhlYWRlci0+YWRkUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAg
ICAgICAgbG9vcC5oZWFkZXIoKS0+cmVtb3ZlUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBsb29wLmhlYWRlcigpLT5hZGRQcmVkZWNlc3Nvcihw
cmVIZWFkZXIpOworICAgIH0KKyAgICAKKyAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkg
eworICAgICAgICBwcm9jLmludmFsaWRhdGVDRkcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8g
Q3JlYXRlcyBhIHByZS1oZWFkZXIgZm9yIGFueSBsb29wIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZl
IG9uZS4gQSBsb29wIGhhcyBhIHByZS1oZWFkZXIgaWYgaXRzIGhlYWRlciBoYXMKKy8vIGV4YWN0
bHkgb25lIHByZWRlY2Vzc29yIHRoYXQgaXNuJ3QgaW4gdGhlIGxvb3AgYm9keS4gSWYgYSBsb29w
IGhlYWRlciBoYXMgbW9yZSB0aGFuIG9uZSBvdXQtb2YtYm9keQorLy8gcHJlZGVjZXNzb3IsIHRo
ZW4gdGhpcyBjcmVhdGVzIGEgbmV3IGJsb2NrIGFuZCByZXdpcmVzIHRob3NlIHByZWRlY2Vzc29y
cyB0byBpdC4KKworYm9vbCBlbnN1cmVMb29wUHJlSGVhZGVycyhQcm9jZWR1cmUmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE5NjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucy5oIgogI2luY2x1ZGUgIkIzRml4U1NBLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0
YW50cy5oIgorI2luY2x1ZGUgIkIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVk
ZSAiQjNJbmZlclN3aXRjaGVzLmgiCiAjaW5jbHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMu
aCIKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9zLmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2Vu
ZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExl
dmVsKCkgPj0gMikgewogICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAg
ICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFy
aWFudFZhbHVlcyhwcm9jZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAg
ICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50
VmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb250
cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgorI2lu
Y2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgaG9pc3RMb29wSW52YXJp
YW50VmFsdWVzKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
cHJvYywgImhvaXN0TG9vcEludmFyaWFudFZhbHVlcyIpOworICAgIAorICAgIGVuc3VyZUxvb3BQ
cmVIZWFkZXJzKCk7CisgICAgCisgICAgcHJvYy5yZXNldEJsb2NrT3duZXJzKCk7CisgICAgRG9t
aW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9ycygpOworICAgIE5hdHVyYWxMb29w
cyYgbG9vcHMgPSBwcm9jLm5hdHVyYWxMb29wcygpOworICAgIENvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzJiBjb250cm9sRXF1aXZhbGVuY2UgPSBwcm9jLmNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5
c2lzKCk7CisgICAgCisgICAgc3RydWN0IExvb3BEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVh
cFJhbmdlPiB3cml0ZXM7CisgICAgICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAg
Ym9vbCB3cml0ZXNQaW5uZWQ7CisgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciB7IG51bGxw
dHIgfTsKKyAgICB9OworICAgIAorICAgIEluZGV4TWFwPE5hdHVyYWxMb29wLCBMb29wRGF0YT4g
ZGF0YShsb29wcy5udW1Mb29wcygpKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRl
eCA9IGxvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1
cmFsTG9vcCYgbG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBwcmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycygpKSB7Cisg
ICAgICAgICAgICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29yLCBsb29wKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhW2xv
b3BdLnByZUhlYWRlcik7CisgICAgICAgICAgICBkYXRhW2xvb3BdLnByZUhlYWRlciA9IHByZWRl
Y2Vzc29yOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBwcm9jKSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbG9vcHMuaW5u
ZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAg
ICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgZGF0YVsq
bG9vcF0ud3JpdGVzLmFkZChlZmZlY3RzLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWypsb29w
XS53cml0ZXNMb2NhbFN0YXRlIHw9IGVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAg
ICAgIGRhdGFbKmxvb3BdLndyaXRlc1Bpbm5lZCB8PSBlZmZlY3RzLndyaXRlc1Bpbm5lZDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IGxvb3Bz
Lm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYg
bG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFs
TG9vcCogY3VycmVudCA9ICZsb29wOyBjdXJyZW50OyBjdXJyZW50ID0gbG9vcHMuaW5uZXJNb3N0
T3V0ZXJMb29wKCpjdXJyZW50KSkgeworICAgICAgICAgICAgZGF0YVsqY3VycmVudF0ud3JpdGVz
LmFkZEFsbChkYXRhW2xvb3BdLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWypjdXJyZW50XS53
cml0ZXNMb2NhbFN0YXRlIHw9IGRhdGFbbG9vcF0ud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAgICAg
ICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlc1Bpbm5lZCB8PSBkYXRhW2xvb3BdLndyaXRlc1Bpbm5l
ZDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAgICAgICBWZWN0b3I8
Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wcyA9IGxvb3BzLmxvb3BzT2YoYmxvY2spOworICAgICAg
ICBpZiAobG9vcHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBmb3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIEVmZmVj
dHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAgICAgICAgICBpZiAoZWZmZWN0cy5t
dXN0RXhlY3V0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9ICpsb29wc1tpXTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZG9taW5hdG9ycy5kb21pbmF0ZXMoY2hpbGQtPm93bmVyLCBsb29wLnByZUhl
YWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZWZmZWN0cy5jb250
cm9sRGVwZW5kZW50CisgICAgICAgICAgICAgICAgICAgICYmICFjb250cm9sRXF1aXZhbGVuY2Uu
ZG9taW5hdGVzRXF1aXZhbGVudGx5KGRhdGEucHJlSGVhZGVyLCBibG9jaykpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChlZmZlY3RzLnJlYWRzUGlubmVkICYmIGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgJiYgZGF0YVtsb29wXS5yZWFkc0xvY2FsU3Rh
dGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChkYXRhW2xvb3BdLndyaXRlcy5jb250YWlucyhlZmZlY3RzLnJlYWRz
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbG9vcC5wcmVIZWFkZXItPmFwcGVuZE5vblRlcm1pbmFsKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHByb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVlLT5v
cmlnaW4oKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50
VmFsdWVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBsb29wLWludmFyaWFudCBjb2Rl
IG1vdGlvbiAoTElDTSkuIEl0IGNhbiBob2lzdCBwdXJlIHZhbHVlcyBhcyB3ZWxsIGFzIHJlYWRz
IG9mIHN0YXRlIHRoYXQgaXNuJ3QKKy8vIG1vZGlmaWVkIGluc2lkZSB0aGUgbG9vcC4KKworYm9v
bCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcuaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3R5cGVkZWYgV1RGOjpOYXR1cmFs
TG9vcDxDRkc+IE5hdHVyYWxMb29wOworCitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RG
OjpOYXR1cmFsTG9vcHM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExv
b3BzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYXR1cmFs
TG9vcHMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4o
cHJvYy5jZmcoKSwgcHJvYy5kb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTk2MDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMiArMjksMTYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSAiQjNCYWNr
d2FyZHNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0Lmgi
CiAjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5
c2lzLmgiCiAjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgogI2luY2x1ZGUgIkIzRG9taW5hdG9y
cy5oIgorI2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXBy
b2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNQaGlDaGlsZHJlbi5oIgogI2luY2x1ZGUgIkIzU3RhY2tT
bG90LmgiCkBAIC0yMDAsNiArMjA0LDEwIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJlYWNoYWJp
bGl0eSgpCiB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiB7CiAgICAgbV9kb21pbmF0
b3JzID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CisgICAgbV9iYWNr
d2FyZHNDRkcgPSBudWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7
CisgICAgbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CiB9CiAKIHZvaWQg
UHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0yOTEsNiArMjk5LDM0
IEBAIERvbWluYXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCiAgICAgcmV0dXJuICptX2Rv
bWluYXRvcnM7CiB9CiAKK05hdHVyYWxMb29wcyYgUHJvY2VkdXJlOjpuYXR1cmFsTG9vcHMoKQor
eworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3BzID0gc3Rk
Ojp1bmlxdWVfcHRyPE5hdHVyYWxMb29wcz4oKnRoaXMpOworICAgIHJldHVybiAqbV9uYXR1cmFs
TG9vcHM7Cit9CisKK0JhY2t3YXJkc0NGRyYgUHJvY2VkdXJlOjpiYWNrd2FyZHNDRkcoKQorewor
ICAgIGlmICghbV9iYWNrd2FyZHNDRkcpCisgICAgICAgIG1fYmFja3dhcmRzQ0ZHID0gc3RkOjp1
bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHND
Rkc7Cit9CisKK0JhY2t3YXJkc0RvbWluYXRvcnMmIFByb2NlZHVyZTo6YmFja3dhcmRzRG9taW5h
dG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRvcnMpCisgICAgICAgIG1fYmFj
a3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPigq
dGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7Cit9CisKK0NvbnRyb2xF
cXVpdmFsZW5jZUFuYWx5c2lzJiBQcm9jZWR1cmU6OmNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
KCkKK3sKKyAgICBpZiAoIW1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpCisgICAgICAgIG1f
Y29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2
YWxlbmNlQW5hbHlzaXM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fY29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXM7Cit9CisKIHZvaWQgUHJvY2VkdXJlOjphZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFs
dWVLZXkmIGNvbnN0YW50KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3Rh
bnQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNp
b24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKIAorY2xhc3MgQmFja3dhcmRzQ0ZHOworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9y
czsKIGNsYXNzIEJhc2ljQmxvY2s7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENG
RzsKK2NsYXNzIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5hdG9yczsK
K2NsYXNzIE5hdHVyYWxMb29wczsKIGNsYXNzIFN0YWNrU2xvdDsKIGNsYXNzIFZhbHVlOwogY2xh
c3MgVmFyaWFibGU7CkBAIC0xNzUsNiArMTc5LDEwIEBAIHB1YmxpYzoKICAgICBDRkcmIGNmZygp
IGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQogCiAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycygp
OworICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dhcmRzQ0ZHJiBi
YWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNEb21pbmF0
b3JzKCk7CisgICAgQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIGNvbnRyb2xFcXVpdmFsZW5j
ZUFuYWx5c2lzKCk7CiAKICAgICB2b2lkIGFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtleSYp
OwogICAgIGJvb2wgaXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsKQEAgLTI3MSw2ICsy
NzksMTAgQEAgcHJpdmF0ZToKICAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiBtX3ZhbHVlczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9t
aW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+
IG1fbmF0dXJhbExvb3BzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+IG1fYmFj
a3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3JzPiBtX2Jh
Y2t3YXJkc0RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRyb2xFcXVpdmFsZW5j
ZUFuYWx5c2lzPiBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogICAgIEhhc2hTZXQ8VmFs
dWVLZXk+IG1fZmFzdENvbnN0YW50czsKICAgICB1bnNpZ25lZCBtX251bUVudHJ5cG9pbnRzIHsg
MSB9OwogICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1OTIsNiArMTQ1OTIsMTEg
QEAgdm9pZCB0ZXN0T3B0aW1pemVNYXRlcmlhbGl6YXRpb24oKQogICAgIENIRUNLKGZvdW5kKTsK
IH0KIAordm9pZCB0ZXN0TElDTSgpCit7CisgICAgLy8gRklYTUU6IGNyZWF0ZSBhIGxvb3AgYW5k
IGhhdmUgaXQgY2FsbCBhIGZ1bmN0aW9uIHdpdGggbm8gd3JpdGUgZWZmZWN0cy4KK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogewpAQCAtMTcwMzQs
NyArMTcwMzksOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RM
b2FkQmFzZUluZGV4U2hpZnQyKCkpOwogICAgIFJVTih0ZXN0TG9hZEJhc2VJbmRleFNoaWZ0MzIo
KSk7CiAgICAgUlVOKHRlc3RPcHRpbWl6ZU1hdGVyaWFsaXphdGlvbigpKTsKLSAgICAKKyAgICBS
VU4odGVzdExJQ00oKSk7CisKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50OF90PigpKTsK
ICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50MTZfdD4oKSk7CiAgICAgUlVOKHRlc3RBdG9t
aWNXZWFrQ0FTPGludDMyX3Q+KCkpOwpAQCAtMTcwODcsNyArMTcwOTMsNyBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RGbG9hdEVxdWFsT3JVbm9yZGVyZWRGb2xk
aW5nKCkpOwogICAgIFJVTih0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRm9sZGluZ05hTigpKTsK
ICAgICBSVU4odGVzdEZsb2F0RXF1YWxPclVub3JkZXJlZERvbnRGb2xkKCkpOwotCisgICAgCiAg
ICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24o
SWRlbnRpdHksIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWlyOjpBcmc6OlRtcCkpOwog
ICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDB4
ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6VG1wKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyOSw4ICsyMjksOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9j
CiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCiAgICAgLy8gVGhlc2UgZmllbGRzIGFy
ZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzID0gMjsKLSAgICB1bnNpZ25lZCBpbm5lck1vc3RM
b29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsKKyAgICAKKyAgICBJbm5l
ck1vc3RMb29wSW5kaWNlcyBpbm5lck1vc3RMb29wSW5kaWNlczsKIAogICAgIHN0cnVjdCBTU0FE
YXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gbm9kZS0+aW5k
ZXg7IH0KICAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jh
cGguYmxvY2soaW5kZXgpOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVy
biBtX2dyYXBoLm51bUJsb2NrcygpOyB9CisgICAgCisgICAgSW5uZXJNb3N0TG9vcEluZGljZXMm
IGlubmVyTW9kZUxvb3BJbmRpY2VzKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gbm9kZS0+aW5u
ZXJNb3N0TG9vcEluZGljZXM7IH0KIAogICAgIFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAo
Tm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBwb2ludGVyRHVtcChub2RlKTsgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShyZXZpc2lv
biAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
REZHTmF0dXJhbExvb3BzLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRG
R0RvbWluYXRvcnMuaCIKLSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKLQotdm9pZCBOYXR1cmFsTG9vcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotewotICAgIG91dC5wcmludCgiW0hlYWRlcjogIiwgKmhlYWRlcigpLCAiLCBCb2R5
OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JvZHkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIG91dC5wcmludCgiICIsICptX2JvZHlbaV0pOwotICAgIG91dC5wcmludCgiXSIpOwot
fQotCi1OYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcyhHcmFwaCYgZ3JhcGgpCi17Ci0gICAgQVNT
RVJUKGdyYXBoLm1fZG9taW5hdG9ycyk7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMg
ZG9taW5hdG9yLWJhc2VkIG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdAotICAgIC8vIHN0
ZXAgaXMgdG8gZmluZCBhbGwgY29udHJvbCBmbG93IGVkZ2VzIEEgLT4gQiB3aGVyZSBCIGRvbWlu
YXRlcyBBLgotICAgIC8vIFRoZW4gQiBpcyBhIGxvb3AgaGVhZGVyIGFuZCBBIGlzIGEgYmFja3dh
cmQgYnJhbmNoaW5nIGJsb2NrLiBXZSB3aWxsCi0gICAgLy8gdGhlbiBhY2N1bXVsYXRlLCBmb3Ig
ZWFjaCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCi0gICAgLy8gYmxv
Y2tzLiBUaGVuIHdlIGJhY2t3YXJkcyBncmFwaCBzZWFyY2ggZnJvbSB0aGUgYmFja3dhcmQgYnJh
bmNoaW5nCi0gICAgLy8gYmxvY2tzIHRvIHRoZWlyIGxvb3AgaGVhZGVycywgd2hpY2ggZ2l2ZXMg
dXMgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlCi0gICAgLy8gbG9vcCBib2R5LgotICAgIAotICAg
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAodmVyYm9z
ZSkgewotICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxuIik7Ci0gICAgICAgIGdyYXBoLm1f
ZG9taW5hdG9ycy0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIH0KLSAgICAKLSAgICBtX2xv
b3BzLnJlc2l6ZSgwKTsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7Ci0gICAgICAgICAgICBpZiAoIWdyYXBoLm1f
ZG9taW5hdG9ycy0+ZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9sb29wc1tqXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3IpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9sb29wc1tqXS5hZGRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3IsIG1fbG9v
cHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGxvb3AuYWRkQmxvY2soYmxvY2spOwotICAgICAgICAg
ICAgbV9sb29wcy5hcHBlbmQobG9vcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3RzdHJhcDogIiwgKnRoaXMsICJc
biIpOwotICAgIAotICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKLSAgICBWZWN0b3I8QmFz
aWNCbG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7Ci0gICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgu
bnVtQmxvY2tzKCkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tpXTsKLSAgICAg
ICAgCi0gICAgICAgIHNlZW5CbG9ja3MuY2xlYXJBbGwoKTsKLSAgICAgICAgQVNTRVJUKGJsb2Nr
V29ya2xpc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGxvb3AgIiwgbG9vcCwgIlxuIik7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgewotICAg
ICAgICAgICAgc2VlbkJsb2Nrc1tsb29wW2pdLT5pbmRleF0gPSB0cnVlOwotICAgICAgICAgICAg
YmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVh
bGluZyB3aXRoICIsICpibG9jaywgIlxuIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChibG9jayA9PSBsb29wLmhlYWRlcigpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAgICBpZiAoc2VlbkJs
b2Nrc1twcmVkZWNlc3Nvci0+aW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKHByZWRlY2Vz
c29yKTsKLSAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7
Ci0gICAgICAgICAgICAgICAgc2VlbkJsb2Nrc1twcmVkZWNlc3Nvci0+aW5kZXhdID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZpZ3VyZSBvdXQgcmV2
ZXJzZSBtYXBwaW5nIGZyb20gYmxvY2tzIHRvIGxvb3BzLgotICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzOyBpLS07KQotICAgICAg
ICAgICAgYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzW2ldID0gVUlOVF9NQVg7Ci0gICAgfQot
ICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29wcy5zaXplKCk7IGxvb3BJbmRleC0t
OykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbbG9vcEluZGV4XTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleEluTG9vcCA9IGxvb3Auc2l6
ZSgpOyBibG9ja0luZGV4SW5Mb29wLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGxvb3BbYmxvY2tJbmRleEluTG9vcF07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJ
bmRpY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCB0aGlzSW5kZXggPSBibG9j
ay0+aW5uZXJNb3N0TG9vcEluZGljZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXNJbmRl
eCA9PSBVSU5UX01BWCB8fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhpc0luZGV4XS5zaXplKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW50b0JvdW5kZWRWZWN0b3IoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXMsIEJhc2ljQmxvY2s6
Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBs
b29wSW5kZXgsIGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGVh
Y2ggYmxvY2sga25vd3MgaXRzIGlubmVyLW1vc3QgbG9vcCBhbmQgaXRzIG5leHQtdG8taW5uZXIt
bW9zdCBsb29wLiBVc2UKLSAgICAvLyB0aGlzIHRvIGZpZ3VyZSBvdXQgbG9vcCBwYXJlbnRpbmcu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
TmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChs
b29wLmhlYWRlcigpLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXSA9PSBpKTsKLSAgICAgICAgCi0g
ICAgICAgIGxvb3AubV9vdXRlckxvb3BJbmRleCA9IGxvb3AuaGVhZGVyKCktPmlubmVyTW9zdExv
b3BJbmRpY2VzWzFdOwotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkg
ewotICAgICAgICAvLyBEbyBzb21lIHNlbGYtdmVyaWZpY2F0aW9uIHRoYXQgd2UndmUgZG9uZSBz
b21lIG9mIHRoaXMgY29ycmVjdGx5LgotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAg
ICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IHNpbXBsZUxvb3BzT2Y7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxv
Y2spKQotICAgICAgICAgICAgICAgICAgICBzaW1wbGVMb29wc09mLmFwcGVuZCgmbV9sb29wc1tp
XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3Rvcjxjb25z
dCBOYXR1cmFsTG9vcCo+IGZhbmN5TG9vcHNPZiA9IGxvb3BzT2YoYmxvY2spOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdGQ6OnNvcnQoc2ltcGxlTG9vcHNPZi5iZWdpbigpLCBzaW1wbGVM
b29wc09mLmVuZCgpKTsKLSAgICAgICAgICAgIHN0ZDo6c29ydChmYW5jeUxvb3BzT2YuYmVnaW4o
KSwgZmFuY3lMb29wc09mLmVuZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2ltcGxlTG9vcHNPZiA9PSBmYW5jeUxvb3BzT2YpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAq
dGhpcywgIlxuIik7Ci19Ci0KLU5hdHVyYWxMb29wczo6fk5hdHVyYWxMb29wcygpIHsgfQotCi1W
ZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmFzaWNCbG9j
ayogYmxvY2spIGNvbnN0Ci17Ci0gICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gcmVzdWx0
OwotICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxv
Y2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChsb29wKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIE5hdHVyYWxM
b29wczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgiTmF0
dXJhbExvb3BzOnsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbG9vcHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChjb21t
YSwgbV9sb29wc1tpXSk7Ci0gICAgb3V0LnByaW50KCJ9Iik7Ci19Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJldmlzaW9uIDIxOTYwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsMTQyICsyNywyMyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQ0ZHLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xh
c3MgTmF0dXJhbExvb3BzOwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJhbExv
b3A7CiAKLWNsYXNzIE5hdHVyYWxMb29wIHsKLXB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcCgpCi0g
ICAgICAgIDogbV9oZWFkZXIoMCkKLSAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFY
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayogaGVhZGVy
LCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgOiBtX2hlYWRlcihoZWFkZXIpCi0gICAgICAgICwg
bV9vdXRlckxvb3BJbmRleChVSU5UX01BWCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9oZWFkZXI7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
b2R5LnNpemUoKTsgfQotICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fYm9keVtpXTsgfQotICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIHNsb3dlciwgYnV0
IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBiZWxvbmdzIHRvCi0gICAgLy8gYSBu
YXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0dXJhbExvb3BzOjpiZWxvbmdzVG8o
KSwgd2hpY2gKLSAgICAvLyB0cmllcyB0byBiZSBPKGxvb3AgZGVwdGgpIHJhdGhlciB0aGFuIE8o
bG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcwotICAgIC8vIGFsbW9zdCBhbHdheXMgc21hbGxlciB0
aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgotICAgIGJvb2wgY29udGFpbnMoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jv
ZHkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChi
bG9jayAhPSBoZWFkZXIoKSk7IC8vIEhlYWRlciBzaG91bGQgYmUgY29udGFpbmVkLgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBp
biBOYXR1cmFsTG9vcHMuCi0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9Ci0gICAgCi0gICAgYm9vbCBpc091dGVyTW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBt
X291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYOyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7
Ci0gICAgCi0gICAgdm9pZCBhZGRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgeyBtX2JvZHkuYXBw
ZW5kKGJsb2NrKTsgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIG1faGVhZGVyOwotICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgND4gbV9ib2R5OwotICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5kZXg7
Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLX07Ci0KLWNsYXNzIE5hdHVyYWxMb29wcyB7CitjbGFz
cyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPiB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcHMoR3JhcGgmKTsKLSAgICB+TmF0dXJhbExv
b3BzKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbG9vcHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBOYXR1cmFsTG9vcCYg
bG9vcCh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07
Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNu
J3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCi0gICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgotICAg
IGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJs
b2NrKTsKLSAgICAgICAgaWYgKCFsb29wKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGlmIChsb29wLT5oZWFkZXIoKSA9PSBibG9jaykKLSAgICAgICAgICAgIHJldHVybiBsb29wOwot
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgZm9yICg7IGxvb3A7
IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICAgICAgICAgIEFTU0VS
VChsb29wLT5oZWFkZXIoKSAhPSBibG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RMb29wT2YoQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJs
b2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXTsKLSAgICAgICAgaWYgKGluZGV4ID09IFVJTlRf
TUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9sb29wc1tpbmRl
eF07Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RPdXRlckxv
b3AoY29uc3QgTmF0dXJhbExvb3AmIGxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobG9v
cC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGJlbG9uZ3NUbyhCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgTmF0dXJhbExv
b3AmIGNhbmRpZGF0ZUxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBJdCdzIGZhc3RlciB0
byBkbyB0aGlzIHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBpdCdzIHNtYWxsLgotICAg
ICAgICBpZiAoY2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQotICAgICAgICAgICAgcmV0dXJuIGNh
bmRpZGF0ZUxvb3AuY29udGFpbnMoYmxvY2spOwotICAgICAgICAKLSAgICAgICAgZm9yIChjb25z
dCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3Ag
PSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7Ci0gICAgICAgICAgICBpZiAobG9vcCA9PSAm
Y2FuZGlkYXRlTG9vcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGxvb3BEZXB0
aChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4oKmdyYXBoLm1fY2ZnLCBncmFwaC5l
bnN1cmVEb21pbmF0b3JzKCkpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBkZXB0aCA9IDA7Ci0g
ICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxv
Y2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKLSAgICAgICAgICAg
IGRlcHRoKys7Ci0gICAgICAgIHJldHVybiBkZXB0aDsKICAgICB9Ci0gICAgCi0gICAgLy8gUmV0
dXJuIHRoZSBpbmRpY2VzIG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29uc3Q7Ci0KLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgLy8gSWYgd2UgZXZl
ciBoYWQgYSBzY2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3
ZSBjb3VsZAotICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVs
cyBhIGhlY2sgb2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgotICAgIFZlY3RvcjxOYXR1cmFsTG9v
cCwgND4gbV9sb29wczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE5NjAwKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDYgKzE3OCw3IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRv
bWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGlj
VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYw
MDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4
MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnViYmxlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2
NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdHVy
YWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRDFERkNCRDFC
MDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjYwRjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8q
IENsb2NrVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9j
a1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyLDggKzM0Myw4IEBA
CiAJCTlCQzcwRjA0MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAv
KiBBdG9taWNTdHJpbmdUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkg
LyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNvZnRMaW5r
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEzMEQ0MTJEMUYwREUxM0YwMEI3
MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBT
b2Z0TGlua2luZy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTMwRDQxMkMxRjBERTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTA5OEFGRjFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJv
eFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94U1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5NyAvKiBT
ZWN1cml0eVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVNQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTYxRjMwRjFERjI2NDIxMDBGRjY3
NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlcHJlY2F0ZWRPcHRpb25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
ODU2LDYgKzg1Nyw3IEBACiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25p
Y1RpbWUuY3BwICovLAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNU
aW1lLmggKi8sCiAJCQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8s
CisJCQkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJEMDE1MUE4
MjVCMDA0MTIzRkYgLyogTm9uY29weWFibGUuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Jh
Y2t3YXJkc0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFja3dhcmRzR3Jh
cGguaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3
dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0yNDgsNiArMjQ5LDEzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2dyYXBoLm51bU5vZGVzKCkgKyAxOwogICAgIH0KKyAgICAK
KyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMoTm9kZSBub2Rl
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9yb290SW5uZXJNb3N0TG9vcEluZGljZXM7CisgICAgICAgIHJldHVybiBtX2dyYXBo
LmlubmVyTW9zdExvb3BJbmRpY2VzKG5vZGUubm9kZSgpKTsKKyAgICB9CiAKICAgICBDU3RyaW5n
IGR1bXAoTm9kZSBub2RlKSBjb25zdAogICAgIHsKQEAgLTI4NSw2ICsyOTMsNyBAQCBwcml2YXRl
OgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIExpc3QgbV9yb290U3VjY2Vzc29yTGlzdDsKICAg
ICB0eXBlbmFtZSBHcmFwaDo6U2V0IG1fcm9vdFN1Y2Nlc3NvclNldDsKKyAgICBtdXRhYmxlIElu
bmVyTW9zdExvb3BJbmRpY2VzIG1fcm9vdElubmVyTW9zdExvb3BJbmRpY2VzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExvb3Bz
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wIHsKK3B1Ymxp
YzoKKyAgICBOYXR1cmFsTG9vcCgpCisgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAg
ICAsIG1faGVhZGVyKG51bGxwdHIpCisgICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01B
WCkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5hdHVyYWxMb29wKEdyYXBoJiBncmFwaCwgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgaGVhZGVyLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBtX2dy
YXBoKCZncmFwaCkKKyAgICAgICAgLCBtX2hlYWRlcihoZWFkZXIpCisgICAgICAgICwgbV9vdXRl
ckxvb3BJbmRleChVSU5UX01BWCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgR3JhcGgqIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQor
ICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGVhZGVyOyB9CisgICAgCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eS5zaXplKCk7IH0KKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBhdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2JvZHlbaV07IH0KKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisKKyAgICAvLyBUaGlzIGlz
IHRoZSBzbG93ZXIsIGJ1dCBzaW1wbGVyLCB3YXkgb2YgYXNraW5nIGlmIGEgYmxvY2sgYmVsb25n
cyB0bworICAgIC8vIGEgbmF0dXJhbCBsb29wLiBJdCdzIGZhc3RlciB0byBjYWxsIE5hdHVyYWxM
b29wczo6YmVsb25nc1RvKCksIHdoaWNoCisgICAgLy8gdHJpZXMgdG8gYmUgTyhsb29wIGRlcHRo
KSByYXRoZXIgdGhhbiBPKGxvb3Agc2l6ZSkuIExvb3AgZGVwdGggaXMKKyAgICAvLyBhbG1vc3Qg
YWx3YXlzIHNtYWxsZXIgdGhhbiBsb29wIHNpemUuIEEgKmxvdCogc21hbGxlci4KKyAgICBib29s
IGNvbnRhaW5zKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
aWYgKG1fYm9keVtpXSA9PSBibG9jaykKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoYmxvY2sgIT0gaGVhZGVyKCkpOyAvLyBIZWFkZXIgc2hv
dWxkIGJlIGNvbnRhaW5lZC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFRoZSBpbmRleCBvZiB0aGlzIGxvb3AgaW4gTmF0dXJhbExvb3BzLgorICAgIHVuc2lnbmVkIGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIGJvb2wgaXNPdXRlck1v
c3RMb29wKCkgY29uc3QgeyByZXR1cm4gbV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWDsgfQor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2dyYXBoKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQucHJpbnQo
IltIZWFkZXI6ICIsIG1fZ3JhcGgtPmR1bXAoaGVhZGVyKCkpLCAiLCBCb2R5OiIpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ib2R5LnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgIiwgbV9ncmFwaC0+ZHVtcChtX2JvZHlbaV0pKTsKKyAgICAgICAgb3V0
LnByaW50KCJdIik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTmF0
dXJhbExvb3BzOworICAgIAorICAgIHZvaWQgYWRkQmxvY2sodHlwZW5hbWUgR3JhcGg6Ok5vZGUg
YmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KKworICAgIEdyYXBoKiBtX2dyYXBoOwor
ICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIG1faGVhZGVyOworICAgIFZlY3Rvcjx0eXBlbmFtZSBH
cmFwaDo6Tm9kZSwgND4gbV9ib2R5OworICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5kZXg7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK3R5cGVkZWYgc3RkOjphcnJheTx1bnNpZ25lZCwg
Mj4gSW5uZXJNb3N0TG9vcEluZGljZXM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xh
c3MgTmF0dXJhbExvb3BzIHsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBo
LCBEb21pbmF0b3JzPEdyYXBoPiYgZG9taW5hdG9ycykKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBo
KQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNl
ZCBuYXR1cmFsIGxvb3AgZmluZGVyLiBUaGUgZmlyc3QKKyAgICAgICAgLy8gc3RlcCBpcyB0byBm
aW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdoZXJlIEIgZG9taW5hdGVzIEEuCisg
ICAgICAgIC8vIFRoZW4gQiBpcyBhIGxvb3AgaGVhZGVyIGFuZCBBIGlzIGEgYmFja3dhcmQgYnJh
bmNoaW5nIGJsb2NrLiBXZSB3aWxsCisgICAgICAgIC8vIHRoZW4gYWNjdW11bGF0ZSwgZm9yIGVh
Y2ggbG9vcCBoZWFkZXIsIG11bHRpcGxlIGJhY2t3YXJkIGJyYW5jaGluZworICAgICAgICAvLyBi
bG9ja3MuIFRoZW4gd2UgYmFja3dhcmRzIGdyYXBoIHNlYXJjaCBmcm9tIHRoZSBiYWNrd2FyZCBi
cmFuY2hpbmcKKyAgICAgICAgLy8gYmxvY2tzIHRvIHRoZWlyIGxvb3AgaGVhZGVycywgd2hpY2gg
Z2l2ZXMgdXMgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlCisgICAgICAgIC8vIGxvb3AgYm9keS4K
KyAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAor
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiRG9taW5hdG9yczpc
biIpOworICAgICAgICAgICAgZG9taW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgbV9sb29wcy5yZXNpemUoMCk7CisgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGguc3Vj
Y2Vzc29ycyhibG9jaykuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUg
R3JhcGg6Ok5vZGUgc3VjY2Vzc29yID0gZ3JhcGguc3VjY2Vzc29ycyhibG9jaylbaV07CisgICAg
ICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JzLmRvbWluYXRlcyhzdWNjZXNzb3IsIGJsb2NrKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6
ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2pdLmhlYWRlcigp
ID09IHN1Y2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9sb29wc1tqXS5hZGRC
bG9jayhibG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiBsb29wKGdy
YXBoLCBzdWNjZXNzb3IsIG1fbG9vcHMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBsb29wLmFk
ZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3RzdHJhcDogIiwgKnRoaXMsICJcbiIpOworICAgIAor
ICAgICAgICBGYXN0Qml0VmVjdG9yIHNlZW5CbG9ja3M7CisgICAgICAgIFZlY3Rvcjx0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSwgND4gYmxvY2tXb3JrbGlzdDsKKyAgICAgICAgc2VlbkJsb2Nrcy5yZXNp
emUoZ3JhcGgubnVtTm9kZXMoKSk7CisgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
bG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxv
b3AgPSBtX2xvb3BzW2ldOworICAgICAgICAKKyAgICAgICAgICAgIHNlZW5CbG9ja3MuY2xlYXJB
bGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSk7CisgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
RGVhbGluZyB3aXRoIGxvb3AgIiwgbG9vcCwgIlxuIik7CisgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBz
ZWVuQmxvY2tzW2dyYXBoLmluZGV4KGxvb3Bbal0pXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
YmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAgICAgd2hpbGUgKCFibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFz
dCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdpdGggIiwgZ3JhcGguZHVtcChibG9j
ayksICJcbiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrID09IGxv
b3AuaGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ3JhcGgucHJlZGVjZXNzb3JzKGJs
b2NrKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6
Ok5vZGUgcHJlZGVjZXNzb3IgPSBncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spW2pdOworICAgICAg
ICAgICAgICAgICAgICBpZiAoc2VlbkJsb2Nrc1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3IpOworICAgICAgICAgICAg
ICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAg
ICAgICAgIHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgocHJlZGVjZXNzb3IpXSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmln
dXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJvbSBibG9ja3MgdG8gbG9vcHMuCisgICAgICAgIGZv
ciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBCYXNpY0Jsb2NrOjpudW1iZXJP
ZklubmVyTW9zdExvb3BJbmRpY2VzOyBpLS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5pbm5l
ck1vc3RMb29wSW5kaWNlc1tpXSA9IFVJTlRfTUFYOworICAgICAgICB9CisgICAgICAgIGZvciAo
dW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29wcy5zaXplKCk7IGxvb3BJbmRleC0tOykgeworICAg
ICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tsb29wSW5kZXhdOwor
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleEluTG9vcCA9IGxv
b3Auc2l6ZSgpOyBibG9ja0luZGV4SW5Mb29wLS07KSB7CisgICAgICAgICAgICAgICAgdHlwZW5h
bWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBsb29wW2Jsb2NrSW5kZXhJbkxvb3BdOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6dHVibGVf
c2l6ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZhbHVlOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgdGhpc0luZGV4ID0gZ3JhcGguaW5uZXJNb3N0TG9vcEluZGljZXMoYmxv
Y2spW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFYIHx8
IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0SW50b0JvdW5kZWRWZWN0b3IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JhcGguaW5uZXJNb3N0TG9vcEluZGljZXMoYmxvY2spLCBzdGQ6OnR1YmxlX3Np
emU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29wSW5kZXgsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRzIGlubmVyLW1v
c3QgbG9vcCBhbmQgaXRzIG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKKyAgICAgICAgLy8g
dGhpcyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3Jh
cGg+JiBsb29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdyYXBo
LmlubmVyTW9zdExvb3BJbmRpY2VzKGxvb3AuaGVhZGVyKCkpWzBdID09IGkpOworICAgICAgICAK
KyAgICAgICAgICAgIGxvb3AubV9vdXRlckxvb3BJbmRleCA9IGdyYXBoLmlubmVyTW9zdExvb3BJ
bmRpY2VzKGxvb3AuaGVhZGVyKCkpWzFdOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2
YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBEbyBzb21lIHNlbGYtdmVyaWZp
Y2F0aW9uIHRoYXQgd2UndmUgZG9uZSBzb21lIG9mIHRoaXMgY29ycmVjdGx5LgorICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBi
bG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gc2ltcGxlTG9vcHNPZjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRh
aW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5k
KCZtX2xvb3BzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gZmFuY3lMb29wc09mID0g
bG9vcHNPZihibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQo
c2ltcGxlTG9vcHNPZi5iZWdpbigpLCBzaW1wbGVMb29wc09mLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICBzdGQ6OnNvcnQoZmFuY3lMb29wc09mLmJlZ2luKCksIGZhbmN5TG9vcHNPZi5lbmQoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVMb29w
c09mID09IGZhbmN5TG9vcHNPZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAqdGhp
cywgIlxuIik7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3Jh
cGg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1Mb29wcygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9sb29wcy5zaXplKCk7CisgICAgfQorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdy
YXBoPiYgbG9vcCh1bnNpZ25lZCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9v
cHNbaV07CisgICAgfQorICAgIAorICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxv
Y2sgaXNuJ3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCisgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRv
LgorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogaGVhZGVyT2YodHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFw
aD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICBpZiAoIWxvb3ApCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2Nr
KQorICAgICAgICAgICAgcmV0dXJuIGxvb3A7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7CisgICAgICAgICAgICBmb3IgKDsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgq
bG9vcCkpCisgICAgICAgICAgICAgICAgQVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0
dXJhbExvb3A8R3JhcGg+KiBpbm5lck1vc3RMb29wT2YodHlwZW5hbWUgR3JhaDo6Tm9kZSBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPmlubmVyTW9z
dExvb3BJbmRpY2VzWzBdOworICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKKyAgICB9Cisg
ICAgCisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBpbm5lck1vc3RPdXRlckxvb3AoY29u
c3QgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxv
b3AubV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gJm1fbG9vcHNbbG9vcC5tX291dGVyTG9vcEluZGV4XTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBiZWxvbmdzVG8odHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2ssIGNvbnN0
IE5hdHVyYWxMb29wPEdyYXBoPiYgY2FuZGlkYXRlTG9vcCkgY29uc3QKKyAgICB7CisgICAgICAg
IC8vIEl0J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlm
IGl0J3Mgc21hbGwuCisgICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCisgICAg
ICAgICAgICByZXR1cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExv
b3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7Cisg
ICAgICAgICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGxvb3BEZXB0aCh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29u
c3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICAgICAgZm9yIChjb25z
dCBOYXR1cmFsTG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29w
OyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIGRlcHRoKys7
CisgICAgICAgIHJldHVybiBkZXB0aDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGFsbCBs
b29wcyB0aGlzIGJlbG9uZ3MgdG8uIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdmVjdG9yIGlzIHRo
ZSBpbm5lcm1vc3QgbG9vcC4gVGhlIGxhc3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IGxvb3Au
CisgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPio+IGxvb3BzT2YodHlwZW5hbWUg
R3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0
dXJhbExvb3A8R3JhcGg+Kj4gcmVzdWx0OworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29w
PEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5l
ck1vc3RPdXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsb29wKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOwor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2xvb3BzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBt
X2xvb3BzW2ldKTsKKyAgICAgICAgb3V0LnByaW50KCJ9Iik7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICAKKyAgICAvLyBJZiB3ZSBldmVyIGhhZCBhIHNj
YWxhYmlsaXR5IHByb2JsZW0gaW4gb3VyIG5hdHVyYWwgbG9vcCBmaW5kZXIsIHdlIGNvdWxkCisg
ICAgLy8gdXNlIHNvbWUgSGFzaE1hcCdzIGhlcmUuIEJ1dCBpdCBqdXN0IGZlZWxzIGEgaGVjayBv
ZiBhIGxvdCBsZXNzIGNvbnZlbmllbnQuCisgICAgVmVjdG9yPE5hdHVyYWxMb29wPEdyYXBoPiwg
ND4gbV9sb29wczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OklubmVy
TW9zdExvb3BJbmRpY2VzOwordXNpbmcgV1RGOjpOYXR1cmFsTG9vcDsKK3VzaW5nIFdURjo6TmF0
dXJhbExvb3BzOwpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIG5hbWVz
cGFjZSBXVEYgewogdGVtcGxhdGU8dHlwZW5hbWUgUmFuZ2VUeXBlPgogY2xhc3MgUmFuZ2VTZXQg
ewogcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJhbmdlLCA4PiBWZWN0b3JUeXBlOworICAg
IAogICAgIHR5cGVkZWYgUmFuZ2VUeXBlIFJhbmdlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFu
Z2U6OlR5cGUgVHlwZTsKIApAQCAtMTI1LDggKzEyNywyMyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBvdXQucHJpbnQoInsiLCBsaXN0RHVtcChtX3JhbmdlcyksICIsIGlzQ29tcGFjdCA9ICIs
IG1faXNDb21wYWN0LCAifSIpOwogICAgIH0KKyAgICAKKyAgICBWZWN0b3JUeXBlOjpjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yYW5nZXMuYmVn
aW4oKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jhbmdlcy5lbmQoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhZGRBbGwoY29uc3QgUmFuZ2VTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAg
Zm9yIChSYW5nZSByYW5nZSA6IG90aGVyKQorICAgICAgICAgICAgYWRkKHJhbmdlKTsKKyAgICB9
CiAKLXByaXZhdGU6CiAgICAgdm9pZCBjb21wYWN0KCkKICAgICB7CiAgICAgICAgIGlmIChtX2lz
Q29tcGFjdCkKQEAgLTE2NCw2ICsxODEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2lzQ29tcGFj
dCA9IHRydWU7CiAgICAgfQogICAgIAorcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBvdmVybGFw
c05vbkVtcHR5KGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5nZSYgYikKICAgICB7CiAgICAgICAg
IHJldHVybiBub25FbXB0eVJhbmdlc092ZXJsYXAoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2lu
KCksIGIuZW5kKCkpOwpAQCAtMTg3LDcgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKICAgICB9CiAgICAgCi0gICAgVmVjdG9yPFJhbmdlLCA4PiBtX3JhbmdlczsK
KyAgICBWZWN0b3JUeXBlIG1fcmFuZ2VzOwogICAgIGJvb2wgbV9pc0NvbXBhY3QgeyB0cnVlIH07
CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316223</attachid>
            <date>2017-07-22 21:11:44 -0700</date>
            <delta_ts>2017-07-23 11:26:19 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82202</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxNCBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTZEMUYyM0EyNUEwMDI5
RDkxRCAvKiBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyog
QjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQkwRjVCRjE3MDFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyog
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNG
OTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU3LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAq
LzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1
MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjgs
NiArMzAzNSwxNCBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdl
LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRs
L0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIz
L0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM05h
dHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9
IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHBhdGgg
PSBiMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBw
YXRoID0gYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMx
ODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzksNiBAQAogCQlB
NzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3Bz
LmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRo
ID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtH
ZW5lcmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ3
MCw4IEBACiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNw
cCAqLywKIAkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICov
LAorCQkJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAor
CQkJCTBGNUJGMTZBMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAq
LywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkw
RjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NDk4LDYgKzU1MTQsNyBA
QAogCQkJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywK
IAkJCQkwRjMzOERGMzFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmgg
Ki8sCisJCQkJMEY1QkYxNkMxRjIzQTI1QTAwMjlEOTFEIC8qIEIzQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmgg
Ki8sCkBAIC01NTA3LDYgKzU1MjQsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAw
QUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCisJ
CQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAq
LywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywK
IAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmggKi8sCiAJCQkJ
MEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmNwcCAqLywKQEAgLTU1MjEsNiAr
NTU0MCw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLAogCQkJCTBGRUM4NUI0MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCkBAIC01NTQ0LDYgKzU1NjUsNyBA
QAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICov
LAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywK
IAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCAqLywKKwkJ
CQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkw
RjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKIAkJCQkw
RjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKIAkJ
CQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCkBA
IC03MzY4LDcgKzczOTAsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDksNyBAQAogCQkJCTBGQkI3M0JCMURF
Rjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5NCw3IEBACiAJCQkJMEYxRkIzOTcxRTFBRjdF
MzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJl
TG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYx
RjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMCArODg3OSwxMiBAQAogCQkJ
CUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFE
IC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY3MUYyM0EwOTgwMDI5RDkx
RCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzkyMTIxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTE1NCw2ICs5MTc5LDcgQEAKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
RDFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjA4QUQ3MURGMDkyNUQwMDdEMzI2OSAvKiBMb2NrRHVyaW5n
TWFya2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTYzLDYgKzkxODksNyBAQAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBG
RERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2Miw3ICsxMDM4OSw2IEBACiAJCQkJ
MEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyog
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNzgxMEQx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDcyMyw2ICsxMDc0OSw3IEBACiAJCQkJ
QUQyRkNCRTgxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0
OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNjMxRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc4OSw2ICsxMDgxNiw3IEBACiAJCQkJMEZE
M0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTcwMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NTAxMDdFQzBENzAwMTNFN0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0JhY2t3YXJkc0dyYXBoLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2FyZHNDRkcg
OiBwdWJsaWMgQmFja3dhcmRzR3JhcGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFja3dhcmRzQ0ZHKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBCYWNrd2FyZHNDRkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBo
PENGRz4ocHJvYy5jZmcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWluYXRvcnMoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+KHByb2MuYmFja3dh
cmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAg
LTE2Miw2ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5jaC4KICAg
ICBKU19FWFBPUlRfUFJJVkFURSBWYWx1ZSogYXBwZW5kTmV3Q29udHJvbFZhbHVlKFByb2NlZHVy
ZSYsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSosIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYsIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYpOwogICAgIAorICAgIElubmVyTW9zdExvb3BJbmRpY2VzJiBpbm5l
ck1vc3RMb29wSW5kaWNlcygpIHsgcmV0dXJuIG1faW5uZXJNb3N0TG9vcEluZGljZXM7IH0KKyAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogICAgIGZy
aWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkBAIC0xNzYsNiArMTc5LDcgQEAgcHJpdmF0ZToKICAg
ICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAgICAgU3VjY2Vzc29yTGlzdCBtX3N1
Y2Nlc3NvcnM7CiAgICAgZG91YmxlIG1fZnJlcXVlbmN5OworICAgIElubmVyTW9zdExvb3BJbmRp
Y2VzIG1faW5uZXJNb3N0TG9vcEluZGljZXM7CiB9OwogCiBjbGFzcyBEZWVwQmFzaWNCbG9ja0R1
bXAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZHLmgJKHJldmlzaW9uIDIxOTYwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleChOb2RlIG5vZGUpIGNvbnN0IHsg
cmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KICAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvY1tpbmRleF07IH0KICAgICB1bnNpZ25lZCBudW1Ob2RlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvYy5zaXplKCk7IH0KKyAgICAKKyAgICBJbm5lck1vc3RMb29wSW5k
aWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5pbm5l
ck1vc3RMb29wSW5kaWNlcygpOyB9CiAKICAgICBQb2ludGVyRHVtcDxCYXNpY0Jsb2NrPiBkdW1w
KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7IH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0Rv
bWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fZG9taW5hdG9ycyhwcm9jLmRv
bWluYXRvcnMoKSkKKyAgICAgICAgLCBtX2JhY2t3YXJkc0RvbWluYXRvcnMocHJvYy5iYWNrd2Fy
ZHNEb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHJldHVybnMg
dHJ1ZSBpZmY6CisgICAgLy8KKyAgICAvLyAtIElmIGIgZXhlY3V0ZXMgdGhlbiBhIG11c3QgaGF2
ZSBleGVjdXRlZCBiZWZvcmUgaXQgKGEgZG9taW5hdGVzIGIpLgorICAgIC8vIC0gSWYgYSBleGVj
dXRlcyB0aGVuIGIgd2lsbCBleGVjdXRlIGFmdGVyIGl0IChiIGJhY2t3YXJkcy1kb21pbmF0ZXMg
YSkuCisgICAgYm9vbCBkb21pbmF0ZXNFcXVpdmFsZW50bHkoQmFzaWNCbG9jayogYSwgQmFzaWNC
bG9jayogYikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvbWluYXRvcnMuZG9taW5hdGVzKGEs
IGIpCisgICAgICAgICAgICAmJiBtX2JhY2t3YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKGIsIGEp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHJldHVybnMgdHJ1ZSBpZmYgdGhlIGV4ZWN1dGlv
biBvZiBhIGltcGxpZXMgdGhhdCBiIGFsc28gZXhlY3V0ZXMgYW5kIHZpY2UtdmVyc2EuCisgICAg
Ym9vbCBhcmVFcXVpdmFsZW50KEJhc2ljQmxvY2sqIGEsIEJhc2ljQmxvY2sqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gZG9taW5hdGVzRXF1aXZhbGVudGx5KGEsIGIpCisgICAgICAgICAgICB8
fCBkb21pbmF0ZXNFcXVpdmFsZW50bHkoYiwgYSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERv
bWluYXRvcnMmIG1fZG9taW5hdG9yczsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBtX2JhY2t3
YXJkc0RvbWluYXRvcnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZl
Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5o
CShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDkgQEAgc3RydWN0IEVmZmVjdHMgewogICAg
IC8vIE1lbW9yeSBmZW5jZXMgY2Fubm90IGJlIHJlb3JkZXJlZCBhcm91bmQgZWFjaCBvdGhlciBy
ZWdhcmRsZXNzIG9mIHRoZWlyIGVmZmVjdHMuIFRoaXMgaXMgZmxhZ2dlZAogICAgIC8vIGlmIHRo
ZSBvcGVyYXRpb24gaXMgYSBtZW1vcnkgZmVuY2UuCiAgICAgYm9vbCBmZW5jZSB7IGZhbHNlIH07
CisgICAgCisgICAgLy8gV0FSTklORzogVGhlIEIzOjpob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMo
KSBwaGFzZSB0aGlua3MgdGhhdCBpdCB1bmRlcnN0YW5kcyB0aGlzIGV4aGF1c3RpdmVseS4gSWYg
eW91CisgICAgLy8gYWRkIGFueSBuZXcga2luZHMgb2YgdGhpbmdzIHRoYXQgY2FuIGJlIHJlYWQg
b3Igd3JpdHRlbiwgeW91IHNob3VsZCBjaGVjayB0aGF0IHBoYXNlLgogCiAgICAgSGVhcFJhbmdl
IHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Vu
c3VyZUxvb3BQcmVIZWFkZXJzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJCM05hdHVyYWxMb29wcy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitib29sIGVuc3VyZUxvb3BQcmVIZWFkZXJzKFByb2NlZHVyZSYgcHJvYykK
K3sKKyAgICBOYXR1cmFsTG9vcHMmIGxvb3BzID0gcHJvYy5uYXR1cmFsTG9vcHMoKTsKKyAgICAK
KyAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29wcygpOyBsb29wSW5kZXgtLTspIHsK
KyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBsb29wcy5sb29wKGxvb3BJbmRleCk7
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IG91dE9mQm9keVByZWRl
Y2Vzc29yczsKKyAgICAgICAgZG91YmxlIHRvdGFsRnJlcXVlbmN5ID0gMDsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycygp
KSB7CisgICAgICAgICAgICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29yLCBsb29wKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0
T2ZCb2R5UHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICB0b3Rh
bEZyZXF1ZW5jeSArPSBwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChvdXRPZkJvZHlQcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRl
ciA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUobG9vcC5oZWFkZXIoKSwgdG90YWxGcmVxdWVu
Y3kpOworICAgICAgICBwcmVIZWFkZXItPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgbG9v
cC5oZWFkZXIoKS0+YXQoMCktPm9yaWdpbigpKTsKKyAgICAgICAgcHJlSGVhZGVyLT5zZXRTdWNj
ZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayhsb29wLmhlYWRlcigpKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogb3V0T2ZCb2R5UHJlZGVjZXNzb3JzKSB7
CisgICAgICAgICAgICBwcmVkZWNlc3Nvci0+cmVwbGFjZVN1Y2Nlc3Nvcihsb29wLmhlYWRlcigp
LCBwcmVIZWFkZXIpOworICAgICAgICAgICAgcHJlSGVhZGVyLT5hZGRQcmVkZWNlc3NvcihwcmVk
ZWNlc3Nvcik7CisgICAgICAgICAgICBsb29wLmhlYWRlcigpLT5yZW1vdmVQcmVkZWNlc3Nvcihw
cmVkZWNlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvb3AuaGVhZGVyKCkt
PmFkZFByZWRlY2Vzc29yKHByZUhlYWRlcik7CisgICAgfQorICAgIAorICAgIGlmIChpbnNlcnRp
b25TZXQuZXhlY3V0ZSgpKSB7CisgICAgICAgIHByb2MuaW52YWxpZGF0ZUNGRygpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29w
UHJlSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworCisvLyBDcmVhdGVzIGEgcHJlLWhlYWRlciBmb3IgYW55IGxvb3AgdGhhdCBk
b24ndCBhbHJlYWR5IGhhdmUgb25lLiBBIGxvb3AgaGFzIGEgcHJlLWhlYWRlciBpZiBpdHMgaGVh
ZGVyIGhhcworLy8gZXhhY3RseSBvbmUgcHJlZGVjZXNzb3IgdGhhdCBpc24ndCBpbiB0aGUgbG9v
cCBib2R5LiBJZiBhIGxvb3AgaGVhZGVyIGhhcyBtb3JlIHRoYW4gb25lIG91dC1vZi1ib2R5Cisv
LyBwcmVkZWNlc3NvciwgdGhlbiB0aGlzIGNyZWF0ZXMgYSBuZXcgYmxvY2sgYW5kIHJld2lyZXMg
dGhvc2UgcHJlZGVjZXNzb3JzIHRvIGl0LgorCitib29sIGVuc3VyZUxvb3BQcmVIZWFkZXJzKFBy
b2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShy
ZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCiAjaW5jbHVkZSAiQjNGaXhTU0EuaCIKICNpbmNsdWRl
ICJCM0ZvbGRQYXRoQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuaCIKICNpbmNsdWRlICJCM0luZmVyU3dpdGNoZXMuaCIKICNpbmNsdWRlICJCM0xlZ2Fs
aXplTWVtb3J5T2Zmc2V0cy5oIgogI2luY2x1ZGUgIkIzTG93ZXJNYWNyb3MuaCIKQEAgLTgzLDYg
Kzg0LDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGlm
IChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKSB7CiAgICAgICAgIHJlZHVjZURvdWJsZVRvRmxv
YXQocHJvY2VkdXJlKTsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKKyAgICAg
ICAgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSk7CiAgICAgICAgIGluZmVyU3dpdGNoZXMo
cHJvY2VkdXJlKTsKICAgICAgICAgZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50
VmFsdWVzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCisjaW5jbHVkZSAiQjNE
b21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJCM1Bo
YXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9v
bCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShwcm9jLCAiaG9pc3RMb29wSW52YXJpYW50VmFsdWVzIik7CisgICAg
CisgICAgZW5zdXJlTG9vcFByZUhlYWRlcnMoKTsKKyAgICAKKyAgICBwcm9jLnJlc2V0QmxvY2tP
d25lcnMoKTsKKyAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7
CisgICAgTmF0dXJhbExvb3BzJiBsb29wcyA9IHByb2MubmF0dXJhbExvb3BzKCk7CisgICAgQ29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMmIGNvbnRyb2xFcXVpdmFsZW5jZSA9IHByb2MuY29udHJv
bEVxdWl2YWxlbmNlQW5hbHlzaXMoKTsKKyAgICAKKyAgICBzdHJ1Y3QgTG9vcERhdGEgeworICAg
ICAgICBSYW5nZVNldDxIZWFwUmFuZ2U+IHdyaXRlczsKKyAgICAgICAgYm9vbCB3cml0ZXNMb2Nh
bFN0YXRlIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxzZSB9Owor
ICAgICAgICBib29sIHNpZGVFeGl0cyB7IGZhbHNlIH07CisgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZUhlYWRlciB7IG51bGxwdHIgfTsKKyAgICB9OworICAgIAorICAgIEluZGV4TWFwPE5hdHVyYWxM
b29wLCBMb29wRGF0YT4gZGF0YShsb29wcy5udW1Mb29wcygpKTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGxvb3BJbmRleCA9IGxvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAg
ICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRl
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29y
LCBsb29wKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFkYXRhW2xvb3BdLnByZUhlYWRlcik7CisgICAgICAgICAgICBkYXRhW2xvb3BdLnBy
ZUhlYWRlciA9IHByZWRlY2Vzc29yOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBs
b29wID0gbG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgaWYgKCFsb29wKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAg
ICAgICAgICAgZGF0YVsqbG9vcF0ud3JpdGVzLmFkZChlZmZlY3RzLndyaXRlcyk7CisgICAgICAg
ICAgICBkYXRhWypsb29wXS53cml0ZXNMb2NhbFN0YXRlIHw9IGVmZmVjdHMud3JpdGVzTG9jYWxT
dGF0ZTsKKyAgICAgICAgICAgIGRhdGFbKmxvb3BdLndyaXRlc1Bpbm5lZCB8PSBlZmZlY3RzLndy
aXRlc1Bpbm5lZDsKKyAgICAgICAgICAgIGRhdGFbKmxvb3BdLnNpZGVFeGl0cyB8PSBlZmZlY3Rz
LnNpZGVFeGl0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxv
b3BJbmRleCA9IGxvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25z
dCBOYXR1cmFsTG9vcCYgbG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9y
IChjb25zdCBOYXR1cmFsTG9vcCogY3VycmVudCA9ICZsb29wOyBjdXJyZW50OyBjdXJyZW50ID0g
bG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50KSkgeworICAgICAgICAgICAgZGF0YVsq
Y3VycmVudF0ud3JpdGVzLmFkZEFsbChkYXRhW2xvb3BdLndyaXRlcyk7CisgICAgICAgICAgICBk
YXRhWypjdXJyZW50XS53cml0ZXNMb2NhbFN0YXRlIHw9IGRhdGFbbG9vcF0ud3JpdGVzTG9jYWxT
dGF0ZTsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlc1Bpbm5lZCB8PSBkYXRhW2xv
b3BdLndyaXRlc1Bpbm5lZDsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLnNpZGVFeGl0cyB8
PSBkYXRhW2xvb3BdLnNpZGVFeGl0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJv
YykgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wcyA9IGxvb3BzLmxv
b3BzT2YoYmxvY2spOworICAgICAgICBpZiAobG9vcHMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2sp
IHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAg
ICAgICAgICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsb29wcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9
ICpsb29wc1tpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG9rID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJl
bigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5hdG9ycy5kb21pbmF0ZXMoY2hp
bGQtPm93bmVyLCBsb29wLnByZUhlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoZWZmZWN0cy5jb250cm9sRGVwZW5kZW50KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghY29udHJvbEVxdWl2YWxlbmNlLmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhl
YWRlciwgYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzdXBl
ciBjb25zZXJ2YXRpdmUuIEluIHJlYWxpdHksIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBhcmVuJ3QgYW55IHNpZGUgZXhpdHMgYmV0
d2VlbiBoZXJlIGFuZCB0aGUgcHJlLWhlYWRlciBhY2NvcmRpbmcgdG8gYmFja3dhcmRzIHNlYXJj
aC4KKyAgICAgICAgICAgICAgICAgICAgLy8gT09QUyEhIChuZWVkIGJ1ZyBVUkwpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChkYXRhLnNpZGVFeGl0cykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoZWZmZWN0cy5yZWFkc1Bpbm5lZCAmJiBkYXRhW2xvb3BdLndyaXRlc1Bpbm5l
ZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGVmZmVjdHMucmVhZHNMb2NhbFN0YXRlICYmIGRhdGFbbG9vcF0ucmVh
ZHNMb2NhbFN0YXRlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtsb29wXS53cml0ZXMuY29udGFpbnMoZWZm
ZWN0cy5yZWFkcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGxvb3AucHJlSGVhZGVyLT5hcHBlbmROb25UZXJtaW5hbCh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jLmFkZDxWYWx1ZT4oTm9wLCBWb2lk
LCB2YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBjaGFuZ2VkOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZh
bHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9v
cEludmFyaWFudFZhbHVlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgbG9vcC1pbnZh
cmlhbnQgY29kZSBtb3Rpb24gKExJQ00pLiBJdCBjYW4gaG9pc3QgcHVyZSB2YWx1ZXMgYXMgd2Vs
bCBhcyByZWFkcyBvZiBzdGF0ZSB0aGF0IGlzbid0CisvLyBtb2RpZmllZCBpbnNpZGUgdGhlIGxv
b3AuCisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQ0ZHLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlIDx3dGYvTmF0dXJh
bExvb3BzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0eXBlZGVmIFdU
Rjo6TmF0dXJhbExvb3A8Q0ZHPiBOYXR1cmFsTG9vcDsKKworY2xhc3MgTmF0dXJhbExvb3BzIDog
cHVibGljIFdURjo6TmF0dXJhbExvb3BzPENGRz4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE5hdHVyYWxMb29wcyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgTmF0dXJhbExvb3BzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBXVEY6Ok5hdHVyYWxM
b29wczxDRkc+KHByb2MuY2ZnKCksIHByb2MuZG9taW5hdG9ycygpKQorICAgIHsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNp
b24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE2IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAog
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0NGRy5oIgorI2luY2x1
ZGUgIkIzQmFja3dhcmRzRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgogI2luY2x1ZGUgIkIzQmxvY2tX
b3JrbGlzdC5oIgogI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSAiQjNDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oIgogI2luY2x1ZGUgIkIzRGF0YVNlY3Rpb24uaCIKICNpbmNsdWRlICJC
M0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkIz
T3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRl
ICJCM1N0YWNrU2xvdC5oIgpAQCAtMjAwLDYgKzIwNCwxMCBAQCB2b2lkIFByb2NlZHVyZTo6cmVz
ZXRSZWFjaGFiaWxpdHkoKQogdm9pZCBQcm9jZWR1cmU6OmludmFsaWRhdGVDRkcoKQogewogICAg
IG1fZG9taW5hdG9ycyA9IG51bGxwdHI7CisgICAgbV9uYXR1cmFsTG9vcHMgPSBudWxscHRyOwor
ICAgIG1fYmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMg
PSBudWxscHRyOworICAgIG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBudWxscHRyOwog
fQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMjkx
LDYgKzI5OSwzNCBAQCBEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmRvbWluYXRvcnMoKQogICAgIHJl
dHVybiAqbV9kb21pbmF0b3JzOwogfQogCitOYXR1cmFsTG9vcHMmIFByb2NlZHVyZTo6bmF0dXJh
bExvb3BzKCkKK3sKKyAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQorICAgICAgICBtX25hdHVyYWxM
b29wcyA9IHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4g
Km1fbmF0dXJhbExvb3BzOworfQorCitCYWNrd2FyZHNDRkcmIFByb2NlZHVyZTo6YmFja3dhcmRz
Q0ZHKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2JhY2t3YXJkc0NG
RyA9IHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1f
YmFja3dhcmRzQ0ZHOworfQorCitCYWNrd2FyZHNEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmJhY2t3
YXJkc0RvbWluYXRvcnMoKQoreworICAgIGlmICghbV9iYWNrd2FyZHNEb21pbmF0b3JzKQorICAg
ICAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9t
aW5hdG9ycz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHNEb21pbmF0b3JzOworfQor
CitDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyYgUHJvY2VkdXJlOjpjb250cm9sRXF1aXZhbGVu
Y2VBbmFseXNpcygpCit7CisgICAgaWYgKCFtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKQor
ICAgICAgICBtX2NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzID0gc3RkOjp1bmlxdWVfcHRyPENv
bnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2NvbnRyb2xF
cXVpdmFsZW5jZUFuYWx5c2lzOworfQorCiB2b2lkIFByb2NlZHVyZTo6YWRkRmFzdENvbnN0YW50
KGNvbnN0IFZhbHVlS2V5JiBjb25zdGFudCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dC5pc0NvbnN0YW50KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTQgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKK2NsYXNzIEJhY2t3YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJk
c0RvbWluYXRvcnM7CiBjbGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7
CiBjbGFzcyBDRkc7CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERv
bWluYXRvcnM7CitjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBTdGFja1Nsb3Q7CiBjbGFzcyBW
YWx1ZTsKIGNsYXNzIFZhcmlhYmxlOwpAQCAtMTc1LDYgKzE3OSwxMCBAQCBwdWJsaWM6CiAgICAg
Q0ZHJiBjZmcoKSBjb25zdCB7IHJldHVybiAqbV9jZmc7IH0KIAogICAgIERvbWluYXRvcnMmIGRv
bWluYXRvcnMoKTsKKyAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcygpOworICAgIEJhY2t3
YXJkc0NGRyYgYmFja3dhcmRzQ0ZHKCk7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgYmFja3dh
cmRzRG9taW5hdG9ycygpOworICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBjb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcygpOwogCiAgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3Qg
VmFsdWVLZXkmKTsKICAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CkBA
IC0yNzEsNiArMjc5LDEwIEBAIHByaXZhdGU6CiAgICAgU3BhcnNlQ29sbGVjdGlvbjxWYWx1ZT4g
bV92YWx1ZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmF0
dXJhbExvb3BzPiBtX25hdHVyYWxMb29wczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRz
Q0ZHPiBtX2JhY2t3YXJkc0NGRzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5h
dG9ycz4gbV9iYWNrd2FyZHNEb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9s
RXF1aXZhbGVuY2VBbmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKICAgICBI
YXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RDb25zdGFudHM7CiAgICAgdW5zaWduZWQgbV9udW1FbnRy
eXBvaW50cyB7IDEgfTsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTkyLDYg
KzE0NTkyLDczIEBAIHZvaWQgdGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVD
Syhmb3VuZCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGdlbmVyYXRlTG9v
cChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wID0gcHJvYy5hZGRC
bG9jaygpOworICAgIEJhc2ljQmxvY2sqIGVuZCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFVw
c2lsb25WYWx1ZSogaW5pdGlhbEluZGV4ID0gcm9vdC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4o
CisgICAgICAgIHByb2MsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVt
cCwgT3JpZ2luKCkpOworICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMobG9vcCk7CisgICAgCisgICAg
VmFsdWUqIGluZGV4ID0gbG9vcC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBP
cmlnaW4oKSk7CisgICAgaW5pdGlhbEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIAorICAgIFZh
bHVlKiBvbmUgPSBmdW5jKGxvb3ApOworICAgIAorICAgIFZhbHVlKiBuZXh0SW5kZXggPSBsb29w
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAg
IFVwc2lsb25WYWx1ZSogbG9vcEluZGV4ID0gbG9vcC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4o
cHJvYywgT3JpZ2luKCksIG5leHRJbmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgp
OworICAgIGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksCisgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBMZXNzVGhhbiwgT3JpZ2luKCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcC0+c2V0
U3VjY2Vzc29ycyhsb29wLCBlbmQpOworICAgIAorICAgIGVuZC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG9uZUZ1bmN0aW9u
Q2FsbENvdW50Oworc3RhdGljIGludCBvbmVGdW5jdGlvbigpCit7CisgICAgb25lRnVuY3Rpb25D
YWxsQ291bnQrKzsKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmUoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBsb29wKSAtPiBWYWx1ZSB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwg
RWZmZWN0czo6bm9uZSgpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikp
KTsKKyAgICAgICAgfSk7CisgICAgCisgICAgb25lRnVuY3Rpb25DYWxsQ291bnQgPSAwOworICAg
IGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYyk7CisgICAgQ0hFQ0tfRVEob25lRnVuY3Rpb25DYWxs
Q291bnQsIDEpOworfQorCit2b2lkIHRlc3RMSUNNRGVmYXVsdENhbGwoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBs
b29wKSAtPiBWYWx1ZSB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSk7CisgICAgICAgIH0pOworICAgIAorICAg
IG9uZUZ1bmN0aW9uQ2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2Mp
OworICAgIENIRUNLX0VRKG9uZUZ1bmN0aW9uQ2FsbENvdW50LCAxMDApOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiB7CkBAIC0xNzAzNCw3ICsx
NzEwMSw5IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdExvYWRC
YXNlSW5kZXhTaGlmdDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4U2hpZnQzMigpKTsK
ICAgICBSVU4odGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkpOwotICAgIAorICAgIFJVTih0
ZXN0TElDTVB1cmUoKSk7CisgICAgUlVOKHRlc3RMSUNNRGVmYXVsdENhbGwoKSk7CisKICAgICBS
VU4odGVzdEF0b21pY1dlYWtDQVM8aW50OF90PigpKTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtD
QVM8aW50MTZfdD4oKSk7CiAgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOwpA
QCAtMTcwODcsNyArMTcxNTYsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAg
UlVOKHRlc3RGbG9hdEVxdWFsT3JVbm9yZGVyZWRGb2xkaW5nKCkpOwogICAgIFJVTih0ZXN0Rmxv
YXRFcXVhbE9yVW5vcmRlcmVkRm9sZGluZ05hTigpKTsKICAgICBSVU4odGVzdEZsb2F0RXF1YWxP
clVub3JkZXJlZERvbnRGb2xkKCkpOwotCisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAg
ICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBBaXI6
OkJyYW5jaFRlc3QzMiwgQWlyOjpBcmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJp
dEFuZEltbUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBB
aXI6OkFyZzo6VG1wKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFs
TG9vcHMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKQEAgLTIyOSw4ICsyMzAsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCiAgICAgLy8g
VGhlc2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzID0gMjsKLSAgICB1bnNp
Z25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsK
KyAgICAKKyAgICBJbm5lck1vc3RMb29wSW5kaWNlcyBpbm5lck1vc3RMb29wSW5kaWNlczsKIAog
ICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyBy
ZXR1cm4gbm9kZS0+aW5kZXg7IH0KICAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soaW5kZXgpOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMo
KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLm51bUJsb2NrcygpOyB9CisgICAgCisgICAgSW5uZXJN
b3N0TG9vcEluZGljZXMmIGlubmVyTW9kZUxvb3BJbmRpY2VzKE5vZGUgbm9kZSkgY29uc3QgeyBy
ZXR1cm4gbm9kZS0+aW5uZXJNb3N0TG9vcEluZGljZXM7IH0KIAogICAgIFBvaW50ZXJEdW1wPEJh
c2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBwb2ludGVyRHVtcChub2Rl
KTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9v
cHMuY3BwCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05hdHVyYWxMb29wcy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LQotI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKLSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotdm9pZCBOYXR1cmFsTG9vcDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgiW0hlYWRlcjogIiwgKmhl
YWRlcigpLCAiLCBCb2R5OiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JvZHku
c2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludCgiICIsICptX2JvZHlbaV0pOwotICAgIG91
dC5wcmludCgiXSIpOwotfQotCi1OYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcyhHcmFwaCYgZ3Jh
cGgpCi17Ci0gICAgQVNTRVJUKGdyYXBoLm1fZG9taW5hdG9ycyk7Ci0KLSAgICAvLyBJbXBsZW1l
bnQgdGhlIGNsYXNzaWMgZG9taW5hdG9yLWJhc2VkIG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBm
aXJzdAotICAgIC8vIHN0ZXAgaXMgdG8gZmluZCBhbGwgY29udHJvbCBmbG93IGVkZ2VzIEEgLT4g
QiB3aGVyZSBCIGRvbWluYXRlcyBBLgotICAgIC8vIFRoZW4gQiBpcyBhIGxvb3AgaGVhZGVyIGFu
ZCBBIGlzIGEgYmFja3dhcmQgYnJhbmNoaW5nIGJsb2NrLiBXZSB3aWxsCi0gICAgLy8gdGhlbiBh
Y2N1bXVsYXRlLCBmb3IgZWFjaCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNo
aW5nCi0gICAgLy8gYmxvY2tzLiBUaGVuIHdlIGJhY2t3YXJkcyBncmFwaCBzZWFyY2ggZnJvbSB0
aGUgYmFja3dhcmQgYnJhbmNoaW5nCi0gICAgLy8gYmxvY2tzIHRvIHRoZWlyIGxvb3AgaGVhZGVy
cywgd2hpY2ggZ2l2ZXMgdXMgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlCi0gICAgLy8gbG9vcCBi
b2R5LgotICAgIAotICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAK
LSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxuIik7Ci0g
ICAgICAgIGdyYXBoLm1fZG9taW5hdG9ycy0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgIH0K
LSAgICAKLSAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7Ci0gICAgICAgICAg
ICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXplKCk7IGotLTspIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tqXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9sb29wc1tqXS5hZGRCbG9jayhibG9jayk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChz
dWNjZXNzb3IsIG1fbG9vcHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGxvb3AuYWRkQmxvY2soYmxv
Y2spOwotICAgICAgICAgICAgbV9sb29wcy5hcHBlbmQobG9vcCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3RzdHJh
cDogIiwgKnRoaXMsICJcbiIpOwotICAgIAotICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsK
LSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7Ci0gICAgc2VlbkJsb2Nr
cy5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9s
b29wc1tpXTsKLSAgICAgICAgCi0gICAgICAgIHNlZW5CbG9ja3MuY2xlYXJBbGwoKTsKLSAgICAg
ICAgQVNTRVJUKGJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGxvb3AgIiwgbG9v
cCwgIlxuIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUo
KTsgai0tOykgewotICAgICAgICAgICAgc2VlbkJsb2Nrc1tsb29wW2pdLT5pbmRleF0gPSB0cnVl
OwotICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgRGVhbGluZyB3aXRoICIsICpibG9jaywgIlxuIik7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChibG9jayA9PSBsb29wLmhlYWRlcigpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBi
bG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAg
ICAgICBpZiAoc2VlbkJsb2Nrc1twcmVkZWNlc3Nvci0+aW5kZXhdKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsb29wLmFk
ZEJsb2NrKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVu
ZChwcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgc2VlbkJsb2Nrc1twcmVkZWNlc3Nvci0+
aW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEZpZ3VyZSBvdXQgcmV2ZXJzZSBtYXBwaW5nIGZyb20gYmxvY2tzIHRvIGxvb3BzLgotICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2Vz
OyBpLS07KQotICAgICAgICAgICAgYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzW2ldID0gVUlO
VF9NQVg7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29wcy5zaXpl
KCk7IGxvb3BJbmRleC0tOykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNb
bG9vcEluZGV4XTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleElu
TG9vcCA9IGxvb3Auc2l6ZSgpOyBibG9ja0luZGV4SW5Mb29wLS07KSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IGxvb3BbYmxvY2tJbmRleEluTG9vcF07Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBCYXNpY0Jsb2NrOjpudW1iZXJP
ZklubmVyTW9zdExvb3BJbmRpY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCB0
aGlzSW5kZXggPSBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbaV07Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXNJbmRleCA9PSBVSU5UX01BWCB8fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhp
c0luZGV4XS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW50b0JvdW5kZWRW
ZWN0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0TG9vcEluZGlj
ZXMsIEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsb29wSW5kZXgsIGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRzIGlubmVyLW1vc3QgbG9vcCBhbmQgaXRz
IG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKLSAgICAvLyB0aGlzIHRvIGZpZ3VyZSBvdXQg
bG9vcCBwYXJlbnRpbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChsb29wLmhlYWRlcigpLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXSA9PSBp
KTsKLSAgICAgICAgCi0gICAgICAgIGxvb3AubV9vdXRlckxvb3BJbmRleCA9IGxvb3AuaGVhZGVy
KCktPmlubmVyTW9zdExvb3BJbmRpY2VzWzFdOwotICAgIH0KLSAgICAKLSAgICBpZiAodmFsaWRh
dGlvbkVuYWJsZWQoKSkgewotICAgICAgICAvLyBEbyBzb21lIHNlbGYtdmVyaWZpY2F0aW9uIHRo
YXQgd2UndmUgZG9uZSBzb21lIG9mIHRoaXMgY29ycmVjdGx5LgotICAgICAgICAKLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+
IHNpbXBsZUxvb3BzT2Y7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNb
aV0uY29udGFpbnMoYmxvY2spKQotICAgICAgICAgICAgICAgICAgICBzaW1wbGVMb29wc09mLmFw
cGVuZCgmbV9sb29wc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGZhbmN5TG9vcHNPZiA9IGxvb3BzT2YoYmxv
Y2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6OnNvcnQoc2ltcGxlTG9vcHNPZi5i
ZWdpbigpLCBzaW1wbGVMb29wc09mLmVuZCgpKTsKLSAgICAgICAgICAgIHN0ZDo6c29ydChmYW5j
eUxvb3BzT2YuYmVnaW4oKSwgZmFuY3lMb29wc09mLmVuZCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2ltcGxlTG9vcHNPZiA9PSBmYW5jeUxvb3BzT2YpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
KCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7Ci19Ci0KLU5hdHVyYWxMb29wczo6fk5hdHVyYWxM
b29wcygpIHsgfQotCi1WZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxv
b3BzT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci17Ci0gICAgVmVjdG9yPGNvbnN0IE5hdHVy
YWxMb29wKj4gcmVzdWx0OwotICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5l
ck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29w
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChsb29wKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIE5hdHVyYWxMb29wczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAg
IG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsKLSAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbG9vcHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG91dC5wcmludChjb21tYSwgbV9sb29wc1tpXSk7Ci0gICAgb3V0LnByaW50KCJ9Iik7Ci19Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJl
dmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExv
b3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTQyICsyNywyMyBAQAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKLSNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQ0ZHLmgiCiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotY2xhc3MgTmF0dXJhbExvb3BzOwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29w
PENGRz4gTmF0dXJhbExvb3A7CiAKLWNsYXNzIE5hdHVyYWxMb29wIHsKLXB1YmxpYzoKLSAgICBO
YXR1cmFsTG9vcCgpCi0gICAgICAgIDogbV9oZWFkZXIoMCkKLSAgICAgICAgLCBtX291dGVyTG9v
cEluZGV4KFVJTlRfTUFYKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgTmF0dXJhbExvb3AoQmFz
aWNCbG9jayogaGVhZGVyLCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgOiBtX2hlYWRlcihoZWFk
ZXIpCi0gICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01BWCkKLSAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogaGVhZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ib2R5LnNpemUoKTsgfQotICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQotICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLQotICAgIC8vIFRoaXMgaXMg
dGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBiZWxvbmdz
IHRvCi0gICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0dXJhbExv
b3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKLSAgICAvLyB0cmllcyB0byBiZSBPKGxvb3AgZGVwdGgp
IHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcwotICAgIC8vIGFsbW9zdCBh
bHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgotICAgIGJvb2wg
Y29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9ib2R5
W2ldID09IGJsb2NrKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIoKSk7IC8vIEhlYWRlciBzaG91bGQgYmUgY29u
dGFpbmVkLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlIGluZGV4
IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMuCi0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgCi0gICAgYm9vbCBpc091dGVyTW9zdExvb3AoKSBj
b25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYOyB9Ci0gICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBOYXR1cmFsTG9vcHM7Ci0gICAgCi0gICAgdm9pZCBhZGRCbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIG1faGVh
ZGVyOwotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gbV9ib2R5OwotICAgIHVuc2lnbmVkIG1f
b3V0ZXJMb29wSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLX07Ci0KLWNsYXNzIE5hdHVy
YWxMb29wcyB7CitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFsTG9vcHM8
Q0ZHPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcHMoR3JhcGgmKTsK
LSAgICB+TmF0dXJhbExvb3BzKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9vcHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25z
dCBOYXR1cmFsTG9vcCYgbG9vcCh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbG9vcHNbaV07Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBp
ZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCi0gICAgLy8gbG9vcCBpdCBi
ZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5u
ZXJNb3N0TG9vcE9mKGJsb2NrKTsKLSAgICAgICAgaWYgKCFsb29wKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGlmIChsb29wLT5oZWFkZXIoKSA9PSBibG9jaykKLSAgICAgICAgICAg
IHJldHVybiBsb29wOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAg
ICAgZm9yICg7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAg
ICAgICAgICAgIEFTU0VSVChsb29wLT5oZWFkZXIoKSAhPSBibG9jayk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5l
ck1vc3RMb29wT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXTsKLSAgICAgICAgaWYg
KGluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biAmbV9sb29wc1tpbmRleF07Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBp
bm5lck1vc3RPdXRlckxvb3AoY29uc3QgTmF0dXJhbExvb3AmIGxvb3ApIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAobG9vcC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5k
ZXhdOwotICAgIH0KLSAgICAKLSAgICBib29sIGJlbG9uZ3NUbyhCYXNpY0Jsb2NrKiBibG9jaywg
Y29uc3QgTmF0dXJhbExvb3AmIGNhbmRpZGF0ZUxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICAv
LyBJdCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBp
dCdzIHNtYWxsLgotICAgICAgICBpZiAoY2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQotICAgICAg
ICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29udGFpbnMoYmxvY2spOwotICAgICAgICAKLSAg
ICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9j
ayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7Ci0gICAgICAgICAg
ICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHVu
c2lnbmVkIGxvb3BEZXB0aChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICBOYXR1cmFsTG9v
cHMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4oKmdyYXBo
Lm1fY2ZnLCBncmFwaC5lbnN1cmVEb21pbmF0b3JzKCksIHZhbGlkYXRpb25FbmFibGVkKCkpCiAg
ICAgewotICAgICAgICB1bnNpZ25lZCBkZXB0aCA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgTmF0
dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5u
ZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKLSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAgIHJl
dHVybiBkZXB0aDsKICAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRpY2VzIG9mIGFs
bCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4g
bG9vcHNPZihCYXNpY0Jsb2NrKikgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgLy8gSWYgd2UgZXZlciBoYWQgYSBzY2FsYWJpbGl0eSBw
cm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAotICAgIC8vIHVzZSBz
b21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sgb2YgYSBsb3QgbGVz
cyBjb252ZW5pZW50LgotICAgIFZlY3RvcjxOYXR1cmFsTG9vcCwgND4gbV9sb29wczsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCw3IEBA
CiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3Jz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJs
ZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnViYmxlU29ydC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyog
TmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJp
bnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9ja2Vk
UHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRTFE
RkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzQyLDggKzM0Myw4IEBACiAJCTlCQzcwRjA0MTc2QzM3OUQw
MDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250YWlu
ZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMzBENDEyQzFGMERF
MEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2Z0TGlua2luZy5oOyBwYXRoID0g
U29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTMwRDQxMkMxRjBE
RTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMEQ0
MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTA5OEFGRjFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJveFNQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVNQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNTYxRjMwRjFERjI2NDIxMDBGRjY3NUQgLyogRGVwcmVjYXRlZE9wdGlv
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcHJlY2F0ZWRPcHRpb25h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODU2LDYgKzg1Nyw3IEBACiAJCQkJ
MEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICovLAogCQkJCTBG
NjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8sCiAJCQkJRkU4MjI1
MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8sCisJCQkJMEY1QkYxNjUxRjIzMTc4
MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIy
RUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIx
MCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJEMDE1MUE4MjVCMDA0MTIzRkYgLyogTm9uY29w
eWFibGUuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhY2t3YXJkc0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAkocmV2aXNpb24gMjE5NjAw
KQorKysgU291cmNlL1dURi93dGYvQmFja3dhcmRzR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCkBAIC0yNDgsNiArMjQ5LDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2dyYXBoLm51bU5vZGVzKCkgKyAxOwogICAgIH0KKyAgICAKKyAgICBJbm5lck1vc3RMb29wSW5k
aWNlcyYgaW5uZXJNb3N0TG9vcEluZGljZXMoTm9kZSBub2RlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG5vZGUuaXNSb290KCkpCisgICAgICAgICAgICByZXR1cm4gbV9yb290SW5uZXJNb3N0
TG9vcEluZGljZXM7CisgICAgICAgIHJldHVybiBtX2dyYXBoLmlubmVyTW9zdExvb3BJbmRpY2Vz
KG5vZGUubm9kZSgpKTsKKyAgICB9CiAKICAgICBDU3RyaW5nIGR1bXAoTm9kZSBub2RlKSBjb25z
dAogICAgIHsKQEAgLTI4NSw2ICsyOTMsNyBAQCBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBo
OwogICAgIExpc3QgbV9yb290U3VjY2Vzc29yTGlzdDsKICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0
IG1fcm9vdFN1Y2Nlc3NvclNldDsKKyAgICBtdXRhYmxlIElubmVyTW9zdExvb3BJbmRpY2VzIG1f
cm9vdElubmVyTW9zdExvb3BJbmRpY2VzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRG9taW5hdG9ycy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Eb21p
bmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV1RGRG9t
aW5hdG9yc19oCiAjZGVmaW5lIFdURkRvbWluYXRvcnNfaAogCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29w
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1
cmFsTG9vcHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExvb3Ag
eworcHVibGljOgorICAgIE5hdHVyYWxMb29wKCkKKyAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIp
CisgICAgICAgICwgbV9oZWFkZXIobnVsbHB0cikKKyAgICAgICAgLCBtX291dGVyTG9vcEluZGV4
KFVJTlRfTUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTmF0dXJhbExvb3AoR3JhcGgmIGdy
YXBoLCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBoZWFkZXIsIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICA6IG1fZ3JhcGgoJmdyYXBoKQorICAgICAgICAsIG1faGVhZGVyKGhlYWRlcikKKyAgICAgICAg
LCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBHcmFwaCogZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dy
YXBoOyB9CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaGVhZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFkZXI7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ib2R5LnNpemUoKTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGF0KHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKworICAgIC8v
IFRoaXMgaXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9j
ayBiZWxvbmdzIHRvCisgICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwg
TmF0dXJhbExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKKyAgICAvLyB0cmllcyB0byBiZSBPKGxv
b3AgZGVwdGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcworICAgIC8v
IGFsbW9zdCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgor
ICAgIGJvb2wgY29udGFpbnModHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIoKSk7IC8vIEhl
YWRlciBzaG91bGQgYmUgY29udGFpbmVkLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMuCisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgYm9vbCBp
c091dGVyTW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4ID09IFVJTlRf
TUFYOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIW1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG91
dC5wcmludCgiW0hlYWRlcjogIiwgbV9ncmFwaC0+ZHVtcChoZWFkZXIoKSksICIsIEJvZHk6Iik7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JvZHkuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAiLCBtX2dyYXBoLT5kdW1wKG1fYm9keVtpXSkpOworICAg
ICAgICBvdXQucHJpbnQoIl0iKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lPgorICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7CisgICAgCisgICAgdm9p
ZCBhZGRCbG9jayh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJs
b2NrKTsgfQorCisgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUg
bV9oZWFkZXI7CisgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCA0PiBtX2JvZHk7Cisg
ICAgdW5zaWduZWQgbV9vdXRlckxvb3BJbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsK
KwordHlwZWRlZiBzdGQ6OmFycmF5PHVuc2lnbmVkLCAyPiBJbm5lck1vc3RMb29wSW5kaWNlczsK
KwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9vcHMgeworcHVibGlj
OgorICAgIE5hdHVyYWxMb29wcyhHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnM8R3JhcGg+JiBkb21p
bmF0b3JzLCBib29sIHNlbGZDaGVjayA9IGZhbHNlKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgp
CisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9taW5hdG9yLWJhc2Vk
IG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdAorICAgICAgICAvLyBzdGVwIGlzIHRvIGZp
bmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KKyAg
ICAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2FyZCBicmFu
Y2hpbmcgYmxvY2suIFdlIHdpbGwKKyAgICAgICAgLy8gdGhlbiBhY2N1bXVsYXRlLCBmb3IgZWFj
aCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAgIC8vIGJs
b2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3YXJkIGJy
YW5jaGluZworICAgICAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBn
aXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKKyAgICAgICAgLy8gbG9vcCBib2R5Lgor
ICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCisg
ICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxu
Iik7CisgICAgICAgICAgICBkb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKKyAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5zdWNj
ZXNzb3JzKGJsb2NrKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBzdWNjZXNzb3IgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2NrKVtpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXpl
KCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVhZGVyKCkg
PT0gc3VjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJs
b2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+IGxvb3AoZ3Jh
cGgsIHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGxvb3AuYWRk
QmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3ApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7CisgICAgCisg
ICAgICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKKyAgICAgICAgVmVjdG9yPHR5cGVuYW1l
IEdyYXBoOjpOb2RlLCA0PiBibG9ja1dvcmtsaXN0OworICAgICAgICBzZWVuQmxvY2tzLnJlc2l6
ZShncmFwaC5udW1Ob2RlcygpKTsKKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9v
cCA9IG1fbG9vcHNbaV07CisgICAgICAgIAorICAgICAgICAgICAgc2VlbkJsb2Nrcy5jbGVhckFs
bCgpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJE
ZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIHNl
ZW5CbG9ja3NbZ3JhcGguaW5kZXgobG9vcFtqXSldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
bG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCBncmFwaC5kdW1wKGJsb2Nr
KSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbG9v
cC5oZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBncmFwaC5wcmVkZWNlc3NvcnMoYmxv
Y2spLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBwcmVkZWNlc3NvciA9IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbal07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRlY2Vzc29yKV0pCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2VlbkJsb2Nrc1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWd1
cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6dHVwbGVfc2l6ZTxJbm5l
ck1vc3RMb29wSW5kaWNlcz46OnZhbHVlOyBpLS07KQorICAgICAgICAgICAgICAgIGdyYXBoLmlu
bmVyTW9zdExvb3BJbmRpY2VzKGJsb2NrKSA9IFVJTlRfTUFYOworICAgICAgICB9CisgICAgICAg
IGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29wcy5zaXplKCk7IGxvb3BJbmRleC0tOykg
eworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tsb29wSW5k
ZXhdOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleEluTG9v
cCA9IGxvb3Auc2l6ZSgpOyBibG9ja0luZGV4SW5Mb29wLS07KSB7CisgICAgICAgICAgICAgICAg
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBsb29wW2Jsb2NrSW5kZXhJbkxvb3BdOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6
dHVwbGVfc2l6ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZhbHVlOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgdGhpc0luZGV4ID0gZ3JhcGguaW5uZXJNb3N0TG9vcEluZGlj
ZXMoYmxvY2spW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRf
TUFYIHx8IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0SW50b0JvdW5kZWRWZWN0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhcGguaW5uZXJNb3N0TG9vcEluZGljZXMoYmxvY2spLCBzdGQ6OnR1
cGxlX3NpemU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29wSW5kZXgsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRzIGlu
bmVyLW1vc3QgbG9vcCBhbmQgaXRzIG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKKyAgICAg
ICAgLy8gdGhpcyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJhbExv
b3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGdyYXBoLmlubmVyTW9zdExvb3BJbmRpY2VzKGxvb3AuaGVhZGVyKCkpWzBdID09IGkpOworICAg
ICAgICAKKyAgICAgICAgICAgIGxvb3AubV9vdXRlckxvb3BJbmRleCA9IGdyYXBoLmlubmVyTW9z
dExvb3BJbmRpY2VzKGxvb3AuaGVhZGVyKCkpWzFdOworICAgICAgICB9CisgICAgCisgICAgICAg
IGlmIChzZWxmQ2hlY2spIHsKKyAgICAgICAgICAgIC8vIERvIHNvbWUgc2VsZi12ZXJpZmljYXRp
b24gdGhhdCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHkuCisgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2Nr
ID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBzaW1wbGVMb29wc09mOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMo
YmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1f
bG9vcHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBmYW5jeUxvb3BzT2YgPSBsb29w
c09mKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ZDo6c29ydChzaW1w
bGVMb29wc09mLmJlZ2luKCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOworICAgICAgICAgICAgICAg
IHN0ZDo6c29ydChmYW5jeUxvb3BzT2YuYmVnaW4oKSwgZmFuY3lMb29wc09mLmVuZCgpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpbXBsZUxvb3BzT2Yg
PT0gZmFuY3lMb29wc09mKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAi
XG4iKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsg
fQorICAgIAorICAgIHVuc2lnbmVkIG51bUxvb3BzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2xvb3BzLnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+
JiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sb29wc1tp
XTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRoZSBibG9jayBp
c24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKKyAgICAvLyBsb29wIGl0IGJlbG9uZ3MgdG8uCisg
ICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBoZWFkZXJPZih0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiog
bG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgIGlmICghbG9vcCkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobG9vcC0+aGVhZGVyKCkgPT0gYmxvY2spCisg
ICAgICAgICAgICByZXR1cm4gbG9vcDsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIGZvciAoOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29w
KSkKKyAgICAgICAgICAgICAgICBBU1NFUlQobG9vcC0+aGVhZGVyKCkgIT0gYmxvY2spOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBjb25zdCBOYXR1cmFs
TG9vcDxHcmFwaD4qIGlubmVyTW9zdExvb3BPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykg
Y29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPmlubmVyTW9zdExv
b3BJbmRpY2VzWzBdOworICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKKyAgICB9CisgICAg
CisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3Qg
TmF0dXJhbExvb3A8R3JhcGg+JiBsb29wKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxvb3Au
bV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gJm1fbG9vcHNbbG9vcC5tX291dGVyTG9vcEluZGV4XTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBiZWxvbmdzVG8odHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2ssIGNvbnN0IE5h
dHVyYWxMb29wPEdyYXBoPiYgY2FuZGlkYXRlTG9vcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8v
IEl0J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0
J3Mgc21hbGwuCisgICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCisgICAgICAg
ICAgICByZXR1cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BP
ZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7CisgICAg
ICAgICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGxvb3BEZXB0aCh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBO
YXR1cmFsTG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBs
b29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIGRlcHRoKys7Cisg
ICAgICAgIHJldHVybiBkZXB0aDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGFsbCBsb29w
cyB0aGlzIGJlbG9uZ3MgdG8uIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdmVjdG9yIGlzIHRoZSBp
bm5lcm1vc3QgbG9vcC4gVGhlIGxhc3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IGxvb3AuCisg
ICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPio+IGxvb3BzT2YodHlwZW5hbWUgR3Jh
cGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJh
bExvb3A8R3JhcGg+Kj4gcmVzdWx0OworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdy
YXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1v
c3RPdXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsb29wKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsK
KyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9sb29wcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
bV9sb29wc1tpXSk7CisgICAgICAgIG91dC5wcmludCgifSIpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgCisgICAgLy8gSWYgd2UgZXZlciBoYWQgYSBz
Y2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAor
ICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sg
b2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgorICAgIFZlY3RvcjxOYXR1cmFsTG9vcDxHcmFwaD4s
IDQ+IG1fbG9vcHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbm5l
ck1vc3RMb29wSW5kaWNlczsKK3VzaW5nIFdURjo6TmF0dXJhbExvb3A7Cit1c2luZyBXVEY6Ok5h
dHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFJhbmdlVHlwZT4KIGNsYXNzIFJhbmdlU2V0
IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSYW5nZSwgOD4gVmVjdG9yVHlwZTsKKyAg
ICAKICAgICB0eXBlZGVmIFJhbmdlVHlwZSBSYW5nZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFJh
bmdlOjpUeXBlIFR5cGU7CiAKQEAgLTEyNSw4ICsxMjcsMjMgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgb3V0LnByaW50KCJ7IiwgbGlzdER1bXAobV9yYW5nZXMpLCAiLCBpc0NvbXBhY3QgPSAi
LCBtX2lzQ29tcGFjdCwgIn0iKTsKICAgICB9CisgICAgCisgICAgVmVjdG9yVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2VzLmJl
Z2luKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvclR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yYW5nZXMuZW5kKCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkQWxsKGNvbnN0IFJhbmdlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAg
IGZvciAoUmFuZ2UgcmFuZ2UgOiBvdGhlcikKKyAgICAgICAgICAgIGFkZChyYW5nZSk7CisgICAg
fQogCi1wcml2YXRlOgogICAgIHZvaWQgY29tcGFjdCgpCiAgICAgewogICAgICAgICBpZiAobV9p
c0NvbXBhY3QpCkBAIC0xNjQsNiArMTgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9pc0NvbXBh
Y3QgPSB0cnVlOwogICAgIH0KICAgICAKK3ByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgb3Zlcmxh
cHNOb25FbXB0eShjb25zdCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCiAgICAgewogICAgICAg
ICByZXR1cm4gbm9uRW1wdHlSYW5nZXNPdmVybGFwKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdp
bigpLCBiLmVuZCgpKTsKQEAgLTE4Nyw3ICsyMDUsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gVUlOVF9NQVg7CiAgICAgfQogICAgIAotICAgIFZlY3RvcjxSYW5nZSwgOD4gbV9yYW5nZXM7
CisgICAgVmVjdG9yVHlwZSBtX3JhbmdlczsKICAgICBib29sIG1faXNDb21wYWN0IHsgdHJ1ZSB9
OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316229</attachid>
            <date>2017-07-23 11:26:19 -0700</date>
            <delta_ts>2017-07-23 13:00:41 -0700</delta_ts>
            <desc>better version</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80683</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxNCBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTZEMUYyM0EyNUEwMDI5
RDkxRCAvKiBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyog
QjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oICovOyB9OworCQkwRjVCRjE3MDFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyog
QjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBDMTg2OTIgLyog
QWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07CiAJCTBGNUNG
OTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3NTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU3LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAq
LzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1
MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjgs
NiArMzAzNSwxNCBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdl
LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRs
L0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIz
L0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM05h
dHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9t
aW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9
IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCRjE2QzFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHBhdGgg
PSBiMy9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBw
YXRoID0gYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMx
ODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzksNiBAQAogCQlB
NzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3Bz
LmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRo
ID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtH
ZW5lcmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ3
MCw4IEBACiAJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5oICovLAogCQkJCTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNw
cCAqLywKIAkJCQkwRjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICov
LAorCQkJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAor
CQkJCTBGNUJGMTZBMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAq
LywKIAkJCQkwRjJDNjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkw
RjJDNjNBQzFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NDk4LDYgKzU1MTQsNyBA
QAogCQkJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywK
IAkJCQkwRjMzOERGMzFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmNwcCAq
LywKIAkJCQkwRjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmgg
Ki8sCisJCQkJMEY1QkYxNkMxRjIzQTI1QTAwMjlEOTFEIC8qIEIzQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCAqLywKIAkJCQkwRjMzOEUwMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2Vj
dGlvbi5jcHAgKi8sCiAJCQkJMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rp
b24uaCAqLywKIAkJCQkwRjMzRkNGQTFDMTYyNUJFMDAzMjNGNjcgLyogQjNEb21pbmF0b3JzLmgg
Ki8sCkBAIC01NTA3LDYgKzU1MjQsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGlt
aW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAw
QUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCisJ
CQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAq
LywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywK
IAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmggKi8sCiAJCQkJ
MEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NBLmNwcCAqLywKQEAgLTU1MjEsNiAr
NTU0MCw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2Nr
SW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAv
KiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hv
aXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8sCiAJCQkJREM2OUI5OUExRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAgKi8sCiAJCQkJREM2OUI5OUIxRDE1
RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICovLAogCQkJCTBGRUM4NUI0MUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8sCkBAIC01NTQ0LDYgKzU1NjUsNyBA
QAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuY3BwICov
LAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBCM01vdmVDb25zdGFudHMuaCAqLywK
IAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNOYXRpdmVUcmFpdHMuaCAqLywKKwkJ
CQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkw
RjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCAqLywKIAkJCQkw
RjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmNwcCAqLywKIAkJ
CQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3RzLmggKi8sCkBA
IC03MzY4LDcgKzczOTAsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVENzkyQyAvKiBERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1QTFCNjFBNEY4MDA0
OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQlBNzM3ODEwQTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFE
NyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDksNyBAQAogCQkJCTBGQkI3M0JCMURF
Rjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBE
RkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBC
QUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5NCw3IEBACiAJCQkJMEYxRkIzOTcxRTFBRjdF
MzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50c09mZnNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJl
TG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYx
RjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDM4NkE3
NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNhbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMCArODg3OSwxMiBAQAogCQkJ
CUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFE
IC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY3MUYyM0EwOTgwMDI5RDkx
RCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzkyMTIxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTE1NCw2ICs5MTc5LDcgQEAKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
RDFGMjNBMjVBMDAyOUQ5MUQgLyogQjNDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjA4QUQ3MURGMDkyNUQwMDdEMzI2OSAvKiBMb2NrRHVyaW5n
TWFya2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTYzLDYgKzkxODksNyBAQAogCQkJCTg2QzM2
RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBG
RERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDM2Miw3ICsxMDM4OSw2IEBACiAJCQkJ
MEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1QjFCNjFBNEY4MDA0OTU1QTggLyog
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTczNzgxMEQx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWly
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdO
b2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDcyMyw2ICsxMDc0OSw3IEBACiAJCQkJ
QUQyRkNCRTgxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0
OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNjMxRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc4OSw2ICsxMDgxNiw3IEBACiAJCQkJMEZE
M0U0MEIxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU2MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTcwMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk2OUEwNzlBMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NTAxMDdFQzBENzAwMTNFN0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNDRkcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0JhY2t3YXJkc0dyYXBoLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2FyZHNDRkcg
OiBwdWJsaWMgQmFja3dhcmRzR3JhcGg8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFja3dhcmRzQ0ZHKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBCYWNrd2FyZHNDRkcoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IEJhY2t3YXJkc0dyYXBo
PENGRz4ocHJvYy5jZmcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3JzPEJhY2t3YXJkc0NGRz4geworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhY2t3YXJkc0RvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0RvbWluYXRvcnMoUHJvY2VkdXJlJiBw
cm9jKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+KHByb2MuYmFja3dh
cmRzQ0ZHKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0ZH
LmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBp
bmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KICAgICBOb2Rl
IG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY1tpbmRleF07IH0KICAg
ICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5zaXplKCk7IH0KLQor
ICAgIAogICAgIFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7
IHJldHVybiBwb2ludGVyRHVtcChub2RlKTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sRXF1
aXZhbGVuY2VBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQmFja3dhcmRzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29udHJvbEVxdWl2
YWxlbmNlQW5hbHlzaXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDog
bV9kb21pbmF0b3JzKHByb2MuZG9taW5hdG9ycygpKQorICAgICAgICAsIG1fYmFja3dhcmRzRG9t
aW5hdG9ycyhwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmZjoKKyAgICAvLworICAgIC8vIC0gSWYgYiBleGVj
dXRlcyB0aGVuIGEgbXVzdCBoYXZlIGV4ZWN1dGVkIGJlZm9yZSBpdCAoYSBkb21pbmF0ZXMgYiku
CisgICAgLy8gLSBJZiBhIGV4ZWN1dGVzIHRoZW4gYiB3aWxsIGV4ZWN1dGUgYWZ0ZXIgaXQgKGIg
YmFja3dhcmRzLWRvbWluYXRlcyBhKS4KKyAgICBib29sIGRvbWluYXRlc0VxdWl2YWxlbnRseShC
YXNpY0Jsb2NrKiBhLCBCYXNpY0Jsb2NrKiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZG9t
aW5hdG9ycy5kb21pbmF0ZXMoYSwgYikKKyAgICAgICAgICAgICYmIG1fYmFja3dhcmRzRG9taW5h
dG9ycy5kb21pbmF0ZXMoYiwgYSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgcmV0dXJucyB0
cnVlIGlmZiB0aGUgZXhlY3V0aW9uIG9mIGEgaW1wbGllcyB0aGF0IGIgYWxzbyBleGVjdXRlcyBh
bmQgdmljZS12ZXJzYS4KKyAgICBib29sIGFyZUVxdWl2YWxlbnQoQmFzaWNCbG9jayogYSwgQmFz
aWNCbG9jayogYikKKyAgICB7CisgICAgICAgIHJldHVybiBkb21pbmF0ZXNFcXVpdmFsZW50bHko
YSwgYikKKyAgICAgICAgICAgIHx8IGRvbWluYXRlc0VxdWl2YWxlbnRseShiLCBhKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgRG9taW5hdG9ycyYgbV9kb21pbmF0b3JzOworICAgIEJhY2t3YXJk
c0RvbWluYXRvcnMmIG1fYmFja3dhcmRzRG9taW5hdG9yczsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsOSBAQCBz
dHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gTWVtb3J5IGZlbmNlcyBjYW5ub3QgYmUgcmVvcmRlcmVk
IGFyb3VuZCBlYWNoIG90aGVyIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgZWZmZWN0cy4gVGhpcyBpcyBm
bGFnZ2VkCiAgICAgLy8gaWYgdGhlIG9wZXJhdGlvbiBpcyBhIG1lbW9yeSBmZW5jZS4KICAgICBi
b29sIGZlbmNlIHsgZmFsc2UgfTsKKyAgICAKKyAgICAvLyBXQVJOSU5HOiBUaGUgQjM6OmhvaXN0
TG9vcEludmFyaWFudFZhbHVlcygpIHBoYXNlIHRoaW5rcyB0aGF0IGl0IHVuZGVyc3RhbmRzIHRo
aXMgZXhoYXVzdGl2ZWx5LiBJZiB5b3UKKyAgICAvLyBhZGQgYW55IG5ldyBraW5kcyBvZiB0aGlu
Z3MgdGhhdCBjYW4gYmUgcmVhZCBvciB3cml0dGVuLCB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQgcGhh
c2UuCiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBSYW5nZSByZWFkczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVy
cy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJl
TG9vcFByZUhlYWRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNC
bG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgZW5zdXJlTG9vcFByZUhlYWRl
cnMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIE5hdHVyYWxMb29wcyYgbG9vcHMgPSBwcm9jLm5h
dHVyYWxMb29wcygpOworICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChw
cm9jKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IGxvb3BzLm51bUxvb3Bz
KCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IGxv
b3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgND4gb3V0T2ZCb2R5UHJlZGVjZXNzb3JzOworICAgICAgICBkb3VibGUgdG90YWxGcmVxdWVu
Y3kgPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogbG9vcC5oZWFk
ZXIoKS0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChsb29wcy5iZWxvbmdzVG8o
cHJlZGVjZXNzb3IsIGxvb3ApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBvdXRPZkJvZHlQcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29y
KTsKKyAgICAgICAgICAgIHRvdGFsRnJlcXVlbmN5ICs9IHByZWRlY2Vzc29yLT5mcmVxdWVuY3ko
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG91dE9mQm9keVByZWRlY2Vzc29y
cy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAg
QmFzaWNCbG9jayogcHJlSGVhZGVyID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShsb29wLmhl
YWRlcigpLCB0b3RhbEZyZXF1ZW5jeSk7CisgICAgICAgIHByZUhlYWRlci0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBKdW1wLCBsb29wLmhlYWRlcigpLT5hdCgwKS0+b3JpZ2luKCkpOworICAgICAg
ICBwcmVIZWFkZXItPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKGxvb3AuaGVhZGVyKCkp
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBvdXRP
ZkJvZHlQcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3Vj
Y2Vzc29yKGxvb3AuaGVhZGVyKCksIHByZUhlYWRlcik7CisgICAgICAgICAgICBwcmVIZWFkZXIt
PmFkZFByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgIGxvb3AuaGVhZGVyKCkt
PnJlbW92ZVByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbG9vcC5oZWFkZXIoKS0+YWRkUHJlZGVjZXNzb3IocHJlSGVhZGVyKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpIHsKKyAgICAgICAgcHJvYy5pbnZh
bGlkYXRlQ0ZHKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9v
cFByZUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNF
bnN1cmVMb29wUHJlSGVhZGVycy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIENyZWF0ZXMgYSBwcmUtaGVhZGVy
IGZvciBhbnkgbG9vcCB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuIEEgbG9vcCBoYXMgYSBw
cmUtaGVhZGVyIGlmIGl0cyBoZWFkZXIgaGFzCisvLyBleGFjdGx5IG9uZSBwcmVkZWNlc3NvciB0
aGF0IGlzbid0IGluIHRoZSBsb29wIGJvZHkuIElmIGEgbG9vcCBoZWFkZXIgaGFzIG1vcmUgdGhh
biBvbmUgb3V0LW9mLWJvZHkKKy8vIHByZWRlY2Vzc29yLCB0aGVuIHRoaXMgY3JlYXRlcyBhIG5l
dyBibG9jayBhbmQgcmV3aXJlcyB0aG9zZSBwcmVkZWNlc3NvcnMgdG8gaXQuCisKK2Jvb2wgZW5z
dXJlTG9vcFByZUhlYWRlcnMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAog
I2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKICNpbmNsdWRlICJC
M0ZpeFNTQS5oIgogI2luY2x1ZGUgIkIzRm9sZFBhdGhDb25zdGFudHMuaCIKKyNpbmNsdWRlICJC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIgogI2luY2x1ZGUgIkIzSW5mZXJTd2l0Y2hlcy5o
IgogI2luY2x1ZGUgIkIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmgiCiAjaW5jbHVkZSAiQjNMb3dl
ck1hY3Jvcy5oIgpAQCAtODMsNiArODQsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJl
JiBwcm9jZWR1cmUpCiAgICAgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgpID49IDIpIHsKICAgICAg
ICAgcmVkdWNlRG91YmxlVG9GbG9hdChwcm9jZWR1cmUpOwogICAgICAgICByZWR1Y2VTdHJlbmd0
aChwcm9jZWR1cmUpOworICAgICAgICBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMocHJvY2VkdXJl
KTsKICAgICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKTsKICAg
ICAgICAgaW5mZXJTd2l0Y2hlcyhwcm9jZWR1cmUpOwogICAgICAgICBkdXBsaWNhdGVUYWlscyhw
cm9jZWR1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52
YXJpYW50VmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29udHJvbEVxdWl2YWxlbmNlQW5hbHlz
aXMuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM05hdHVyYWxMb29w
cy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitib29sIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhQcm9jZWR1cmUm
IHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJob2lzdExvb3BJbnZh
cmlhbnRWYWx1ZXMiKTsKKyAgICAKKyAgICBlbnN1cmVMb29wUHJlSGVhZGVycygpOworICAgIAor
ICAgIE5hdHVyYWxMb29wcyYgbG9vcHMgPSBwcm9jLm5hdHVyYWxMb29wcygpOworICAgIGlmICgh
bG9vcHMubnVtTG9vcHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJvYy5yZXNl
dEJsb2NrT3duZXJzKCk7CisgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5h
dG9ycygpOworICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBjb250cm9sRXF1aXZhbGVu
Y2UgPSBwcm9jLmNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCk7CisgICAgCisgICAgc3RydWN0
IExvb3BEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7CisgICAgICAg
IGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgd3JpdGVzUGlu
bmVkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBzaWRlRXhpdHMgeyBmYWxzZSB9OworICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgeyBudWxscHRyIH07CisgICAgfTsKKyAgICAKKyAgICBJ
bmRleE1hcDxOYXR1cmFsTG9vcCwgTG9vcERhdGE+IGRhdGEobG9vcHMubnVtTG9vcHMoKSk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29wcygpOyBsb29w
SW5kZXgtLTspIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBsb29wcy5sb29w
KGxvb3BJbmRleCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29w
LmhlYWRlcigpLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxvb3BzLmJlbG9u
Z3NUbyhwcmVkZWNlc3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghZGF0YVtsb29wXS5wcmVIZWFkZXIpOworICAgICAgICAg
ICAgZGF0YVtsb29wXS5wcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAgICAgICBjb25z
dCBOYXR1cmFsTG9vcCogbG9vcCA9IGxvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAg
ICAgIGlmICghbG9vcCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUt
PmVmZmVjdHMoKTsKKyAgICAgICAgICAgIGRhdGFbKmxvb3BdLndyaXRlcy5hZGQoZWZmZWN0cy53
cml0ZXMpOworICAgICAgICAgICAgZGF0YVsqbG9vcF0ud3JpdGVzTG9jYWxTdGF0ZSB8PSBlZmZl
Y3RzLndyaXRlc0xvY2FsU3RhdGU7CisgICAgICAgICAgICBkYXRhWypsb29wXS53cml0ZXNQaW5u
ZWQgfD0gZWZmZWN0cy53cml0ZXNQaW5uZWQ7CisgICAgICAgICAgICBkYXRhWypsb29wXS5zaWRl
RXhpdHMgfD0gZWZmZWN0cy5zaWRlRXhpdHM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29wcygpOyBsb29wSW5kZXgtLTsp
IHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBsb29wcy5sb29wKGxvb3BJbmRl
eCk7CisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGN1cnJlbnQgPSAmbG9vcDsgY3Vy
cmVudDsgY3VycmVudCA9IGxvb3BzLmlubmVyTW9zdE91dGVyTG9vcCgqY3VycmVudCkpIHsKKyAg
ICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlcy5hZGRBbGwoZGF0YVtsb29wXS53cml0ZXMp
OworICAgICAgICAgICAgZGF0YVsqY3VycmVudF0ud3JpdGVzTG9jYWxTdGF0ZSB8PSBkYXRhW2xv
b3BdLndyaXRlc0xvY2FsU3RhdGU7CisgICAgICAgICAgICBkYXRhWypjdXJyZW50XS53cml0ZXNQ
aW5uZWQgfD0gZGF0YVtsb29wXS53cml0ZXNQaW5uZWQ7CisgICAgICAgICAgICBkYXRhWypjdXJy
ZW50XS5zaWRlRXhpdHMgfD0gZGF0YVtsb29wXS5zaWRlRXhpdHM7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4g
bG9vcHMgPSBsb29wcy5sb29wc09mKGJsb2NrKTsKKyAgICAgICAgaWYgKGxvb3BzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yIChWYWx1ZSom
IHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+
ZWZmZWN0cygpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZXZlciBob2lzdCB3
cml0ZSBlZmZlY3RzIG9yIGNvbnRyb2wgY29uc3RydWN0cy4KKyAgICAgICAgICAgIGlmIChlZmZl
Y3RzLm11c3RFeGVjdXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxvb3BzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gKmxvb3BzW2ldOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JzLmRvbWluYXRlcyhjaGlsZC0+b3duZXIsIGxvb3Au
cHJlSGVhZGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChlZmZlY3Rz
LmNvbnRyb2xEZXBlbmRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sRXF1
aXZhbGVuY2UuZG9taW5hdGVzRXF1aXZhbGVudGx5KGRhdGEucHJlSGVhZGVyLCBibG9jaykpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN1cGVyIGNvbnNlcnZhdGl2ZS4g
SW4gcmVhbGl0eSwgd2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFyZW4ndCBhbnkgc2lkZSBleGl0cyBiZXR3ZWVuIGhlcmUgYW5kIHRo
ZSBwcmUtaGVhZGVyIGFjY29yZGluZyB0byBiYWNrd2FyZHMgc2VhcmNoLgorICAgICAgICAgICAg
ICAgICAgICAvLyBPT1BTISEgKG5lZWQgYnVnIFVSTCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRhdGEuc2lkZUV4aXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChlZmZl
Y3RzLnJlYWRzUGlubmVkICYmIGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
ZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgJiYgZGF0YVtsb29wXS5yZWFkc0xvY2FsU3RhdGUpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChkYXRhW2xvb3BdLndyaXRlcy5jb250YWlucyhlZmZlY3RzLnJlYWRzKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbG9vcC5wcmVIZWFkZXItPmFwcGVuZE5vblRlcm1pbmFsKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHByb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVlLT5vcmlnaW4o
KSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVz
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBsb29wLWludmFyaWFudCBjb2RlIG1vdGlv
biAoTElDTSkuIEl0IGNhbiBob2lzdCBwdXJlIHZhbHVlcyBhcyB3ZWxsIGFzIHJlYWRzIG9mIHN0
YXRlIHRoYXQgaXNuJ3QKKy8vIG1vZGlmaWVkIGluc2lkZSB0aGUgbG9vcC4KKworYm9vbCBob2lz
dExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3R5cGVkZWYgV1RGOjpOYXR1cmFsTG9vcDxD
Rkc+IE5hdHVyYWxMb29wOworCitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1
cmFsTG9vcHM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9vcHMo
UHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4ocHJvYy5j
ZmcoKSwgcHJvYy5kb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxMiArMjksMTYgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNE
b21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5j
bHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgi
CiAjaW5jbHVkZSAiQjNEYXRhU2VjdGlvbi5oIgogI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgor
I2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3Rz
LmgiCiAjaW5jbHVkZSAiQjNQaGlDaGlsZHJlbi5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90Lmgi
CkBAIC0yMDAsNiArMjA0LDEwIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJlYWNoYWJpbGl0eSgp
CiB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiB7CiAgICAgbV9kb21pbmF0b3JzID0g
bnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CisgICAgbV9iYWNrd2FyZHND
RkcgPSBudWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CisgICAg
bV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUHJvY2Vk
dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0yOTEsNiArMjk5LDM0IEBAIERv
bWluYXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCiAgICAgcmV0dXJuICptX2RvbWluYXRv
cnM7CiB9CiAKK05hdHVyYWxMb29wcyYgUHJvY2VkdXJlOjpuYXR1cmFsTG9vcHMoKQoreworICAg
IGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3BzID0gc3RkOjptYWtl
X3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fbmF0dXJhbExvb3Bz
OworfQorCitCYWNrd2FyZHNDRkcmIFByb2NlZHVyZTo6YmFja3dhcmRzQ0ZHKCkKK3sKKyAgICBp
ZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2JhY2t3YXJkc0NGRyA9IHN0ZDo6bWFrZV91
bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0NGRzsK
K30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgUHJvY2VkdXJlOjpiYWNrd2FyZHNEb21pbmF0b3Jz
KCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzRG9taW5hdG9ycykKKyAgICAgICAgbV9iYWNrd2Fy
ZHNEb21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNrd2FyZHNEb21pbmF0b3JzPigqdGhp
cyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7Cit9CisKK0NvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzJiBQcm9jZWR1cmU6OmNvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzKCkK
K3sKKyAgICBpZiAoIW1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMpCisgICAgICAgIG1fY29u
dHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRyb2xFcXVpdmFs
ZW5jZUFuYWx5c2lzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2NvbnRyb2xFcXVpdmFsZW5jZUFu
YWx5c2lzOworfQorCiB2b2lkIFByb2NlZHVyZTo6YWRkRmFzdENvbnN0YW50KGNvbnN0IFZhbHVl
S2V5JiBjb25zdGFudCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9u
IDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CiAKK2NsYXNzIEJhY2t3YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7
CiBjbGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDRkc7
CitjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWluYXRvcnM7Citj
bGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBTdGFja1Nsb3Q7CiBjbGFzcyBWYWx1ZTsKIGNsYXNz
IFZhcmlhYmxlOwpAQCAtMTc1LDYgKzE3OSwxMCBAQCBwdWJsaWM6CiAgICAgQ0ZHJiBjZmcoKSBj
b25zdCB7IHJldHVybiAqbV9jZmc7IH0KIAogICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnMoKTsK
KyAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcygpOworICAgIEJhY2t3YXJkc0NGRyYgYmFj
a3dhcmRzQ0ZHKCk7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9y
cygpOworICAgIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzJiBjb250cm9sRXF1aXZhbGVuY2VB
bmFseXNpcygpOwogCiAgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsK
ICAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CkBAIC0yNzEsNiArMjc5
LDEwIEBAIHByaXZhdGU6CiAgICAgU3BhcnNlQ29sbGVjdGlvbjxWYWx1ZT4gbV92YWx1ZXM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvbWlu
YXRvcnM+IG1fZG9taW5hdG9yczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmF0dXJhbExvb3BzPiBt
X25hdHVyYWxMb29wczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzQ0ZHPiBtX2JhY2t3
YXJkc0NGRzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja3dhcmRzRG9taW5hdG9ycz4gbV9iYWNr
d2FyZHNEb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250cm9sRXF1aXZhbGVuY2VB
bmFseXNpcz4gbV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKICAgICBIYXNoU2V0PFZhbHVl
S2V5PiBtX2Zhc3RDb25zdGFudHM7CiAgICAgdW5zaWduZWQgbV9udW1FbnRyeXBvaW50cyB7IDEg
fTsKICAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTkyLDYgKzE0NTkyLDczIEBA
IHZvaWQgdGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkKICAgICBDSEVDSyhmb3VuZCk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGdlbmVyYXRlTG9vcChQcm9jZWR1cmUm
IHByb2MsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wID0gcHJvYy5hZGRCbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIGVuZCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFVwc2lsb25WYWx1ZSog
aW5pdGlhbEluZGV4ID0gcm9vdC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHBy
b2MsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCkp
OworICAgIHJvb3QtPnNldFN1Y2Nlc3NvcnMobG9vcCk7CisgICAgCisgICAgVmFsdWUqIGluZGV4
ID0gbG9vcC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgaW5pdGlhbEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIAorICAgIFZhbHVlKiBvbmUgPSBm
dW5jKGxvb3ApOworICAgIAorICAgIFZhbHVlKiBuZXh0SW5kZXggPSBsb29wLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAgIFVwc2lsb25WYWx1
ZSogbG9vcEluZGV4ID0gbG9vcC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIG5leHRJbmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIGxvb3At
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAg
ICAgIGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwg
T3JpZ2luKCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcC0+c2V0U3VjY2Vzc29ycyhs
b29wLCBlbmQpOworICAgIAorICAgIGVuZC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG9uZUZ1bmN0aW9uQ2FsbENvdW50Owor
c3RhdGljIGludCBvbmVGdW5jdGlvbigpCit7CisgICAgb25lRnVuY3Rpb25DYWxsQ291bnQrKzsK
KyAgICByZXR1cm4gMTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmUoKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29w
KSAtPiBWYWx1ZSB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9u
ZSgpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpKTsKKyAgICAgICAg
fSk7CisgICAgCisgICAgb25lRnVuY3Rpb25DYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRS
dW48dm9pZD4ocHJvYyk7CisgICAgQ0hFQ0tfRVEob25lRnVuY3Rpb25DYWxsQ291bnQsIDEpOwor
fQorCit2b2lkIHRlc3RMSUNNRGVmYXVsdENhbGwoKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wKSAtPiBWYWx1
ZSB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSk7CisgICAgICAgIH0pOworICAgIAorICAgIG9uZUZ1bmN0aW9u
Q2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MpOworICAgIENIRUNL
X0VRKG9uZUZ1bmN0aW9uQ2FsbENvdW50LCAxMDApOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgogdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiB7CkBAIC0xNzAzNCw3ICsxNzEwMSw5IEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdExvYWRCYXNlSW5kZXhTaGlm
dDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4U2hpZnQzMigpKTsKICAgICBSVU4odGVz
dE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkpOwotICAgIAorICAgIFJVTih0ZXN0TElDTVB1cmUo
KSk7CisgICAgUlVOKHRlc3RMSUNNRGVmYXVsdENhbGwoKSk7CisKICAgICBSVU4odGVzdEF0b21p
Y1dlYWtDQVM8aW50OF90PigpKTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50MTZfdD4o
KSk7CiAgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOwpAQCAtMTcwODcsNyAr
MTcxNTYsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RGbG9h
dEVxdWFsT3JVbm9yZGVyZWRGb2xkaW5nKCkpOwogICAgIFJVTih0ZXN0RmxvYXRFcXVhbE9yVW5v
cmRlcmVkRm9sZGluZ05hTigpKTsKICAgICBSVU4odGVzdEZsb2F0RXF1YWxPclVub3JkZXJlZERv
bnRGb2xkKCkpOwotCisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgUlVOKHRlc3RC
cmFuY2hCaXRBbmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3Qz
MiwgQWlyOjpBcmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lv
bihJZGVudGl0eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6VG1w
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2
aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCiAg
ICAgLy8gVGhlc2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzID0gMjsKLSAg
ICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRp
Y2VzXTsKLQorICAgIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
Ry5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
Ry5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBpbmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4OyB9CiAgICAgTm9k
ZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLmJsb2NrKGluZGV4
KTsgfQogICAgIHVuc2lnbmVkIG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaC5udW1C
bG9ja3MoKTsgfQotCisgICAgCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2Rl
IG5vZGUpIGNvbnN0IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKLQot
I2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgotI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lk
IE5hdHVyYWxMb29wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnBy
aW50KCJbSGVhZGVyOiAiLCAqaGVhZGVyKCksICIsIEJvZHk6Iik7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYm9keS5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KCIgIiwg
Km1fYm9keVtpXSk7Ci0gICAgb3V0LnByaW50KCJdIik7Ci19Ci0KLU5hdHVyYWxMb29wczo6TmF0
dXJhbExvb3BzKEdyYXBoJiBncmFwaCkKLXsKLSAgICBBU1NFUlQoZ3JhcGgubV9kb21pbmF0b3Jz
KTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJh
bCBsb29wIGZpbmRlci4gVGhlIGZpcnN0Ci0gICAgLy8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250
cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdoZXJlIEIgZG9taW5hdGVzIEEuCi0gICAgLy8gVGhlbiBC
IGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdl
IHdpbGwKLSAgICAvLyB0aGVuIGFjY3VtdWxhdGUsIGZvciBlYWNoIGxvb3AgaGVhZGVyLCBtdWx0
aXBsZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAvLyBibG9ja3MuIFRoZW4gd2UgYmFja3dhcmRz
IGdyYXBoIHNlYXJjaCBmcm9tIHRoZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAvLyBibG9ja3Mg
dG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBnaXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBp
biB0aGUKLSAgICAvLyBsb29wIGJvZHkuCi0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwotICAgIAotICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2co
IkRvbWluYXRvcnM6XG4iKTsKLSAgICAgICAgZ3JhcGgubV9kb21pbmF0b3JzLT5kdW1wKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgfQotICAgIAotICAgIG1fbG9vcHMucmVzaXplKDApOwotICAgIAot
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
aS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcihpKTsKLSAgICAgICAgICAgIGlmICghZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMo
c3VjY2Vzc29yLCBibG9jaykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xv
b3BzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2pdLmhlYWRl
cigpID09IHN1Y2Nlc3NvcikgewotICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJs
b2NrKGJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBOYXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOwotICAgICAgICAg
ICAgbG9vcC5hZGRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29w
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0gICAgRmFzdEJp
dFZlY3RvciBzZWVuQmxvY2tzOwotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gYmxvY2tXb3Jr
bGlzdDsKLSAgICBzZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5udW1CbG9ja3MoKSk7Ci0gICAgCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgTmF0
dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwotICAgICAgICAKLSAgICAgICAgc2VlbkJsb2Nr
cy5jbGVhckFsbCgpOwotICAgICAgICBBU1NFUlQoYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEZWFs
aW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICBzZWVuQmxvY2tzW2xv
b3Bbal0tPmluZGV4XSA9IHRydWU7Ci0gICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChs
b29wW2pdKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgd2hpbGUgKCFibG9ja1dvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBibG9ja1dv
cmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdpdGggIiwgKmJsb2NrLCAi
XG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVy
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7Ci0g
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNz
b3JzW2pdOwotICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRl
eF0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAg
IGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBzZWVu
QmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRleF0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gRmlndXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJvbSBibG9j
a3MgdG8gbG9vcHMuCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEJhc2ljQmxvY2s6Om51bWJlck9m
SW5uZXJNb3N0TG9vcEluZGljZXM7IGktLTspCi0gICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0
TG9vcEluZGljZXNbaV0gPSBVSU5UX01BWDsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBsb29w
SW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9vcEluZGV4LS07KSB7Ci0gICAgICAgIE5hdHVyYWxM
b29wJiBsb29wID0gbV9sb29wc1tsb29wSW5kZXhdOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBibG9ja0luZGV4SW5Mb29wID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3At
LTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbG9vcFtibG9ja0luZGV4SW5M
b29wXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7ICsraSkgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNl
c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFYIHx8IGxvb3Au
c2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRJbnRvQm91bmRlZFZlY3RvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT5pbm5lck1vc3RMb29wSW5kaWNlcywgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29w
SW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BJbmRleCwgaSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5u
ZXItbW9zdCBsb29wIGFuZCBpdHMgbmV4dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQotICAgIC8v
IHRoaXMgdG8gZmlndXJlIG91dCBsb29wIHBhcmVudGluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1f
bG9vcHNbaV07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvb3AuaGVhZGVyKCktPmlubmVyTW9z
dExvb3BJbmRpY2VzWzBdID09IGkpOwotICAgICAgICAKLSAgICAgICAgbG9vcC5tX291dGVyTG9v
cEluZGV4ID0gbG9vcC5oZWFkZXIoKS0+aW5uZXJNb3N0TG9vcEluZGljZXNbMV07Ci0gICAgfQot
ICAgIAotICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIERvIHNvbWUg
c2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHku
Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gc2ltcGxlTG9vcHNPZjsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9jaykpCi0gICAgICAgICAgICAgICAg
ICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5kKCZtX2xvb3BzW2ldKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gZmFuY3lM
b29wc09mID0gbG9vcHNPZihibG9jayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6
c29ydChzaW1wbGVMb29wc09mLmJlZ2luKCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOwotICAgICAg
ICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5iZWdpbigpLCBmYW5jeUxvb3BzT2YuZW5kKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVMb29wc09m
ID09IGZhbmN5TG9vcHNPZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKLX0KLQotTmF0
dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9Ci0KLVZlY3Rvcjxjb25zdCBOYXR1cmFsTG9v
cCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLXsKLSAg
ICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiByZXN1bHQ7Ci0gICAgZm9yIChjb25zdCBOYXR1
cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5l
ck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICByZXN1bHQuYXBwZW5kKGxvb3ApOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTmF0dXJhbExvb3BzOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOwotICAgIENv
bW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sb29wcy5z
aXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2xvb3BzW2ldKTsKLSAgICBv
dXQucHJpbnQoIn0iKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOYXR1cmFsTG9vcHMuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNDIgKzI3LDIzIEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgTmF0dXJhbExvb3Bz
OwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJhbExvb3A7CiAKLWNsYXNzIE5h
dHVyYWxMb29wIHsKLXB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcCgpCi0gICAgICAgIDogbV9oZWFk
ZXIoMCkKLSAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayogaGVhZGVyLCB1bnNpZ25lZCBpbmRl
eCkKLSAgICAgICAgOiBtX2hlYWRlcihoZWFkZXIpCi0gICAgICAgICwgbV9vdXRlckxvb3BJbmRl
eChVSU5UX01BWCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgQmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KLSAg
ICAKLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LnNpemUoKTsgfQot
ICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsg
fQotICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
YXQoaSk7IH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBv
ZiBhc2tpbmcgaWYgYSBibG9jayBiZWxvbmdzIHRvCi0gICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0
J3MgZmFzdGVyIHRvIGNhbGwgTmF0dXJhbExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKLSAgICAv
LyB0cmllcyB0byBiZSBPKGxvb3AgZGVwdGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9v
cCBkZXB0aCBpcwotICAgIC8vIGFsbW9zdCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4g
QSAqbG90KiBzbWFsbGVyLgotICAgIGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIo
KSk7IC8vIEhlYWRlciBzaG91bGQgYmUgY29udGFpbmVkLgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMu
Ci0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgCi0g
ICAgYm9vbCBpc091dGVyTW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4
ID09IFVJTlRfTUFYOyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7Ci0gICAgCi0gICAgdm9p
ZCBhZGRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQot
ICAgIAotICAgIEJhc2ljQmxvY2sqIG1faGVhZGVyOwotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwg
ND4gbV9ib2R5OwotICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5kZXg7Ci0gICAgdW5zaWduZWQg
bV9pbmRleDsKLX07Ci0KLWNsYXNzIE5hdHVyYWxMb29wcyB7CitjbGFzcyBOYXR1cmFsTG9vcHMg
OiBwdWJsaWMgV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTmF0dXJhbExvb3BzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBOYXR1cmFsTG9vcHMoR3JhcGgmKTsKLSAgICB+TmF0dXJhbExvb3BzKCk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9v
cHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCh1bnNpZ25lZCBp
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07Ci0gICAgfQotICAgIAot
ICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRl
ciwgb3IgdGhlCi0gICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxM
b29wKiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKLSAgICAgICAg
aWYgKCFsb29wKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChsb29wLT5oZWFk
ZXIoKSA9PSBibG9jaykKLSAgICAgICAgICAgIHJldHVybiBsb29wOwotICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgZm9yICg7IGxvb3A7IGxvb3AgPSBpbm5lck1v
c3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICAgICAgICAgIEFTU0VSVChsb29wLT5oZWFkZXIo
KSAhPSBibG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RMb29wT2YoQmFzaWNCbG9jayogYmxvY2sp
IGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJsb2NrLT5pbm5lck1vc3RM
b29wSW5kaWNlc1swXTsKLSAgICAgICAgaWYgKGluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9sb29wc1tpbmRleF07Ci0gICAgfQotICAg
IAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3QgTmF0dXJh
bExvb3AmIGxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobG9vcC5tX291dGVyTG9vcElu
ZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAm
bV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOwotICAgIH0KLSAgICAKLSAgICBib29sIGJl
bG9uZ3NUbyhCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgTmF0dXJhbExvb3AmIGNhbmRpZGF0ZUxv
b3ApIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBJdCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3Qg
dXNpbmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBpdCdzIHNtYWxsLgotICAgICAgICBpZiAoY2FuZGlk
YXRlTG9vcC5zaXplKCkgPCA0KQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29u
dGFpbnMoYmxvY2spOwotICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRl
ckxvb3AoKmxvb3ApKSB7Ci0gICAgICAgICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGxvb3BEZXB0aChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdU
Rjo6TmF0dXJhbExvb3BzPENGRz4oKmdyYXBoLm1fY2ZnLCBncmFwaC5lbnN1cmVEb21pbmF0b3Jz
KCksIHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBkZXB0aCA9
IDA7Ci0gICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29w
T2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKLSAgICAg
ICAgICAgIGRlcHRoKys7Ci0gICAgICAgIHJldHVybiBkZXB0aDsKICAgICB9Ci0gICAgCi0gICAg
Ly8gUmV0dXJuIHRoZSBpbmRpY2VzIG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAg
VmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29uc3Q7Ci0K
LSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgLy8gSWYg
d2UgZXZlciBoYWQgYSBzY2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmlu
ZGVyLCB3ZSBjb3VsZAotICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVz
dCBmZWVscyBhIGhlY2sgb2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgotICAgIFZlY3RvcjxOYXR1
cmFsTG9vcCwgND4gbV9sb29wczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE5
NjAwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCw3IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAv
KiBBdXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0
b21hdGljVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJF
NUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcw
NDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQnViYmxlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRDFE
RkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjYwRjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRT
dHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDbG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyLDggKzM0
Myw4IEBACiAJCTlCQzcwRjA0MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAy
RDg2NSAvKiBBdG9taWNTdHJpbmdUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdU
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVC
NDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNv
ZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEzMEQ0MTJEMUYwREUx
M0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTb2Z0TGlua2luZy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTMwRDQxMkMxRjBERTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlu
a2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTA5OEFGRjFDMTY5RTA3MDAwODc3OTcgLyog
U2FuZGJveFNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94U1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5
NyAvKiBTZWN1cml0eVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1
cml0eVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTYxRjMwRjFERjI2NDIx
MDBGRjY3NUQgLyogRGVwcmVjYXRlZE9wdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlcHJlY2F0ZWRPcHRpb25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtODU2LDYgKzg1Nyw3IEBACiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1v
bm90b25pY1RpbWUuY3BwICovLAogCQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25v
dG9uaWNUaW1lLmggKi8sCiAJCQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRy
LmggKi8sCisJCQkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5oICov
LAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAog
CQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJE
MDE1MUE4MjVCMDA0MTIzRkYgLyogTm9uY29weWFibGUuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0JhY2t3YXJkc0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFja3dh
cmRzR3JhcGguaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL1dURi93dGYvQmFja3dhcmRz
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNs
dWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0yNDgsNyArMjQ5LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZ3JhcGgubnVtTm9kZXMoKSArIDE7CiAgICAgfQot
CisgICAgCiAgICAgQ1N0cmluZyBkdW1wKE5vZGUgbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIG91dDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHJldmlzaW9uIDIx
OTYwMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBXVEZEb21pbmF0b3JzX2gKICNkZWZpbmUgV1RGRG9taW5h
dG9yc19oCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zh
c3RCaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KIApJbmRl
eDogU291cmNlL1dURi93dGYvTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTmF0dXJhbExvb3BzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTmF0
dXJhbExvb3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9Eb21pbmF0b3JzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wczsKKwordGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9vcCB7CitwdWJsaWM6CisgICAgTmF0dXJhbExvb3Ao
KQorICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgLCBtX2hlYWRlcihudWxscHRy
KQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBOYXR1cmFsTG9vcChHcmFwaCYgZ3JhcGgsIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGhl
YWRlciwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9ncmFwaCgmZ3JhcGgpCisgICAgICAg
ICwgbV9oZWFkZXIoaGVhZGVyKQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgp
CisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEdyYXBo
KiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQorICAgIAorICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9CisgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ld
OyB9CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBhdChpKTsgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgc2xvd2VyLCBidXQgc2lt
cGxlciwgd2F5IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KKyAgICAvLyBhIG5hdHVy
YWwgbG9vcC4gSXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJlbG9uZ3NUbygpLCB3
aGljaAorICAgIC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVyIHRoYW4gTyhsb29w
IHNpemUpLiBMb29wIGRlcHRoIGlzCisgICAgLy8gYWxtb3N0IGFsd2F5cyBzbWFsbGVyIHRoYW4g
bG9vcCBzaXplLiBBICpsb3QqIHNtYWxsZXIuCisgICAgYm9vbCBjb250YWlucyh0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fYm9keS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxv
Y2spCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKGJsb2NrICE9IGhlYWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWluZWQuCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgaW5kZXggb2YgdGhpcyBs
b29wIGluIE5hdHVyYWxMb29wcy4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICAKKyAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVg7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFwaCkgewor
ICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3V0LnByaW50KCJbSGVhZGVyOiAiLCBtX2dyYXBo
LT5kdW1wKGhlYWRlcigpKSwgIiwgQm9keToiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fYm9keS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICIsIG1f
Z3JhcGgtPmR1bXAobV9ib2R5W2ldKSk7CisgICAgICAgIG91dC5wcmludCgiXSIpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgZnJpZW5kIGNsYXNz
IE5hdHVyYWxMb29wczsKKyAgICAKKyAgICB2b2lkIGFkZEJsb2NrKHR5cGVuYW1lIEdyYXBoOjpO
b2RlIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CisKKyAgICBHcmFwaCogbV9ncmFw
aDsKKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBtX2hlYWRlcjsKKyAgICBWZWN0b3I8dHlwZW5h
bWUgR3JhcGg6Ok5vZGUsIDQ+IG1fYm9keTsKKyAgICB1bnNpZ25lZCBtX291dGVyTG9vcEluZGV4
OworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4K
K2NsYXNzIE5hdHVyYWxMb29wcyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OmFycmF5PHVu
c2lnbmVkLCAyPiBJbm5lck1vc3RMb29wSW5kaWNlczsKKworICAgIE5hdHVyYWxMb29wcyhHcmFw
aCYgZ3JhcGgsIERvbWluYXRvcnM8R3JhcGg+JiBkb21pbmF0b3JzLCBib29sIHNlbGZDaGVjayA9
IGZhbHNlKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9pbm5lck1vc3RM
b29wSW5kaWNlcyhncmFwaC50ZW1wbGF0ZSBuZXdNYXA8SW5uZXJNb3N0TG9vcEluZGljZXM+KCkp
CisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9taW5hdG9yLWJhc2Vk
IG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdAorICAgICAgICAvLyBzdGVwIGlzIHRvIGZp
bmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KKyAg
ICAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2FyZCBicmFu
Y2hpbmcgYmxvY2suIFdlIHdpbGwKKyAgICAgICAgLy8gdGhlbiBhY2N1bXVsYXRlLCBmb3IgZWFj
aCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAgIC8vIGJs
b2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3YXJkIGJy
YW5jaGluZworICAgICAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBn
aXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKKyAgICAgICAgLy8gbG9vcCBib2R5Lgor
ICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCisg
ICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxu
Iik7CisgICAgICAgICAgICBkb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKKyAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5zdWNj
ZXNzb3JzKGJsb2NrKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBzdWNjZXNzb3IgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2NrKVtpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXpl
KCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVhZGVyKCkg
PT0gc3VjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJs
b2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+IGxvb3AoZ3Jh
cGgsIHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGxvb3AuYWRk
QmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3ApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7CisgICAgCisg
ICAgICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKKyAgICAgICAgVmVjdG9yPHR5cGVuYW1l
IEdyYXBoOjpOb2RlLCA0PiBibG9ja1dvcmtsaXN0OworICAgICAgICBzZWVuQmxvY2tzLnJlc2l6
ZShncmFwaC5udW1Ob2RlcygpKTsKKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9v
cCA9IG1fbG9vcHNbaV07CisgICAgICAgIAorICAgICAgICAgICAgc2VlbkJsb2Nrcy5jbGVhckFs
bCgpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJE
ZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIHNl
ZW5CbG9ja3NbZ3JhcGguaW5kZXgobG9vcFtqXSldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
bG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCBncmFwaC5kdW1wKGJsb2Nr
KSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbG9v
cC5oZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBncmFwaC5wcmVkZWNlc3NvcnMoYmxv
Y2spLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBwcmVkZWNlc3NvciA9IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbal07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRlY2Vzc29yKV0pCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2VlbkJsb2Nrc1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWd1
cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6dHVwbGVfc2l6ZTxJbm5l
ck1vc3RMb29wSW5kaWNlcz46OnZhbHVlOyBpLS07KQorICAgICAgICAgICAgICAgIG1faW5uZXJN
b3N0TG9vcEluZGljZXNbYmxvY2tdW2ldID0gVUlOVF9NQVg7CisgICAgICAgIH0KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9vcEluZGV4LS07KSB7
CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xvb3BzW2xvb3BJbmRl
eF07CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4SW5Mb29w
ID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsKKyAgICAgICAgICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGxvb3BbYmxvY2tJbmRleEluTG9vcF07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjp0
dXBsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWU7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0aGlzSW5kZXggPSBtX2lubmVyTW9zdExvb3BJbmRpY2VzW2Js
b2NrXVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNJbmRleCA9PSBVSU5UX01BWCB8
fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhpc0luZGV4XS5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9yKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5uZXJNb3N0TG9vcEluZGljZXNbYmxvY2tdLCBzdGQ6OnR1cGxlX3NpemU8
SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb29wSW5kZXgsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAKKyAgICAgICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRzIGlubmVyLW1vc3Qg
bG9vcCBhbmQgaXRzIG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKKyAgICAgICAgLy8gdGhp
cyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+
JiBsb29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5uZXJN
b3N0TG9vcEluZGljZXNbbG9vcC5oZWFkZXIoKV1bMF0gPT0gaSk7CisgICAgICAgIAorICAgICAg
ICAgICAgbG9vcC5tX291dGVyTG9vcEluZGV4ID0gbV9pbm5lck1vc3RMb29wSW5kaWNlc1tsb29w
LmhlYWRlcigpXVsxXTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoc2VsZkNoZWNrKSB7
CisgICAgICAgICAgICAvLyBEbyBzb21lIHNlbGYtdmVyaWZpY2F0aW9uIHRoYXQgd2UndmUgZG9u
ZSBzb21lIG9mIHRoaXMgY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUoYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8Y29uc3Qg
TmF0dXJhbExvb3A8R3JhcGg+Kj4gc2ltcGxlTG9vcHNPZjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5kKCZtX2xvb3BzW2ldKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8Y29uc3Qg
TmF0dXJhbExvb3A8R3JhcGg+Kj4gZmFuY3lMb29wc09mID0gbG9vcHNPZihibG9jayk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQoc2ltcGxlTG9vcHNPZi5iZWdpbigp
LCBzaW1wbGVMb29wc09mLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQoZmFuY3lM
b29wc09mLmJlZ2luKCksIGZhbmN5TG9vcHNPZi5lbmQoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVMb29wc09mID09IGZhbmN5TG9vcHNPZik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7CisgICAgfQorICAg
IAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBudW1Mb29wcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sb29wcy5zaXpl
KCk7CisgICAgfQorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCh1bnNpZ25lZCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRl
ciwgb3IgdGhlCisgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgorICAgIGNvbnN0IE5hdHVyYWxM
b29wPEdyYXBoPiogaGVhZGVyT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RM
b29wT2YoYmxvY2spOworICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
IGxvb3A7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3Ig
KDsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBpbm5l
ck1vc3RMb29wT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5uZXJNb3N0TG9vcEluZGljZXNbYmxvY2tdWzBdOwor
ICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0
dXJhbExvb3A8R3JhcGg+KiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3QgTmF0dXJhbExvb3A8R3Jh
cGg+JiBsb29wKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxvb3AubV9vdXRlckxvb3BJbmRl
eCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJm1f
bG9vcHNbbG9vcC5tX291dGVyTG9vcEluZGV4XTsKKyAgICB9CisgICAgCisgICAgYm9vbCBiZWxv
bmdzVG8odHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2ssIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBo
PiYgY2FuZGlkYXRlTG9vcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEl0J3MgZmFzdGVyIHRv
IGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0J3Mgc21hbGwuCisgICAg
ICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCisgICAgICAgICAgICByZXR1cm4gY2Fu
ZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0
IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7
IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7CisgICAgICAgICAgICBpZiAobG9v
cCA9PSAmY2FuZGlkYXRlTG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGxv
b3BEZXB0aCh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcDxHcmFw
aD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0
T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIGRlcHRoKys7CisgICAgICAgIHJldHVybiBk
ZXB0aDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3Mg
dG8uIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdmVjdG9yIGlzIHRoZSBpbm5lcm1vc3QgbG9vcC4g
VGhlIGxhc3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IGxvb3AuCisgICAgVmVjdG9yPGNvbnN0
IE5hdHVyYWxMb29wPEdyYXBoPio+IGxvb3BzT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sp
IGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4g
cmVzdWx0OworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlu
bmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxv
b3ApKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsb29wKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsKKyAgICAgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sb29wcy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbV9sb29wc1tpXSk7Cisg
ICAgICAgIG91dC5wcmludCgifSIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgm
IG1fZ3JhcGg7CisgICAgCisgICAgLy8gSWYgd2UgZXZlciBoYWQgYSBzY2FsYWJpbGl0eSBwcm9i
bGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAorICAgIC8vIHVzZSBzb21l
IEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sgb2YgYSBsb3QgbGVzcyBj
b252ZW5pZW50LgorICAgIFZlY3RvcjxOYXR1cmFsTG9vcDxHcmFwaD4sIDQ+IG1fbG9vcHM7Cisg
ICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OnRlbXBsYXRlIE1hcDxJbm5lck1vc3RMb29wSW5kaWNl
cz4gbV9pbm5lck1vc3RMb29wSW5kaWNlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6Ok5hdHVyYWxMb29wOwordXNpbmcgV1RGOjpOYXR1cmFsTG9vcHM7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Jh
bmdlU2V0LmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgUmFu
Z2VUeXBlIFJhbmdlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFuZ2U6OlR5cGUgVHlwZTsKIAor
ICAgIHR5cGVkZWYgVmVjdG9yPFJhbmdlLCA4PiBWZWN0b3JUeXBlOworICAgIAogICAgIFJhbmdl
U2V0KCkKICAgICB7CiAgICAgfQpAQCAtMTI1LDggKzEyNywyMyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBvdXQucHJpbnQoInsiLCBsaXN0RHVtcChtX3JhbmdlcyksICIsIGlzQ29tcGFjdCA9
ICIsIG1faXNDb21wYWN0LCAifSIpOwogICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBWZWN0b3JU
eXBlOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9yYW5nZXMuYmVnaW4oKTsKKyAgICB9CisgICAgCisgICAgdHlwZW5hbWUgVmVjdG9yVHlwZTo6
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jhbmdl
cy5lbmQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRBbGwoY29uc3QgUmFuZ2VTZXQmIG90
aGVyKQorICAgIHsKKyAgICAgICAgZm9yIChSYW5nZSByYW5nZSA6IG90aGVyKQorICAgICAgICAg
ICAgYWRkKHJhbmdlKTsKKyAgICB9CiAKLXByaXZhdGU6CiAgICAgdm9pZCBjb21wYWN0KCkKICAg
ICB7CiAgICAgICAgIGlmIChtX2lzQ29tcGFjdCkKQEAgLTE2NCw2ICsxODEsNyBAQCBwcml2YXRl
OgogICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CiAgICAgfQogICAgIAorcHJpdmF0ZToKICAg
ICBzdGF0aWMgYm9vbCBvdmVybGFwc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5n
ZSYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBub25FbXB0eVJhbmdlc092ZXJsYXAoYS5iZWdp
bigpLCBhLmVuZCgpLCBiLmJlZ2luKCksIGIuZW5kKCkpOwpAQCAtMTg3LDcgKzIwNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAgICAgCi0gICAgVmVjdG9y
PFJhbmdlLCA4PiBtX3JhbmdlczsKKyAgICBWZWN0b3JUeXBlIG1fcmFuZ2VzOwogICAgIGJvb2wg
bV9pc0NvbXBhY3QgeyB0cnVlIH07CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316230</attachid>
            <date>2017-07-23 13:00:41 -0700</date>
            <delta_ts>2017-07-23 13:10:19 -0700</delta_ts>
            <desc>added comprehensive tests and made them pass</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>95505</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk2MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYgKzQ2MywxMyBAQAogCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjVBRTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMg
LyogVk1JbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIx
Qzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNUJGMTYzMUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNI
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwICovOyB9OworCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovOyB9OworCQkwRjVCRjE2NzFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NG
Ry5oICovOyB9OworCQkwRjVCRjE2OTFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTY4
MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovOyB9OworCQkwRjVCRjE2QjFG
MjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNEb21pbmF0b3JzLmggKi87IH07CisJCTBGNUJGMTcwMUYyM0E1QTEwMDI5
RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vu
c3VyZUxvb3BQcmVIZWFkZXJzLmNwcCAqLzsgfTsKKwkJMEY1QkYxNzExRjIzQTVBMTAwMjlEOTFE
IC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxv
b3BQcmVIZWFkZXJzLmggKi87IH07CiAJCTBGNUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBBaXJU
bXBNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLzsgfTsKIAkJMEY1Q0Y5ODQx
RTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyog
QWlyTG93ZXJTdGFja0FyZ3MuaCAqLzsgfTsKIAkJMEY1Q0Y5ODUxRTlENTM3QTAwQzE4NjkyIC8q
IEFpckxvd2VyU3RhY2tBcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJn
cy5jcHAgKi87IH07CkBAIC0xOTQ5LDcgKzE5NTYsNiBAQAogCQlBNzMwQjYxMjEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RF
dmFsQWN0aXZhdGlvbi5oICovOyB9OwogCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmNwcCAqLzsgfTsKIAkJQTczMUIyNUExMzAwOTM4ODAwNDBBN0ZBIC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwotCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mzc4MTBBMTc5OUVB
MkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9OwogCQlBNzM3ODEwRTE3OTlF
QTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0
dXJhbExvb3BzLmggKi87IH07CiAJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFs
aXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICov
OyB9OwogCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mzg2NTUyMTE4
Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwICovOyB9OwpAQCAtMzAyOCw2ICsz
MDM0LDEzIEBACiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3Bw
OyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRM
VmFsdWVSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCNEEzMjFDODRG
MEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNsb3dQYXRoUmV0dXJuVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMu
Y3BwOyBwYXRoID0gYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2MjFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExv
b3BJbnZhcmlhbnRWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuaDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3
YXJkc0NGRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0NGRy5oOyBwYXRoID0gYjMvQjNC
YWNrd2FyZHNDRkcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjgxRjIz
QTBBQTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTmF0dXJh
bExvb3BzLmg7IHBhdGggPSBiMy9CM05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0
b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBwYXRoID0gYjMv
QjNCYWNrd2FyZHNEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NUJGMTZFMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBwYXRoID0gYjMvQjNF
bnN1cmVMb29wUHJlSGVhZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NUJGMTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaDsgcGF0aCA9IGIzL0IzRW5zdXJlTG9v
cFByZUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODAxRTk2
RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3Rh
Y2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckxvd2Vy
U3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgzMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJM
b3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMb3dl
clN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTY0LDcgKzQ1NzcsNiBAQAogCQlBNzI5OURBNDE3RDEy
ODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9
IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05h
dHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MTExODY5
N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3Mzg2NTUyMTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGh1bmtHZW5lcmF0b3JzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTYsNiArNTQ2OCw4IEBACiAJCQkJ
MEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAogCQkJ
CTBGMkM2M0IzMUU2MzQzRTgwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmNwcCAqLywKIAkJCQkw
RjJDNjNCNDFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1ZS5oICovLAorCQkJCTBGNUJG
MTY2MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oICovLAorCQkJCTBGNUJGMTZB
MUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCAqLywKIAkJCQkwRjJD
NjNBQjFFNjBBRTNDMDBDMTM4MzkgLyogQjNCYW5rLmNwcCAqLywKIAkJCQkwRjJDNjNBQzFFNjBB
RTNDMDBDMTM4MzkgLyogQjNCYW5rLmggKi8sCiAJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCkBAIC01NTA3LDYgKzU1MjEsOCBAQAogCQkJCTBGRUM4
NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLywKIAkJCQkwRjcyNUNBMzFDNTAz
REVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAgKi8sCiAJ
CQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuaCAqLywKKwkJCQkwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29w
UHJlSGVhZGVycy5jcHAgKi8sCisJCQkJMEY1QkYxNkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5z
dXJlTG9vcFByZUhlYWRlcnMuaCAqLywKIAkJCQkwRjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyog
QjNGZW5jZVZhbHVlLmNwcCAqLywKIAkJCQkwRjY5NzFFOTFEOTJGNDIxMDBCQTAyQTUgLyogQjNG
ZW5jZVZhbHVlLmggKi8sCiAJCQkJMEY2QjhBRTAxQzRFRkUxNzAwOTY5MDUyIC8qIEIzRml4U1NB
LmNwcCAqLywKQEAgLTU1MjEsNiArNTUzNyw4IEBACiAJCQkJMEYyQzYzQjUxRTYzNDNFODAwQzEz
ODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEZFQzg0RDAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAogCQkJCTBGRUM4
NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGNUJGMTYxMUYy
MzE3MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgKi8sCisJCQkJ
MEY1QkYxNjIxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgg
Ki8sCiAJCQkJREM2OUI5OUExRDE1RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5jcHAg
Ki8sCiAJCQkJREM2OUI5OUIxRDE1RjkwRjAwMkUzQzAwIC8qIEIzSW5mZXJTd2l0Y2hlcy5oICov
LAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgKi8s
CkBAIC01NTQ0LDYgKzU1NjIsNyBAQAogCQkJCTBGMzM4RTAzMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M01vdmVDb25zdGFudHMuY3BwICovLAogCQkJCTBGMzM4RTA0MUJGMDI3NkMwMDEzQzg4RiAvKiBC
M01vdmVDb25zdGFudHMuaCAqLywKIAkJCQkwRjJDNjNDMTFFNjY0QTVBMDBDMTM4MzkgLyogQjNO
YXRpdmVUcmFpdHMuaCAqLywKKwkJCQkwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1
cmFsTG9vcHMuaCAqLywKIAkJCQkwRjMzOEUwNTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVC
eXByb2R1Y3QuaCAqLywKIAkJCQkwRjMzOEUwNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVC
eXByb2R1Y3RzLmNwcCAqLywKIAkJCQkwRjMzOEUwNzFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFx
dWVCeXByb2R1Y3RzLmggKi8sCkBAIC03MzY4LDcgKzczODcsNiBAQAogCQkJCTBGOEYxNDMyMUFE
RjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNE
NTkxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJ
CQkwRkYyQ0Q1QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAq
LywKLQkJCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LywKIAkJCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8s
CiAJCQkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2
RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCkBAIC04NDg4LDYgKzg1MDYs
NyBAQAogCQkJCTBGQkI3M0JCMURFRjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1
Y3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDIzRTE3QTBCQkZEMDBBOERCODEg
LyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2OTFGMjNBMEFB
MDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAz
MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NzIsNiArODY5MSw3IEBA
CiAJCQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERp
cmVjdEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QkYxNzExRjIzQTVB
MTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDM4NkE3NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBE
aXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg1
NiwxMCArODg3NiwxMiBAQAogCQkJCUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlm
aWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3
MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVF
RDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1
QkYxNkIxRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0
IC8qIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIz
MUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NUJGMTY3MUYyM0EwOTgwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0NGRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRp
YWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtOTE2Myw2ICs5MTg1LDcgQEAKIAkJ
CQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNz
ZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTY0MUYyMzE3MTIwMDI5RDkx
RCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
REQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMkFCMjQ0MURDRDc1RjQwMEQ3NTMzQSAvKiBNYWNy
b0Fzc2VtYmxlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNjIsNyArMTAzODUsNiBA
QAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMkNENUIxQjYxQTRGODAwNDk1
NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE3
Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZh
bHVlUGFpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkg
LyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA3MjMsNiArMTA3NDUsNyBA
QAogCQkJCUFEMkZDQkU4MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkVBMURCNThEQUQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4
RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTYz
MUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBl
ck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA3ODksNiArMTA4MTIsNyBAQAog
CQkJCTBGRDNFNDBCMUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNjEwN0VDN0U3MDA2NTA0NDYgLyogT2Jq
ZWN0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjRBOEY4MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVCRjE3MDFG
MjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRz
Q0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRz
Q0ZHLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dh
cmRzQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NGRy5oIgorI2luY2x1ZGUgPHd0Zi9CYWNrd2FyZHNH
cmFwaC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFja3dh
cmRzQ0ZHIDogcHVibGljIEJhY2t3YXJkc0dyYXBoPENGRz4geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJhY2t3YXJkc0NGRyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgQmFja3dhcmRzQ0ZHKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBCYWNrd2Fy
ZHNHcmFwaDxDRkc+KHByb2MuY2ZnKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21pbmF0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0NGRy5oIgorI2luY2x1ZGUgPHd0Zi9Eb21pbmF0
b3JzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYWNrd2Fy
ZHNEb21pbmF0b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxCYWNrd2FyZHNDRkc+IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNEb21pbmF0b3JzKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzKFByb2Nl
ZHVyZSYgcHJvYykKKyAgICAgICAgOiBXVEY6OkRvbWluYXRvcnM8QmFja3dhcmRzQ0ZHPihwcm9j
LmJhY2t3YXJkc0NGRygpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCB2b2lkIEJhc2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCiB2b2lkIEJh
c2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKFZhbHVlKiB2YWx1ZSkKIHsKICAgICBtX3ZhbHVl
cy5hcHBlbmQobV92YWx1ZXMubGFzdCgpKTsKLSAgICBtX3ZhbHVlc1ttX3ZhbHVlcy5zaXplKCkg
LSAxXSA9IHZhbHVlOworICAgIG1fdmFsdWVzW21fdmFsdWVzLnNpemUoKSAtIDJdID0gdmFsdWU7
CiAgICAgdmFsdWUtPm93bmVyID0gdGhpczsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q0ZHLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NG
Ry5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBpbmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KICAgICBO
b2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY1tpbmRleF07IH0K
ICAgICB1bnNpZ25lZCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5zaXplKCk7IH0K
LQorICAgIAogICAgIFBvaW50ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25z
dCB7IHJldHVybiBwb2ludGVyRHVtcChub2RlKTsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCShy
ZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDkgQEAgc3RydWN0IEVmZmVjdHMgewogICAgIC8v
IE1lbW9yeSBmZW5jZXMgY2Fubm90IGJlIHJlb3JkZXJlZCBhcm91bmQgZWFjaCBvdGhlciByZWdh
cmRsZXNzIG9mIHRoZWlyIGVmZmVjdHMuIFRoaXMgaXMgZmxhZ2dlZAogICAgIC8vIGlmIHRoZSBv
cGVyYXRpb24gaXMgYSBtZW1vcnkgZmVuY2UuCiAgICAgYm9vbCBmZW5jZSB7IGZhbHNlIH07Cisg
ICAgCisgICAgLy8gV0FSTklORzogVGhlIEIzOjpob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoKSBw
aGFzZSB0aGlua3MgdGhhdCBpdCB1bmRlcnN0YW5kcyB0aGlzIGV4aGF1c3RpdmVseS4gSWYgeW91
CisgICAgLy8gYWRkIGFueSBuZXcga2luZHMgb2YgdGhpbmdzIHRoYXQgY2FuIGJlIHJlYWQgb3Ig
d3JpdHRlbiwgeW91IHNob3VsZCBjaGVjayB0aGF0IHBoYXNlLgogCiAgICAgSGVhcFJhbmdlIHdy
aXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Vuc3Vy
ZUxvb3BQcmVIZWFkZXJzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJCM05hdHVyYWxMb29wcy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5o
IgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitib29sIGVuc3VyZUxvb3BQcmVIZWFkZXJzKFByb2NlZHVyZSYgcHJvYykKK3sK
KyAgICBOYXR1cmFsTG9vcHMmIGxvb3BzID0gcHJvYy5uYXR1cmFsTG9vcHMoKTsKKyAgICAKKyAg
ICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29wcygpOyBsb29wSW5kZXgtLTspIHsKKyAg
ICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBsb29wcy5sb29wKGxvb3BJbmRleCk7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IG91dE9mQm9keVByZWRlY2Vz
c29yczsKKyAgICAgICAgZG91YmxlIHRvdGFsRnJlcXVlbmN5ID0gMDsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycygpKSB7
CisgICAgICAgICAgICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29yLCBsb29wKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0T2ZC
b2R5UHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICB0b3RhbEZy
ZXF1ZW5jeSArPSBwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChvdXRPZkJvZHlQcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciA9
IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUobG9vcC5oZWFkZXIoKSwgdG90YWxGcmVxdWVuY3kp
OworICAgICAgICBwcmVIZWFkZXItPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgbG9vcC5o
ZWFkZXIoKS0+YXQoMCktPm9yaWdpbigpKTsKKyAgICAgICAgcHJlSGVhZGVyLT5zZXRTdWNjZXNz
b3JzKEZyZXF1ZW50ZWRCbG9jayhsb29wLmhlYWRlcigpKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogb3V0T2ZCb2R5UHJlZGVjZXNzb3JzKSB7Cisg
ICAgICAgICAgICBwcmVkZWNlc3Nvci0+cmVwbGFjZVN1Y2Nlc3Nvcihsb29wLmhlYWRlcigpLCBw
cmVIZWFkZXIpOworICAgICAgICAgICAgcHJlSGVhZGVyLT5hZGRQcmVkZWNlc3NvcihwcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICBsb29wLmhlYWRlcigpLT5yZW1vdmVQcmVkZWNlc3NvcihwcmVk
ZWNlc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvb3AuaGVhZGVyKCktPmFk
ZFByZWRlY2Vzc29yKHByZUhlYWRlcik7CisgICAgfQorICAgIAorICAgIGlmIChpbnNlcnRpb25T
ZXQuZXhlY3V0ZSgpKSB7CisgICAgICAgIHByb2MuaW52YWxpZGF0ZUNGRygpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJv
Y2VkdXJlOworCisvLyBDcmVhdGVzIGEgcHJlLWhlYWRlciBmb3IgYW55IGxvb3AgdGhhdCBkb24n
dCBhbHJlYWR5IGhhdmUgb25lLiBBIGxvb3AgaGFzIGEgcHJlLWhlYWRlciBpZiBpdHMgaGVhZGVy
IGhhcworLy8gZXhhY3RseSBvbmUgcHJlZGVjZXNzb3IgdGhhdCBpc24ndCBpbiB0aGUgbG9vcCBi
b2R5LiBJZiBhIGxvb3AgaGVhZGVyIGhhcyBtb3JlIHRoYW4gb25lIG91dC1vZi1ib2R5CisvLyBw
cmVkZWNlc3NvciwgdGhlbiB0aGlzIGNyZWF0ZXMgYSBuZXcgYmxvY2sgYW5kIHJld2lyZXMgdGhv
c2UgcHJlZGVjZXNzb3JzIHRvIGl0LgorCitib29sIGVuc3VyZUxvb3BQcmVIZWFkZXJzKFByb2Nl
ZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZp
c2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCM0VsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zLmgiCiAjaW5jbHVkZSAiQjNGaXhTU0EuaCIKICNpbmNsdWRlICJC
M0ZvbGRQYXRoQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuaCIKICNpbmNsdWRlICJCM0luZmVyU3dpdGNoZXMuaCIKICNpbmNsdWRlICJCM0xlZ2FsaXpl
TWVtb3J5T2Zmc2V0cy5oIgogI2luY2x1ZGUgIkIzTG93ZXJNYWNyb3MuaCIKQEAgLTgzLDYgKzg0
LDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGlmIChw
cm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKSB7CiAgICAgICAgIHJlZHVjZURvdWJsZVRvRmxvYXQo
cHJvY2VkdXJlKTsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKKyAgICAgICAg
aG9pc3RMb29wSW52YXJpYW50VmFsdWVzKHByb2NlZHVyZSk7CiAgICAgICAgIGVsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSk7CiAgICAgICAgIGluZmVyU3dpdGNoZXMocHJv
Y2VkdXJlKTsKICAgICAgICAgZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFs
dWVzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lz
dExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFja3dhcmRzRG9taW5hdG9ycy5oIgor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0RvbWluYXRvcnMu
aCIKKyNpbmNsdWRlICJCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgiCisjaW5jbHVkZSAiQjNOYXR1
cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi9SYW5nZVNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBo
b2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShwcm9jLCAiaG9pc3RMb29wSW52YXJpYW50VmFsdWVzIik7CisgICAgCisg
ICAgZW5zdXJlTG9vcFByZUhlYWRlcnMocHJvYyk7CisgICAgCisgICAgTmF0dXJhbExvb3BzJiBs
b29wcyA9IHByb2MubmF0dXJhbExvb3BzKCk7CisgICAgaWYgKCFsb29wcy5udW1Mb29wcygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKKyAg
ICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0gcHJvYy5kb21pbmF0b3JzKCk7CisgICAgQmFja3dh
cmRzRG9taW5hdG9ycyYgYmFja3dhcmRzRG9taW5hdG9ycyA9IHByb2MuYmFja3dhcmRzRG9taW5h
dG9ycygpOworICAgIAorICAgIHN0cnVjdCBMb29wRGF0YSB7CisgICAgICAgIFJhbmdlU2V0PEhl
YXBSYW5nZT4gd3JpdGVzOworICAgICAgICBib29sIHdyaXRlc0xvY2FsU3RhdGUgeyBmYWxzZSB9
OworICAgICAgICBib29sIHdyaXRlc1Bpbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2lk
ZUV4aXRzIHsgZmFsc2UgfTsKKyAgICAgICAgQmFzaWNCbG9jayogcHJlSGVhZGVyIHsgbnVsbHB0
ciB9OworICAgIH07CisgICAgCisgICAgSW5kZXhNYXA8TmF0dXJhbExvb3AsIExvb3BEYXRhPiBk
YXRhKGxvb3BzLm51bUxvb3BzKCkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4
ID0gbG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5hdHVy
YWxMb29wJiBsb29wID0gbG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yIDogbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChsb29wcy5iZWxvbmdzVG8ocHJlZGVjZXNzb3IsIGxvb3ApKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGFbbG9v
cF0ucHJlSGVhZGVyKTsKKyAgICAgICAgICAgIGRhdGFbbG9vcF0ucHJlSGVhZGVyID0gcHJlZGVj
ZXNzb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IHByb2MpIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBsb29wcy5pbm5l
ck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
IEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAgICAgICAgICBkYXRhWyps
b29wXS53cml0ZXMuYWRkKGVmZmVjdHMud3JpdGVzKTsKKyAgICAgICAgICAgIGRhdGFbKmxvb3Bd
LndyaXRlc0xvY2FsU3RhdGUgfD0gZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlOworICAgICAgICAg
ICAgZGF0YVsqbG9vcF0ud3JpdGVzUGlubmVkIHw9IGVmZmVjdHMud3JpdGVzUGlubmVkOworICAg
ICAgICAgICAgZGF0YVsqbG9vcF0uc2lkZUV4aXRzIHw9IGVmZmVjdHMuZXhpdHNTaWRld2F5czsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IGxv
b3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9v
cCYgbG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1
cmFsTG9vcCogY3VycmVudCA9ICZsb29wOyBjdXJyZW50OyBjdXJyZW50ID0gbG9vcHMuaW5uZXJN
b3N0T3V0ZXJMb29wKCpjdXJyZW50KSkgeworICAgICAgICAgICAgZGF0YVsqY3VycmVudF0ud3Jp
dGVzLmFkZEFsbChkYXRhW2xvb3BdLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWypjdXJyZW50
XS53cml0ZXNMb2NhbFN0YXRlIHw9IGRhdGFbbG9vcF0ud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAg
ICAgICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlc1Bpbm5lZCB8PSBkYXRhW2xvb3BdLndyaXRlc1Bp
bm5lZDsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLnNpZGVFeGl0cyB8PSBkYXRhW2xvb3Bd
LnNpZGVFeGl0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKKyAgICAKKyAgICAvLyBQcmUtb3JkZXIgZW5zdXJlcyB0aGF0IHdlIHZpc2l0IG91ciBk
b21pbmF0b3JzIGJlZm9yZSB3ZSB2aXNpdCBvdXJzZWx2ZXMuIE90aGVyd2lzZSB3ZSdkIG1pc3Mg
c29tZQorICAgIC8vIGhvaXN0aW5nIG9wcG9ydHVuaXRpZXMgaW4gY29tcGxleCBDRkdzLgorICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBibG9ja0xvb3BzID0gbG9vcHMubG9vcHNP
ZihibG9jayk7CisgICAgICAgIGlmIChibG9ja0xvb3BzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yIChWYWx1ZSomIHZhbHVlIDogKmJsb2Nr
KSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZXZlciBob2lzdCB3cml0ZSBlZmZlY3RzIG9y
IGNvbnRyb2wgY29uc3RydWN0cy4KKyAgICAgICAgICAgIGlmIChlZmZlY3RzLm11c3RFeGVjdXRl
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrTG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSAqYmxvY2tMb29wc1tpXTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZG9taW5hdG9ycy5kb21pbmF0ZXMoY2hpbGQtPm93bmVyLCBkYXRhW2xvb3Bd
LnByZUhlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZWZmZWN0
cy5jb250cm9sRGVwZW5kZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFja3dhcmRz
RG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2ssIGRhdGFbbG9vcF0ucHJlSGVhZGVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc3VwZXIgY29uc2VydmF0aXZlLiBJbiBy
ZWFsaXR5LCB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYXJlbid0IGFueSBzaWRlIGV4aXRzIGJldHdlZW4gaGVyZSBhbmQgdGhlIHBy
ZS1oZWFkZXIgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBzZWFyY2guCisgICAgICAgICAgICAgICAg
ICAgIC8vIE9PUFMhISAobmVlZCBidWcgVVJMKQorICAgICAgICAgICAgICAgICAgICBpZiAoZGF0
YVtsb29wXS5zaWRlRXhpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGVm
ZmVjdHMucmVhZHNQaW5uZWQgJiYgZGF0YVtsb29wXS53cml0ZXNQaW5uZWQpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChlZmZlY3RzLnJlYWRzTG9jYWxTdGF0ZSAmJiBkYXRhW2xvb3BdLndyaXRlc0xvY2FsU3RhdGUp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChkYXRhW2xvb3BdLndyaXRlcy5vdmVybGFwcyhlZmZlY3RzLnJlYWRzKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZGF0YVtsb29wXS5wcmVIZWFkZXItPmFwcGVuZE5vblRlcm1pbmFsKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVl
LT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJp
YW50VmFsdWVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBsb29wLWludmFyaWFudCBj
b2RlIG1vdGlvbiAoTElDTSkuIEl0IGNhbiBob2lzdCBwdXJlIHZhbHVlcyBhcyB3ZWxsIGFzIHJl
YWRzIG9mIHN0YXRlIHRoYXQgaXNuJ3QKKy8vIG1vZGlmaWVkIGluc2lkZSB0aGUgbG9vcC4KKwor
Ym9vbCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSA8d3RmL05hdHVyYWxMb29wcy5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJh
bExvb3A7CisKK2NsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxD
Rkc+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYXR1cmFsTG9vcHMpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5hdHVyYWxMb29wcyhQcm9jZWR1cmUm
IHByb2MpCisgICAgICAgIDogV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPihwcm9jLmNmZygpLCBwcm9j
LmRvbWluYXRvcnMoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsy
OSwxNSBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5j
bHVkZSAiQjNCYWNrd2FyZHNDRkcuaCIKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0RvbWluYXRvcnMu
aCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrVXRpbHMuaCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJCM0NG
Ry5oIgogI2luY2x1ZGUgIkIzRGF0YVNlY3Rpb24uaCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMu
aCIKKyNpbmNsdWRlICJCM05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9k
dWN0cy5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1N0YWNrU2xv
dC5oIgpAQCAtMjAwLDYgKzIwMyw5IEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJlYWNoYWJpbGl0
eSgpCiB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiB7CiAgICAgbV9kb21pbmF0b3Jz
ID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CisgICAgbV9iYWNrd2Fy
ZHNDRkcgPSBudWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CiB9
CiAKIHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0yOTEs
NiArMjk3LDI3IEBAIERvbWluYXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCiAgICAgcmV0
dXJuICptX2RvbWluYXRvcnM7CiB9CiAKK05hdHVyYWxMb29wcyYgUHJvY2VkdXJlOjpuYXR1cmFs
TG9vcHMoKQoreworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExv
b3BzID0gc3RkOjptYWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4g
Km1fbmF0dXJhbExvb3BzOworfQorCitCYWNrd2FyZHNDRkcmIFByb2NlZHVyZTo6YmFja3dhcmRz
Q0ZHKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2JhY2t3YXJkc0NG
RyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7CisgICAgcmV0dXJuICpt
X2JhY2t3YXJkc0NGRzsKK30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgUHJvY2VkdXJlOjpiYWNr
d2FyZHNEb21pbmF0b3JzKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzRG9taW5hdG9ycykKKyAg
ICAgICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNrd2FyZHNE
b21pbmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7Cit9
CisKIHZvaWQgUHJvY2VkdXJlOjphZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmIGNvbnN0
YW50KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjE5NjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEwICs0OCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAor
Y2xhc3MgQmFja3dhcmRzQ0ZHOworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNsYXNzIEJh
c2ljQmxvY2s7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENGRzsKIGNsYXNzIERv
bWluYXRvcnM7CitjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBTdGFja1Nsb3Q7CiBjbGFzcyBW
YWx1ZTsKIGNsYXNzIFZhcmlhYmxlOwpAQCAtMTc1LDYgKzE3OCw5IEBAIHB1YmxpYzoKICAgICBD
RkcmIGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQogCiAgICAgRG9taW5hdG9ycyYgZG9t
aW5hdG9ycygpOworICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dh
cmRzQ0ZHJiBiYWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2Fy
ZHNEb21pbmF0b3JzKCk7CiAKICAgICB2b2lkIGFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtl
eSYpOwogICAgIGJvb2wgaXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsKQEAgLTI3MSw2
ICsyNzcsOSBAQCBwcml2YXRlOgogICAgIFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+IG1fdmFsdWVz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxE
b21pbmF0b3JzPiBtX2RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5hdHVyYWxMb29w
cz4gbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9i
YWNrd2FyZHNDRkc7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1f
YmFja3dhcmRzRG9taW5hdG9yczsKICAgICBIYXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RDb25zdGFu
dHM7CiAgICAgdW5zaWduZWQgbV9udW1FbnRyeXBvaW50cyB7IDEgfTsKICAgICBjb25zdCBjaGFy
KiBtX2xhc3RQaGFzZU5hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NTkyLDYgKzE0NTkyLDU1OSBAQCB2b2lkIHRlc3RPcHRpbWl6
ZU1hdGVyaWFsaXphdGlvbigpCiAgICAgQ0hFQ0soZm91bmQpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgordm9pZCBnZW5lcmF0ZUxvb3AoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBGdW5j
JiBmdW5jKQoreworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogbG9vcCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbmQg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBVcHNpbG9uVmFsdWUqIGluaXRpYWxJbmRleCA9IHJv
b3QtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICByb290LT5zZXRT
dWNjZXNzb3JzKGxvb3ApOworICAgIAorICAgIFZhbHVlKiBpbmRleCA9IGxvb3AtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgUGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIGluaXRpYWxJbmRleC0+
c2V0UGhpKGluZGV4KTsKKyAgICAKKyAgICBWYWx1ZSogb25lID0gZnVuYyhsb29wLCBpbmRleCk7
CisgICAgCisgICAgVmFsdWUqIG5leHRJbmRleCA9IGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgaW5kZXgsIG9uZSk7CisgICAgVXBzaWxvblZhbHVlKiBsb29wSW5k
ZXggPSBsb29wLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbmV4dElu
ZGV4KTsKKyAgICBsb29wSW5kZXgtPnNldFBoaShpbmRleCk7CisgICAgbG9vcC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwg
bmV4dEluZGV4LAorICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDEwMCkpKTsKKyAgICBsb29wLT5zZXRTdWNjZXNzb3JzKGxvb3AsIGVuZCk7
CisgICAgCisgICAgZW5kLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OworfQorCitzdGQ6OmFycmF5PGludCwgMTAwPiBtYWtlQXJyYXlGb3JMb29wcygpCit7CisgICAg
c3RkOjphcnJheTxpbnQsIDEwMD4gcmVzdWx0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdFtpXSA9IGkgJiAxOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGdlbmVyYXRl
TG9vcE5vdEJhY2t3YXJkc0RvbWluYW50KFByb2NlZHVyZSYgcHJvYywgc3RkOjphcnJheTxpbnQs
IDEwMD4mIGFycmF5LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEhlYWRlciA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQ2FsbCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBsb29wRm9vdGVyID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIGVuZCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFVwc2lsb25WYWx1ZSogaW5pdGlhbElu
ZGV4ID0gcm9vdC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwor
ICAgIC8vIElmIHlvdSBsb29rIGNhcmVmdWxseSwgeW91J2xsIG5vdGljZSB0aGF0IHRoaXMgaXMg
YW4gZXh0cmVtZWx5IHNuZWFreSB1c2Ugb2YgVXBzaWxvbiB0aGF0IGRlbW9uc3RyYXRlcworICAg
IC8vIHRoZSBleHRlbnQgdG8gd2hpY2ggb3VyIFNTQSBpcyBkaWZmZXJlbnQgZnJvbSBub3JtYWwt
cGVyc29uIFNTQS4KKyAgICBVcHNpbG9uVmFsdWUqIGRlZmF1bHRPbmUgPSByb290LT5hcHBlbmRO
ZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgcHJvYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhs
b29wSGVhZGVyKTsKKyAgICAKKyAgICBWYWx1ZSogaW5kZXggPSBsb29wSGVhZGVyLT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBpbml0aWFsSW5kZXgt
PnNldFBoaShpbmRleCk7CisgICAgCisgICAgLy8gaWYgKGFycmF5W2luZGV4XSkKKyAgICBsb29w
SGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigp
LAorICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgbG9vcEhlYWRlci0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAor
ICAgICAgICAgICAgICAgIGxvb3BIZWFkZXItPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgJmFycmF5KSwKKyAgICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBNdWwsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpFeHQz
MiwgT3JpZ2luKCksIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSkpKSkpOwor
ICAgIGxvb3BIZWFkZXItPnNldFN1Y2Nlc3NvcnMobG9vcENhbGwsIGxvb3BGb290ZXIpOworICAg
IAorICAgIFZhbHVlKiBmdW5jdGlvbkNhbGwgPSBmdW5jKGxvb3BDYWxsLCBpbmRleCk7CisgICAg
VXBzaWxvblZhbHVlKiBvbmVGcm9tRnVuY3Rpb24gPSBsb29wQ2FsbC0+YXBwZW5kTmV3PFVwc2ls
b25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIGZ1bmN0aW9uQ2FsbCk7CisgICAgbG9vcENhbGwtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCkpOworICAgIGxvb3BDYWxsLT5zZXRT
dWNjZXNzb3JzKGxvb3BGb290ZXIpOworICAgIAorICAgIFZhbHVlKiBvbmUgPSBsb29wRm9vdGVy
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBkZWZh
dWx0T25lLT5zZXRQaGkob25lKTsKKyAgICBvbmVGcm9tRnVuY3Rpb24tPnNldFBoaShvbmUpOwor
ICAgIFZhbHVlKiBuZXh0SW5kZXggPSBsb29wRm9vdGVyLT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEFkZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAgIFVwc2lsb25WYWx1ZSogbG9vcEluZGV4
ID0gbG9vcEZvb3Rlci0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5l
eHRJbmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIGxvb3BGb290ZXIt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAg
ICAgIGxvb3BGb290ZXItPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMZXNz
VGhhbiwgT3JpZ2luKCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3BGb290ZXItPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcEZvb3Rl
ci0+c2V0U3VjY2Vzc29ycyhsb29wSGVhZGVyLCBlbmQpOworICAgIAorICAgIGVuZC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKK30KKworc3RhdGljIGludCBvbmVG
dW5jdGlvbihpbnQqIGNhbGxDb3VudCkKK3sKKyAgICAoKmNhbGxDb3VudCkrKzsKKyAgICByZXR1
cm4gMTsKK30KKworc3RhdGljIHZvaWQgbm9PcEZ1bmN0aW9uKCkKK3sKK30KKwordm9pZCB0ZXN0
TElDTVB1cmUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAg
ICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZh
bHVlKiB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAor
ICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxD
b3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAg
ICBDSEVDS19FUShjYWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVTaWRlRXhp
dHMoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAg
cHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7
CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAg
ICAgICBlZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigp
LCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisK
KyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisgICAgICAg
ICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0g
MDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNL
X0VRKGNhbGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZVdyaXRlc1Bpbm5lZCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9j
LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAg
ICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAg
IGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZm
ZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkpOworCisgICAg
ICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAorICAgICAgICAgICAg
ICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lz
ZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7Cisg
ICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShj
YWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVXcml0ZXMoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndy
aXRlcyA9IEhlYXBSYW5nZSg2MzQ3OSk7CisgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMs
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAgICAgICAgICAgICBs
b29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNv
bXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENv
dW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01SZWFkc0xvY2FsU3RhdGUoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJl
YWRzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZm
ZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3Vu
dCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsgLy8gV2UnbGwgZmFpbCB0byBob2lz
dCBiZWNhdXNlIHRoZSBsb29wIGhhcyBVcHNpbG9ucy4KK30KKwordm9pZCB0ZXN0TElDTVJlYWRz
UGlubmVkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAg
ICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1
ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
ICAgICAgICAgZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
bG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMy
LCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rp
b24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4o
cHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3Zv
aWQgdGVzdExJQ01SZWFkcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVM
b29wKAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVl
KikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAg
ICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21w
aWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3Vu
dCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9yTG9vcHMo
KTsKKyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAgcHJvYywg
YXJyYXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSog
eworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAg
ICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQg
PSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hF
Q0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJlRm9pbGVkQnlDaGls
ZCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBw
cm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKiBpbmRleCkgLT4gVmFs
dWUqIHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIGluZGV4KTsKKyAgICAgICAgfSk7Cisg
ICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+
KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisK
K3ZvaWQgdGVzdExJQ01QdXJlTm90QmFja3dhcmRzRG9taW5hbnRGb2lsZWRCeUNoaWxkKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9yTG9vcHMo
KTsKKyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAgcHJvYywg
YXJyYXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqIGluZGV4KSAtPiBW
YWx1ZSogeworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwK
KyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAg
ICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICAgICAgaW5kZXgpOworICAgICAgICB9KTsK
KyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9p
ZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCA1MHUpOworfQor
Cit2b2lkIHRlc3RMSUNNRXhpdHNTaWRld2F5cygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdp
c2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOwor
ICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEo
Y2FsbENvdW50LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTVdyaXRlc0xvY2FsU3RhdGUoKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywK
KyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAg
ICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBl
ZmZlY3RzLndyaXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3At
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3Jp
Z2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSks
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2Ms
ICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQg
dGVzdExJQ01Xcml0ZXMoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9v
cCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSop
IC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgICAgICAgICBlZmZlY3RzLndyaXRlcyA9IEhlYXBSYW5nZSg2NjYpOworICAgICAg
ICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxl
QW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwg
MTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01GZW5jZSgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0
cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMuZmVuY2UgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBj
b21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxD
b3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01Xcml0ZXNQaW5uZWQoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndy
aXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0
cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
YWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7
CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTUNvbnRy
b2xEZXBlbmRlbnQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgK
KyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+
IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgICAgICBlZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5k
UnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMXUp
OworfQorCit2b2lkIHRlc3RMSUNNQ29udHJvbERlcGVuZGVudE5vdEJhY2t3YXJkc0RvbWluYW50
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9y
TG9vcHMoKTsKKyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAg
cHJvYywgYXJyYXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBW
YWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgICAgICAgICAgZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihv
bmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAg
IH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1
bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDUwdSk7
Cit9CisKK3ZvaWQgdGVzdExJQ01Db250cm9sRGVwZW5kZW50U2lkZUV4aXRzKCkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAg
IFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAg
RWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy5l
eGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAg
ICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0
cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigp
LCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAg
ICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVu
c2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2Fs
bENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RM
SUNNUmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBs
b29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBF
ZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CisgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAg
ICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAg
ICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNh
bGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVudEhl
YXBzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAg
IHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSog
eworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAg
ICAgICAgZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjQzNik7CisgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3Jp
Z2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
KyAgICAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2UoNDg4Nik7CisgICAgICAgICAg
ICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
b25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRS
dW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7
Cit9CisKK3ZvaWQgdGVzdExJQ01SZWFkc1dyaXRlc092ZXJsYXBwaW5nSGVhcHMoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAg
ICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3Rz
LndyaXRlcyA9IEhlYXBSYW5nZSg2NDM2LCA3NDQ1OCk7CisgICAgICAgICAgICBsb29wLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCks
IGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAg
ICAgICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2UoNDg4NjQsIDc4MjM5KTsKKyAgICAgICAg
ICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQq
PihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
ICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFu
ZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEw
MHUpOworfQorCit2b2lkIHRlc3RMSUNNRGVmYXVsdENhbGwoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICByZXR1cm4gbG9v
cC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAg
ICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNp
Z25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxD
b3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogewpAQCAtMTcwMzQsNyArMTc1ODcs
MjkgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0TG9hZEJhc2VJ
bmRleFNoaWZ0MigpKTsKICAgICBSVU4odGVzdExvYWRCYXNlSW5kZXhTaGlmdDMyKCkpOwogICAg
IFJVTih0ZXN0T3B0aW1pemVNYXRlcmlhbGl6YXRpb24oKSk7Ci0gICAgCisgICAgUlVOKHRlc3RM
SUNNUHVyZSgpKTsKKyAgICBSVU4odGVzdExJQ01QdXJlU2lkZUV4aXRzKCkpOworICAgIFJVTih0
ZXN0TElDTVB1cmVXcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUHVyZVdyaXRlcygp
KTsKKyAgICBSVU4odGVzdExJQ01SZWFkc0xvY2FsU3RhdGUoKSk7CisgICAgUlVOKHRlc3RMSUNN
UmVhZHNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHMoKSk7CisgICAgUlVOKHRlc3RM
SUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVGb2ls
ZWRCeUNoaWxkKCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudEZv
aWxlZEJ5Q2hpbGQoKSk7CisgICAgUlVOKHRlc3RMSUNNRXhpdHNTaWRld2F5cygpKTsKKyAgICBS
VU4odGVzdExJQ01Xcml0ZXNMb2NhbFN0YXRlKCkpOworICAgIFJVTih0ZXN0TElDTVdyaXRlcygp
KTsKKyAgICBSVU4odGVzdExJQ01Xcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNRmVu
Y2UoKSk7CisgICAgUlVOKHRlc3RMSUNNQ29udHJvbERlcGVuZGVudCgpKTsKKyAgICBSVU4odGVz
dExJQ01Db250cm9sRGVwZW5kZW50Tm90QmFja3dhcmRzRG9taW5hbnQoKSk7CisgICAgUlVOKHRl
c3RMSUNNQ29udHJvbERlcGVuZGVudFNpZGVFeGl0cygpKTsKKyAgICBSVU4odGVzdExJQ01SZWFk
c1Bpbm5lZFdyaXRlc1Bpbm5lZCgpKTsKKyAgICBSVU4odGVzdExJQ01SZWFkc1dyaXRlc0RpZmZl
cmVudEhlYXBzKCkpOworICAgIFJVTih0ZXN0TElDTVJlYWRzV3JpdGVzT3ZlcmxhcHBpbmdIZWFw
cygpKTsKKyAgICBSVU4odGVzdExJQ01EZWZhdWx0Q2FsbCgpKTsKKwogICAgIFJVTih0ZXN0QXRv
bWljV2Vha0NBUzxpbnQ4X3Q+KCkpOwogICAgIFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQxNl90
PigpKTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50MzJfdD4oKSk7CkBAIC0xNzA4Nyw3
ICsxNzY2Miw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEZs
b2F0RXF1YWxPclVub3JkZXJlZEZvbGRpbmcoKSk7CiAgICAgUlVOKHRlc3RGbG9hdEVxdWFsT3JV
bm9yZGVyZWRGb2xkaW5nTmFOKCkpOwogICAgIFJVTih0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVk
RG9udEZvbGQoKSk7Ci0KKyAgICAKICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICBSVU4odGVz
dEJyYW5jaEJpdEFuZEltbUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDEsIEFpcjo6QnJhbmNoVGVz
dDMyLCBBaXI6OkFyZzo6VG1wKSk7CiAgICAgICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVz
aW9uKElkZW50aXR5LCBJbnQ2NCwgMHhmZiwgQWlyOjpCcmFuY2hUZXN0MzIsIEFpcjo6QXJnOjpU
bXApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDkgKzIyOSw3IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBmbG9hdCBleGVjdXRpb25Db3VudDsKICAgICAK
ICAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHJlc2VydmVkIGZvciBOYXR1cmFsTG9vcHMuCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXMgPSAyOwot
ICAgIHVuc2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2VzW251bWJlck9mSW5uZXJNb3N0TG9vcElu
ZGljZXNdOwotCisgICAgCiAgICAgc3RydWN0IFNTQURhdGEgewogICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHLmgJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gbm9kZS0+aW5kZXg7IH0KICAgICBO
b2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soaW5k
ZXgpOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoLm51
bUJsb2NrcygpOyB9Ci0KKyAgICAKICAgICBQb2ludGVyRHVtcDxCYXNpY0Jsb2NrPiBkdW1wKE5v
ZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7IH0KIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShub25leGlzdGVudCkKQEAg
LTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCi0jaW5j
bHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZv
aWQgTmF0dXJhbExvb3A6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQu
cHJpbnQoIltIZWFkZXI6ICIsICpoZWFkZXIoKSwgIiwgQm9keToiKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ib2R5LnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoIiAi
LCAqbV9ib2R5W2ldKTsKLSAgICBvdXQucHJpbnQoIl0iKTsKLX0KLQotTmF0dXJhbExvb3BzOjpO
YXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQotewotICAgIEFTU0VSVChncmFwaC5tX2RvbWluYXRv
cnMpOwotCi0gICAgLy8gSW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1
cmFsIGxvb3AgZmluZGVyLiBUaGUgZmlyc3QKLSAgICAvLyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNv
bnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KLSAgICAvLyBUaGVu
IEIgaXMgYSBsb29wIGhlYWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4g
V2Ugd2lsbAotICAgIC8vIHRoZW4gYWNjdW11bGF0ZSwgZm9yIGVhY2ggbG9vcCBoZWFkZXIsIG11
bHRpcGxlIGJhY2t3YXJkIGJyYW5jaGluZwotICAgIC8vIGJsb2Nrcy4gVGhlbiB3ZSBiYWNrd2Fy
ZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3YXJkIGJyYW5jaGluZwotICAgIC8vIGJsb2Nr
cyB0byB0aGVpciBsb29wIGhlYWRlcnMsIHdoaWNoIGdpdmVzIHVzIGFsbCBvZiB0aGUgYmxvY2tz
IGluIHRoZQotICAgIC8vIGxvb3AgYm9keS4KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxv
ZygiRG9taW5hdG9yczpcbiIpOwotICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMtPmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgbV9sb29wcy5yZXNpemUoMCk7Ci0gICAg
Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygp
OyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3Vj
Y2Vzc29yKGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRl
cyhzdWNjZXNzb3IsIGJsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1f
bG9vcHMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbal0uaGVh
ZGVyKCkgPT0gc3VjY2Vzc29yKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbal0uYWRk
QmxvY2soYmxvY2spOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIE5hdHVyYWxMb29wIGxvb3Aoc3VjY2Vzc29yLCBtX2xvb3BzLnNpemUoKSk7Ci0gICAgICAg
ICAgICBsb29wLmFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxv
b3ApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAgICBGYXN0
Qml0VmVjdG9yIHNlZW5CbG9ja3M7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBibG9ja1dv
cmtsaXN0OwotICAgIHNlZW5CbG9ja3MucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKLSAgICAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICBO
YXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbaV07Ci0gICAgICAgIAotICAgICAgICBzZWVuQmxv
Y2tzLmNsZWFyQWxsKCk7Ci0gICAgICAgIEFTU0VSVChibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRl
YWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgIHNlZW5CbG9ja3Nb
bG9vcFtqXS0+aW5kZXhdID0gdHJ1ZTsKLSAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5k
KGxvb3Bbal0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoIWJsb2NrV29y
a2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGJsb2Nr
V29ya2xpc3QudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCAqYmxvY2ss
ICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmxvY2sgPT0gbG9vcC5oZWFk
ZXIoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsK
LSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNl
c3NvcnNbal07Ci0gICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3NbcHJlZGVjZXNzb3ItPmlu
ZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAg
ICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIHNl
ZW5CbG9ja3NbcHJlZGVjZXNzb3ItPmluZGV4XSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGaWd1cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJs
b2NrcyB0byBsb29wcy4KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gQmFzaWNCbG9jazo6bnVtYmVy
T2ZJbm5lck1vc3RMb29wSW5kaWNlczsgaS0tOykKLSAgICAgICAgICAgIGJsb2NrLT5pbm5lck1v
c3RMb29wSW5kaWNlc1tpXSA9IFVJTlRfTUFYOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGxv
b3BJbmRleCA9IG1fbG9vcHMuc2l6ZSgpOyBsb29wSW5kZXgtLTspIHsKLSAgICAgICAgTmF0dXJh
bExvb3AmIGxvb3AgPSBtX2xvb3BzW2xvb3BJbmRleF07Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJsb2NrSW5kZXhJbkxvb3AgPSBsb29wLnNpemUoKTsgYmxvY2tJbmRleEluTG9v
cC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBsb29wW2Jsb2NrSW5kZXhJ
bkxvb3BdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlczsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgdGhpc0luZGV4ID0gYmxvY2stPmlubmVyTW9zdExvb3BJbmRp
Y2VzW2ldOwotICAgICAgICAgICAgICAgIGlmICh0aGlzSW5kZXggPT0gVUlOVF9NQVggfHwgbG9v
cC5zaXplKCkgPCBtX2xvb3BzW3RoaXNJbmRleF0uc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmlubmVyTW9zdExvb3BJbmRpY2VzLCBCYXNpY0Jsb2NrOjpudW1iZXJPZklubmVyTW9zdExv
b3BJbmRpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEluZGV4LCBpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5vdyBlYWNoIGJsb2NrIGtub3dzIGl0cyBp
bm5lci1tb3N0IGxvb3AgYW5kIGl0cyBuZXh0LXRvLWlubmVyLW1vc3QgbG9vcC4gVXNlCi0gICAg
Ly8gdGhpcyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgotICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0g
bV9sb29wc1tpXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9vcC5oZWFkZXIoKS0+aW5uZXJN
b3N0TG9vcEluZGljZXNbMF0gPT0gaSk7Ci0gICAgICAgIAotICAgICAgICBsb29wLm1fb3V0ZXJM
b29wSW5kZXggPSBsb29wLmhlYWRlcigpLT5pbm5lck1vc3RMb29wSW5kaWNlc1sxXTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRG8gc29t
ZSBzZWxmLXZlcmlmaWNhdGlvbiB0aGF0IHdlJ3ZlIGRvbmUgc29tZSBvZiB0aGlzIGNvcnJlY3Rs
eS4KLSAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0
b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBzaW1wbGVMb29wc09mOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrKSkKLSAgICAgICAgICAgICAg
ICAgICAgc2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1fbG9vcHNbaV0pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBmYW5j
eUxvb3BzT2YgPSBsb29wc09mKGJsb2NrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Rk
Ojpzb3J0KHNpbXBsZUxvb3BzT2YuYmVnaW4oKSwgc2ltcGxlTG9vcHNPZi5lbmQoKSk7Ci0gICAg
ICAgICAgICBzdGQ6OnNvcnQoZmFuY3lMb29wc09mLmJlZ2luKCksIGZhbmN5TG9vcHNPZi5lbmQo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpbXBsZUxvb3Bz
T2YgPT0gZmFuY3lMb29wc09mKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVzdWx0czogIiwgKnRoaXMsICJcbiIpOwotfQotCi1O
YXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMoKSB7IH0KLQotVmVjdG9yPGNvbnN0IE5hdHVyYWxM
b29wKj4gTmF0dXJhbExvb3BzOjpsb29wc09mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotewot
ICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IHJlc3VsdDsKLSAgICBmb3IgKGNvbnN0IE5h
dHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlu
bmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobG9vcCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBOYXR1cmFsTG9vcHM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIk5hdHVyYWxMb29wczp7Iik7Ci0gICAg
Q29tbWFQcmludGVyIGNvbW1hOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xvb3Bz
LnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1fbG9vcHNbaV0pOwotICAg
IG91dC5wcmludCgifSIpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0MiArMjcsMjMg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFzcyBOYXR1cmFsTG9v
cHM7Cit0eXBlZGVmIFdURjo6TmF0dXJhbExvb3A8Q0ZHPiBOYXR1cmFsTG9vcDsKIAotY2xhc3Mg
TmF0dXJhbExvb3AgewotcHVibGljOgotICAgIE5hdHVyYWxMb29wKCkKLSAgICAgICAgOiBtX2hl
YWRlcigwKQotICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBOYXR1cmFsTG9vcChCYXNpY0Jsb2NrKiBoZWFkZXIsIHVuc2lnbmVkIGlu
ZGV4KQotICAgICAgICA6IG1faGVhZGVyKGhlYWRlcikKLSAgICAgICAgLCBtX291dGVyTG9vcElu
ZGV4KFVJTlRfTUFYKQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBCYXNpY0Jsb2NrKiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQot
ICAgIAotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9
Ci0gICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ld
OyB9Ci0gICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUgc2xvd2VyLCBidXQgc2ltcGxlciwgd2F5
IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KLSAgICAvLyBhIG5hdHVyYWwgbG9vcC4g
SXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJlbG9uZ3NUbygpLCB3aGljaAotICAg
IC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVyIHRoYW4gTyhsb29wIHNpemUpLiBM
b29wIGRlcHRoIGlzCi0gICAgLy8gYWxtb3N0IGFsd2F5cyBzbWFsbGVyIHRoYW4gbG9vcCBzaXpl
LiBBICpsb3QqIHNtYWxsZXIuCi0gICAgYm9vbCBjb250YWlucyhCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYm9keS5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxvY2spCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGJsb2NrICE9IGhlYWRl
cigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWluZWQuCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgaW5kZXggb2YgdGhpcyBsb29wIGluIE5hdHVyYWxMb29w
cy4KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICAK
LSAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJMb29wSW5k
ZXggPT0gVUlOVF9NQVg7IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5hdHVyYWxMb29wczsKLSAgICAKLSAgICB2
b2lkIGFkZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9
Ci0gICAgCi0gICAgQmFzaWNCbG9jayogbV9oZWFkZXI7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sq
LCA0PiBtX2JvZHk7Ci0gICAgdW5zaWduZWQgbV9vdXRlckxvb3BJbmRleDsKLSAgICB1bnNpZ25l
ZCBtX2luZGV4OwotfTsKLQotY2xhc3MgTmF0dXJhbExvb3BzIHsKK2NsYXNzIE5hdHVyYWxMb29w
cyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxDRkc+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShOYXR1cmFsTG9vcHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIE5hdHVyYWxMb29wcyhHcmFwaCYpOwotICAgIH5OYXR1cmFsTG9vcHMoKTsKLSAgICAK
LSAgICB1bnNpZ25lZCBudW1Mb29wcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9s
b29wcy5zaXplKCk7Ci0gICAgfQotICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wKHVuc2lnbmVk
IGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sb29wc1tpXTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVh
ZGVyLCBvciB0aGUKLSAgICAvLyBsb29wIGl0IGJlbG9uZ3MgdG8uCi0gICAgY29uc3QgTmF0dXJh
bExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotICAgIHsKLSAgICAgICAg
Y29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOwotICAgICAg
ICBpZiAoIWxvb3ApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGxvb3AtPmhl
YWRlcigpID09IGJsb2NrKQotICAgICAgICAgICAgcmV0dXJuIGxvb3A7Ci0gICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBmb3IgKDsgbG9vcDsgbG9vcCA9IGlubmVy
TW9zdE91dGVyTG9vcCgqbG9vcCkpCi0gICAgICAgICAgICAgICAgQVNTRVJUKGxvb3AtPmhlYWRl
cigpICE9IGJsb2NrKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
Ci0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9zdExvb3BPZihCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPmlubmVyTW9z
dExvb3BJbmRpY2VzWzBdOwotICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKLSAgICB9Ci0g
ICAgCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9zdE91dGVyTG9vcChjb25zdCBOYXR1
cmFsTG9vcCYgbG9vcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChsb29wLm1fb3V0ZXJMb29w
SW5kZXggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJu
ICZtX2xvb3BzW2xvb3AubV9vdXRlckxvb3BJbmRleF07Ci0gICAgfQotICAgIAotICAgIGJvb2wg
YmVsb25nc1RvKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBOYXR1cmFsTG9vcCYgY2FuZGlkYXRl
TG9vcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEl0J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVz
dCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0J3Mgc21hbGwuCi0gICAgICAgIGlmIChjYW5k
aWRhdGVMb29wLnNpemUoKSA8IDQpCi0gICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlTG9vcC5j
b250YWlucyhibG9jayk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29w
KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91
dGVyTG9vcCgqbG9vcCkpIHsKLSAgICAgICAgICAgIGlmIChsb29wID09ICZjYW5kaWRhdGVMb29w
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgbG9vcERlcHRoKEJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAorICAgIE5hdHVyYWxMb29wcyhHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
V1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPigqZ3JhcGgubV9jZmcsIGdyYXBoLmVuc3VyZURvbWluYXRv
cnMoKSwgdmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGRlcHRo
ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExv
b3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAg
ICAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgcmV0dXJuIGRlcHRoOwogICAgIH0KLSAgICAKLSAg
ICAvLyBSZXR1cm4gdGhlIGluZGljZXMgb2YgYWxsIGxvb3BzIHRoaXMgYmVsb25ncyB0by4KLSAg
ICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxvY2sqKSBjb25zdDsK
LQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotcHJpdmF0ZToKLSAgICAvLyBJ
ZiB3ZSBldmVyIGhhZCBhIHNjYWxhYmlsaXR5IHByb2JsZW0gaW4gb3VyIG5hdHVyYWwgbG9vcCBm
aW5kZXIsIHdlIGNvdWxkCi0gICAgLy8gdXNlIHNvbWUgSGFzaE1hcCdzIGhlcmUuIEJ1dCBpdCBq
dXN0IGZlZWxzIGEgaGVjayBvZiBhIGxvdCBsZXNzIGNvbnZlbmllbnQuCi0gICAgVmVjdG9yPE5h
dHVyYWxMb29wLCA0PiBtX2xvb3BzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTk2MDApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDcgQEAKIAkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIx
QkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1
NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAvKiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJE
MURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJFMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmlu
dFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrZWRQcmludFN0
cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFCMDA0
QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDIsOCAr
MzQzLDggQEAKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21pY1N0cmluZ1RhYmxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0b21pY1N0cmluZ1Rh
YmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJEOEY0MEExNzZDMkFEODAw
MDJEODY1IC8qIEF0b21pY1N0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21pY1N0cmlu
Z1RhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDNjdDNTQyNTg5MzQ4RTI4
NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUEzMEQ0MTJDMUYwREUwQkEwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2Z0TGlua2luZy5oOyBwYXRoID0g
U29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTMwRDQxMkQxRjBE
RTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFNvZnRMaW5raW5nLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTMwRDQxMkQxRjBERTEzRjAwQjcxOTU0IC8qIFNvZnRM
aW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MDk4QUZGMUMxNjlFMDcwMDA4Nzc5NyAv
KiBTYW5kYm94U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbmRib3hT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUwOThCMDExQzE2QTRGOTAwMDg3
Nzk3IC8qIFNlY3VyaXR5U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyaXR5U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NjFGMzBGMURGMjY0
MjEwMEZGNjc1RCAvKiBEZXByZWNhdGVkT3B0aW9uYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGVwcmVjYXRlZE9wdGlvbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04NTYsNiArODU3LDcgQEAKIAkJCQkwRjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyog
TW9ub3RvbmljVGltZS5jcHAgKi8sCiAJCQkJMEY2NkIyODMxREM5N0JBQjAwNEExRDNGIC8qIE1v
bm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQ
dHIuaCAqLywKKwkJCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmgg
Ki8sCiAJCQkJMUEzRjZCRTYxNzRBREEyMTAwQjJFRUE3IC8qIE5ldmVyRGVzdHJveWVkLmggKi8s
CiAJCQkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovLAogCQkJCUE4QTQ3
MkQwMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25jb3B5YWJsZS5oICovLApJbmRleDogU291cmNlL1dU
Ri93dGYvQmFja3dhcmRzR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWNr
d2FyZHNHcmFwaC5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWNrd2Fy
ZHNHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTI0OCw3ICsyNDksNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaC5udW1Ob2RlcygpICsgMTsKICAgICB9
Ci0KKyAgICAKICAgICBDU3RyaW5nIGR1bXAoTm9kZSBub2RlKSBjb25zdAogICAgIHsKICAgICAg
ICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OwpJbmRleDogU291cmNlL1dURi93dGYvRG9taW5hdG9y
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkocmV2aXNpb24g
MjE5NjAwKQorKysgU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdURkRvbWluYXRvcnNfaAogI2RlZmluZSBXVEZEb21p
bmF0b3JzX2gKIAorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgogCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9O
YXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExvb3BzOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wIHsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9v
cCgpCisgICAgICAgIDogbV9ncmFwaChudWxscHRyKQorICAgICAgICAsIG1faGVhZGVyKG51bGxw
dHIpCisgICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01BWCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIE5hdHVyYWxMb29wKEdyYXBoJiBncmFwaCwgdHlwZW5hbWUgR3JhcGg6Ok5vZGUg
aGVhZGVyLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAg
ICAgLCBtX2hlYWRlcihoZWFkZXIpCisgICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01B
WCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgR3Jh
cGgqIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9CisgICAgCisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keS5zaXplKCk7IH0KKyAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlb
aV07IH0KKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzbG93ZXIsIGJ1dCBz
aW1wbGVyLCB3YXkgb2YgYXNraW5nIGlmIGEgYmxvY2sgYmVsb25ncyB0bworICAgIC8vIGEgbmF0
dXJhbCBsb29wLiBJdCdzIGZhc3RlciB0byBjYWxsIE5hdHVyYWxMb29wczo6YmVsb25nc1RvKCks
IHdoaWNoCisgICAgLy8gdHJpZXMgdG8gYmUgTyhsb29wIGRlcHRoKSByYXRoZXIgdGhhbiBPKGxv
b3Agc2l6ZSkuIExvb3AgZGVwdGggaXMKKyAgICAvLyBhbG1vc3QgYWx3YXlzIHNtYWxsZXIgdGhh
biBsb29wIHNpemUuIEEgKmxvdCogc21hbGxlci4KKyAgICBib29sIGNvbnRhaW5zKHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9ib2R5LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fYm9keVtpXSA9PSBi
bG9jaykKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBB
U1NFUlQoYmxvY2sgIT0gaGVhZGVyKCkpOyAvLyBIZWFkZXIgc2hvdWxkIGJlIGNvbnRhaW5lZC4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBpbmRleCBvZiB0aGlz
IGxvb3AgaW4gTmF0dXJhbExvb3BzLgorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIGJvb2wgaXNPdXRlck1vc3RMb29wKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdXRlckxvb3BJbmRleCA9PSBVSU5UX01BWDsgfQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoKSB7
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQucHJpbnQoIltIZWFkZXI6ICIsIG1fZ3Jh
cGgtPmR1bXAoaGVhZGVyKCkpLCAiLCBCb2R5OiIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ib2R5LnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIiwg
bV9ncmFwaC0+ZHVtcChtX2JvZHlbaV0pKTsKKyAgICAgICAgb3V0LnByaW50KCJdIik7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBmcmllbmQgY2xh
c3MgTmF0dXJhbExvb3BzOworICAgIAorICAgIHZvaWQgYWRkQmxvY2sodHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KKworICAgIEdyYXBoKiBtX2dy
YXBoOworICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIG1faGVhZGVyOworICAgIFZlY3Rvcjx0eXBl
bmFtZSBHcmFwaDo6Tm9kZSwgND4gbV9ib2R5OworICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5k
ZXg7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBo
PgorY2xhc3MgTmF0dXJhbExvb3BzIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8
dW5zaWduZWQsIDI+IElubmVyTW9zdExvb3BJbmRpY2VzOworCisgICAgTmF0dXJhbExvb3BzKEdy
YXBoJiBncmFwaCwgRG9taW5hdG9yczxHcmFwaD4mIGRvbWluYXRvcnMsIGJvb2wgc2VsZkNoZWNr
ID0gZmFsc2UpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2lubmVyTW9z
dExvb3BJbmRpY2VzKGdyYXBoLnRlbXBsYXRlIG5ld01hcDxJbm5lck1vc3RMb29wSW5kaWNlcz4o
KSkKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFz
ZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0CisgICAgICAgIC8vIHN0ZXAgaXMgdG8g
ZmluZCBhbGwgY29udHJvbCBmbG93IGVkZ2VzIEEgLT4gQiB3aGVyZSBCIGRvbWluYXRlcyBBLgor
ICAgICAgICAvLyBUaGVuIEIgaXMgYSBsb29wIGhlYWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJy
YW5jaGluZyBibG9jay4gV2Ugd2lsbAorICAgICAgICAvLyB0aGVuIGFjY3VtdWxhdGUsIGZvciBl
YWNoIGxvb3AgaGVhZGVyLCBtdWx0aXBsZSBiYWNrd2FyZCBicmFuY2hpbmcKKyAgICAgICAgLy8g
YmxvY2tzLiBUaGVuIHdlIGJhY2t3YXJkcyBncmFwaCBzZWFyY2ggZnJvbSB0aGUgYmFja3dhcmQg
YnJhbmNoaW5nCisgICAgICAgIC8vIGJsb2NrcyB0byB0aGVpciBsb29wIGhlYWRlcnMsIHdoaWNo
IGdpdmVzIHVzIGFsbCBvZiB0aGUgYmxvY2tzIGluIHRoZQorICAgICAgICAvLyBsb29wIGJvZHku
CisgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6
XG4iKTsKKyAgICAgICAgICAgIGRvbWluYXRvcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICB9CisgICAgCisgICAgICAgIG1fbG9vcHMucmVzaXplKDApOworICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBncmFwaC5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUo
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLnN1
Y2Nlc3NvcnMoYmxvY2spLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIHR5cGVuYW1l
IEdyYXBoOjpOb2RlIHN1Y2Nlc3NvciA9IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spW2ldOworICAg
ICAgICAgICAgICAgIGlmICghZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNp
emUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tqXS5oZWFkZXIo
KSA9PSBzdWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbal0uYWRk
QmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4gbG9vcChn
cmFwaCwgc3VjY2Vzc29yLCBtX2xvb3BzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbG9vcC5h
ZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICAgICAgbV9sb29wcy5hcHBlbmQobG9vcCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKKyAgICAK
KyAgICAgICAgRmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOworICAgICAgICBWZWN0b3I8dHlwZW5h
bWUgR3JhcGg6Ok5vZGUsIDQ+IGJsb2NrV29ya2xpc3Q7CisgICAgICAgIHNlZW5CbG9ja3MucmVz
aXplKGdyYXBoLm51bU5vZGVzKCkpOworICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+JiBs
b29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgCisgICAgICAgICAgICBzZWVuQmxvY2tzLmNsZWFy
QWxsKCk7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpOworICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IkRlYWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIpOworICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAg
c2VlbkJsb2Nrc1tncmFwaC5pbmRleChsb29wW2pdKV0gPSB0cnVlOworICAgICAgICAgICAgICAg
IGJsb2NrV29ya2xpc3QuYXBwZW5kKGxvb3Bbal0pOworICAgICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGJsb2NrV29ya2xpc3QudGFrZUxh
c3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVhbGluZyB3aXRoICIsIGdyYXBoLmR1bXAoYmxv
Y2spLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChibG9jayA9PSBs
b29wLmhlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdyYXBoLnByZWRlY2Vzc29ycyhi
bG9jaykuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBo
OjpOb2RlIHByZWRlY2Vzc29yID0gZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVtqXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgocHJlZGVjZXNzb3IpXSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAg
ICAgICAgICBzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRlY2Vzc29yKV0gPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZp
Z3VyZSBvdXQgcmV2ZXJzZSBtYXBwaW5nIGZyb20gYmxvY2tzIHRvIGxvb3BzLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBncmFwaC5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUo
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjp0dXBsZV9zaXplPElu
bmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWU7IGktLTspCisgICAgICAgICAgICAgICAgbV9pbm5l
ck1vc3RMb29wSW5kaWNlc1tibG9ja11baV0gPSBVSU5UX01BWDsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fbG9vcHMuc2l6ZSgpOyBsb29wSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCA9IG1fbG9vcHNbbG9vcElu
ZGV4XTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXhJbkxv
b3AgPSBsb29wLnNpemUoKTsgYmxvY2tJbmRleEluTG9vcC0tOykgeworICAgICAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gbG9vcFtibG9ja0luZGV4SW5Mb29wXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6
OnR1cGxlX3NpemU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9IG1faW5uZXJNb3N0TG9vcEluZGljZXNb
YmxvY2tdW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFY
IHx8IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0SW50b0JvdW5kZWRWZWN0b3IoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbm5lck1vc3RMb29wSW5kaWNlc1tibG9ja10sIHN0ZDo6dHVwbGVfc2l6
ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb3BJbmRleCwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIAorICAgICAgICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5uZXItbW9z
dCBsb29wIGFuZCBpdHMgbmV4dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQorICAgICAgICAvLyB0
aGlzIHRvIGZpZ3VyZSBvdXQgbG9vcCBwYXJlbnRpbmcuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFw
aD4mIGxvb3AgPSBtX2xvb3BzW2ldOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pbm5l
ck1vc3RMb29wSW5kaWNlc1tsb29wLmhlYWRlcigpXVswXSA9PSBpKTsKKyAgICAgICAgCisgICAg
ICAgICAgICBsb29wLm1fb3V0ZXJMb29wSW5kZXggPSBtX2lubmVyTW9zdExvb3BJbmRpY2VzW2xv
b3AuaGVhZGVyKCldWzFdOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChzZWxmQ2hlY2sp
IHsKKyAgICAgICAgICAgIC8vIERvIHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBk
b25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHkuCisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25z
dCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBzaW1wbGVMb29wc09mOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2spKQorICAgICAg
ICAgICAgICAgICAgICAgICAgc2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1fbG9vcHNbaV0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25z
dCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBmYW5jeUxvb3BzT2YgPSBsb29wc09mKGJsb2NrKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ZDo6c29ydChzaW1wbGVMb29wc09mLmJlZ2lu
KCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOworICAgICAgICAgICAgICAgIHN0ZDo6c29ydChmYW5j
eUxvb3BzT2YuYmVnaW4oKSwgZmFuY3lMb29wc09mLmVuZCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpbXBsZUxvb3BzT2YgPT0gZmFuY3lMb29wc09m
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKKyAgICB9Cisg
ICAgCisgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHVu
c2lnbmVkIG51bUxvb3BzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xvb3BzLnNp
emUoKTsKKyAgICB9CisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wKHVuc2lnbmVk
IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9sb29wc1tpXTsKKyAgICB9CisgICAg
CisgICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVh
ZGVyLCBvciB0aGUKKyAgICAvLyBsb29wIGl0IGJlbG9uZ3MgdG8uCisgICAgY29uc3QgTmF0dXJh
bExvb3A8R3JhcGg+KiBoZWFkZXJPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QK
KyAgICB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9z
dExvb3BPZihibG9jayk7CisgICAgICAgIGlmICghbG9vcCkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBpZiAobG9vcC0+aGVhZGVyKCkgPT0gYmxvY2spCisgICAgICAgICAgICByZXR1
cm4gbG9vcDsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZv
ciAoOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobG9vcC0+aGVhZGVyKCkgIT0gYmxvY2spOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGlu
bmVyTW9zdExvb3BPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbm5lck1vc3RMb29wSW5kaWNlc1tibG9ja11bMF07
CisgICAgICAgIGlmIChpbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gJm1fbG9vcHNbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBO
YXR1cmFsTG9vcDxHcmFwaD4qIGlubmVyTW9zdE91dGVyTG9vcChjb25zdCBOYXR1cmFsTG9vcDxH
cmFwaD4mIGxvb3ApIGNvbnN0CisgICAgeworICAgICAgICBpZiAobG9vcC5tX291dGVyTG9vcElu
ZGV4ID09IFVJTlRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAm
bV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBib29sIGJl
bG9uZ3NUbyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaywgY29uc3QgTmF0dXJhbExvb3A8R3Jh
cGg+JiBjYW5kaWRhdGVMb29wKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gSXQncyBmYXN0ZXIg
dG8gZG8gdGhpcyB0ZXN0IHVzaW5nIHRoZSBsb29wIGl0c2VsZiwgaWYgaXQncyBzbWFsbC4KKyAg
ICAgICAgaWYgKGNhbmRpZGF0ZUxvb3Auc2l6ZSgpIDwgNCkKKyAgICAgICAgICAgIHJldHVybiBj
YW5kaWRhdGVMb29wLmNvbnRhaW5zKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29u
c3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9v
cDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpIHsKKyAgICAgICAgICAgIGlmIChs
b29wID09ICZjYW5kaWRhdGVMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bG9vcERlcHRoKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgZGVwdGggPSAwOworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdy
YXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1v
c3RPdXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgZGVwdGgrKzsKKyAgICAgICAgcmV0dXJu
IGRlcHRoOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gYWxsIGxvb3BzIHRoaXMgYmVsb25n
cyB0by4gVGhlIGZpcnN0IGVudHJ5IGluIHRoZSB2ZWN0b3IgaXMgdGhlIGlubmVybW9zdCBsb29w
LiBUaGUgbGFzdCBpcyB0aGUKKyAgICAvLyBvdXRlcm1vc3QgbG9vcC4KKyAgICBWZWN0b3I8Y29u
c3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gbG9vcHNPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4q
PiByZXN1bHQ7CisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0g
aW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgq
bG9vcCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxvb3ApOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOworICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xvb3Bz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2xvb3BzW2ldKTsK
KyAgICAgICAgb3V0LnByaW50KCJ9Iik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICAKKyAgICAvLyBJZiB3ZSBldmVyIGhhZCBhIHNjYWxhYmlsaXR5IHBy
b2JsZW0gaW4gb3VyIG5hdHVyYWwgbG9vcCBmaW5kZXIsIHdlIGNvdWxkCisgICAgLy8gdXNlIHNv
bWUgSGFzaE1hcCdzIGhlcmUuIEJ1dCBpdCBqdXN0IGZlZWxzIGEgaGVjayBvZiBhIGxvdCBsZXNz
IGNvbnZlbmllbnQuCisgICAgVmVjdG9yPE5hdHVyYWxMb29wPEdyYXBoPiwgND4gbV9sb29wczsK
KyAgICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6dGVtcGxhdGUgTWFwPElubmVyTW9zdExvb3BJbmRp
Y2VzPiBtX2lubmVyTW9zdExvb3BJbmRpY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6TmF0dXJhbExvb3A7Cit1c2luZyBXVEY6Ok5hdHVyYWxMb29wczsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1JhbmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
UmFuZ2VTZXQuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBS
YW5nZVR5cGUgUmFuZ2U7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBSYW5nZTo6VHlwZSBUeXBlOwog
CisgICAgdHlwZWRlZiBWZWN0b3I8UmFuZ2UsIDg+IFZlY3RvclR5cGU7CisgICAgCiAgICAgUmFu
Z2VTZXQoKQogICAgIHsKICAgICB9CkBAIC0xMjUsOCArMTI3LDIzIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIG91dC5wcmludCgieyIsIGxpc3REdW1wKG1fcmFuZ2VzKSwgIiwgaXNDb21wYWN0
ID0gIiwgbV9pc0NvbXBhY3QsICJ9Iik7CiAgICAgfQorICAgIAorICAgIHR5cGVuYW1lIFZlY3Rv
clR5cGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3Jhbmdlcy5iZWdpbigpOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBWZWN0b3JUeXBl
Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFu
Z2VzLmVuZCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEFsbChjb25zdCBSYW5nZVNldCYg
b3RoZXIpCisgICAgeworICAgICAgICBmb3IgKFJhbmdlIHJhbmdlIDogb3RoZXIpCisgICAgICAg
ICAgICBhZGQocmFuZ2UpOworICAgIH0KIAotcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3QoKQog
ICAgIHsKICAgICAgICAgaWYgKG1faXNDb21wYWN0KQpAQCAtMTY0LDYgKzE4MSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1faXNDb21wYWN0ID0gdHJ1ZTsKICAgICB9CiAgICAgCitwcml2YXRlOgog
ICAgIHN0YXRpYyBib29sIG92ZXJsYXBzTm9uRW1wdHkoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJh
bmdlJiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChhLmJl
Z2luKCksIGEuZW5kKCksIGIuYmVnaW4oKSwgYi5lbmQoKSk7CkBAIC0xODcsNyArMjA1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKLSAgICBWZWN0
b3I8UmFuZ2UsIDg+IG1fcmFuZ2VzOworICAgIFZlY3RvclR5cGUgbV9yYW5nZXM7CiAgICAgYm9v
bCBtX2lzQ29tcGFjdCB7IHRydWUgfTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316231</attachid>
            <date>2017-07-23 13:10:19 -0700</date>
            <delta_ts>2017-07-23 13:18:31 -0700</delta_ts>
            <desc>added changelog</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102897</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDE3LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGRvIExJQ00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQWRkZWQgYSBMSUNNIHBoYXNlIHRvIEIzLiBUaGlzIHBoYXNlIGlz
IGNhbGxlZCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMsIHRvIGNvbmZvcm0gdG8gdGhlIEIzIG5h
bWluZworICAgICAgICBjb252ZW50aW9uIGZvciBwaGFzZXMgKGl0IGhhcyB0byBiZSBhbiBpbXBl
cmF0aXZlKS4gVGhlIHBoYXNlIHVzZXMgTmF0dXJhbExvb3BzIGFuZCBCYWNrd2FyZHNEb21pbmF0
b3JzLAorICAgICAgICBzbyB0aGlzIGFkZHMgdGhvc2UgYW5hbHlzZXMgdG8gQjMuIEJhY2t3YXJk
c0RvbWluYXRvcnMgd2FzIGFscmVhZHkgYXZhaWxhYmxlIGluIHRlbXBsYXRpemVkIGZvcm0uIFRo
aXMKKyAgICAgICAgY2hhbmdlIHRlbXBsYXRpemVzIERGRzo6TmF0dXJhbExvb3BzIHNvIHRoYXQg
d2UgY2FuIGp1c3QgdXNlIGl0LgorICAgICAgICAKKyAgICAgICAgVGhlIExJQ00gcGhhc2UgaXRz
ZWxmIGlzIHJlYWxseSBzaW1wbGUuIFdlIGFyZSBkZWNlbnRseSBwcmVjaXNlIHdpdGggb3VyIGhh
bmRsaW5nIG9mIGV2ZXJ5dGhpbmcgZXhjZXB0CisgICAgICAgIHRoZSByZWxhdGlvbnNoaXAgYmV0
d2VlbiBjb250cm9sIGRlcGVuZGVuY2UgYW5kIHNpZGUgZXhpdHMuCisgICAgICAgIAorICAgICAg
ICBBbHNvIGFkZGVkIGEgYnVuY2ggb2YgdGVzdHMuIFRoZSB0ZXN0cyBjb3ZlciBhbGwgY29uZGl0
aW9ucyBpbiB0aGUgTElDTSBwaGFzZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYjMvQjNCYWNrd2FyZHNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYWNrd2Fy
ZHNDRkc6OkJhY2t3YXJkc0NGRyk6CisgICAgICAgICogYjMvQjNCYWNrd2FyZHNEb21pbmF0b3Jz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFja3dhcmRzRG9taW5hdG9yczo6QmFja3dh
cmRzRG9taW5hdG9ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKToKKyAgICAgICAgKiBiMy9C
M0NGRy5oOgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5oOgorICAgICAgICAqIGIzL0IzRW5zdXJl
TG9vcFByZUhlYWRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmVuc3VyZUxvb3BQ
cmVIZWFkZXJzKToKKyAgICAgICAgKiBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJh
dGVUb0Fpcik6CisgICAgICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmhvaXN0TG9vcEludmFyaWFudFZhbHVlcyk6CisgICAg
ICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaDogQWRkZWQuCisgICAgICAgICog
YjMvQjNOYXR1cmFsTG9vcHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpOYXR1cmFsTG9v
cHM6Ok5hdHVyYWxMb29wcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6bmF0dXJhbExvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
YmFja3dhcmRzQ0ZHKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmFja3dhcmRzRG9t
aW5hdG9ycyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKiBiMy90ZXN0
YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVMb29wKToKKyAgICAgICAgKEpTQzo6
QjM6Om1ha2VBcnJheUZvckxvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlTG9vcE5v
dEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6Om9uZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6QjM6Om5vT3BGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElD
TVB1cmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlU2lkZUV4aXRzKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVyZVdyaXRlc1Bpbm5lZCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TElDTVB1cmVXcml0ZXMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc0xv
Y2FsU3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1Bpbm5lZCk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0TElDTVJlYWRzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNN
UHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVy
ZUZvaWxlZEJ5Q2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlTm90QmFja3dh
cmRzRG9taW5hbnRGb2lsZWRCeUNoaWxkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNRXhp
dHNTaWRld2F5cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdyaXRlc0xvY2FsU3RhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Xcml0ZXMpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExJQ01GZW5jZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdyaXRlc1Bpbm5lZCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnQpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50Tm90QmFja3dhcmRzRG9taW5hbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50U2lkZUV4aXRzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVudEhlYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMSUNNRGVmYXVsdENhbGwpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDRkcuaDoK
KyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBk
ZmcvREZHTmF0dXJhbExvb3BzLmg6CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjpO
YXR1cmFsTG9vcHMpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpOYXR1cmFsTG9v
cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmhlYWRlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OnNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjphdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6TmF0dXJhbExvb3A6Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6Ok5hdHVyYWxMb29wOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6TmF0dXJhbExvb3A6OmluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOYXR1
cmFsTG9vcDo6aXNPdXRlck1vc3RMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpO
YXR1cmFsTG9vcDo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVy
YWxMb29wczo6bnVtTG9vcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxM
b29wczo6bG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjpo
ZWFkZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjppbm5l
ck1vc3RMb29wT2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6
aW5uZXJNb3N0T3V0ZXJMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFs
TG9vcHM6OmJlbG9uZ3NUbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExv
b3BzOjpsb29wRGVwdGgpOiBEZWxldGVkLgorCiAyMDE3LTA3LTE0ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gZGVjaWRlIGhv
dyBXZWJLaXQgeWllbGRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MywxMSArMTQzLDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKICAgICBiMy9CM0VmZmVjdHMuY3Bw
CiAgICAgYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAKKyAgICBiMy9CM0Vu
c3VyZUxvb3BQcmVIZWFkZXJzLmNwcAogICAgIGIzL0IzRmVuY2VWYWx1ZS5jcHAKICAgICBiMy9C
M0ZpeFNTQS5jcHAKICAgICBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJl
cXVlbmN5Q2xhc3MuY3BwCiAgICAgYjMvQjNHZW5lcmF0ZS5jcHAKKyAgICBiMy9CM0hvaXN0TG9v
cEludmFyaWFudFZhbHVlcy5jcHAKICAgICBiMy9CM0luZmVyU3dpdGNoZXMuY3BwCiAgICAgYjMv
QjNJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvQjNLaW5kLmNwcApAQCAtMzYzLDcgKzM2NSw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAK
ICAgICBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuY3BwCi0gICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZH
Tm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9E
RkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsMTMgQEAK
IAkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUE2MjgyMTg4Qzk4RDQwMDcy
QzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8qIFZNSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MEJCM0Ex
QjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93
UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVCRjE2
MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNjExRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLzsgfTsKKwkJMEY1
QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MjFGMjMx
NzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCAqLzsgfTsKKwkJMEY1
QkYxNjcxRjIzQTA5ODAwMjlEOTFEIC8qIEIzQmFja3dhcmRzQ0ZHLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNDRkcuaCAqLzsgfTsKKwkJMEY1QkYxNjkxRjIzQTBBQTAwMjlEOTFEIC8q
IEIzTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLzsg
fTsKKwkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNkEx
RjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oICovOyB9OworCQkwRjVC
RjE3MDFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcx
MUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5
MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdG
MDBDMTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87
IH07CiAJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlE
NTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5
RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyog
QWlyTG93ZXJTdGFja0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU2LDYgQEAKIAkJQTcz
MEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdG
QSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayAqLzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVy
YWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsK
IAkJQTczNzgxMEUxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1
NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxp
emVkVGh1bmtKSVQuaCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5r
R2VuZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzM4NjU1MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsg
fTsKQEAgLTMwMjgsNiArMzAzNCwxMyBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyog
RlRMVmFsdWVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExWYWx1ZVJhbmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5o
OyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZh
bHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcu
aDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNUJGMTY4MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM05hdHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIz
QmFja3dhcmRzRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRv
cnMuaDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNw
cDsgcGF0aCA9IGIzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg7IHBhdGgg
PSBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wTWFwLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgyMUU5RDUzNzUwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJMb3dlclN0YWNrQXJncy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVDRjk4MzFFOUQ1Mzc1
MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNr
QXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU2NCw3ICs0NTc3LDYgQEAK
IAkJQTcyOTlEQTQxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldENvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMwQjYxMTEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxM
b29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsg
cGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbGl6ZWRUaHVua0pJVC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MjExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
dW5rR2VuZXJhdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDU2LDYg
KzU0NjgsOCBAQAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKIAkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKKwkJCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAq
LywKKwkJCQkwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3Jz
LmggKi8sCiAJCQkJMEYyQzYzQUIxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJ
CQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLApAQCAtNTUwNyw2ICs1NTIx
LDggQEAKIAkJCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8sCiAJ
CQkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuY3BwICovLAogCQkJCTBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggKi8sCisJCQkJMEY1QkYxNkUxRjIzQTVBMTAwMjlEOTFE
IC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwICovLAorCQkJCTBGNUJGMTZGMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggKi8sCiAJCQkJMEY2OTcxRTgxRDky
RjQyMTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEY2OTcxRTkxRDkyRjQy
MTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5oICovLAogCQkJCTBGNkI4QUUwMUM0RUZFMTcwMDk2
OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCkBAIC01NTIxLDYgKzU1MzcsOCBAQAogCQkJCTBGMkM2
M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICovLAog
CQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLywKIAkJCQkwRkVDODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywK
KwkJCQkwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuY3BwICovLAorCQkJCTBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcElu
dmFyaWFudFZhbHVlcy5oICovLAogCQkJCURDNjlCOTlBMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0lu
ZmVyU3dpdGNoZXMuY3BwICovLAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0lu
ZmVyU3dpdGNoZXMuaCAqLywKIAkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXQuY3BwICovLApAQCAtNTU0NCw2ICs1NTYyLDcgQEAKIAkJCQkwRjMzOEUwMzFCRjAy
NzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkwRjMzOEUwNDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCiAJCQkJMEYyQzYzQzExRTY2NEE1
QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCisJCQkJMEY1QkYxNjgxRjIzQTBBQTAw
MjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEYzMzhFMDUxQkYwMjc2QzAwMTND
ODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhFMDYxQkYwMjc2QzAwMTND
ODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAw
MTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNzM2OCw3ICs3Mzg3LDYgQEAK
IAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5o
ICovLAogCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5jcHAgKi8sCiAJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggKi8sCi0JCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8sCiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2Rl
LmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLApA
QCAtODQ4OCw2ICs4NTA2LDcgQEAKIAkJCQkwRkJCNzNCQjFERUY4NjQ1MDAyQzAwOUUgLyogRGVs
ZXRlQWxsQ29kZUVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjMwM0MxRDQxOTJDRDAw
NTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyM0Ux
N0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY1QkYxNjkxRjIzQTBBQTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0
M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
NjcyLDYgKzg2OTEsNyBAQAogCQkJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3Jr
bGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE4MUFBOTA5MTEwMEQzM0Iz
MyAvKiBEaXJlY3RBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE2MUFBOTA5
MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNUJGMTcxMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyogRGlyZWN0RXZhbENv
ZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8q
IERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENE
Njg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg4NTYsMTAgKzg4NzYsMTIgQEAKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2
MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVGOEJD
RTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNUJGMTZCMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWlu
YXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJ
bmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlCMTVFRDhF
NDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Mzg2QTc5
MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjVCRjE2NzFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJl
ZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0
IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNjMs
NiArOTE4NSw3IEBACiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFj
cm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENG
ODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
NDFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFS
TXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzJBQjI0NDFEQ0Q3NUY0
MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MzYyLDcgKzEwMzg1LDYgQEAKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWlu
aWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYxNDM1MUFERjA5MDEwMEVENzky
QyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjJD
RDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3Bz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdO
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAvKiBE
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkEx
NTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEw
NzIzLDYgKzEwNzQ1LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JFQTFEQjU4
REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjVCRjE2MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEz
RTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNzg5
LDYgKzEwODEyLDcgQEAKIAkJCQkwRkQzRTQwQjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE9iamVjdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI0
QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY1QkYxNzAxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OUEwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1MDEwN0VDMEQ3MDAxM0U3QjIgLyogT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDgg
LyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0JhY2t3YXJkc0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0JhY2t3YXJkc0NGRy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0JhY2t3YXJkc0NGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRl
IDx3dGYvQmFja3dhcmRzR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEJhY2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2FyZHNHcmFwaDxDRkc+IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhQcm9jZWR1cmUmIHByb2MpCisg
ICAgICAgIDogQmFja3dhcmRzR3JhcGg8Q0ZHPihwcm9jLmNmZygpKQorICAgIHsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21p
bmF0b3JzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFj
a3dhcmRzRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNDRkcuaCIKKyNpbmNs
dWRlIDx3dGYvRG9taW5hdG9ycy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9ycyA6IHB1YmxpYyBXVEY6OkRvbWluYXRvcnM8QmFj
a3dhcmRzQ0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRzRG9taW5hdG9y
cyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmFja3dhcmRz
RG9taW5hdG9ycyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogV1RGOjpEb21pbmF0b3JzPEJh
Y2t3YXJkc0NGRz4ocHJvYy5iYWNrd2FyZHNDRkcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjE5
NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUq
IHZhbHVlKQogdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChWYWx1ZSogdmFsdWUp
CiB7CiAgICAgbV92YWx1ZXMuYXBwZW5kKG1fdmFsdWVzLmxhc3QoKSk7Ci0gICAgbV92YWx1ZXNb
bV92YWx1ZXMuc2l6ZSgpIC0gMV0gPSB2YWx1ZTsKKyAgICBtX3ZhbHVlc1ttX3ZhbHVlcy5zaXpl
KCkgLSAyXSA9IHZhbHVlOwogICAgIHZhbHVlLT5vd25lciA9IHRoaXM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5p
bmRleCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBt
X3Byb2Muc2l6ZSgpOyB9Ci0KKyAgICAKICAgICBQb2ludGVyRHVtcDxCYXNpY0Jsb2NrPiBkdW1w
KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7IH0KIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw5IEBAIHN0cnVjdCBF
ZmZlY3RzIHsKICAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
ICAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgogICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OworICAgIAorICAgIC8vIFdBUk5JTkc6IFRoZSBCMzo6aG9pc3RMb29wSW52
YXJpYW50VmFsdWVzKCkgcGhhc2UgdGhpbmtzIHRoYXQgaXQgdW5kZXJzdGFuZHMgdGhpcyBleGhh
dXN0aXZlbHkuIElmIHlvdQorICAgIC8vIGFkZCBhbnkgbmV3IGtpbmRzIG9mIHRoaW5ncyB0aGF0
IGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4sIHlvdSBzaG91bGQgY2hlY2sgdGhhdCBwaGFzZS4KIAog
ICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBlbnN1cmVMb29wUHJlSGVhZGVycyhQcm9j
ZWR1cmUmIHByb2MpCit7CisgICAgTmF0dXJhbExvb3BzJiBsb29wcyA9IHByb2MubmF0dXJhbExv
b3BzKCk7CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbG9vcHMubnVtTG9vcHMoKTsgbG9v
cEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbG9vcHMubG9v
cChsb29wSW5kZXgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBv
dXRPZkJvZHlQcmVkZWNlc3NvcnM7CisgICAgICAgIGRvdWJsZSB0b3RhbEZyZXF1ZW5jeSA9IDA7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29wLmhlYWRlcigpLT5w
cmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxvb3BzLmJlbG9uZ3NUbyhwcmVkZWNl
c3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG91dE9mQm9keVByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAg
ICAgICAgICAgdG90YWxGcmVxdWVuY3kgKz0gcHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3V0T2ZCb2R5UHJlZGVjZXNzb3JzLnNpemUo
KSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBCYXNpY0Js
b2NrKiBwcmVIZWFkZXIgPSBpbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVyKCks
IHRvdGFsRnJlcXVlbmN5KTsKKyAgICAgICAgcHJlSGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEp1bXAsIGxvb3AuaGVhZGVyKCktPmF0KDApLT5vcmlnaW4oKSk7CisgICAgICAgIHByZUhl
YWRlci0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sobG9vcC5oZWFkZXIoKSkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IG91dE9mQm9keVBy
ZWRlY2Vzc29ycykgeworICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3Io
bG9vcC5oZWFkZXIoKSwgcHJlSGVhZGVyKTsKKyAgICAgICAgICAgIHByZUhlYWRlci0+YWRkUHJl
ZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgbG9vcC5oZWFkZXIoKS0+cmVtb3Zl
UHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBs
b29wLmhlYWRlcigpLT5hZGRQcmVkZWNlc3NvcihwcmVIZWFkZXIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkgeworICAgICAgICBwcm9jLmludmFsaWRhdGVD
RkcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVh
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxv
b3BQcmVIZWFkZXJzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gQ3JlYXRlcyBhIHByZS1oZWFkZXIgZm9yIGFu
eSBsb29wIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gQSBsb29wIGhhcyBhIHByZS1oZWFk
ZXIgaWYgaXRzIGhlYWRlciBoYXMKKy8vIGV4YWN0bHkgb25lIHByZWRlY2Vzc29yIHRoYXQgaXNu
J3QgaW4gdGhlIGxvb3AgYm9keS4gSWYgYSBsb29wIGhlYWRlciBoYXMgbW9yZSB0aGFuIG9uZSBv
dXQtb2YtYm9keQorLy8gcHJlZGVjZXNzb3IsIHRoZW4gdGhpcyBjcmVhdGVzIGEgbmV3IGJsb2Nr
IGFuZCByZXdpcmVzIHRob3NlIHByZWRlY2Vzc29ycyB0byBpdC4KKworYm9vbCBlbnN1cmVMb29w
UHJlSGVhZGVycyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgogI2luY2x1ZGUgIkIzRml4U1NB
LmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgorI2luY2x1ZGUgIkIzSG9pc3RM
b29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVkZSAiQjNJbmZlclN3aXRjaGVzLmgiCiAjaW5j
bHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCIKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9z
LmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikgewogICAgICAgICByZWR1
Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2Nl
ZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhwcm9jZWR1cmUpOwogICAg
ICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBp
bmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVy
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0
TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlh
bnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhY2t3YXJk
c0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oIgor
I2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvUmFuZ2VTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYgcHJvYykK
K3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImhvaXN0TG9vcEludmFyaWFudFZh
bHVlcyIpOworICAgIAorICAgIGVuc3VyZUxvb3BQcmVIZWFkZXJzKHByb2MpOworICAgIAorICAg
IE5hdHVyYWxMb29wcyYgbG9vcHMgPSBwcm9jLm5hdHVyYWxMb29wcygpOworICAgIGlmICghbG9v
cHMubnVtTG9vcHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJvYy5yZXNldFZh
bHVlT3duZXJzKCk7CisgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9y
cygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9j
LmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgYSByZXVzYWJsZSBCMzo6RWZmZWN0c1NldCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBPT1BT
ISEgKG5lZWQgYnVnIFVSTCkKKyAgICBzdHJ1Y3QgTG9vcERhdGEgeworICAgICAgICBSYW5nZVNl
dDxIZWFwUmFuZ2U+IHdyaXRlczsKKyAgICAgICAgYm9vbCB3cml0ZXNMb2NhbFN0YXRlIHsgZmFs
c2UgfTsKKyAgICAgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxzZSB9OworICAgICAgICBib29s
IHNpZGVFeGl0cyB7IGZhbHNlIH07CisgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciB7IG51
bGxwdHIgfTsKKyAgICB9OworICAgIAorICAgIEluZGV4TWFwPE5hdHVyYWxMb29wLCBMb29wRGF0
YT4gZGF0YShsb29wcy5udW1Mb29wcygpKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGxvb3BJ
bmRleCA9IGxvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICBjb25zdCBO
YXR1cmFsTG9vcCYgbG9vcCA9IGxvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycygpKSB7
CisgICAgICAgICAgICBpZiAobG9vcHMuYmVsb25nc1RvKHByZWRlY2Vzc29yLCBsb29wKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRh
W2xvb3BdLnByZUhlYWRlcik7CisgICAgICAgICAgICBkYXRhW2xvb3BdLnByZUhlYWRlciA9IHBy
ZWRlY2Vzc29yOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBwcm9jKSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbG9vcHMu
aW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgZGF0
YVsqbG9vcF0ud3JpdGVzLmFkZChlZmZlY3RzLndyaXRlcyk7CisgICAgICAgICAgICBkYXRhWyps
b29wXS53cml0ZXNMb2NhbFN0YXRlIHw9IGVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZTsKKyAgICAg
ICAgICAgIGRhdGFbKmxvb3BdLndyaXRlc1Bpbm5lZCB8PSBlZmZlY3RzLndyaXRlc1Bpbm5lZDsK
KyAgICAgICAgICAgIGRhdGFbKmxvb3BdLnNpZGVFeGl0cyB8PSBlZmZlY3RzLmV4aXRzU2lkZXdh
eXM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXgg
PSBsb29wcy5udW1Mb29wcygpOyBsb29wSW5kZXgtLTspIHsKKyAgICAgICAgY29uc3QgTmF0dXJh
bExvb3AmIGxvb3AgPSBsb29wcy5sb29wKGxvb3BJbmRleCk7CisgICAgICAgIGZvciAoY29uc3Qg
TmF0dXJhbExvb3AqIGN1cnJlbnQgPSAmbG9vcDsgY3VycmVudDsgY3VycmVudCA9IGxvb3BzLmlu
bmVyTW9zdE91dGVyTG9vcCgqY3VycmVudCkpIHsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRd
LndyaXRlcy5hZGRBbGwoZGF0YVtsb29wXS53cml0ZXMpOworICAgICAgICAgICAgZGF0YVsqY3Vy
cmVudF0ud3JpdGVzTG9jYWxTdGF0ZSB8PSBkYXRhW2xvb3BdLndyaXRlc0xvY2FsU3RhdGU7Cisg
ICAgICAgICAgICBkYXRhWypjdXJyZW50XS53cml0ZXNQaW5uZWQgfD0gZGF0YVtsb29wXS53cml0
ZXNQaW5uZWQ7CisgICAgICAgICAgICBkYXRhWypjdXJyZW50XS5zaWRlRXhpdHMgfD0gZGF0YVts
b29wXS5zaWRlRXhpdHM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgCisgICAgLy8gUHJlLW9yZGVyIGVuc3VyZXMgdGhhdCB3ZSB2aXNpdCBv
dXIgZG9taW5hdG9ycyBiZWZvcmUgd2UgdmlzaXQgb3Vyc2VsdmVzLiBPdGhlcndpc2Ugd2UnZCBt
aXNzIHNvbWUKKyAgICAvLyBob2lzdGluZyBvcHBvcnR1bml0aWVzIGluIGNvbXBsZXggQ0ZHcy4K
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsK
KyAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gYmxvY2tMb29wcyA9IGxvb3BzLmxv
b3BzT2YoYmxvY2spOworICAgICAgICBpZiAoYmxvY2tMb29wcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoVmFsdWUqJiB2YWx1ZSA6ICpi
bG9jaykgeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgbmV2ZXIgaG9pc3Qgd3JpdGUgZWZmZWN0
cyBvciBjb250cm9sIGNvbnN0cnVjdHMuCisgICAgICAgICAgICBpZiAoZWZmZWN0cy5tdXN0RXhl
Y3V0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9ja0xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gKmJsb2NrTG9vcHNbaV07CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKGNoaWxkLT5vd25lciwgZGF0YVts
b29wXS5wcmVIZWFkZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGVm
ZmVjdHMuY29udHJvbERlcGVuZGVudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhY2t3
YXJkc0RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrLCBkYXRhW2xvb3BdLnByZUhlYWRlcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN1cGVyIGNvbnNlcnZhdGl2ZS4g
SW4gcmVhbGl0eSwgd2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFyZW4ndCBhbnkgc2lkZSBleGl0cyBiZXR3ZWVuIGhlcmUgYW5kIHRo
ZSBwcmUtaGVhZGVyIGFjY29yZGluZyB0byBiYWNrd2FyZHMgc2VhcmNoLgorICAgICAgICAgICAg
ICAgICAgICAvLyBPT1BTISEgKG5lZWQgYnVnIFVSTCkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRhdGFbbG9vcF0uc2lkZUV4aXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChlZmZlY3RzLnJlYWRzUGlubmVkICYmIGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgJiYgZGF0YVtsb29wXS53cml0ZXNMb2NhbFN0
YXRlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoZGF0YVtsb29wXS53cml0ZXMub3ZlcmxhcHMoZWZmZWN0cy5yZWFk
cykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGRhdGFbbG9vcF0ucHJlSGVhZGVyLT5hcHBlbmROb25UZXJtaW5hbCh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jLmFkZDxWYWx1ZT4oTm9wLCBWb2lkLCB2
YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBjaGFuZ2VkOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcElu
dmFyaWFudFZhbHVlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgbG9vcC1pbnZhcmlh
bnQgY29kZSBtb3Rpb24gKExJQ00pLiBJdCBjYW4gaG9pc3QgcHVyZSB2YWx1ZXMgYXMgd2VsbCBh
cyByZWFkcyBvZiBzdGF0ZSB0aGF0IGlzbid0CisvLyBtb2RpZmllZCBpbnNpZGUgdGhlIGxvb3Au
CisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
RG9taW5hdG9ycy5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3R5cGVkZWYgV1RGOjpOYXR1cmFsTG9vcDxDRkc+IE5h
dHVyYWxMb29wOworCitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFsTG9v
cHM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9vcHMoUHJvY2Vk
dXJlJiBwcm9jKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4ocHJvYy5jZmcoKSwg
cHJvYy5kb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MiArMjksMTUgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21pbmF0
b3JzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQmFz
aWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
QjNDRkcuaCIKICNpbmNsdWRlICJCM0RhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNEb21pbmF0
b3JzLmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5
cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNTdGFj
a1Nsb3QuaCIKQEAgLTIwMCw2ICsyMDMsOSBAQCB2b2lkIFByb2NlZHVyZTo6cmVzZXRSZWFjaGFi
aWxpdHkoKQogdm9pZCBQcm9jZWR1cmU6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9taW5h
dG9ycyA9IG51bGxwdHI7CisgICAgbV9uYXR1cmFsTG9vcHMgPSBudWxscHRyOworICAgIG1fYmFj
a3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxscHRy
OwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAt
MjkxLDYgKzI5NywyNyBAQCBEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmRvbWluYXRvcnMoKQogICAg
IHJldHVybiAqbV9kb21pbmF0b3JzOwogfQogCitOYXR1cmFsTG9vcHMmIFByb2NlZHVyZTo6bmF0
dXJhbExvb3BzKCkKK3sKKyAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQorICAgICAgICBtX25hdHVy
YWxMb29wcyA9IHN0ZDo6bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7CisgICAgcmV0
dXJuICptX25hdHVyYWxMb29wczsKK30KKworQmFja3dhcmRzQ0ZHJiBQcm9jZWR1cmU6OmJhY2t3
YXJkc0NGRygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0NGRykKKyAgICAgICAgbV9iYWNrd2Fy
ZHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhY2t3YXJkc0NGRz4oKnRoaXMpOworICAgIHJldHVy
biAqbV9iYWNrd2FyZHNDRkc7Cit9CisKK0JhY2t3YXJkc0RvbWluYXRvcnMmIFByb2NlZHVyZTo6
YmFja3dhcmRzRG9taW5hdG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRvcnMp
CisgICAgICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dh
cmRzRG9taW5hdG9ycz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHNEb21pbmF0b3Jz
OworfQorCiB2b2lkIFByb2NlZHVyZTo6YWRkRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5JiBj
b25zdGFudCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxOTYw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxMCArNDgsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKK2NsYXNzIEJhY2t3YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFz
cyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDRkc7CiBjbGFz
cyBEb21pbmF0b3JzOworY2xhc3MgTmF0dXJhbExvb3BzOwogY2xhc3MgU3RhY2tTbG90OwogY2xh
c3MgVmFsdWU7CiBjbGFzcyBWYXJpYWJsZTsKQEAgLTE3NSw2ICsxNzgsOSBAQCBwdWJsaWM6CiAg
ICAgQ0ZHJiBjZmcoKSBjb25zdCB7IHJldHVybiAqbV9jZmc7IH0KIAogICAgIERvbWluYXRvcnMm
IGRvbWluYXRvcnMoKTsKKyAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcygpOworICAgIEJh
Y2t3YXJkc0NGRyYgYmFja3dhcmRzQ0ZHKCk7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYgYmFj
a3dhcmRzRG9taW5hdG9ycygpOwogCiAgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFs
dWVLZXkmKTsKICAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CkBAIC0y
NzEsNiArMjc3LDkgQEAgcHJpdmF0ZToKICAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiBtX3Zh
bHVlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFs
TG9vcHM+IG1fbmF0dXJhbExvb3BzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNDRkc+
IG1fYmFja3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0b3Jz
PiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAgICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0Q29u
c3RhbnRzOwogICAgIHVuc2lnbmVkIG1fbnVtRW50cnlwb2ludHMgeyAxIH07CiAgICAgY29uc3Qg
Y2hhciogbV9sYXN0UGhhc2VOYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU5Miw2ICsxNDU5Miw1NTkgQEAgdm9pZCB0ZXN0T3B0
aW1pemVNYXRlcmlhbGl6YXRpb24oKQogICAgIENIRUNLKGZvdW5kKTsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KK3ZvaWQgZ2VuZXJhdGVMb29wKFByb2NlZHVyZSYgcHJvYywgY29uc3Qg
RnVuYyYgZnVuYykKK3sKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIGxvb3AgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
ZW5kID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVXBzaWxvblZhbHVlKiBpbml0aWFsSW5kZXgg
PSByb290LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgcHJvYywgT3JpZ2luKCks
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAgcm9vdC0+
c2V0U3VjY2Vzc29ycyhsb29wKTsKKyAgICAKKyAgICBWYWx1ZSogaW5kZXggPSBsb29wLT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBpbml0aWFsSW5k
ZXgtPnNldFBoaShpbmRleCk7CisgICAgCisgICAgVmFsdWUqIG9uZSA9IGZ1bmMobG9vcCwgaW5k
ZXgpOworICAgIAorICAgIFZhbHVlKiBuZXh0SW5kZXggPSBsb29wLT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAgIFVwc2lsb25WYWx1ZSogbG9v
cEluZGV4ID0gbG9vcC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5l
eHRJbmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIGxvb3AtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3JpZ2lu
KCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcC0+c2V0U3VjY2Vzc29ycyhsb29wLCBl
bmQpOworICAgIAorICAgIGVuZC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpKTsKK30KKworc3RkOjphcnJheTxpbnQsIDEwMD4gbWFrZUFycmF5Rm9yTG9vcHMoKQorewor
ICAgIHN0ZDo6YXJyYXk8aW50LCAxMDA+IHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRbaV0gPSBpICYgMTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBnZW5l
cmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudChQcm9jZWR1cmUmIHByb2MsIHN0ZDo6YXJyYXk8
aW50LCAxMDA+JiBhcnJheSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BIZWFkZXIgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcENhbGwgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogbG9vcEZvb3RlciA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBlbmQgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBVcHNpbG9uVmFsdWUqIGluaXRp
YWxJbmRleCA9IHJvb3QtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICBwcm9jLCBP
cmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDAp
KTsKKyAgICAvLyBJZiB5b3UgbG9vayBjYXJlZnVsbHksIHlvdSdsbCBub3RpY2UgdGhhdCB0aGlz
IGlzIGFuIGV4dHJlbWVseSBzbmVha3kgdXNlIG9mIFVwc2lsb24gdGhhdCBkZW1vbnN0cmF0ZXMK
KyAgICAvLyB0aGUgZXh0ZW50IHRvIHdoaWNoIG91ciBTU0EgaXMgZGlmZmVyZW50IGZyb20gbm9y
bWFsLXBlcnNvbiBTU0EuCisgICAgVXBzaWxvblZhbHVlKiBkZWZhdWx0T25lID0gcm9vdC0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdpbigpLCByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCkpOworICAgIHJvb3QtPnNldFN1Y2Nlc3Nv
cnMobG9vcEhlYWRlcik7CisgICAgCisgICAgVmFsdWUqIGluZGV4ID0gbG9vcEhlYWRlci0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgaW5pdGlhbElu
ZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIAorICAgIC8vIGlmIChhcnJheVtpbmRleF0pCisgICAg
bG9vcEhlYWRlci0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmln
aW4oKSwKKyAgICAgICAgbG9vcEhlYWRlci0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIGxvb3BIZWFk
ZXItPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksICZhcnJheSksCisgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgTXVsLCBPcmlnaW4oKSwK
KyAgICAgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
RXh0MzIsIE9yaWdpbigpLCBpbmRleCksCisgICAgICAgICAgICAgICAgICAgIGxvb3BIZWFkZXIt
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgc2l6ZW9mKGludCkpKSkp
KTsKKyAgICBsb29wSGVhZGVyLT5zZXRTdWNjZXNzb3JzKGxvb3BDYWxsLCBsb29wRm9vdGVyKTsK
KyAgICAKKyAgICBWYWx1ZSogZnVuY3Rpb25DYWxsID0gZnVuYyhsb29wQ2FsbCwgaW5kZXgpOwor
ICAgIFVwc2lsb25WYWx1ZSogb25lRnJvbUZ1bmN0aW9uID0gbG9vcENhbGwtPmFwcGVuZE5ldzxV
cHNpbG9uVmFsdWU+KHByb2MsIE9yaWdpbigpLCBmdW5jdGlvbkNhbGwpOworICAgIGxvb3BDYWxs
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICBsb29wQ2FsbC0+
c2V0U3VjY2Vzc29ycyhsb29wRm9vdGVyKTsKKyAgICAKKyAgICBWYWx1ZSogb25lID0gbG9vcEZv
b3Rlci0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAg
ZGVmYXVsdE9uZS0+c2V0UGhpKG9uZSk7CisgICAgb25lRnJvbUZ1bmN0aW9uLT5zZXRQaGkob25l
KTsKKyAgICBWYWx1ZSogbmV4dEluZGV4ID0gbG9vcEZvb3Rlci0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBpbmRleCwgb25lKTsKKyAgICBVcHNpbG9uVmFsdWUqIGxvb3BJ
bmRleCA9IGxvb3BGb290ZXItPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBuZXh0SW5kZXgpOworICAgIGxvb3BJbmRleC0+c2V0UGhpKGluZGV4KTsKKyAgICBsb29wRm9v
dGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLAor
ICAgICAgICBsb29wRm9vdGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
TGVzc1RoYW4sIE9yaWdpbigpLCBuZXh0SW5kZXgsCisgICAgICAgICAgICBsb29wRm9vdGVyLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTAwKSkpOworICAgIGxvb3BG
b290ZXItPnNldFN1Y2Nlc3NvcnMobG9vcEhlYWRlciwgZW5kKTsKKyAgICAKKyAgICBlbmQtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7Cit9CisKK3N0YXRpYyBpbnQg
b25lRnVuY3Rpb24oaW50KiBjYWxsQ291bnQpCit7CisgICAgKCpjYWxsQ291bnQpKys7CisgICAg
cmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG5vT3BGdW5jdGlvbigpCit7Cit9CisKK3ZvaWQg
dGVzdExJQ01QdXJlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3Ao
CisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAt
PiBWYWx1ZSogeworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUo
KSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
YWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7
CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJlU2lk
ZUV4aXRzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAg
ICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1
ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
ICAgICAgICAgZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgICAgIGxvb3At
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmln
aW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkp
OworCisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAorICAg
ICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3Vu
dCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBD
SEVDS19FUShjYWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVXcml0ZXNQaW5u
ZWQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAg
cHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7
CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAg
ICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBsb29wLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCks
IGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAw
OworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tf
RVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJlV3JpdGVzKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAg
ICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0
cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjM0NzkpOworICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBlZmZl
Y3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisKKyAgICAg
ICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisgICAgICAgICAgICAg
ICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAg
ICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNh
bGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNMb2NhbFN0YXRlKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAg
ICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0
cy5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCks
IGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5z
aWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxs
Q291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7IC8vIFdlJ2xsIGZhaWwgdG8g
aG9pc3QgYmVjYXVzZSB0aGUgbG9vcCBoYXMgVXBzaWxvbnMuCit9CisKK3ZvaWQgdGVzdExJQ01S
ZWFkc1Bpbm5lZCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAor
ICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4g
VmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
KyAgICAgICAgICAgIGVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJ
bnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1
bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7
CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZv
aWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMXUpOworfQor
Cit2b2lkIHRlc3RMSUNNUmVhZHMoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVy
YXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBW
YWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3Rz
Ojpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsK
KyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9j
YXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAg
Y29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxs
Q291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VBcnJheUZvckxv
b3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisgICAgICAgIHBy
b2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFs
dWUqIHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENv
dW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAg
IENIRUNLX0VRKGNhbGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZUZvaWxlZEJ5
Q2hpbGQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAg
ICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSogaW5kZXgpIC0+
IFZhbHVlKiB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgp
LAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAg
ICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICBpbmRleCk7CisgICAgICAgIH0p
OworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2
b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUpOwor
fQorCit2b2lkIHRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50Rm9pbGVkQnlDaGlsZCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VBcnJheUZvckxv
b3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisgICAgICAgIHBy
b2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKiBpbmRleCkg
LT4gVmFsdWUqIHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25l
KCksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAg
ICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIGluZGV4KTsKKyAgICAgICAg
fSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVu
PHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgNTB1KTsK
K30KKwordm9pZCB0ZXN0TElDTUV4aXRzU2lkZXdheXMoKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Js
b2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLmV4aXRzU2lkZXdheXMg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAg
ICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0g
MDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNL
X0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01Xcml0ZXNMb2NhbFN0YXRl
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHBy
b2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogewor
ICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAg
ICAgZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBs
b29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIs
IE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlv
bikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAg
IAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihw
cm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUpOworfQorCit2
b2lkIHRlc3RMSUNNV3JpdGVzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0
ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFs
dWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjY2KTsKKyAg
ICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29t
cGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291
bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNRmVuY2UoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLmZlbmNlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAg
ICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lz
ZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7Cisg
ICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShj
YWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNV3JpdGVzUGlubmVkKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAg
ICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0
cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVm
ZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAg
ICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWdu
ZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291
bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01D
b250cm9sRGVwZW5kZW50KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxv
b3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUq
KSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9u
ZSgpOworICAgICAgICAgICAgZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3At
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZv
aWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Cisg
ICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGls
ZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQs
IDF1KTsKK30KKwordm9pZCB0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnROb3RCYWNrd2FyZHNEb21p
bmFudCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VBcnJh
eUZvckxvb3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisgICAg
ICAgIHByb2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikg
LT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKKyAgICAgICAgICAgIGVmZmVjdHMuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAg
IHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAg
ICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVB
bmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCA1
MHUpOworfQorCit2b2lkIHRlc3RMSUNNQ29udHJvbERlcGVuZGVudFNpZGVFeGl0cygpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAorICAg
ICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAgICAg
ICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVj
dHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0Nh
bGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMs
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVm
ZmVjdHMuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmln
aW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwK
KyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywg
JmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwordm9pZCB0
ZXN0TElDTVJlYWRzUGlubmVkV3JpdGVzUGlubmVkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9j
ayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3Rz
ID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0
cnVlOworICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAg
ICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzUGlubmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAg
ICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0
d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7
CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19F
UShjYWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNXcml0ZXNEaWZmZXJl
bnRIZWFwcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAg
ICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFs
dWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAg
ICAgICAgICAgIGVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKDY0MzYpOworICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQs
IE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rp
b24pKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVmZmVjdHMgPSBFZmZlY3RzOjpub25l
KCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlKDQ4ODYpOworICAgICAg
ICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxl
QW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwg
MXUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBzKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAg
ICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZm
ZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjQzNiwgNzQ0NTgpOworICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdp
bigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlKDQ4ODY0LCA3ODIzOSk7CisgICAg
ICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBp
bGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50
LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTURlZmF1bHRDYWxsKCkKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAo
QmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgcmV0dXJu
IGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQz
MiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
dW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZj
YWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKIHsKQEAgLTE3MDM0LDcgKzE3
NTg3LDI5IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdExvYWRC
YXNlSW5kZXhTaGlmdDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4U2hpZnQzMigpKTsK
ICAgICBSVU4odGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkpOwotICAgIAorICAgIFJVTih0
ZXN0TElDTVB1cmUoKSk7CisgICAgUlVOKHRlc3RMSUNNUHVyZVNpZGVFeGl0cygpKTsKKyAgICBS
VU4odGVzdExJQ01QdXJlV3JpdGVzUGlubmVkKCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVXcml0
ZXMoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHNMb2NhbFN0YXRlKCkpOworICAgIFJVTih0ZXN0
TElDTVJlYWRzUGlubmVkKCkpOworICAgIFJVTih0ZXN0TElDTVJlYWRzKCkpOworICAgIFJVTih0
ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudCgpKTsKKyAgICBSVU4odGVzdExJQ01QdXJl
Rm9pbGVkQnlDaGlsZCgpKTsKKyAgICBSVU4odGVzdExJQ01QdXJlTm90QmFja3dhcmRzRG9taW5h
bnRGb2lsZWRCeUNoaWxkKCkpOworICAgIFJVTih0ZXN0TElDTUV4aXRzU2lkZXdheXMoKSk7Cisg
ICAgUlVOKHRlc3RMSUNNV3JpdGVzTG9jYWxTdGF0ZSgpKTsKKyAgICBSVU4odGVzdExJQ01Xcml0
ZXMoKSk7CisgICAgUlVOKHRlc3RMSUNNV3JpdGVzUGlubmVkKCkpOworICAgIFJVTih0ZXN0TElD
TUZlbmNlKCkpOworICAgIFJVTih0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnQoKSk7CisgICAgUlVO
KHRlc3RMSUNNQ29udHJvbERlcGVuZGVudE5vdEJhY2t3YXJkc0RvbWluYW50KCkpOworICAgIFJV
Tih0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnRTaWRlRXhpdHMoKSk7CisgICAgUlVOKHRlc3RMSUNN
UmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHNXcml0ZXNE
aWZmZXJlbnRIZWFwcygpKTsKKyAgICBSVU4odGVzdExJQ01SZWFkc1dyaXRlc092ZXJsYXBwaW5n
SGVhcHMoKSk7CisgICAgUlVOKHRlc3RMSUNNRGVmYXVsdENhbGwoKSk7CisKICAgICBSVU4odGVz
dEF0b21pY1dlYWtDQVM8aW50OF90PigpKTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50
MTZfdD4oKSk7CiAgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOwpAQCAtMTcw
ODcsNyArMTc2NjIsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRl
c3RGbG9hdEVxdWFsT3JVbm9yZGVyZWRGb2xkaW5nKCkpOwogICAgIFJVTih0ZXN0RmxvYXRFcXVh
bE9yVW5vcmRlcmVkRm9sZGluZ05hTigpKTsKICAgICBSVU4odGVzdEZsb2F0RXF1YWxPclVub3Jk
ZXJlZERvbnRGb2xkKCkpOwotCisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgUlVO
KHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBBaXI6OkJyYW5j
aFRlc3QzMiwgQWlyOjpBcmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZElt
bUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFy
Zzo6VG1wKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksNyBAQCBzdHJ1Y3QgQmFzaWNC
bG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAg
ICAgCiAgICAgLy8gVGhlc2UgZmllbGRzIGFyZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzID0g
MjsKLSAgICB1bnNpZ25lZCBpbm5lck1vc3RMb29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExv
b3BJbmRpY2VzXTsKLQorICAgIAogICAgIHN0cnVjdCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGRy5oCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBpbmRleChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4OyB9CiAg
ICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLmJsb2Nr
KGluZGV4KTsgfQogICAgIHVuc2lnbmVkIG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFw
aC5udW1CbG9ja3MoKTsgfQotCisgICAgCiAgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVt
cChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJldmlzaW9uIDIxOTYwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMu
aCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgot
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci12b2lkIE5hdHVyYWxMb29wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KCJbSGVhZGVyOiAiLCAqaGVhZGVyKCksICIsIEJvZHk6Iik7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50
KCIgIiwgKm1fYm9keVtpXSk7Ci0gICAgb3V0LnByaW50KCJdIik7Ci19Ci0KLU5hdHVyYWxMb29w
czo6TmF0dXJhbExvb3BzKEdyYXBoJiBncmFwaCkKLXsKLSAgICBBU1NFUlQoZ3JhcGgubV9kb21p
bmF0b3JzKTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFzZWQg
bmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0Ci0gICAgLy8gc3RlcCBpcyB0byBmaW5kIGFs
bCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdoZXJlIEIgZG9taW5hdGVzIEEuCi0gICAgLy8g
VGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBiYWNrd2FyZCBicmFuY2hpbmcgYmxv
Y2suIFdlIHdpbGwKLSAgICAvLyB0aGVuIGFjY3VtdWxhdGUsIGZvciBlYWNoIGxvb3AgaGVhZGVy
LCBtdWx0aXBsZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAvLyBibG9ja3MuIFRoZW4gd2UgYmFj
a3dhcmRzIGdyYXBoIHNlYXJjaCBmcm9tIHRoZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAvLyBi
bG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJzLCB3aGljaCBnaXZlcyB1cyBhbGwgb2YgdGhlIGJs
b2NrcyBpbiB0aGUKLSAgICAvLyBsb29wIGJvZHkuCi0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIAotICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIGRh
dGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAgICAgZ3JhcGgubV9kb21pbmF0b3JzLT5kdW1w
KFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgfQotICAgIAotICAgIG1fbG9vcHMucmVzaXplKDApOwot
ICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2st
PnN1Y2Nlc3NvcihpKTsKLSAgICAgICAgICAgIGlmICghZ3JhcGgubV9kb21pbmF0b3JzLT5kb21p
bmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSBtX2xvb3BzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2pd
LmhlYWRlcigpID09IHN1Y2Nlc3NvcikgewotICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pd
LmFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBOYXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOwotICAg
ICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICBtX2xvb3BzLmFwcGVu
ZChsb29wKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0gICAg
RmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOwotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gYmxv
Y2tXb3JrbGlzdDsKLSAgICBzZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5udW1CbG9ja3MoKSk7Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwotICAgICAgICAKLSAgICAgICAgc2Vl
bkJsb2Nrcy5jbGVhckFsbCgpOwotICAgICAgICBBU1NFUlQoYmxvY2tXb3JrbGlzdC5pc0VtcHR5
KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
KCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICBzZWVuQmxv
Y2tzW2xvb3Bbal0tPmluZGV4XSA9IHRydWU7Ci0gICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFw
cGVuZChsb29wW2pdKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgd2hpbGUgKCFibG9j
a1dvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBi
bG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdpdGggIiwgKmJs
b2NrLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJsb2NrID09IGxvb3Au
aGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07
KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJl
ZGVjZXNzb3JzW2pdOwotICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW3ByZWRlY2Vzc29y
LT5pbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3IpOwotICAgICAgICAg
ICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAg
ICBzZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRleF0gPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmlndXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJv
bSBibG9ja3MgdG8gbG9vcHMuCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEJhc2ljQmxvY2s6Om51
bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7IGktLTspCi0gICAgICAgICAgICBibG9jay0+aW5u
ZXJNb3N0TG9vcEluZGljZXNbaV0gPSBVSU5UX01BWDsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25l
ZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9vcEluZGV4LS07KSB7Ci0gICAgICAgIE5h
dHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tsb29wSW5kZXhdOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBibG9ja0luZGV4SW5Mb29wID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJ
bkxvb3AtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbG9vcFtibG9ja0lu
ZGV4SW5Mb29wXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7ICsraSkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRoaXNJbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29w
SW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFYIHx8
IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRJbnRvQm91bmRlZFZlY3RvcigKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlcywgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1v
c3RMb29wSW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BJbmRleCwgaSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBp
dHMgaW5uZXItbW9zdCBsb29wIGFuZCBpdHMgbmV4dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQot
ICAgIC8vIHRoaXMgdG8gZmlndXJlIG91dCBsb29wIHBhcmVudGluZy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9v
cCA9IG1fbG9vcHNbaV07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvb3AuaGVhZGVyKCktPmlu
bmVyTW9zdExvb3BJbmRpY2VzWzBdID09IGkpOwotICAgICAgICAKLSAgICAgICAgbG9vcC5tX291
dGVyTG9vcEluZGV4ID0gbG9vcC5oZWFkZXIoKS0+aW5uZXJNb3N0TG9vcEluZGljZXNbMV07Ci0g
ICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIERv
IHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBjb3Jy
ZWN0bHkuCi0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9j
aykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
VmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gc2ltcGxlTG9vcHNPZjsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9jaykpCi0gICAgICAgICAg
ICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5kKCZtX2xvb3BzW2ldKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4g
ZmFuY3lMb29wc09mID0gbG9vcHNPZihibG9jayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHN0ZDo6c29ydChzaW1wbGVMb29wc09mLmJlZ2luKCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOwot
ICAgICAgICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5iZWdpbigpLCBmYW5jeUxvb3BzT2Yu
ZW5kKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVM
b29wc09mID09IGZhbmN5TG9vcHNPZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKLX0K
LQotTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9Ci0KLVZlY3Rvcjxjb25zdCBOYXR1
cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QK
LXsKLSAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiByZXN1bHQ7Ci0gICAgZm9yIChjb25z
dCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3Ag
PSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICByZXN1bHQuYXBwZW5kKGxvb3Ap
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTmF0dXJhbExvb3BzOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOwot
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
b29wcy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2xvb3BzW2ldKTsK
LSAgICBvdXQucHJpbnQoIn0iKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNDIgKzI3
LDIzIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExvb3BzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgTmF0dXJh
bExvb3BzOwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJhbExvb3A7CiAKLWNs
YXNzIE5hdHVyYWxMb29wIHsKLXB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcCgpCi0gICAgICAgIDog
bV9oZWFkZXIoMCkKLSAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayogaGVhZGVyLCB1bnNpZ25l
ZCBpbmRleCkKLSAgICAgICAgOiBtX2hlYWRlcihoZWFkZXIpCi0gICAgICAgICwgbV9vdXRlckxv
b3BJbmRleChVSU5UX01BWCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgQmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LnNpemUo
KTsgfQotICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eVtpXTsgfQotICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gYXQoaSk7IH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIs
IHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBiZWxvbmdzIHRvCi0gICAgLy8gYSBuYXR1cmFsIGxv
b3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0dXJhbExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gK
LSAgICAvLyB0cmllcyB0byBiZSBPKGxvb3AgZGVwdGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXpl
KS4gTG9vcCBkZXB0aCBpcwotICAgIC8vIGFsbW9zdCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Ag
c2l6ZS4gQSAqbG90KiBzbWFsbGVyLgotICAgIGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxv
Y2spIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChibG9jayAhPSBo
ZWFkZXIoKSk7IC8vIEhlYWRlciBzaG91bGQgYmUgY29udGFpbmVkLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFs
TG9vcHMuCi0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0g
ICAgCi0gICAgYm9vbCBpc091dGVyTW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9v
cEluZGV4ID09IFVJTlRfTUFYOyB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7Ci0gICAgCi0g
ICAgdm9pZCBhZGRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2Nr
KTsgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIG1faGVhZGVyOwotICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgND4gbV9ib2R5OwotICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5kZXg7Ci0gICAgdW5z
aWduZWQgbV9pbmRleDsKLX07Ci0KLWNsYXNzIE5hdHVyYWxMb29wcyB7CitjbGFzcyBOYXR1cmFs
TG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPiB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTmF0dXJhbExvb3BzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBOYXR1cmFsTG9vcHMoR3JhcGgmKTsKLSAgICB+TmF0dXJhbExvb3BzKCk7Ci0g
ICAgCi0gICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbG9vcHMuc2l6ZSgpOwotICAgIH0KLSAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCh1bnNp
Z25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07Ci0gICAgfQot
ICAgIAotICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29w
IGhlYWRlciwgb3IgdGhlCi0gICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5h
dHVyYWxMb29wKiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKLSAg
ICAgICAgaWYgKCFsb29wKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChsb29w
LT5oZWFkZXIoKSA9PSBibG9jaykKLSAgICAgICAgICAgIHJldHVybiBsb29wOwotICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgZm9yICg7IGxvb3A7IGxvb3AgPSBp
bm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICAgICAgICAgIEFTU0VSVChsb29wLT5o
ZWFkZXIoKSAhPSBibG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RMb29wT2YoQmFzaWNCbG9jayog
YmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJsb2NrLT5pbm5l
ck1vc3RMb29wSW5kaWNlc1swXTsKLSAgICAgICAgaWYgKGluZGV4ID09IFVJTlRfTUFYKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9sb29wc1tpbmRleF07Ci0gICAg
fQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3Qg
TmF0dXJhbExvb3AmIGxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobG9vcC5tX291dGVy
TG9vcEluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGJlbG9uZ3NUbyhCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgTmF0dXJhbExvb3AmIGNhbmRp
ZGF0ZUxvb3ApIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBJdCdzIGZhc3RlciB0byBkbyB0aGlz
IHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBpdCdzIHNtYWxsLgotICAgICAgICBpZiAo
Y2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxv
b3AuY29udGFpbnMoYmxvY2spOwotICAgICAgICAKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFs
TG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1v
c3RPdXRlckxvb3AoKmxvb3ApKSB7Ci0gICAgICAgICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRl
TG9vcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGxvb3BEZXB0aChCYXNpY0Js
b2NrKiBibG9jaykgY29uc3QKKyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4oKmdyYXBoLm1fY2ZnLCBncmFwaC5lbnN1cmVEb21p
bmF0b3JzKCksIHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBk
ZXB0aCA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1v
c3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkK
LSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAgICAgIHJldHVybiBkZXB0aDsKICAgICB9Ci0gICAg
Ci0gICAgLy8gUmV0dXJuIHRoZSBpbmRpY2VzIG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8u
Ci0gICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29u
c3Q7Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAg
Ly8gSWYgd2UgZXZlciBoYWQgYSBzY2FsYWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxv
b3AgZmluZGVyLCB3ZSBjb3VsZAotICAgIC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQg
aXQganVzdCBmZWVscyBhIGhlY2sgb2YgYSBsb3QgbGVzcyBjb252ZW5pZW50LgotICAgIFZlY3Rv
cjxOYXR1cmFsTG9vcCwgND4gbV9sb29wczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTk2MDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGRvIExJQ00KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDc1MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW92ZWQgREZHOjpO
YXR1cmFsTG9vcHMgdG8gV1RGLiBUaGUgbmV3IHRlbXBsYXRpemVkIE5hdHVyYWxMb29wczw+IHVz
ZXMgdGhlIHNhbWUgR3JhcGggYWJzdHJhY3Rpb24gYXMKKyAgICAgICAgRG9taW5hdG9yczw+LiBU
aGlzIGFsbG93cyB1cyB0byBhZGQgYSBCMzo6TmF0dXJhbExvb3BzIGZvciBmcmVlLgorICAgICAg
ICAKKyAgICAgICAgQWxzbyBtYWRlIHNtYWxsIHR3ZWFrcyB0byBSYW5nZVNldCwgd2hpY2ggdGhl
IExJQ00gdXNlcy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRG9taW5hdG9ycy5o
OgorICAgICAgICAqIHd0Zi9OYXR1cmFsTG9vcHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok5h
dHVyYWxMb29wOjpOYXR1cmFsTG9vcCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpncmFw
aCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpoZWFkZXIpOgorICAgICAgICAoV1RGOjpO
YXR1cmFsTG9vcDo6c2l6ZSk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjphdCk6CisgICAg
ICAgIChXVEY6Ok5hdHVyYWxMb29wOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6TmF0dXJh
bExvb3A6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmluZGV4KToKKyAg
ICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmlzT3V0ZXJNb3N0TG9vcCk6CisgICAgICAgIChXVEY6
Ok5hdHVyYWxMb29wOjpkdW1wKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmFkZEJsb2Nr
KToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMpOgorICAgICAgICAo
V1RGOjpOYXR1cmFsTG9vcHM6OmdyYXBoKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpu
dW1Mb29wcyk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6bG9vcCk6CisgICAgICAgIChX
VEY6Ok5hdHVyYWxMb29wczo6aGVhZGVyT2YpOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6
OmlubmVyTW9zdExvb3BPZik6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6aW5uZXJNb3N0
T3V0ZXJMb29wKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpiZWxvbmdzVG8pOgorICAg
ICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6Omxvb3BEZXB0aCk6CisgICAgICAgIChXVEY6Ok5hdHVy
YWxMb29wczo6bG9vcHNPZik6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6ZHVtcCk6Cisg
ICAgICAgICogd3RmL1JhbmdlU2V0Lmg6CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjpiZWdpbik6
CisgICAgICAgIChXVEY6OlJhbmdlU2V0OjplbmQpOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6
YWRkQWxsKToKKwogMjAxNy0wNy0xNyAgWW9zaGlha2kgSml0c3VrYXdhICA8WW9zaGlha2kuSml0
c3VrYXdhQHNvbnkuY29tPgogCiAgICAgICAgIE1vdmUgVVNFX0FWRk9VTkRBVElPTiBkZWZpbml0
aW9uIG9uIFdpbmRvd3MgdG8gd3RmL1BsYXRmb3JtLmgKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3
OCw3IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21p
bmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8q
IEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnViYmxlU29y
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5
MUQgLyogTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdHVyYWxMb29wcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9j
a2VkUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TG9ja2VkUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYw
RjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9ja1R5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyLDggKzM0Myw4IEBACiAJCTlCQzcwRjA0MTc2
QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBBdG9taWNTdHJpbmdU
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdG9taWNTdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRh
aW5lckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRD
b250YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMzBENDEy
QzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU29mdExpbmtpbmcuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlu
a2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2Z0TGlua2luZy5oOyBw
YXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTMwRDQx
MkMxRjBERTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlua2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNTA5OEFGRjFDMTY5RTA3MDAwODc3OTcgLyogU2FuZGJveFNQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW5kYm94U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE1MDk4QjAxMUMxNkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNTYxRjMwRjFERjI2NDIxMDBGRjY3NUQgLyogRGVwcmVjYXRl
ZE9wdGlvbmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlcHJlY2F0ZWRP
cHRpb25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODU2LDYgKzg1Nyw3IEBA
CiAJCQkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICovLAog
CQkJCTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8sCiAJCQkJ
RkU4MjI1MzAxQjJBMUU1QjAwQkE2OEZEIC8qIE5ha2VkUHRyLmggKi8sCisJCQkJMEY1QkYxNjUx
RjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURB
MjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBGMEQ4NUIzMTcyMzRDQjEw
MDMzODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJEMDE1MUE4MjVCMDA0MTIzRkYgLyog
Tm9uY29weWFibGUuaCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTk2
MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNiArNzgsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1l
dGFBbGxvY2F0b3IuaAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE5hdHVyYWxMb29w
cy5oCiAgICAgTW9ub3RvbmljVGltZS5oCiAgICAgTm9uY29weWFibGUuaAogICAgIE51bWJlck9m
Q29yZXMuaApJbmRleDogU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkocmV2aXNpb24gMjE5NjAwKQorKysgU291cmNl
L1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFdURkRvbWluYXRvcnNfaAogI2RlZmluZSBXVEZEb21pbmF0b3JzX2gKIAorI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9OYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9v
cHMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9OYXR1cmFsTG9vcHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Rv
bWluYXRvcnMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBo
PgorY2xhc3MgTmF0dXJhbExvb3BzOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNz
IE5hdHVyYWxMb29wIHsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9vcCgpCisgICAgICAgIDogbV9n
cmFwaChudWxscHRyKQorICAgICAgICAsIG1faGVhZGVyKG51bGxwdHIpCisgICAgICAgICwgbV9v
dXRlckxvb3BJbmRleChVSU5UX01BWCkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5hdHVyYWxM
b29wKEdyYXBoJiBncmFwaCwgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaGVhZGVyLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgOiBtX2dyYXBoKCZncmFwaCkKKyAgICAgICAgLCBtX2hlYWRlcihoZWFk
ZXIpCisgICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01BWCkKKyAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgR3JhcGgqIGdyYXBoKCkgY29uc3Qg
eyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGhlYWRl
cigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9CisgICAgCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9keS5zaXplKCk7IH0KKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlbaV07IH0KKyAgICB0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkp
OyB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzbG93ZXIsIGJ1dCBzaW1wbGVyLCB3YXkgb2YgYXNr
aW5nIGlmIGEgYmxvY2sgYmVsb25ncyB0bworICAgIC8vIGEgbmF0dXJhbCBsb29wLiBJdCdzIGZh
c3RlciB0byBjYWxsIE5hdHVyYWxMb29wczo6YmVsb25nc1RvKCksIHdoaWNoCisgICAgLy8gdHJp
ZXMgdG8gYmUgTyhsb29wIGRlcHRoKSByYXRoZXIgdGhhbiBPKGxvb3Agc2l6ZSkuIExvb3AgZGVw
dGggaXMKKyAgICAvLyBhbG1vc3QgYWx3YXlzIHNtYWxsZXIgdGhhbiBsb29wIHNpemUuIEEgKmxv
dCogc21hbGxlci4KKyAgICBib29sIGNvbnRhaW5zKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgaWYgKG1fYm9keVtpXSA9PSBibG9jaykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoYmxvY2sgIT0gaGVh
ZGVyKCkpOyAvLyBIZWFkZXIgc2hvdWxkIGJlIGNvbnRhaW5lZC4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFRoZSBpbmRleCBvZiB0aGlzIGxvb3AgaW4gTmF0dXJhbExv
b3BzLgorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAg
IAorICAgIGJvb2wgaXNPdXRlck1vc3RMb29wKCkgY29uc3QgeyByZXR1cm4gbV9vdXRlckxvb3BJ
bmRleCA9PSBVSU5UX01BWDsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoKSB7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIjxudWxsPiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBvdXQucHJpbnQoIltIZWFkZXI6ICIsIG1fZ3JhcGgtPmR1bXAoaGVhZGVyKCkp
LCAiLCBCb2R5OiIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ib2R5LnNp
emUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgIiwgbV9ncmFwaC0+ZHVtcChtX2Jv
ZHlbaV0pKTsKKyAgICAgICAgb3V0LnByaW50KCJdIik7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBmcmllbmQgY2xhc3MgTmF0dXJhbExvb3BzOwor
ICAgIAorICAgIHZvaWQgYWRkQmxvY2sodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIHsgbV9i
b2R5LmFwcGVuZChibG9jayk7IH0KKworICAgIEdyYXBoKiBtX2dyYXBoOworICAgIHR5cGVuYW1l
IEdyYXBoOjpOb2RlIG1faGVhZGVyOworICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZSwg
ND4gbV9ib2R5OworICAgIHVuc2lnbmVkIG1fb3V0ZXJMb29wSW5kZXg7CisgICAgdW5zaWduZWQg
bV9pbmRleDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExv
b3BzIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IElubmVy
TW9zdExvb3BJbmRpY2VzOworCisgICAgTmF0dXJhbExvb3BzKEdyYXBoJiBncmFwaCwgRG9taW5h
dG9yczxHcmFwaD4mIGRvbWluYXRvcnMsIGJvb2wgc2VsZkNoZWNrID0gZmFsc2UpCisgICAgICAg
IDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2lubmVyTW9zdExvb3BJbmRpY2VzKGdyYXBo
LnRlbXBsYXRlIG5ld01hcDxJbm5lck1vc3RMb29wSW5kaWNlcz4oKSkKKyAgICB7CisgICAgICAg
IC8vIEltcGxlbWVudCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZp
bmRlci4gVGhlIGZpcnN0CisgICAgICAgIC8vIHN0ZXAgaXMgdG8gZmluZCBhbGwgY29udHJvbCBm
bG93IGVkZ2VzIEEgLT4gQiB3aGVyZSBCIGRvbWluYXRlcyBBLgorICAgICAgICAvLyBUaGVuIEIg
aXMgYSBsb29wIGhlYWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4gV2Ug
d2lsbAorICAgICAgICAvLyB0aGVuIGFjY3VtdWxhdGUsIGZvciBlYWNoIGxvb3AgaGVhZGVyLCBt
dWx0aXBsZSBiYWNrd2FyZCBicmFuY2hpbmcKKyAgICAgICAgLy8gYmxvY2tzLiBUaGVuIHdlIGJh
Y2t3YXJkcyBncmFwaCBzZWFyY2ggZnJvbSB0aGUgYmFja3dhcmQgYnJhbmNoaW5nCisgICAgICAg
IC8vIGJsb2NrcyB0byB0aGVpciBsb29wIGhlYWRlcnMsIHdoaWNoIGdpdmVzIHVzIGFsbCBvZiB0
aGUgYmxvY2tzIGluIHRoZQorICAgICAgICAvLyBsb29wIGJvZHkuCisgICAgCisgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAKKyAgICAgICAgaWYgKHZlcmJv
c2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKKyAgICAgICAgICAg
IGRvbWluYXRvcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIG1fbG9vcHMucmVzaXplKDApOworICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggPSBncmFwaC5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHN1Y2Nl
c3NvciA9IGdyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spW2ldOworICAgICAgICAgICAgICAgIGlmICgh
ZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tqXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbal0uYWRkQmxvY2soYmxvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4gbG9vcChncmFwaCwgc3VjY2Vzc29yLCBt
X2xvb3BzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7Cisg
ICAgICAgICAgICAgICAgbV9sb29wcy5hcHBlbmQobG9vcCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJB
ZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKKyAgICAKKyAgICAgICAgRmFzdEJpdFZl
Y3RvciBzZWVuQmxvY2tzOworICAgICAgICBWZWN0b3I8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIDQ+
IGJsb2NrV29ya2xpc3Q7CisgICAgICAgIHNlZW5CbG9ja3MucmVzaXplKGdyYXBoLm51bU5vZGVz
KCkpOworICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tpXTsK
KyAgICAgICAgCisgICAgICAgICAgICBzZWVuQmxvY2tzLmNsZWFyQWxsKCk7CisgICAgICAgICAg
ICBBU1NFUlQoYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29w
ICIsIGxvb3AsICJcbiIpOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGxvb3Auc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgc2VlbkJsb2Nrc1tncmFwaC5p
bmRleChsb29wW2pdKV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBw
ZW5kKGxvb3Bbal0pOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHdoaWxl
ICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBibG9jayA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgRGVhbGluZyB3aXRoICIsIGdyYXBoLmR1bXAoYmxvY2spLCAiXG4iKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChibG9jayA9PSBsb29wLmhlYWRlcigpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgpOyBqLS07
KSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHByZWRlY2Vzc29y
ID0gZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVtqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgocHJlZGVjZXNzb3IpXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBs
b29wLmFkZEJsb2NrKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tXb3Jr
bGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBzZWVuQmxvY2tz
W2dyYXBoLmluZGV4KHByZWRlY2Vzc29yKV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgcmV2ZXJzZSBt
YXBwaW5nIGZyb20gYmxvY2tzIHRvIGxvb3BzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggPSBncmFwaC5udW1Ob2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjp0dXBsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2Vz
Pjo6dmFsdWU7IGktLTspCisgICAgICAgICAgICAgICAgbV9pbm5lck1vc3RMb29wSW5kaWNlc1ti
bG9ja11baV0gPSBVSU5UX01BWDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGxv
b3BJbmRleCA9IG1fbG9vcHMuc2l6ZSgpOyBsb29wSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5h
dHVyYWxMb29wPEdyYXBoPiYgbG9vcCA9IG1fbG9vcHNbbG9vcEluZGV4XTsKKyAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXhJbkxvb3AgPSBsb29wLnNpemUoKTsg
YmxvY2tJbmRleEluTG9vcC0tOykgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpO
b2RlIGJsb2NrID0gbG9vcFtibG9ja0luZGV4SW5Mb29wXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGQ6OnR1cGxlX3NpemU8SW5uZXJN
b3N0TG9vcEluZGljZXM+Ojp2YWx1ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHRoaXNJbmRleCA9IG1faW5uZXJNb3N0TG9vcEluZGljZXNbYmxvY2tdW2ldOworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFYIHx8IGxvb3Auc2l6ZSgpIDwg
bV9sb29wc1t0aGlzSW5kZXhdLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0SW50b0JvdW5kZWRWZWN0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbm5l
ck1vc3RMb29wSW5kaWNlc1tibG9ja10sIHN0ZDo6dHVwbGVfc2l6ZTxJbm5lck1vc3RMb29wSW5k
aWNlcz46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BJbmRleCwgaSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAg
ICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5uZXItbW9zdCBsb29wIGFuZCBpdHMgbmV4
dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQorICAgICAgICAvLyB0aGlzIHRvIGZpZ3VyZSBvdXQg
bG9vcCBwYXJlbnRpbmcuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xvb3Bz
W2ldOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pbm5lck1vc3RMb29wSW5kaWNlc1ts
b29wLmhlYWRlcigpXVswXSA9PSBpKTsKKyAgICAgICAgCisgICAgICAgICAgICBsb29wLm1fb3V0
ZXJMb29wSW5kZXggPSBtX2lubmVyTW9zdExvb3BJbmRpY2VzW2xvb3AuaGVhZGVyKCldWzFdOwor
ICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChzZWxmQ2hlY2spIHsKKyAgICAgICAgICAgIC8v
IERvIHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhhdCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBj
b3JyZWN0bHkuCisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4
ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIHR5
cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFw
aD4qPiBzaW1wbGVMb29wc09mOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1fbG9vcHNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFw
aD4qPiBmYW5jeUxvb3BzT2YgPSBsb29wc09mKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHN0ZDo6c29ydChzaW1wbGVMb29wc09mLmJlZ2luKCksIHNpbXBsZUxvb3BzT2Yu
ZW5kKCkpOworICAgICAgICAgICAgICAgIHN0ZDo6c29ydChmYW5jeUxvb3BzT2YuYmVnaW4oKSwg
ZmFuY3lMb29wc09mLmVuZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNpbXBsZUxvb3BzT2YgPT0gZmFuY3lMb29wc09mKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdy
YXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUxvb3BzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xvb3BzLnNpemUoKTsKKyAgICB9CisgICAg
Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+JiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9sb29wc1tpXTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGVp
dGhlciBudWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKKyAgICAv
LyBsb29wIGl0IGJlbG9uZ3MgdG8uCisgICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBoZWFk
ZXJPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7Cisg
ICAgICAgIGlmICghbG9vcCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAobG9v
cC0+aGVhZGVyKCkgPT0gYmxvY2spCisgICAgICAgICAgICByZXR1cm4gbG9vcDsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAoOyBsb29wOyBsb29wID0g
aW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgICAgICBBU1NFUlQobG9vcC0+
aGVhZGVyKCkgIT0gYmxvY2spOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGlubmVyTW9zdExvb3BPZih0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbV9pbm5lck1vc3RMb29wSW5kaWNlc1tibG9ja11bMF07CisgICAgICAgIGlmIChpbmRl
eCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJm1f
bG9vcHNbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4q
IGlubmVyTW9zdE91dGVyTG9vcChjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3ApIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobG9vcC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0
ZXJMb29wSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBib29sIGJlbG9uZ3NUbyh0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBibG9jaywgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+JiBjYW5kaWRhdGVMb29w
KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gSXQncyBmYXN0ZXIgdG8gZG8gdGhpcyB0ZXN0IHVz
aW5nIHRoZSBsb29wIGl0c2VsZiwgaWYgaXQncyBzbWFsbC4KKyAgICAgICAgaWYgKGNhbmRpZGF0
ZUxvb3Auc2l6ZSgpIDwgNCkKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVMb29wLmNvbnRh
aW5zKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoY29uc3QgTmF0dXJhbExvb3A8R3Jh
cGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9z
dE91dGVyTG9vcCgqbG9vcCkpIHsKKyAgICAgICAgICAgIGlmIChsb29wID09ICZjYW5kaWRhdGVM
b29wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbG9vcERlcHRoKHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgZGVwdGgg
PSAwOworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVy
TW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3Ap
KQorICAgICAgICAgICAgZGVwdGgrKzsKKyAgICAgICAgcmV0dXJuIGRlcHRoOworICAgIH0KKyAg
ICAKKyAgICAvLyBSZXR1cm4gYWxsIGxvb3BzIHRoaXMgYmVsb25ncyB0by4gVGhlIGZpcnN0IGVu
dHJ5IGluIHRoZSB2ZWN0b3IgaXMgdGhlIGlubmVybW9zdCBsb29wLiBUaGUgbGFzdCBpcyB0aGUK
KyAgICAvLyBvdXRlcm1vc3QgbG9vcC4KKyAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3Jh
cGg+Kj4gbG9vcHNPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7Cisg
ICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiByZXN1bHQ7CisgICAgICAg
IGZvciAoY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJs
b2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGxvb3ApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xvb3BzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtX2xvb3BzW2ldKTsKKyAgICAgICAgb3V0LnByaW50
KCJ9Iik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICAK
KyAgICAvLyBJZiB3ZSBldmVyIGhhZCBhIHNjYWxhYmlsaXR5IHByb2JsZW0gaW4gb3VyIG5hdHVy
YWwgbG9vcCBmaW5kZXIsIHdlIGNvdWxkCisgICAgLy8gdXNlIHNvbWUgSGFzaE1hcCdzIGhlcmUu
IEJ1dCBpdCBqdXN0IGZlZWxzIGEgaGVjayBvZiBhIGxvdCBsZXNzIGNvbnZlbmllbnQuCisgICAg
VmVjdG9yPE5hdHVyYWxMb29wPEdyYXBoPiwgND4gbV9sb29wczsKKyAgICAKKyAgICB0eXBlbmFt
ZSBHcmFwaDo6dGVtcGxhdGUgTWFwPElubmVyTW9zdExvb3BJbmRpY2VzPiBtX2lubmVyTW9zdExv
b3BJbmRpY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TmF0dXJh
bExvb3A7Cit1c2luZyBXVEY6Ok5hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Jh
bmdlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkocmV2aXNp
b24gMjE5NjAwKQorKysgU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBSYW5nZVR5cGUgUmFuZ2U7CiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBSYW5nZTo6VHlwZSBUeXBlOwogCisgICAgdHlwZWRlZiBWZWN0
b3I8UmFuZ2UsIDg+IFZlY3RvclR5cGU7CisgICAgCiAgICAgUmFuZ2VTZXQoKQogICAgIHsKICAg
ICB9CkBAIC0xMjUsOCArMTI3LDIzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG91dC5wcmlu
dCgieyIsIGxpc3REdW1wKG1fcmFuZ2VzKSwgIiwgaXNDb21wYWN0ID0gIiwgbV9pc0NvbXBhY3Qs
ICJ9Iik7CiAgICAgfQorICAgIAorICAgIHR5cGVuYW1lIFZlY3RvclR5cGU6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jhbmdlcy5iZWdpbigp
OworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBWZWN0b3JUeXBlOjpjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2VzLmVuZCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZEFsbChjb25zdCBSYW5nZVNldCYgb3RoZXIpCisgICAgeworICAg
ICAgICBmb3IgKFJhbmdlIHJhbmdlIDogb3RoZXIpCisgICAgICAgICAgICBhZGQocmFuZ2UpOwor
ICAgIH0KIAotcHJpdmF0ZToKICAgICB2b2lkIGNvbXBhY3QoKQogICAgIHsKICAgICAgICAgaWYg
KG1faXNDb21wYWN0KQpAQCAtMTY0LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faXND
b21wYWN0ID0gdHJ1ZTsKICAgICB9CiAgICAgCitwcml2YXRlOgogICAgIHN0YXRpYyBib29sIG92
ZXJsYXBzTm9uRW1wdHkoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdlJiBiKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChhLmJlZ2luKCksIGEuZW5kKCksIGIu
YmVnaW4oKSwgYi5lbmQoKSk7CkBAIC0xODcsNyArMjA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIFVJTlRfTUFYOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8UmFuZ2UsIDg+IG1fcmFu
Z2VzOworICAgIFZlY3RvclR5cGUgbV9yYW5nZXM7CiAgICAgYm9vbCBtX2lzQ29tcGFjdCB7IHRy
dWUgfTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316232</attachid>
            <date>2017-07-23 13:18:31 -0700</date>
            <delta_ts>2017-07-23 15:38:47 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100873</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDE3LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGRvIExJQ00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQWRkZWQgYSBMSUNNIHBoYXNlIHRvIEIzLiBUaGlzIHBoYXNlIGlz
IGNhbGxlZCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMsIHRvIGNvbmZvcm0gdG8gdGhlIEIzIG5h
bWluZworICAgICAgICBjb252ZW50aW9uIGZvciBwaGFzZXMgKGl0IGhhcyB0byBiZSBhbiBpbXBl
cmF0aXZlKS4gVGhlIHBoYXNlIHVzZXMgTmF0dXJhbExvb3BzIGFuZCBCYWNrd2FyZHNEb21pbmF0
b3JzLAorICAgICAgICBzbyB0aGlzIGFkZHMgdGhvc2UgYW5hbHlzZXMgdG8gQjMuIEJhY2t3YXJk
c0RvbWluYXRvcnMgd2FzIGFscmVhZHkgYXZhaWxhYmxlIGluIHRlbXBsYXRpemVkIGZvcm0uIFRo
aXMKKyAgICAgICAgY2hhbmdlIHRlbXBsYXRpemVzIERGRzo6TmF0dXJhbExvb3BzIHNvIHRoYXQg
d2UgY2FuIGp1c3QgdXNlIGl0LgorICAgICAgICAKKyAgICAgICAgVGhlIExJQ00gcGhhc2UgaXRz
ZWxmIGlzIHJlYWxseSBzaW1wbGUuIFdlIGFyZSBkZWNlbnRseSBwcmVjaXNlIHdpdGggb3VyIGhh
bmRsaW5nIG9mIGV2ZXJ5dGhpbmcgZXhjZXB0CisgICAgICAgIHRoZSByZWxhdGlvbnNoaXAgYmV0
d2VlbiBjb250cm9sIGRlcGVuZGVuY2UgYW5kIHNpZGUgZXhpdHMuCisgICAgICAgIAorICAgICAg
ICBBbHNvIGFkZGVkIGEgYnVuY2ggb2YgdGVzdHMuIFRoZSB0ZXN0cyBjb3ZlciBhbGwgY29uZGl0
aW9ucyBpbiB0aGUgTElDTSBwaGFzZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYjMvQjNCYWNrd2FyZHNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYWNrd2Fy
ZHNDRkc6OkJhY2t3YXJkc0NGRyk6CisgICAgICAgICogYjMvQjNCYWNrd2FyZHNEb21pbmF0b3Jz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFja3dhcmRzRG9taW5hdG9yczo6QmFja3dh
cmRzRG9taW5hdG9ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKToKKyAgICAgICAgKiBiMy9C
M0NGRy5oOgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5oOgorICAgICAgICAqIGIzL0IzRW5zdXJl
TG9vcFByZUhlYWRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmVuc3VyZUxvb3BQ
cmVIZWFkZXJzKToKKyAgICAgICAgKiBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJh
dGVUb0Fpcik6CisgICAgICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmhvaXN0TG9vcEludmFyaWFudFZhbHVlcyk6CisgICAg
ICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaDogQWRkZWQuCisgICAgICAgICog
YjMvQjNOYXR1cmFsTG9vcHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpOYXR1cmFsTG9v
cHM6Ok5hdHVyYWxMb29wcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6bmF0dXJhbExvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
YmFja3dhcmRzQ0ZHKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmFja3dhcmRzRG9t
aW5hdG9ycyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKiBiMy90ZXN0
YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVMb29wKToKKyAgICAgICAgKEpTQzo6
QjM6Om1ha2VBcnJheUZvckxvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlTG9vcE5v
dEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6Om9uZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6QjM6Om5vT3BGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElD
TVB1cmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlU2lkZUV4aXRzKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVyZVdyaXRlc1Bpbm5lZCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TElDTVB1cmVXcml0ZXMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc0xv
Y2FsU3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1Bpbm5lZCk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0TElDTVJlYWRzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNN
UHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVy
ZUZvaWxlZEJ5Q2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlTm90QmFja3dh
cmRzRG9taW5hbnRGb2lsZWRCeUNoaWxkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNRXhp
dHNTaWRld2F5cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdyaXRlc0xvY2FsU3RhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Xcml0ZXMpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExJQ01GZW5jZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdyaXRlc1Bpbm5lZCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnQpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50Tm90QmFja3dhcmRzRG9taW5hbnQpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50U2lkZUV4aXRzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVudEhlYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMSUNNRGVmYXVsdENhbGwpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDRkcuaDoK
KyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBk
ZmcvREZHTmF0dXJhbExvb3BzLmg6CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjpO
YXR1cmFsTG9vcHMpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpOYXR1cmFsTG9v
cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmhlYWRlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OnNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjphdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6TmF0dXJhbExvb3A6Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6Ok5hdHVyYWxMb29wOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6TmF0dXJhbExvb3A6OmluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOYXR1
cmFsTG9vcDo6aXNPdXRlck1vc3RMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpO
YXR1cmFsTG9vcDo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVy
YWxMb29wczo6bnVtTG9vcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxM
b29wczo6bG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjpo
ZWFkZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3BzOjppbm5l
ck1vc3RMb29wT2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6
aW5uZXJNb3N0T3V0ZXJMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFs
TG9vcHM6OmJlbG9uZ3NUbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExv
b3BzOjpsb29wRGVwdGgpOiBEZWxldGVkLgorCiAyMDE3LTA3LTE0ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gZGVjaWRlIGhv
dyBXZWJLaXQgeWllbGRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MywxMSArMTQzLDEzIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKICAgICBiMy9CM0VmZmVjdHMuY3Bw
CiAgICAgYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAKKyAgICBiMy9CM0Vu
c3VyZUxvb3BQcmVIZWFkZXJzLmNwcAogICAgIGIzL0IzRmVuY2VWYWx1ZS5jcHAKICAgICBiMy9C
M0ZpeFNTQS5jcHAKICAgICBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcAogICAgIGIzL0IzRnJl
cXVlbmN5Q2xhc3MuY3BwCiAgICAgYjMvQjNHZW5lcmF0ZS5jcHAKKyAgICBiMy9CM0hvaXN0TG9v
cEludmFyaWFudFZhbHVlcy5jcHAKICAgICBiMy9CM0luZmVyU3dpdGNoZXMuY3BwCiAgICAgYjMv
QjNJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvQjNLaW5kLmNwcApAQCAtMzY0LDcgKzM2Niw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAK
ICAgICBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHTXVsdGlHZXRC
eU9mZnNldERhdGEuY3BwCi0gICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZH
Tm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9E
RkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsMTMgQEAK
IAkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUE2MjgyMTg4Qzk4RDQwMDcy
QzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8qIFZNSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MEJCM0Ex
QjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93
UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVCRjE2
MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNjExRjIzMTcx
MjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLzsgfTsKKwkJMEY1
QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2MjFGMjMx
NzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCAqLzsgfTsKKwkJMEY1
QkYxNjcxRjIzQTA5ODAwMjlEOTFEIC8qIEIzQmFja3dhcmRzQ0ZHLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQg
LyogQjNCYWNrd2FyZHNDRkcuaCAqLzsgfTsKKwkJMEY1QkYxNjkxRjIzQTBBQTAwMjlEOTFEIC8q
IEIzTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFsTG9vcHMuaCAqLzsg
fTsKKwkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNkEx
RjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oICovOyB9OworCQkwRjVC
RjE3MDFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RTFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07CisJCTBGNUJGMTcx
MUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFGMjNBNUExMDAyOUQ5
MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVDRjk4MTFFOTZGMTdG
MDBDMTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87
IH07CiAJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlE
NTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJCTBGNUNGOTg1MUU5
RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyog
QWlyTG93ZXJTdGFja0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU2LDYgQEAKIAkJQTcz
MEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMDEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTczMEI2MTMxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdG
QSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayAqLzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVy
YWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsK
IAkJQTczNzgxMEUxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1
NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxp
emVkVGh1bmtKSVQuaCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5r
R2VuZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzM4NjU1MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLzsg
fTsKQEAgLTMwMjksNiArMzAzNSwxMyBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0MDA3MkM5REYgLyog
RlRMVmFsdWVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExWYWx1ZVJhbmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVl
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5o
OyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzSG9pc3RMb29w
SW52YXJpYW50VmFsdWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIxRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9vcEludmFyaWFudFZh
bHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2NjFGMjNBMDk4MDAy
OUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYWNrd2FyZHNDRkcu
aDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNUJGMTY4MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29wcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM05hdHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFsTG9vcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIz
QmFja3dhcmRzRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3YXJkc0RvbWluYXRv
cnMuaDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNw
cDsgcGF0aCA9IGIzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg7IHBhdGgg
PSBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wTWFwLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgyMUU5RDUzNzUwMEMxODY5
MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJMb3dlclN0YWNrQXJncy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVDRjk4MzFFOUQ1Mzc1
MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0YWNr
QXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU2NSw3ICs0NTc4LDYgQEAK
IAkJQTcyOTlEQTQxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldENvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMwQjYxMTEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxM
b29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsg
cGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbGl6ZWRUaHVua0pJVC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MjExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRo
dW5rR2VuZXJhdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDU4LDYg
KzU0NzAsOCBAQAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKIAkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyogQjNBdG9taWNWYWx1
ZS5jcHAgKi8sCiAJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUu
aCAqLywKKwkJCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAq
LywKKwkJCQkwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNEb21pbmF0b3Jz
LmggKi8sCiAJCQkJMEYyQzYzQUIxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5jcHAgKi8sCiAJ
CQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovLAogCQkJCTBGRUM4NEI2
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLApAQCAtNTUwOSw2ICs1NTIz
LDggQEAKIAkJCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8sCiAJ
CQkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVz
c2lvbnMuY3BwICovLAogCQkJCTBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAvKiBCM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggKi8sCisJCQkJMEY1QkYxNkUxRjIzQTVBMTAwMjlEOTFE
IC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwICovLAorCQkJCTBGNUJGMTZGMUYyM0E1QTEw
MDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggKi8sCiAJCQkJMEY2OTcxRTgxRDky
RjQyMTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEY2OTcxRTkxRDkyRjQy
MTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5oICovLAogCQkJCTBGNkI4QUUwMUM0RUZFMTcwMDk2
OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCkBAIC01NTIzLDYgKzU1MzksOCBAQAogCQkJCTBGMkM2
M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oICovLAog
CQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLywKIAkJCQkwRkVDODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCAqLywK
KwkJCQkwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuY3BwICovLAorCQkJCTBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBCM0hvaXN0TG9vcElu
dmFyaWFudFZhbHVlcy5oICovLAogCQkJCURDNjlCOTlBMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0lu
ZmVyU3dpdGNoZXMuY3BwICovLAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJFM0MwMCAvKiBCM0lu
ZmVyU3dpdGNoZXMuaCAqLywKIAkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXQuY3BwICovLApAQCAtNTU0Niw2ICs1NTY0LDcgQEAKIAkJCQkwRjMzOEUwMzFCRjAy
NzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkwRjMzOEUwNDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCiAJCQkJMEYyQzYzQzExRTY2NEE1
QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCisJCQkJMEY1QkYxNjgxRjIzQTBBQTAw
MjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEYzMzhFMDUxQkYwMjc2QzAwMTND
ODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhFMDYxQkYwMjc2QzAwMTND
ODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAw
MTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNzM3MCw3ICs3Mzg5LDYgQEAK
IAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5o
ICovLAogCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5jcHAgKi8sCiAJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0
QnlPZmZzZXREYXRhLmggKi8sCi0JCQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8sCiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2Rl
LmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLApA
QCAtODQ5MSw2ICs4NTA5LDcgQEAKIAkJCQkwRkJCNzNCQjFERUY4NjQ1MDAyQzAwOUUgLyogRGVs
ZXRlQWxsQ29kZUVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjMwM0MxRDQxOTJDRDAw
NTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyM0Ux
N0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY1QkYxNjkxRjIzQTBBQTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0
M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
Njc1LDYgKzg2OTQsNyBAQAogCQkJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1MCAvKiBERkdXb3Jr
bGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE4MUFBOTA5MTEwMEQzM0Iz
MyAvKiBEaXJlY3RBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE2MUFBOTA5
MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNUJGMTcxMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyogRGlyZWN0RXZhbENv
ZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8q
IERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENE
Njg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg4NTksMTAgKzg4NzksMTIgQEAKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2
MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVGOEJD
RTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNUJGMTZCMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0JhY2t3YXJkc0RvbWlu
YXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJ
bmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlCMTVFRDhF
NDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Mzg2QTc5
MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjVCRjE2NzFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJl
ZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0
IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNjYs
NiArOTE4OCw3IEBACiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFj
cm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENG
ODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2
NDFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFS
TXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzJBQjI0NDFEQ0Q3NUY0
MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MzY1LDcgKzEwMzg4LDYgQEAKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWlu
aWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYxNDM1MUFERjA5MDEwMEVENzky
QyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjJD
RDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3Bz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdO
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAvKiBE
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkEx
NTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEw
NzI3LDYgKzEwNzQ5LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JFQTFEQjU4
REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjVCRjE2MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEz
RTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNzkz
LDYgKzEwODE2LDcgQEAKIAkJCQkwRkQzRTQwQjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE9iamVjdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI0
QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY1QkYxNzAxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OUEwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29k
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1MDEwN0VDMEQ3MDAxM0U3QjIgLyogT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDgg
LyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0JhY2t3YXJkc0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0JhY2t3YXJkc0NGRy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0JhY2t3YXJkc0NGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcuaCIKKyNpbmNsdWRl
IDx3dGYvQmFja3dhcmRzR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEJhY2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2FyZHNHcmFwaDxDRkc+IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhQcm9jZWR1cmUmIHByb2MpCisg
ICAgICAgIDogQmFja3dhcmRzR3JhcGg8Q0ZHPihwcm9jLmNmZygpKQorICAgIHsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0RvbWluYXRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYWNrd2FyZHNEb21p
bmF0b3JzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFj
a3dhcmRzRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNDRkcuaCIKKyNpbmNs
dWRlIDx3dGYvRG9taW5hdG9ycy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9ycyA6IHB1YmxpYyBXVEY6OkRvbWluYXRvcnM8QmFj
a3dhcmRzQ0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dhcmRzRG9taW5hdG9y
cyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQmFja3dhcmRz
RG9taW5hdG9ycyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogV1RGOjpEb21pbmF0b3JzPEJh
Y2t3YXJkc0NGRz4ocHJvYy5iYWNrd2FyZHNDRkcoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMjE5
Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUq
IHZhbHVlKQogdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChWYWx1ZSogdmFsdWUp
CiB7CiAgICAgbV92YWx1ZXMuYXBwZW5kKG1fdmFsdWVzLmxhc3QoKSk7Ci0gICAgbV92YWx1ZXNb
bV92YWx1ZXMuc2l6ZSgpIC0gMV0gPSB2YWx1ZTsKKyAgICBtX3ZhbHVlc1ttX3ZhbHVlcy5zaXpl
KCkgLSAyXSA9IHZhbHVlOwogICAgIHZhbHVlLT5vd25lciA9IHRoaXM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBub2RlLT5p
bmRleCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBt
X3Byb2Muc2l6ZSgpOyB9Ci0KKyAgICAKICAgICBQb2ludGVyRHVtcDxCYXNpY0Jsb2NrPiBkdW1w
KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7IH0KIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw5IEBAIHN0cnVjdCBF
ZmZlY3RzIHsKICAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9yZGVyZWQgYXJvdW5k
IGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlzIGlzIGZsYWdnZWQK
ICAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgogICAgIGJvb2wgZmVu
Y2UgeyBmYWxzZSB9OworICAgIAorICAgIC8vIFdBUk5JTkc6IFRoZSBCMzo6aG9pc3RMb29wSW52
YXJpYW50VmFsdWVzKCkgcGhhc2UgdGhpbmtzIHRoYXQgaXQgdW5kZXJzdGFuZHMgdGhpcyBleGhh
dXN0aXZlbHkuIElmIHlvdQorICAgIC8vIGFkZCBhbnkgbmV3IGtpbmRzIG9mIHRoaW5ncyB0aGF0
IGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4sIHlvdSBzaG91bGQgY2hlY2sgdGhhdCBwaGFzZS4KIAog
ICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBlbnN1cmVMb29wUHJlSGVhZGVycyhQcm9j
ZWR1cmUmIHByb2MpCit7CisgICAgTmF0dXJhbExvb3BzJiBsb29wcyA9IHByb2MubmF0dXJhbExv
b3BzKCk7CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbG9vcHMubnVtTG9vcHMoKTsgbG9v
cEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbG9vcHMubG9v
cChsb29wSW5kZXgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBv
dXRPZkJvZHlQcmVkZWNlc3NvcnM7CisgICAgICAgIGRvdWJsZSB0b3RhbEZyZXF1ZW5jeSA9IDA7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29wLmhlYWRlcigpLT5w
cmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxvb3BzLmJlbG9uZ3NUbyhwcmVkZWNl
c3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG91dE9mQm9keVByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAg
ICAgICAgICAgdG90YWxGcmVxdWVuY3kgKz0gcHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3V0T2ZCb2R5UHJlZGVjZXNzb3JzLnNpemUo
KSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBCYXNpY0Js
b2NrKiBwcmVIZWFkZXIgPSBpbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVyKCks
IHRvdGFsRnJlcXVlbmN5KTsKKyAgICAgICAgcHJlSGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEp1bXAsIGxvb3AuaGVhZGVyKCktPmF0KDApLT5vcmlnaW4oKSk7CisgICAgICAgIHByZUhl
YWRlci0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sobG9vcC5oZWFkZXIoKSkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IG91dE9mQm9keVBy
ZWRlY2Vzc29ycykgeworICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3Io
bG9vcC5oZWFkZXIoKSwgcHJlSGVhZGVyKTsKKyAgICAgICAgICAgIHByZUhlYWRlci0+YWRkUHJl
ZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgbG9vcC5oZWFkZXIoKS0+cmVtb3Zl
UHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBs
b29wLmhlYWRlcigpLT5hZGRQcmVkZWNlc3NvcihwcmVIZWFkZXIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkgeworICAgICAgICBwcm9jLmludmFsaWRhdGVD
RkcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1cmVMb29wUHJlSGVh
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxv
b3BQcmVIZWFkZXJzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gQ3JlYXRlcyBhIHByZS1oZWFkZXIgZm9yIGFu
eSBsb29wIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gQSBsb29wIGhhcyBhIHByZS1oZWFk
ZXIgaWYgaXRzIGhlYWRlciBoYXMKKy8vIGV4YWN0bHkgb25lIHByZWRlY2Vzc29yIHRoYXQgaXNu
J3QgaW4gdGhlIGxvb3AgYm9keS4gSWYgYSBsb29wIGhlYWRlciBoYXMgbW9yZSB0aGFuIG9uZSBv
dXQtb2YtYm9keQorLy8gcHJlZGVjZXNzb3IsIHRoZW4gdGhpcyBjcmVhdGVzIGEgbmV3IGJsb2Nr
IGFuZCByZXdpcmVzIHRob3NlIHByZWRlY2Vzc29ycyB0byBpdC4KKworYm9vbCBlbnN1cmVMb29w
UHJlSGVhZGVycyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgogI2luY2x1ZGUgIkIzRml4U1NB
LmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgorI2luY2x1ZGUgIkIzSG9pc3RM
b29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVkZSAiQjNJbmZlclN3aXRjaGVzLmgiCiAjaW5j
bHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCIKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9z
LmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikgewogICAgICAgICByZWR1
Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2Nl
ZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhwcm9jZWR1cmUpOwogICAg
ICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOwogICAgICAgICBp
bmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVy
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0
TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlh
bnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0JhY2t3YXJk
c0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oIgor
I2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvUmFuZ2VTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYgcHJvYykK
K3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImhvaXN0TG9vcEludmFyaWFudFZh
bHVlcyIpOworICAgIAorICAgIGVuc3VyZUxvb3BQcmVIZWFkZXJzKHByb2MpOworICAgIAorICAg
IE5hdHVyYWxMb29wcyYgbG9vcHMgPSBwcm9jLm5hdHVyYWxMb29wcygpOworICAgIGlmICghbG9v
cHMubnVtTG9vcHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJvYy5yZXNldFZh
bHVlT3duZXJzKCk7CisgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHByb2MuZG9taW5hdG9y
cygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWluYXRvcnMgPSBwcm9j
LmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgYSByZXVzYWJsZSBCMzo6RWZmZWN0c1NldCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NzYyCisgICAgc3RydWN0IExv
b3BEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7CisgICAgICAgIGJv
b2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgd3JpdGVzUGlubmVk
IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBzaWRlRXhpdHMgeyBmYWxzZSB9OworICAgICAgICBC
YXNpY0Jsb2NrKiBwcmVIZWFkZXIgeyBudWxscHRyIH07CisgICAgfTsKKyAgICAKKyAgICBJbmRl
eE1hcDxOYXR1cmFsTG9vcCwgTG9vcERhdGE+IGRhdGEobG9vcHMubnVtTG9vcHMoKSk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29wcygpOyBsb29wSW5k
ZXgtLTspIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBsb29wcy5sb29wKGxv
b3BJbmRleCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29wLmhl
YWRlcigpLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxvb3BzLmJlbG9uZ3NU
byhwcmVkZWNlc3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZGF0YVtsb29wXS5wcmVIZWFkZXIpOworICAgICAgICAgICAg
ZGF0YVtsb29wXS5wcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAgICAgICBjb25zdCBO
YXR1cmFsTG9vcCogbG9vcCA9IGxvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAg
IGlmICghbG9vcCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gdmFsdWUtPmVm
ZmVjdHMoKTsKKyAgICAgICAgICAgIGRhdGFbKmxvb3BdLndyaXRlcy5hZGQoZWZmZWN0cy53cml0
ZXMpOworICAgICAgICAgICAgZGF0YVsqbG9vcF0ud3JpdGVzTG9jYWxTdGF0ZSB8PSBlZmZlY3Rz
LndyaXRlc0xvY2FsU3RhdGU7CisgICAgICAgICAgICBkYXRhWypsb29wXS53cml0ZXNQaW5uZWQg
fD0gZWZmZWN0cy53cml0ZXNQaW5uZWQ7CisgICAgICAgICAgICBkYXRhWypsb29wXS5zaWRlRXhp
dHMgfD0gZWZmZWN0cy5leGl0c1NpZGV3YXlzOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07
KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbG9vcHMubG9vcChsb29wSW5k
ZXgpOworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBjdXJyZW50ID0gJmxvb3A7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBsb29wcy5pbm5lck1vc3RPdXRlckxvb3AoKmN1cnJlbnQpKSB7Cisg
ICAgICAgICAgICBkYXRhWypjdXJyZW50XS53cml0ZXMuYWRkQWxsKGRhdGFbbG9vcF0ud3JpdGVz
KTsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlc0xvY2FsU3RhdGUgfD0gZGF0YVts
b29wXS53cml0ZXNMb2NhbFN0YXRlOworICAgICAgICAgICAgZGF0YVsqY3VycmVudF0ud3JpdGVz
UGlubmVkIHw9IGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkOworICAgICAgICAgICAgZGF0YVsqY3Vy
cmVudF0uc2lkZUV4aXRzIHw9IGRhdGFbbG9vcF0uc2lkZUV4aXRzOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIC8vIFByZS1vcmRl
ciBlbnN1cmVzIHRoYXQgd2UgdmlzaXQgb3VyIGRvbWluYXRvcnMgYmVmb3JlIHdlIHZpc2l0IG91
cnNlbHZlcy4gT3RoZXJ3aXNlIHdlJ2QgbWlzcyBzb21lCisgICAgLy8gaG9pc3Rpbmcgb3Bwb3J0
dW5pdGllcyBpbiBjb21wbGV4IENGR3MuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9v
cCo+IGJsb2NrTG9vcHMgPSBsb29wcy5sb29wc09mKGJsb2NrKTsKKyAgICAgICAgaWYgKGJsb2Nr
TG9vcHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICBmb3IgKFZhbHVlKiYgdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZm
ZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdl
IG5ldmVyIGhvaXN0IHdyaXRlIGVmZmVjdHMgb3IgY29udHJvbCBjb25zdHJ1Y3RzLgorICAgICAg
ICAgICAgaWYgKGVmZmVjdHMubXVzdEV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2tMb29w
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9v
cCA9ICpibG9ja0xvb3BzW2ldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJv
b2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUt
PmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JzLmRvbWlu
YXRlcyhjaGlsZC0+b3duZXIsIGRhdGFbbG9vcF0ucHJlSGVhZGVyKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghb2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChlZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFiYWNrd2FyZHNEb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywg
ZGF0YVtsb29wXS5wcmVIZWFkZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyBzdXBlciBjb25zZXJ2YXRpdmUuIEluIHJlYWxpdHksIHdlIGp1c3QgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBhcmVuJ3QgYW55IHNpZGUg
ZXhpdHMgYmV0d2VlbiBoZXJlIGFuZCB0aGUgcHJlLWhlYWRlciBhY2NvcmRpbmcgdG8gYmFja3dh
cmRzIHNlYXJjaC4KKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NDc2MworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVts
b29wXS5zaWRlRXhpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGVmZmVj
dHMucmVhZHNQaW5uZWQgJiYgZGF0YVtsb29wXS53cml0ZXNQaW5uZWQpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChl
ZmZlY3RzLnJlYWRzTG9jYWxTdGF0ZSAmJiBkYXRhW2xvb3BdLndyaXRlc0xvY2FsU3RhdGUpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChkYXRhW2xvb3BdLndyaXRlcy5vdmVybGFwcyhlZmZlY3RzLnJlYWRzKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZGF0YVtsb29wXS5wcmVIZWFkZXItPmFwcGVuZE5vblRlcm1pbmFsKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHByb2MuYWRkPFZhbHVlPihOb3AsIFZvaWQsIHZhbHVlLT5v
cmlnaW4oKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50
VmFsdWVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9p
c3RMb29wSW52YXJpYW50VmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgZG9lcyBsb29wLWludmFyaWFudCBjb2Rl
IG1vdGlvbiAoTElDTSkuIEl0IGNhbiBob2lzdCBwdXJlIHZhbHVlcyBhcyB3ZWxsIGFzIHJlYWRz
IG9mIHN0YXRlIHRoYXQgaXNuJ3QKKy8vIG1vZGlmaWVkIGluc2lkZSB0aGUgbG9vcC4KKworYm9v
bCBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNEb21pbmF0
b3JzLmgiCisjaW5jbHVkZSA8d3RmL05hdHVyYWxMb29wcy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordHlwZWRlZiBXVEY6Ok5hdHVyYWxMb29wPENGRz4gTmF0dXJhbExv
b3A7CisKK2NsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxDRkc+
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYXR1cmFsTG9vcHMpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5hdHVyYWxMb29wcyhQcm9jZWR1cmUmIHBy
b2MpCisgICAgICAgIDogV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPihwcm9jLmNmZygpLCBwcm9jLmRv
bWluYXRvcnMoKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwx
NSBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQjNCYWNrd2FyZHNDRkcuaCIKKyNpbmNsdWRlICJCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCIK
ICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
VXRpbHMuaCIKICNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJCM0NGRy5o
IgogI2luY2x1ZGUgIkIzRGF0YVNlY3Rpb24uaCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIK
KyNpbmNsdWRlICJCM05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0
cy5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdC5o
IgpAQCAtMjAwLDYgKzIwMyw5IEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFJlYWNoYWJpbGl0eSgp
CiB2b2lkIFByb2NlZHVyZTo6aW52YWxpZGF0ZUNGRygpCiB7CiAgICAgbV9kb21pbmF0b3JzID0g
bnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7CisgICAgbV9iYWNrd2FyZHND
RkcgPSBudWxscHRyOworICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IG51bGxwdHI7CiB9CiAK
IHZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0yOTEsNiAr
Mjk3LDI3IEBAIERvbWluYXRvcnMmIFByb2NlZHVyZTo6ZG9taW5hdG9ycygpCiAgICAgcmV0dXJu
ICptX2RvbWluYXRvcnM7CiB9CiAKK05hdHVyYWxMb29wcyYgUHJvY2VkdXJlOjpuYXR1cmFsTG9v
cHMoKQoreworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3Bz
ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1f
bmF0dXJhbExvb3BzOworfQorCitCYWNrd2FyZHNDRkcmIFByb2NlZHVyZTo6YmFja3dhcmRzQ0ZH
KCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzQ0ZHKQorICAgICAgICBtX2JhY2t3YXJkc0NGRyA9
IHN0ZDo6bWFrZV91bmlxdWU8QmFja3dhcmRzQ0ZHPigqdGhpcyk7CisgICAgcmV0dXJuICptX2Jh
Y2t3YXJkc0NGRzsKK30KKworQmFja3dhcmRzRG9taW5hdG9ycyYgUHJvY2VkdXJlOjpiYWNrd2Fy
ZHNEb21pbmF0b3JzKCkKK3sKKyAgICBpZiAoIW1fYmFja3dhcmRzRG9taW5hdG9ycykKKyAgICAg
ICAgbV9iYWNrd2FyZHNEb21pbmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNrd2FyZHNEb21p
bmF0b3JzPigqdGhpcyk7CisgICAgcmV0dXJuICptX2JhY2t3YXJkc0RvbWluYXRvcnM7Cit9CisK
IHZvaWQgUHJvY2VkdXJlOjphZGRGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmIGNvbnN0YW50
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjE5Nzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEwICs0OCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAorY2xh
c3MgQmFja3dhcmRzQ0ZHOworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNsYXNzIEJhc2lj
QmxvY2s7CiBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKIGNsYXNzIENGRzsKIGNsYXNzIERvbWlu
YXRvcnM7CitjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBTdGFja1Nsb3Q7CiBjbGFzcyBWYWx1
ZTsKIGNsYXNzIFZhcmlhYmxlOwpAQCAtMTc1LDYgKzE3OCw5IEBAIHB1YmxpYzoKICAgICBDRkcm
IGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQogCiAgICAgRG9taW5hdG9ycyYgZG9taW5h
dG9ycygpOworICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzKCk7CisgICAgQmFja3dhcmRz
Q0ZHJiBiYWNrd2FyZHNDRkcoKTsKKyAgICBCYWNrd2FyZHNEb21pbmF0b3JzJiBiYWNrd2FyZHNE
b21pbmF0b3JzKCk7CiAKICAgICB2b2lkIGFkZEZhc3RDb25zdGFudChjb25zdCBWYWx1ZUtleSYp
OwogICAgIGJvb2wgaXNGYXN0Q29uc3RhbnQoY29uc3QgVmFsdWVLZXkmKTsKQEAgLTI3MSw2ICsy
NzcsOSBAQCBwcml2YXRlOgogICAgIFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+IG1fdmFsdWVzOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21p
bmF0b3JzPiBtX2RvbWluYXRvcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5hdHVyYWxMb29wcz4g
bV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNr
d2FyZHNDRkc7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFj
a3dhcmRzRG9taW5hdG9yczsKICAgICBIYXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RDb25zdGFudHM7
CiAgICAgdW5zaWduZWQgbV9udW1FbnRyeXBvaW50cyB7IDEgfTsKICAgICBjb25zdCBjaGFyKiBt
X2xhc3RQaGFzZU5hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2
aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NTkyLDYgKzE0NTkyLDU1OSBAQCB2b2lkIHRlc3RPcHRpbWl6ZU1h
dGVyaWFsaXphdGlvbigpCiAgICAgQ0hFQ0soZm91bmQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgordm9pZCBnZW5lcmF0ZUxvb3AoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbG9vcCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbmQgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICBVcHNpbG9uVmFsdWUqIGluaXRpYWxJbmRleCA9IHJvb3Qt
PmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICByb290LT5zZXRTdWNj
ZXNzb3JzKGxvb3ApOworICAgIAorICAgIFZhbHVlKiBpbmRleCA9IGxvb3AtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgUGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIGluaXRpYWxJbmRleC0+c2V0
UGhpKGluZGV4KTsKKyAgICAKKyAgICBWYWx1ZSogb25lID0gZnVuYyhsb29wLCBpbmRleCk7Cisg
ICAgCisgICAgVmFsdWUqIG5leHRJbmRleCA9IGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWRkLCBPcmlnaW4oKSwgaW5kZXgsIG9uZSk7CisgICAgVXBzaWxvblZhbHVlKiBsb29wSW5kZXgg
PSBsb29wLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbmV4dEluZGV4
KTsKKyAgICBsb29wSW5kZXgtPnNldFBoaShpbmRleCk7CisgICAgbG9vcC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBPcmlnaW4oKSwKKyAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwgbmV4
dEluZGV4LAorICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDEwMCkpKTsKKyAgICBsb29wLT5zZXRTdWNjZXNzb3JzKGxvb3AsIGVuZCk7Cisg
ICAgCisgICAgZW5kLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwor
fQorCitzdGQ6OmFycmF5PGludCwgMTAwPiBtYWtlQXJyYXlGb3JMb29wcygpCit7CisgICAgc3Rk
OjphcnJheTxpbnQsIDEwMD4gcmVzdWx0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdFtpXSA9IGkgJiAxOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGdlbmVyYXRlTG9v
cE5vdEJhY2t3YXJkc0RvbWluYW50KFByb2NlZHVyZSYgcHJvYywgc3RkOjphcnJheTxpbnQsIDEw
MD4mIGFycmF5LCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcEhlYWRlciA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29wQ2FsbCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBsb29wRm9vdGVyID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IGVuZCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFVwc2lsb25WYWx1ZSogaW5pdGlhbEluZGV4
ID0gcm9vdC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdpbigp
LCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworICAg
IC8vIElmIHlvdSBsb29rIGNhcmVmdWxseSwgeW91J2xsIG5vdGljZSB0aGF0IHRoaXMgaXMgYW4g
ZXh0cmVtZWx5IHNuZWFreSB1c2Ugb2YgVXBzaWxvbiB0aGF0IGRlbW9uc3RyYXRlcworICAgIC8v
IHRoZSBleHRlbnQgdG8gd2hpY2ggb3VyIFNTQSBpcyBkaWZmZXJlbnQgZnJvbSBub3JtYWwtcGVy
c29uIFNTQS4KKyAgICBVcHNpbG9uVmFsdWUqIGRlZmF1bHRPbmUgPSByb290LT5hcHBlbmROZXc8
VXBzaWxvblZhbHVlPigKKyAgICAgICAgcHJvYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAgcm9vdC0+c2V0U3VjY2Vzc29ycyhsb29w
SGVhZGVyKTsKKyAgICAKKyAgICBWYWx1ZSogaW5kZXggPSBsb29wSGVhZGVyLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBpbml0aWFsSW5kZXgtPnNl
dFBoaShpbmRleCk7CisgICAgCisgICAgLy8gaWYgKGFycmF5W2luZGV4XSkKKyAgICBsb29wSGVh
ZGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigpLAor
ICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIGxvb3BIZWFkZXItPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgJmFycmF5KSwKKyAgICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBNdWwsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpFeHQzMiwg
T3JpZ2luKCksIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSkpKSkpOworICAg
IGxvb3BIZWFkZXItPnNldFN1Y2Nlc3NvcnMobG9vcENhbGwsIGxvb3BGb290ZXIpOworICAgIAor
ICAgIFZhbHVlKiBmdW5jdGlvbkNhbGwgPSBmdW5jKGxvb3BDYWxsLCBpbmRleCk7CisgICAgVXBz
aWxvblZhbHVlKiBvbmVGcm9tRnVuY3Rpb24gPSBsb29wQ2FsbC0+YXBwZW5kTmV3PFVwc2lsb25W
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGZ1bmN0aW9uQ2FsbCk7CisgICAgbG9vcENhbGwtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCkpOworICAgIGxvb3BDYWxsLT5zZXRTdWNj
ZXNzb3JzKGxvb3BGb290ZXIpOworICAgIAorICAgIFZhbHVlKiBvbmUgPSBsb29wRm9vdGVyLT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBkZWZhdWx0
T25lLT5zZXRQaGkob25lKTsKKyAgICBvbmVGcm9tRnVuY3Rpb24tPnNldFBoaShvbmUpOworICAg
IFZhbHVlKiBuZXh0SW5kZXggPSBsb29wRm9vdGVyLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFk
ZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAgIFVwc2lsb25WYWx1ZSogbG9vcEluZGV4ID0g
bG9vcEZvb3Rlci0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCksIG5leHRJ
bmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIGxvb3BGb290ZXItPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAg
IGxvb3BGb290ZXItPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMZXNzVGhh
biwgT3JpZ2luKCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3BGb290ZXItPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcEZvb3Rlci0+
c2V0U3VjY2Vzc29ycyhsb29wSGVhZGVyLCBlbmQpOworICAgIAorICAgIGVuZC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKK30KKworc3RhdGljIGludCBvbmVGdW5j
dGlvbihpbnQqIGNhbGxDb3VudCkKK3sKKyAgICAoKmNhbGxDb3VudCkrKzsKKyAgICByZXR1cm4g
MTsKK30KKworc3RhdGljIHZvaWQgbm9PcEZ1bmN0aW9uKCkKK3sKK30KKwordm9pZCB0ZXN0TElD
TVB1cmUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAg
ICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVl
KiB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAg
ICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAorICAg
ICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3Vu
dCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBD
SEVDS19FUShjYWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVTaWRlRXhpdHMo
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJv
YywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7Cisg
ICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAg
ICBlZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBl
ZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisKKyAg
ICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisgICAgICAgICAg
ICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsK
KyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VR
KGNhbGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZVdyaXRlc1Bpbm5lZCgpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAor
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAg
ICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZmZWN0
cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkpOworCisgICAgICAg
ICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAg
IHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9j
YXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAg
Y29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxs
Q291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVXcml0ZXMoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZd
IChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZl
Y3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndyaXRl
cyA9IEhlYXBSYW5nZSg2MzQ3OSk7CisgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMsCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKworICAgICAgICAgICAg
cmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9j
LCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBp
bGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50
LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01SZWFkc0xvY2FsU3RhdGUoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZd
IChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZl
Y3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRz
TG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0
cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
YWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7
CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsgLy8gV2UnbGwgZmFpbCB0byBob2lzdCBi
ZWNhdXNlIHRoZSBsb29wIGhhcyBVcHNpbG9ucy4KK30KKwordm9pZCB0ZXN0TElDTVJlYWRzUGlu
bmVkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAg
IHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSog
eworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAg
ICAgICAgZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9v
cC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBP
cmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24p
KSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAK
KyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJv
YywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQg
dGVzdExJQ01SZWFkcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29w
KAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikg
LT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKKyAgICAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxl
QW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwg
MXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9yTG9vcHMoKTsK
KyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAgcHJvYywgYXJy
YXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogewor
ICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAw
OworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tf
RVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJlRm9pbGVkQnlDaGlsZCgp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9j
LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKiBpbmRleCkgLT4gVmFsdWUq
IHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisgICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIGluZGV4KTsKKyAgICAgICAgfSk7CisgICAg
CisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHBy
b2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3Zv
aWQgdGVzdExJQ01QdXJlTm90QmFja3dhcmRzRG9taW5hbnRGb2lsZWRCeUNoaWxkKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9yTG9vcHMoKTsK
KyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAgcHJvYywgYXJy
YXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqIGluZGV4KSAtPiBWYWx1
ZSogeworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAg
ICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAg
ICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBs
b29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICAgICAgaW5kZXgpOworICAgICAgICB9KTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4o
cHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCA1MHUpOworfQorCit2
b2lkIHRlc3RMSUNNRXhpdHNTaWRld2F5cygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
Z2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxv
b3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAg
ICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAg
IGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2Fs
bENvdW50LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTVdyaXRlc0xvY2FsU3RhdGUoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAg
ICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAg
ICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZl
Y3RzLndyaXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2lu
KCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
dW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZj
YWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVz
dExJQ01Xcml0ZXMoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgK
KyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+
IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgICAgICBlZmZlY3RzLndyaXRlcyA9IEhlYXBSYW5nZSg2NjYpOworICAgICAgICAg
ICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBw
cm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5k
UnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAw
dSk7Cit9CisKK3ZvaWQgdGVzdExJQ01GZW5jZSgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9
IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMuZmVuY2UgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21w
aWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3Vu
dCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01Xcml0ZXNQaW5uZWQoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZd
IChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZl
Y3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywK
KyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAg
ICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxs
Q291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7Cisg
ICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTUNvbnRyb2xE
ZXBlbmRlbnQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAg
ICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZh
bHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgICAgICBlZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9j
LCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9u
ZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAg
fSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVu
PHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMXUpOwor
fQorCit2b2lkIHRlc3RMSUNNQ29udHJvbERlcGVuZGVudE5vdEJhY2t3YXJkc0RvbWluYW50KCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBhdXRvIGFycmF5ID0gbWFrZUFycmF5Rm9yTG9v
cHMoKTsKKyAgICBnZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudCgKKyAgICAgICAgcHJv
YywgYXJyYXksCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1
ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
ICAgICAgICAgZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywg
SW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVG
dW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0p
OworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2
b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDUwdSk7Cit9
CisKK3ZvaWQgdGVzdExJQ01Db250cm9sRGVwZW5kZW50U2lkZUV4aXRzKCkKK3sKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsm
XSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZm
ZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy5leGl0
c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAg
ICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy5j
b250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBl
ZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2ln
bmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENv
dW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNN
UmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdl
bmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29w
LCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7Cisg
ICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAg
cHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG5vT3BGdW5jdGlvbikpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVm
ZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBj
b21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxD
b3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVudEhlYXBz
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHBy
b2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogewor
ICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAg
ICAgZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjQzNik7CisgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2lu
KCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAg
ICAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2UoNDg4Nik7CisgICAgICAgICAgICBy
ZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2Ms
IEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25l
RnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48
dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7Cit9
CisKK3ZvaWQgdGVzdExJQ01SZWFkc1dyaXRlc092ZXJsYXBwaW5nSGVhcHMoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBF
ZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLndy
aXRlcyA9IEhlYXBSYW5nZSg2NDM2LCA3NDQ1OCk7CisgICAgICAgICAgICBsb29wLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVm
ZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAg
ICAgIGVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2UoNDg4NjQsIDc4MjM5KTsKKyAgICAgICAgICAg
IHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJv
YywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihv
bmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAg
IH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1
bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUp
OworfQorCit2b2lkIHRlc3RMSUNNRGVmYXVsdENhbGwoKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Js
b2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+
YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3Vu
dCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogewpAQCAtMTcxMjgsNyArMTc2ODEsMjkg
QEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0TG9hZEJhc2VJbmRl
eFNoaWZ0MigpKTsKICAgICBSVU4odGVzdExvYWRCYXNlSW5kZXhTaGlmdDMyKCkpOwogICAgIFJV
Tih0ZXN0T3B0aW1pemVNYXRlcmlhbGl6YXRpb24oKSk7Ci0gICAgCisgICAgUlVOKHRlc3RMSUNN
UHVyZSgpKTsKKyAgICBSVU4odGVzdExJQ01QdXJlU2lkZUV4aXRzKCkpOworICAgIFJVTih0ZXN0
TElDTVB1cmVXcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUHVyZVdyaXRlcygpKTsK
KyAgICBSVU4odGVzdExJQ01SZWFkc0xvY2FsU3RhdGUoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVh
ZHNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHMoKSk7CisgICAgUlVOKHRlc3RMSUNN
UHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVGb2lsZWRC
eUNoaWxkKCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudEZvaWxl
ZEJ5Q2hpbGQoKSk7CisgICAgUlVOKHRlc3RMSUNNRXhpdHNTaWRld2F5cygpKTsKKyAgICBSVU4o
dGVzdExJQ01Xcml0ZXNMb2NhbFN0YXRlKCkpOworICAgIFJVTih0ZXN0TElDTVdyaXRlcygpKTsK
KyAgICBSVU4odGVzdExJQ01Xcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNRmVuY2Uo
KSk7CisgICAgUlVOKHRlc3RMSUNNQ29udHJvbERlcGVuZGVudCgpKTsKKyAgICBSVU4odGVzdExJ
Q01Db250cm9sRGVwZW5kZW50Tm90QmFja3dhcmRzRG9taW5hbnQoKSk7CisgICAgUlVOKHRlc3RM
SUNNQ29udHJvbERlcGVuZGVudFNpZGVFeGl0cygpKTsKKyAgICBSVU4odGVzdExJQ01SZWFkc1Bp
bm5lZFdyaXRlc1Bpbm5lZCgpKTsKKyAgICBSVU4odGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVu
dEhlYXBzKCkpOworICAgIFJVTih0ZXN0TElDTVJlYWRzV3JpdGVzT3ZlcmxhcHBpbmdIZWFwcygp
KTsKKyAgICBSVU4odGVzdExJQ01EZWZhdWx0Q2FsbCgpKTsKKwogICAgIFJVTih0ZXN0QXRvbWlj
V2Vha0NBUzxpbnQ4X3Q+KCkpOwogICAgIFJVTih0ZXN0QXRvbWljV2Vha0NBUzxpbnQxNl90Pigp
KTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8aW50MzJfdD4oKSk7CkBAIC0xNzE4MSw3ICsx
Nzc1Niw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEZsb2F0
RXF1YWxPclVub3JkZXJlZEZvbGRpbmcoKSk7CiAgICAgUlVOKHRlc3RGbG9hdEVxdWFsT3JVbm9y
ZGVyZWRGb2xkaW5nTmFOKCkpOwogICAgIFJVTih0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRG9u
dEZvbGQoKSk7Ci0KKyAgICAKICAgICBSVU4odGVzdFNodWZmbGVEb2VzbnRUcmFzaENhbGxlZVNh
dmVzKCkpOwogCiAgICAgaWYgKGlzWDg2KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDkgKzIy
OSw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBmbG9h
dCBleGVjdXRpb25Db3VudDsKICAgICAKICAgICAvLyBUaGVzZSBmaWVsZHMgYXJlIHJlc2VydmVk
IGZvciBOYXR1cmFsTG9vcHMuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mSW5u
ZXJNb3N0TG9vcEluZGljZXMgPSAyOwotICAgIHVuc2lnbmVkIGlubmVyTW9zdExvb3BJbmRpY2Vz
W251bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXNdOwotCisgICAgCiAgICAgc3RydWN0IFNTQURh
dGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyByZXR1
cm4gbm9kZS0+aW5kZXg7IH0KICAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhcGguYmxvY2soaW5kZXgpOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBj
b25zdCB7IHJldHVybiBtX2dyYXBoLm51bUJsb2NrcygpOyB9Ci0KKyAgICAKICAgICBQb2ludGVy
RHVtcDxCYXNpY0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1
bXAobm9kZSk7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkocmV2
aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9v
cHMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRGR05hdHVyYWxMb29wcy5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRl
ICJERkdEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgTmF0dXJhbExvb3A6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIltIZWFkZXI6ICIsICpoZWFkZXIoKSwgIiwg
Qm9keToiKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ib2R5LnNpemUoKTsgKytp
KQotICAgICAgICBvdXQucHJpbnQoIiAiLCAqbV9ib2R5W2ldKTsKLSAgICBvdXQucHJpbnQoIl0i
KTsKLX0KLQotTmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQotewotICAg
IEFTU0VSVChncmFwaC5tX2RvbWluYXRvcnMpOwotCi0gICAgLy8gSW1wbGVtZW50IHRoZSBjbGFz
c2ljIGRvbWluYXRvci1iYXNlZCBuYXR1cmFsIGxvb3AgZmluZGVyLiBUaGUgZmlyc3QKLSAgICAv
LyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBk
b21pbmF0ZXMgQS4KLSAgICAvLyBUaGVuIEIgaXMgYSBsb29wIGhlYWRlciBhbmQgQSBpcyBhIGJh
Y2t3YXJkIGJyYW5jaGluZyBibG9jay4gV2Ugd2lsbAotICAgIC8vIHRoZW4gYWNjdW11bGF0ZSwg
Zm9yIGVhY2ggbG9vcCBoZWFkZXIsIG11bHRpcGxlIGJhY2t3YXJkIGJyYW5jaGluZwotICAgIC8v
IGJsb2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhlIGJhY2t3YXJk
IGJyYW5jaGluZwotICAgIC8vIGJsb2NrcyB0byB0aGVpciBsb29wIGhlYWRlcnMsIHdoaWNoIGdp
dmVzIHVzIGFsbCBvZiB0aGUgYmxvY2tzIGluIHRoZQotICAgIC8vIGxvb3AgYm9keS4KLSAgICAK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHZl
cmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiRG9taW5hdG9yczpcbiIpOwotICAgICAgICBncmFw
aC5tX2RvbWluYXRvcnMtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9sb29wcy5zaHJpbmsoMCk7Ci0gICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGkpOwotICAgICAgICAgICAgaWYgKCFncmFw
aC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhzdWNjZXNzb3IsIGJsb2NrKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fbG9vcHNbal0uaGVhZGVyKCkgPT0gc3VjY2Vzc29yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbG9vcHNbal0uYWRkQmxvY2soYmxvY2spOwotICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIE5hdHVyYWxMb29wIGxvb3Aoc3VjY2Vzc29yLCBt
X2xvb3BzLnNpemUoKSk7Ci0gICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrKTsKLSAgICAg
ICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3ApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIsICp0aGlz
LCAiXG4iKTsKLSAgICAKLSAgICBGYXN0Qml0VmVjdG9yIHNlZW5CbG9ja3M7Ci0gICAgVmVjdG9y
PEJhc2ljQmxvY2sqLCA0PiBibG9ja1dvcmtsaXN0OwotICAgIHNlZW5CbG9ja3MucmVzaXplKGdy
YXBoLm51bUJsb2NrcygpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNp
emUoKTsgaS0tOykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbaV07Ci0g
ICAgICAgIAotICAgICAgICBzZWVuQmxvY2tzLmNsZWFyQWxsKCk7Ci0gICAgICAgIEFTU0VSVChi
bG9ja1dvcmtsaXN0LmlzRW1wdHkoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIpOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTspIHsK
LSAgICAgICAgICAgIHNlZW5CbG9ja3NbbG9vcFtqXS0+aW5kZXhdID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKGxvb3Bbal0pOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IERlYWxpbmcgd2l0aCAiLCAqYmxvY2ssICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoYmxvY2sgPT0gbG9vcC5oZWFkZXIoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07Ci0gICAgICAgICAgICAgICAgaWYgKHNl
ZW5CbG9ja3NbcHJlZGVjZXNzb3ItPmluZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVk
ZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNz
b3IpOwotICAgICAgICAgICAgICAgIHNlZW5CbG9ja3NbcHJlZGVjZXNzb3ItPmluZGV4XSA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGaWd1cmUgb3V0
IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4KLSAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlczsgaS0tOykKLSAg
ICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1tpXSA9IFVJTlRfTUFYOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fbG9vcHMuc2l6ZSgpOyBsb29wSW5k
ZXgtLTspIHsKLSAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2xvb3BJbmRleF07
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXhJbkxvb3AgPSBsb29w
LnNpemUoKTsgYmxvY2tJbmRleEluTG9vcC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBsb29wW2Jsb2NrSW5kZXhJbkxvb3BdOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RM
b29wSW5kaWNlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdGhpc0luZGV4ID0g
YmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzW2ldOwotICAgICAgICAgICAgICAgIGlmICh0aGlz
SW5kZXggPT0gVUlOVF9NQVggfHwgbG9vcC5zaXplKCkgPCBtX2xvb3BzW3RoaXNJbmRleF0uc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9yKAotICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzLCBCYXNpY0Js
b2NrOjpudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgbG9vcEluZGV4LCBpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5v
dyBlYWNoIGJsb2NrIGtub3dzIGl0cyBpbm5lci1tb3N0IGxvb3AgYW5kIGl0cyBuZXh0LXRvLWlu
bmVyLW1vc3QgbG9vcC4gVXNlCi0gICAgLy8gdGhpcyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50
aW5nLgotICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tpXTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQobG9vcC5oZWFkZXIoKS0+aW5uZXJNb3N0TG9vcEluZGljZXNbMF0gPT0gaSk7Ci0gICAgICAg
IAotICAgICAgICBsb29wLm1fb3V0ZXJMb29wSW5kZXggPSBsb29wLmhlYWRlcigpLT5pbm5lck1v
c3RMb29wSW5kaWNlc1sxXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVk
KCkpIHsKLSAgICAgICAgLy8gRG8gc29tZSBzZWxmLXZlcmlmaWNhdGlvbiB0aGF0IHdlJ3ZlIGRv
bmUgc29tZSBvZiB0aGlzIGNvcnJlY3RseS4KLSAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0g
ICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBzaW1wbGVMb29w
c09mOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3Bz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5z
KGJsb2NrKSkKLSAgICAgICAgICAgICAgICAgICAgc2ltcGxlTG9vcHNPZi5hcHBlbmQoJm1fbG9v
cHNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8
Y29uc3QgTmF0dXJhbExvb3AqPiBmYW5jeUxvb3BzT2YgPSBsb29wc09mKGJsb2NrKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3RkOjpzb3J0KHNpbXBsZUxvb3BzT2YuYmVnaW4oKSwgc2lt
cGxlTG9vcHNPZi5lbmQoKSk7Ci0gICAgICAgICAgICBzdGQ6OnNvcnQoZmFuY3lMb29wc09mLmJl
Z2luKCksIGZhbmN5TG9vcHNPZi5lbmQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNpbXBsZUxvb3BzT2YgPT0gZmFuY3lMb29wc09mKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUmVzdWx0czog
IiwgKnRoaXMsICJcbiIpOwotfQotCi1OYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMoKSB7IH0K
LQotVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjpsb29wc09mKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAotewotICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IHJl
c3VsdDsKLSAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9m
KGJsb2NrKTsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQobG9vcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBOYXR1
cmFsTG9vcHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
Ik5hdHVyYWxMb29wczp7Iik7Ci0gICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2xvb3BzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG1fbG9vcHNbaV0pOwotICAgIG91dC5wcmludCgifSIpOwotfQotCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAyMTk3
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDE0MiArMjcsMjMgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi1jbGFzcyBOYXR1cmFsTG9vcHM7Cit0eXBlZGVmIFdURjo6TmF0dXJhbExvb3A8Q0ZH
PiBOYXR1cmFsTG9vcDsKIAotY2xhc3MgTmF0dXJhbExvb3AgewotcHVibGljOgotICAgIE5hdHVy
YWxMb29wKCkKLSAgICAgICAgOiBtX2hlYWRlcigwKQotICAgICAgICAsIG1fb3V0ZXJMb29wSW5k
ZXgoVUlOVF9NQVgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBOYXR1cmFsTG9vcChCYXNpY0Js
b2NrKiBoZWFkZXIsIHVuc2lnbmVkIGluZGV4KQotICAgICAgICA6IG1faGVhZGVyKGhlYWRlcikK
LSAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRfTUFYKQotICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBoZWFkZXIoKSBjb25z
dCB7IHJldHVybiBtX2hlYWRlcjsgfQotICAgIAotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9Ci0gICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9Ci0gICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUg
c2xvd2VyLCBidXQgc2ltcGxlciwgd2F5IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8K
LSAgICAvLyBhIG5hdHVyYWwgbG9vcC4gSXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6
OmJlbG9uZ3NUbygpLCB3aGljaAotICAgIC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0
aGVyIHRoYW4gTyhsb29wIHNpemUpLiBMb29wIGRlcHRoIGlzCi0gICAgLy8gYWxtb3N0IGFsd2F5
cyBzbWFsbGVyIHRoYW4gbG9vcCBzaXplLiBBICpsb3QqIHNtYWxsZXIuCi0gICAgYm9vbCBjb250
YWlucyhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fYm9keS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX2JvZHlbaV0g
PT0gYmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKGJsb2NrICE9IGhlYWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBjb250YWlu
ZWQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgaW5kZXggb2Yg
dGhpcyBsb29wIGluIE5hdHVyYWxMb29wcy4KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KLSAgICAKLSAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVg7IH0KLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5h
dHVyYWxMb29wczsKLSAgICAKLSAgICB2b2lkIGFkZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSB7
IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogbV9oZWFkZXI7
Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBtX2JvZHk7Ci0gICAgdW5zaWduZWQgbV9vdXRl
ckxvb3BJbmRleDsKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotfTsKLQotY2xhc3MgTmF0dXJhbExv
b3BzIHsKK2NsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBXVEY6Ok5hdHVyYWxMb29wczxDRkc+
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYXR1cmFsTG9vcHMpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE5hdHVyYWxMb29wcyhHcmFwaCYpOwotICAg
IH5OYXR1cmFsTG9vcHMoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1Mb29wcygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9sb29wcy5zaXplKCk7Ci0gICAgfQotICAgIGNvbnN0IE5h
dHVyYWxMb29wJiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9sb29wc1tpXTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIGVpdGhlciBudWxsIGlmIHRo
ZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKLSAgICAvLyBsb29wIGl0IGJlbG9u
Z3MgdG8uCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAotICAgIHsKLSAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1v
c3RMb29wT2YoYmxvY2spOwotICAgICAgICBpZiAoIWxvb3ApCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2NrKQotICAgICAgICAgICAgcmV0
dXJuIGxvb3A7Ci0gICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBm
b3IgKDsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9z
dExvb3BPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gYmxvY2stPmlubmVyTW9zdExvb3BJbmRpY2VzWzBdOwotICAgICAgICBpZiAoaW5k
ZXggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZt
X2xvb3BzW2luZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVy
TW9zdE91dGVyTG9vcChjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmIChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRlckxvb3BJbmRleF07
Ci0gICAgfQotICAgIAotICAgIGJvb2wgYmVsb25nc1RvKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25z
dCBOYXR1cmFsTG9vcCYgY2FuZGlkYXRlTG9vcCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEl0
J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0J3Mg
c21hbGwuCi0gICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCi0gICAgICAgICAg
ICByZXR1cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsg
bG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpIHsKLSAgICAgICAgICAgIGlm
IChsb29wID09ICZjYW5kaWRhdGVMb29wKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWdu
ZWQgbG9vcERlcHRoKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIE5hdHVyYWxMb29wcyhH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogV1RGOjpOYXR1cmFsTG9vcHM8Q0ZHPigqZ3JhcGgubV9j
ZmcsIGdyYXBoLmVuc3VyZURvbWluYXRvcnMoKSwgdmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFs
TG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1v
c3RPdXRlckxvb3AoKmxvb3ApKQotICAgICAgICAgICAgZGVwdGgrKzsKLSAgICAgICAgcmV0dXJu
IGRlcHRoOwogICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm4gdGhlIGluZGljZXMgb2YgYWxsIGxv
b3BzIHRoaXMgYmVsb25ncyB0by4KLSAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29w
c09mKEJhc2ljQmxvY2sqKSBjb25zdDsKLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotcHJpdmF0ZToKLSAgICAvLyBJZiB3ZSBldmVyIGhhZCBhIHNjYWxhYmlsaXR5IHByb2Js
ZW0gaW4gb3VyIG5hdHVyYWwgbG9vcCBmaW5kZXIsIHdlIGNvdWxkCi0gICAgLy8gdXNlIHNvbWUg
SGFzaE1hcCdzIGhlcmUuIEJ1dCBpdCBqdXN0IGZlZWxzIGEgaGVjayBvZiBhIGxvdCBsZXNzIGNv
bnZlbmllbnQuCi0gICAgVmVjdG9yPE5hdHVyYWxMb29wLCA0PiBtX2xvb3BzOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTctMDct
MjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBCMyBzaG91bGQg
ZG8gTElDTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc0NzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBNb3ZlZCBERkc6Ok5hdHVyYWxMb29wcyB0byBXVEYuIFRoZSBuZXcgdGVtcGxhdGl6
ZWQgTmF0dXJhbExvb3BzPD4gdXNlcyB0aGUgc2FtZSBHcmFwaCBhYnN0cmFjdGlvbiBhcworICAg
ICAgICBEb21pbmF0b3JzPD4uIFRoaXMgYWxsb3dzIHVzIHRvIGFkZCBhIEIzOjpOYXR1cmFsTG9v
cHMgZm9yIGZyZWUuCisgICAgICAgIAorICAgICAgICBBbHNvIG1hZGUgc21hbGwgdHdlYWtzIHRv
IFJhbmdlU2V0LCB3aGljaCB0aGUgTElDTSB1c2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9Eb21pbmF0b3JzLmg6CisgICAgICAgICogd3RmL05hdHVyYWxMb29wcy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6Ok5hdHVyYWxMb29wKToKKyAgICAgICAgKFdU
Rjo6TmF0dXJhbExvb3A6OmdyYXBoKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmhlYWRl
cik6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpzaXplKToKKyAgICAgICAgKFdURjo6TmF0
dXJhbExvb3A6OmF0KToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6Om9wZXJhdG9yW10pOgor
ICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcDo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpOYXR1
cmFsTG9vcDo6aW5kZXgpOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcDo6aXNPdXRlck1vc3RM
b29wKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmR1bXApOgorICAgICAgICAoV1RGOjpO
YXR1cmFsTG9vcDo6YWRkQmxvY2spOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6Ok5hdHVy
YWxMb29wcyk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6Z3JhcGgpOgorICAgICAgICAo
V1RGOjpOYXR1cmFsTG9vcHM6Om51bUxvb3BzKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3Bz
Ojpsb29wKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpoZWFkZXJPZik6CisgICAgICAg
IChXVEY6Ok5hdHVyYWxMb29wczo6aW5uZXJNb3N0TG9vcE9mKToKKyAgICAgICAgKFdURjo6TmF0
dXJhbExvb3BzOjppbm5lck1vc3RPdXRlckxvb3ApOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9v
cHM6OmJlbG9uZ3NUbyk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6bG9vcERlcHRoKToK
KyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpsb29wc09mKToKKyAgICAgICAgKFdURjo6TmF0
dXJhbExvb3BzOjpkdW1wKToKKyAgICAgICAgKiB3dGYvUmFuZ2VTZXQuaDoKKyAgICAgICAgKFdU
Rjo6UmFuZ2VTZXQ6OmJlZ2luKToKKyAgICAgICAgKFdURjo6UmFuZ2VTZXQ6OmVuZCk6CisgICAg
ICAgIChXVEY6OlJhbmdlU2V0OjphZGRBbGwpOgorCiAyMDE3LTA3LTE0ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gZGVjaWRl
IGhvdyBXZWJLaXQgeWllbGRzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQAogCQkwRjQz
RDhGMDFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxM
b29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFt
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50U3Ry
ZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQxQjAw
NDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTg2MCw2ICs4NjEsNyBAQAogCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQz
RiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLywKIAkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0Yg
LyogTW9ub3RvbmljVGltZS5oICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBO
YWtlZFB0ci5oICovLAorCQkJCTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAvKiBOYXR1cmFsTG9v
cHMuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJEZXN0cm95ZWQu
aCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8sCiAJCQkJ
QThBNDcyRDAxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggKi8sCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgc2V0KFdURl9IRUFERVJT
CiAgICAgTWVzc2FnZVF1ZXVlLmgKICAgICBNZXRhQWxsb2NhdG9yLmgKICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKKyAgICBOYXR1cmFsTG9vcHMuaAogICAgIE1vbm90b25pY1RpbWUuaAogICAg
IE5vbmNvcHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJ
KHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWluYXRvcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBXVEZEb21pbmF0b3JzX2gKICNkZWZp
bmUgV1RGRG9taW5hdG9yc19oCiAKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KIApJbmRleDogU291cmNlL1dURi93dGYvTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTmF0dXJhbExvb3BzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvTmF0dXJhbExvb3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Eb21pbmF0b3JzLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wczsKKwordGVt
cGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9vcCB7CitwdWJsaWM6CisgICAg
TmF0dXJhbExvb3AoKQorICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgLCBtX2hl
YWRlcihudWxscHRyKQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5kZXgoVUlOVF9NQVgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBOYXR1cmFsTG9vcChHcmFwaCYgZ3JhcGgsIHR5cGVuYW1lIEdy
YXBoOjpOb2RlIGhlYWRlciwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9ncmFwaCgmZ3Jh
cGgpCisgICAgICAgICwgbV9oZWFkZXIoaGVhZGVyKQorICAgICAgICAsIG1fb3V0ZXJMb29wSW5k
ZXgoVUlOVF9NQVgpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEdyYXBoKiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAg
ICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsg
fQorICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgp
OyB9CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9ib2R5W2ldOyB9CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgc2xv
d2VyLCBidXQgc2ltcGxlciwgd2F5IG9mIGFza2luZyBpZiBhIGJsb2NrIGJlbG9uZ3MgdG8KKyAg
ICAvLyBhIG5hdHVyYWwgbG9vcC4gSXQncyBmYXN0ZXIgdG8gY2FsbCBOYXR1cmFsTG9vcHM6OmJl
bG9uZ3NUbygpLCB3aGljaAorICAgIC8vIHRyaWVzIHRvIGJlIE8obG9vcCBkZXB0aCkgcmF0aGVy
IHRoYW4gTyhsb29wIHNpemUpLiBMb29wIGRlcHRoIGlzCisgICAgLy8gYWxtb3N0IGFsd2F5cyBz
bWFsbGVyIHRoYW4gbG9vcCBzaXplLiBBICpsb3QqIHNtYWxsZXIuCisgICAgYm9vbCBjb250YWlu
cyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fYm9keS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2Jv
ZHlbaV0gPT0gYmxvY2spCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKGJsb2NrICE9IGhlYWRlcigpKTsgLy8gSGVhZGVyIHNob3VsZCBiZSBj
b250YWluZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgaW5k
ZXggb2YgdGhpcyBsb29wIGluIE5hdHVyYWxMb29wcy4KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICBib29sIGlzT3V0ZXJNb3N0TG9vcCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVg7IH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
bV9ncmFwaCkgeworICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3V0LnByaW50KCJbSGVhZGVy
OiAiLCBtX2dyYXBoLT5kdW1wKGhlYWRlcigpKSwgIiwgQm9keToiKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5w
cmludCgiICIsIG1fZ3JhcGgtPmR1bXAobV9ib2R5W2ldKSk7CisgICAgICAgIG91dC5wcmludCgi
XSIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAg
ZnJpZW5kIGNsYXNzIE5hdHVyYWxMb29wczsKKyAgICAKKyAgICB2b2lkIGFkZEJsb2NrKHR5cGVu
YW1lIEdyYXBoOjpOb2RlIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CisKKyAgICBH
cmFwaCogbV9ncmFwaDsKKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBtX2hlYWRlcjsKKyAgICBW
ZWN0b3I8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIDQ+IG1fYm9keTsKKyAgICB1bnNpZ25lZCBtX291
dGVyTG9vcEluZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFwaD4KK2NsYXNzIE5hdHVyYWxMb29wcyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBz
dGQ6OmFycmF5PHVuc2lnbmVkLCAyPiBJbm5lck1vc3RMb29wSW5kaWNlczsKKworICAgIE5hdHVy
YWxMb29wcyhHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnM8R3JhcGg+JiBkb21pbmF0b3JzLCBib29s
IHNlbGZDaGVjayA9IGZhbHNlKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwg
bV9pbm5lck1vc3RMb29wSW5kaWNlcyhncmFwaC50ZW1wbGF0ZSBuZXdNYXA8SW5uZXJNb3N0TG9v
cEluZGljZXM+KCkpCisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9t
aW5hdG9yLWJhc2VkIG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdAorICAgICAgICAvLyBz
dGVwIGlzIHRvIGZpbmQgYWxsIGNvbnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21p
bmF0ZXMgQS4KKyAgICAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMgYSBi
YWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKKyAgICAgICAgLy8gdGhlbiBhY2N1bXVs
YXRlLCBmb3IgZWFjaCBsb29wIGhlYWRlciwgbXVsdGlwbGUgYmFja3dhcmQgYnJhbmNoaW5nCisg
ICAgICAgIC8vIGJsb2Nrcy4gVGhlbiB3ZSBiYWNrd2FyZHMgZ3JhcGggc2VhcmNoIGZyb20gdGhl
IGJhY2t3YXJkIGJyYW5jaGluZworICAgICAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFk
ZXJzLCB3aGljaCBnaXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKKyAgICAgICAgLy8g
bG9vcCBib2R5LgorICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJE
b21pbmF0b3JzOlxuIik7CisgICAgICAgICAgICBkb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmls
ZSgpKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBtX2xvb3BzLnNocmluaygwKTsKKyAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBn
cmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBncmFwaC5zdWNjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBzdWNjZXNzb3IgPSBncmFwaC5zdWNjZXNzb3JzKGJsb2Nr
KVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWRvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3Nv
ciwgYmxvY2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
bV9sb29wcy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNb
al0uaGVhZGVyKCkgPT0gc3VjY2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xv
b3BzW2pdLmFkZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTmF0dXJhbExvb3A8R3Jh
cGg+IGxvb3AoZ3JhcGgsIHN1Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOworICAgICAgICAgICAg
ICAgIGxvb3AuYWRkQmxvY2soYmxvY2spOworICAgICAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5k
KGxvb3ApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxu
Iik7CisgICAgCisgICAgICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKKyAgICAgICAgVmVj
dG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCA0PiBibG9ja1dvcmtsaXN0OworICAgICAgICBzZWVu
QmxvY2tzLnJlc2l6ZShncmFwaC5udW1Ob2RlcygpKTsKKyAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5hdHVyYWxMb29w
PEdyYXBoPiYgbG9vcCA9IG1fbG9vcHNbaV07CisgICAgICAgIAorICAgICAgICAgICAgc2VlbkJs
b2Nrcy5jbGVhckFsbCgpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrV29ya2xpc3QuaXNFbXB0
eSgpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgeworICAgICAg
ICAgICAgICAgIHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgobG9vcFtqXSldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBibG9ja1dvcmts
aXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCBncmFw
aC5kdW1wKGJsb2NrKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
YmxvY2sgPT0gbG9vcC5oZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBncmFwaC5wcmVk
ZWNlc3NvcnMoYmxvY2spLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBwcmVkZWNlc3NvciA9IGdyYXBoLnByZWRlY2Vzc29ycyhibG9jaylb
al07CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzW2dyYXBoLmluZGV4KHByZWRl
Y2Vzc29yKV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3Nvcik7Cisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VlbkJsb2Nrc1tncmFwaC5pbmRleChwcmVkZWNlc3NvcildID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGaWd1cmUgb3V0IHJldmVyc2UgbWFwcGluZyBmcm9tIGJsb2NrcyB0byBsb29wcy4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBn
cmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6dHVw
bGVfc2l6ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZhbHVlOyBpLS07KQorICAgICAgICAgICAg
ICAgIG1faW5uZXJNb3N0TG9vcEluZGljZXNbYmxvY2tdW2ldID0gVUlOVF9NQVg7CisgICAgICAg
IH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUoKTsgbG9v
cEluZGV4LS07KSB7CisgICAgICAgICAgICBOYXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xv
b3BzW2xvb3BJbmRleF07CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9j
a0luZGV4SW5Mb29wID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsKKyAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGxvb3BbYmxvY2tJbmRleElu
TG9vcF07CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RkOjp0dXBsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWU7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0aGlzSW5kZXggPSBtX2lubmVyTW9zdExv
b3BJbmRpY2VzW2Jsb2NrXVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNJbmRleCA9
PSBVSU5UX01BWCB8fCBsb29wLnNpemUoKSA8IG1fbG9vcHNbdGhpc0luZGV4XS5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEludG9Cb3VuZGVkVmVjdG9yKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5uZXJNb3N0TG9vcEluZGljZXNbYmxvY2tdLCBzdGQ6
OnR1cGxlX3NpemU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb29wSW5kZXgsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IGVhY2ggYmxvY2sga25vd3MgaXRz
IGlubmVyLW1vc3QgbG9vcCBhbmQgaXRzIG5leHQtdG8taW5uZXItbW9zdCBsb29wLiBVc2UKKyAg
ICAgICAgLy8gdGhpcyB0byBmaWd1cmUgb3V0IGxvb3AgcGFyZW50aW5nLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTmF0dXJh
bExvb3A8R3JhcGg+JiBsb29wID0gbV9sb29wc1tpXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1faW5uZXJNb3N0TG9vcEluZGljZXNbbG9vcC5oZWFkZXIoKV1bMF0gPT0gaSk7CisgICAg
ICAgIAorICAgICAgICAgICAgbG9vcC5tX291dGVyTG9vcEluZGV4ID0gbV9pbm5lck1vc3RMb29w
SW5kaWNlc1tsb29wLmhlYWRlcigpXVsxXTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAo
c2VsZkNoZWNrKSB7CisgICAgICAgICAgICAvLyBEbyBzb21lIHNlbGYtdmVyaWZpY2F0aW9uIHRo
YXQgd2UndmUgZG9uZSBzb21lIG9mIHRoaXMgY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGdy
YXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gc2ltcGxlTG9vcHNPZjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2Nr
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBwZW5kKCZtX2xvb3Bz
W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+Kj4gZmFuY3lMb29wc09mID0gbG9vcHNPZihi
bG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQoc2ltcGxlTG9v
cHNPZi5iZWdpbigpLCBzaW1wbGVMb29wc09mLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6
OnNvcnQoZmFuY3lMb29wc09mLmJlZ2luKCksIGZhbmN5TG9vcHNPZi5lbmQoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVMb29wc09mID09IGZh
bmN5TG9vcHNPZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7
CisgICAgfQorICAgIAorICAgIEdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBudW1Mb29wcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9sb29wcy5zaXplKCk7CisgICAgfQorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiYgbG9v
cCh1bnNpZ25lZCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07Cisg
ICAgfQorICAgIAorICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3Qg
YSBsb29wIGhlYWRlciwgb3IgdGhlCisgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgorICAgIGNv
bnN0IE5hdHVyYWxMb29wPEdyYXBoPiogaGVhZGVyT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxv
Y2spIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGxvb3Ag
PSBpbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGxvb3AtPmhlYWRlcigpID09IGJsb2NrKQorICAgICAg
ICAgICAgcmV0dXJuIGxvb3A7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBmb3IgKDsgbG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCisg
ICAgICAgICAgICAgICAgQVNTRVJUKGxvb3AtPmhlYWRlcigpICE9IGJsb2NrKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgY29uc3QgTmF0dXJhbExvb3A8
R3JhcGg+KiBpbm5lck1vc3RMb29wT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5uZXJNb3N0TG9vcEluZGljZXNb
YmxvY2tdWzBdOworICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2luZGV4XTsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3QgTmF0
dXJhbExvb3A8R3JhcGg+JiBsb29wKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGxvb3AubV9v
dXRlckxvb3BJbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gJm1fbG9vcHNbbG9vcC5tX291dGVyTG9vcEluZGV4XTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBiZWxvbmdzVG8odHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2ssIGNvbnN0IE5hdHVy
YWxMb29wPEdyYXBoPiYgY2FuZGlkYXRlTG9vcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEl0
J3MgZmFzdGVyIHRvIGRvIHRoaXMgdGVzdCB1c2luZyB0aGUgbG9vcCBpdHNlbGYsIGlmIGl0J3Mg
c21hbGwuCisgICAgICAgIGlmIChjYW5kaWRhdGVMb29wLnNpemUoKSA8IDQpCisgICAgICAgICAg
ICByZXR1cm4gY2FuZGlkYXRlTG9vcC5jb250YWlucyhibG9jayk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihi
bG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7CisgICAgICAg
ICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGxvb3BEZXB0aCh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1
cmFsTG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29w
ID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIGRlcHRoKys7CisgICAg
ICAgIHJldHVybiBkZXB0aDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGFsbCBsb29wcyB0
aGlzIGJlbG9uZ3MgdG8uIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgdmVjdG9yIGlzIHRoZSBpbm5l
cm1vc3QgbG9vcC4gVGhlIGxhc3QgaXMgdGhlCisgICAgLy8gb3V0ZXJtb3N0IGxvb3AuCisgICAg
VmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPio+IGxvb3BzT2YodHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExv
b3A8R3JhcGg+Kj4gcmVzdWx0OworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wPEdyYXBo
PiogbG9vcCA9IGlubmVyTW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RP
dXRlckxvb3AoKmxvb3ApKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChsb29wKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgiTmF0dXJhbExvb3BzOnsiKTsKKyAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9sb29wcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbV9s
b29wc1tpXSk7CisgICAgICAgIG91dC5wcmludCgifSIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgCisgICAgLy8gSWYgd2UgZXZlciBoYWQgYSBzY2Fs
YWJpbGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAorICAg
IC8vIHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sgb2Yg
YSBsb3QgbGVzcyBjb252ZW5pZW50LgorICAgIFZlY3RvcjxOYXR1cmFsTG9vcDxHcmFwaD4sIDQ+
IG1fbG9vcHM7CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OnRlbXBsYXRlIE1hcDxJbm5lck1v
c3RMb29wSW5kaWNlcz4gbV9pbm5lck1vc3RMb29wSW5kaWNlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6Ok5hdHVyYWxMb29wOwordXNpbmcgV1RGOjpOYXR1cmFsTG9v
cHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1JhbmdlU2V0LmgJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9XVEYvd3Rm
L1JhbmdlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAg
IHR5cGVkZWYgUmFuZ2VUeXBlIFJhbmdlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgUmFuZ2U6OlR5
cGUgVHlwZTsKIAorICAgIHR5cGVkZWYgVmVjdG9yPFJhbmdlLCA4PiBWZWN0b3JUeXBlOworICAg
IAogICAgIFJhbmdlU2V0KCkKICAgICB7CiAgICAgfQpAQCAtMTI1LDggKzEyNywyMyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBvdXQucHJpbnQoInsiLCBsaXN0RHVtcChtX3JhbmdlcyksICIs
IGlzQ29tcGFjdCA9ICIsIG1faXNDb21wYWN0LCAifSIpOwogICAgIH0KKyAgICAKKyAgICB0eXBl
bmFtZSBWZWN0b3JUeXBlOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9yYW5nZXMuYmVnaW4oKTsKKyAgICB9CisgICAgCisgICAgdHlwZW5hbWUg
VmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Jhbmdlcy5lbmQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRBbGwoY29uc3Qg
UmFuZ2VTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgZm9yIChSYW5nZSByYW5nZSA6IG90aGVy
KQorICAgICAgICAgICAgYWRkKHJhbmdlKTsKKyAgICB9CiAKLXByaXZhdGU6CiAgICAgdm9pZCBj
b21wYWN0KCkKICAgICB7CiAgICAgICAgIGlmIChtX2lzQ29tcGFjdCkKQEAgLTE2NCw2ICsxODEs
NyBAQCBwcml2YXRlOgogICAgICAgICBtX2lzQ29tcGFjdCA9IHRydWU7CiAgICAgfQogICAgIAor
cHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBvdmVybGFwc05vbkVtcHR5KGNvbnN0IFJhbmdlJiBh
LCBjb25zdCBSYW5nZSYgYikKICAgICB7CiAgICAgICAgIHJldHVybiBub25FbXB0eVJhbmdlc092
ZXJsYXAoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCksIGIuZW5kKCkpOwpAQCAtMTg3LDcg
KzIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBVSU5UX01BWDsKICAgICB9CiAgICAg
Ci0gICAgVmVjdG9yPFJhbmdlLCA4PiBtX3JhbmdlczsKKyAgICBWZWN0b3JUeXBlIG1fcmFuZ2Vz
OwogICAgIGJvb2wgbV9pc0NvbXBhY3QgeyB0cnVlIH07CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316241</attachid>
            <date>2017-07-23 15:38:47 -0700</date>
            <delta_ts>2017-07-25 00:34:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>101510</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxNy0wNy0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBkbyBMSUNNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQ3NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgTElDTSBwaGFzZSB0byBCMy4gVGhpcyBwaGFzZSBp
cyBjYWxsZWQgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzLCB0byBjb25mb3JtIHRvIHRoZSBCMyBu
YW1pbmcKKyAgICAgICAgY29udmVudGlvbiBmb3IgcGhhc2VzIChpdCBoYXMgdG8gYmUgYW4gaW1w
ZXJhdGl2ZSkuIFRoZSBwaGFzZSB1c2VzIE5hdHVyYWxMb29wcyBhbmQgQmFja3dhcmRzRG9taW5h
dG9ycywKKyAgICAgICAgc28gdGhpcyBhZGRzIHRob3NlIGFuYWx5c2VzIHRvIEIzLiBCYWNrd2Fy
ZHNEb21pbmF0b3JzIHdhcyBhbHJlYWR5IGF2YWlsYWJsZSBpbiB0ZW1wbGF0aXplZCBmb3JtLiBU
aGlzCisgICAgICAgIGNoYW5nZSB0ZW1wbGF0aXplcyBERkc6Ok5hdHVyYWxMb29wcyBzbyB0aGF0
IHdlIGNhbiBqdXN0IHVzZSBpdC4KKyAgICAgICAgCisgICAgICAgIFRoZSBMSUNNIHBoYXNlIGl0
c2VsZiBpcyByZWFsbHkgc2ltcGxlLiBXZSBhcmUgZGVjZW50bHkgcHJlY2lzZSB3aXRoIG91ciBo
YW5kbGluZyBvZiBldmVyeXRoaW5nIGV4Y2VwdAorICAgICAgICB0aGUgcmVsYXRpb25zaGlwIGJl
dHdlZW4gY29udHJvbCBkZXBlbmRlbmNlIGFuZCBzaWRlIGV4aXRzLgorICAgICAgICAKKyAgICAg
ICAgQWxzbyBhZGRlZCBhIGJ1bmNoIG9mIHRlc3RzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
c24ndCBzdXBlciBpbXBvcnRhbnQuIEl0J3MgcGVyZi1uZXV0cmFsIG9uIEpTIGJlbmNobWFya3Mu
IEZUTCBhbHJlYWR5IGRvZXMgTElDTSBvbiBERkcgU1NBIElSLCBhbmQKKyAgICAgICAgcHJvYmFi
bHkgYWxsIGN1cnJlbnQgV2ViQXNzZW1ibHkgY29udGVudCBoYXMgaGFkIExJQ00gZG9uZSB0byBp
dC4gVGhhdCBiZWluZyBzYWlkLCB0aGlzIGlzIGEgY2hlYXAgcGhhc2UKKyAgICAgICAgc28gaXQg
ZG9lc24ndCBodXJ0IHRvIGhhdmUgaXQuCisgICAgICAgIAorICAgICAgICBJIHdyb3RlIGl0IGJl
Y2F1c2UgSSB0aG91Z2h0IEkgbmVlZGVkIGl0IGZvciBidWcgMTc0NzI3LiBJdCB0dXJucyBvdXQg
dGhhdCB0aGVyZSdzIGEgYmV0dGVyIHdheSB0bworICAgICAgICBoYW5kbGUgdGhlIHByb2JsZW0g
SSBoYWQsIHNvIEkgZW5kZWQgdXAgbm90IG5lZWRlZCBpdCAtIGJ1dCBieSB0aGVuIEkgaGFkIGFs
cmVhZHkgd3JpdHRlbiBpdC4gSSB0aGluaworICAgICAgICBpdCdzIGdvb2QgdG8gaGF2ZSBpdCBi
ZWNhdXNlIExJQ00gaXMgb25lIG9mIHRob3NlIGNvcmUgY29tcGlsZXIgcGhhc2VzOyBldmVyeSBj
b21waWxlciBoYXMgaXQKKyAgICAgICAgZXZlbnR1YWxseS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYjMvQjNCYWNrd2FyZHNDRkcuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpCYWNrd2FyZHNDRkc6OkJhY2t3YXJkc0NGRyk6CisgICAgICAgICogYjMvQjNCYWNrd2Fy
ZHNEb21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFja3dhcmRzRG9taW5h
dG9yczo6QmFja3dhcmRzRG9taW5hdG9ycyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKToKKyAg
ICAgICAgKiBiMy9CM0NGRy5oOgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5oOgorICAgICAgICAq
IGIzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OmVuc3VyZUxvb3BQcmVIZWFkZXJzKToKKyAgICAgICAgKiBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlND
OjpCMzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRW
YWx1ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmhvaXN0TG9vcEludmFyaWFudFZh
bHVlcyk6CisgICAgICAgICogYjMvQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaDogQWRkZWQu
CisgICAgICAgICogYjMvQjNOYXR1cmFsTG9vcHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpOYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppbnZhbGlkYXRlQ0ZHKToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6bmF0dXJhbExvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmFja3dhcmRzQ0ZHKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
YmFja3dhcmRzRG9taW5hdG9ycyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAg
ICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVMb29wKToKKyAg
ICAgICAgKEpTQzo6QjM6Om1ha2VBcnJheUZvckxvb3BzKToKKyAgICAgICAgKEpTQzo6QjM6Omdl
bmVyYXRlTG9vcE5vdEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6Om9uZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6Om5vT3BGdW5jdGlvbik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0TElDTVB1cmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlU2lkZUV4
aXRzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVyZVdyaXRlc1Bpbm5lZCk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0TElDTVB1cmVXcml0ZXMpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dExJQ01SZWFkc0xvY2FsU3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1Bp
bm5lZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVJlYWRzKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RMSUNNUHVyZUZvaWxlZEJ5Q2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Q
dXJlTm90QmFja3dhcmRzRG9taW5hbnRGb2lsZWRCeUNoaWxkKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RMSUNNRXhpdHNTaWRld2F5cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdyaXRl
c0xvY2FsU3RhdGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Xcml0ZXMpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdExJQ01GZW5jZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVdy
aXRlc1Bpbm5lZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnQp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50Tm90QmFja3dhcmRz
RG9taW5hbnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01Db250cm9sRGVwZW5kZW50U2lk
ZUV4aXRzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNQaW5uZWRXcml0ZXNQaW5u
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01SZWFkc1dyaXRlc0RpZmZlcmVudEhlYXBz
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBz
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNRGVmYXVsdENhbGwpOgorICAgICAgICAoSlND
OjpCMzo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRm
Zy9ERkdDRkcuaDoKKyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmg6CisgICAgICAgIChKU0M6OkRGRzo6TmF0
dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29w
OjpOYXR1cmFsTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6
OmhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OnNpemUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjphdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6Om9wZXJhdG9yW10pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOYXR1cmFsTG9vcDo6aXNPdXRlck1vc3RMb29wKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6YWRkQmxvY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6Ok5hdHVyYWxMb29wczo6bnVtTG9vcHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6Ok5hdHVyYWxMb29wczo6bG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0
dXJhbExvb3BzOjpoZWFkZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJh
bExvb3BzOjppbm5lck1vc3RMb29wT2YpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5h
dHVyYWxMb29wczo6aW5uZXJNb3N0T3V0ZXJMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpOYXR1cmFsTG9vcHM6OmJlbG9uZ3NUbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6TmF0dXJhbExvb3BzOjpsb29wRGVwdGgpOiBEZWxldGVkLgorCiAyMDE3LTA3LTE0ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kg
dG8gZGVjaWRlIGhvdyBXZWJLaXQgeWllbGRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0MywxMSArMTQzLDEzIEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKICAgICBiMy9C
M0VmZmVjdHMuY3BwCiAgICAgYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAK
KyAgICBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmNwcAogICAgIGIzL0IzRmVuY2VWYWx1ZS5j
cHAKICAgICBiMy9CM0ZpeFNTQS5jcHAKICAgICBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcAog
ICAgIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCiAgICAgYjMvQjNHZW5lcmF0ZS5jcHAKKyAgICBi
My9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAKICAgICBiMy9CM0luZmVyU3dpdGNoZXMu
Y3BwCiAgICAgYjMvQjNJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvQjNLaW5kLmNwcApAQCAtMzY0
LDcgKzM2Niw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR01pbmlm
aWVkTm9kZS5jcHAKICAgICBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCi0gICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAK
ICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2
ICs0NjMsMTMgQEAKIAkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUE2Mjgy
MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8q
IFZNSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYx
QjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJl
dHVyblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjVCRjE2MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
QkYxNjExRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAq
LzsgfTsKKwkJMEY1QkYxNjQxRjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50
VmFsdWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVCRjE2MjFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCAq
LzsgfTsKKwkJMEY1QkYxNjcxRjIzQTA5ODAwMjlEOTFEIC8qIEIzQmFja3dhcmRzQ0ZHLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2NjFGMjNB
MDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAqLzsgfTsKKwkJMEY1QkYxNjkxRjIzQTBB
QTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2ODFGMjNBMEFBMDAyOUQ5MUQgLyogQjNOYXR1cmFs
TG9vcHMuaCAqLzsgfTsKKwkJMEY1QkYxNkIxRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRz
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1QkYxNkExRjIzQTBDMTAwMjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oICov
OyB9OworCQkwRjVCRjE3MDFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVC
RjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi87IH07
CisJCTBGNUJGMTcxMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE2RjFG
MjNBNUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oICovOyB9OwogCQkwRjVD
Rjk4MTFFOTZGMTdGMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWly
VG1wTWFwLmggKi87IH07CiAJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0
YWNrQXJncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CiAJ
CTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1
MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuY3BwICovOyB9OwpAQCAtMTk0OSw3ICsxOTU2
LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYx
MDEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsKIAkJQTcz
MEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1MDA2OEYw
MDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFCMjVBMTMw
MDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKLQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMz
IC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3Bz
LmNwcCAqLzsgfTsKIAkJQTczNzgxMEUxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgx
MEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1
NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5
IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCAqLzsgfTsKIAkJQTczODY1NTUxMTg2OTdCNDAwNTQw
Mjc5IC8qIFRodW5rR2VuZXJhdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1MjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0
b3JzLmNwcCAqLzsgfTsKQEAgLTMwMjksNiArMzAzNSwxMyBAQAogCQkwRjVBNjI4MTE4OEM5OEQ0
MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODIxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
VmFsdWVSYW5nZS5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJu
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjExRjIzMTcxMjAwMjlE
OTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcDsgcGF0aCA9IGIzL0IzSG9pc3RMb29wSW52
YXJpYW50VmFsdWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNjIx
RjIzMTcxMjAwMjlEOTFEIC8qIEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmg7IHBhdGggPSBiMy9CM0hvaXN0TG9v
cEludmFyaWFudFZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2
NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNrd2FyZHNDRkcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNC
YWNrd2FyZHNDRkcuaDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzQ0ZHLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNUJGMTY4MUYyM0EwQUEwMDI5RDkxRCAvKiBCM05hdHVyYWxMb29w
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM05hdHVyYWxMb29wcy5oOyBwYXRoID0gYjMvQjNOYXR1cmFs
TG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QkYxNkExRjIzQTBDMTAw
MjlEOTFEIC8qIEIzQmFja3dhcmRzRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0JhY2t3
YXJkc0RvbWluYXRvcnMuaDsgcGF0aCA9IGIzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2RTFGMjNBNUExMDAyOUQ5MUQgLyogQjNF
bnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQ
cmVIZWFkZXJzLmNwcDsgcGF0aCA9IGIzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE2RjFGMjNBNUExMDAyOUQ5MUQgLyogQjNF
bnN1cmVMb29wUHJlSGVhZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Vuc3VyZUxvb3BQcmVIZWFk
ZXJzLmg7IHBhdGggPSBiMy9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wTWFwLmg7IHBhdGggPSBiMy9h
aXIvQWlyVG1wTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUNGOTgyMUU5
RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJMb3dlclN0YWNrQXJncy5jcHA7IHBhdGggPSBiMy9haXIv
QWlyTG93ZXJTdGFja0FyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVD
Rjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuaDsgcGF0aCA9IGIzL2Fpci9B
aXJMb3dlclN0YWNrQXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU2NSw3
ICs0NTc4LDYgQEAKIAkJQTcyOTlEQTQxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldENvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMw
QjYxMTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyog
REZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1
cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1
bmtKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MjExODY5N0I0MDA1
NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRodW5rR2VuZXJhdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDU4LDYgKzU0NzAsOCBAQAogCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKIAkJCQkwRjJDNjNCMzFFNjM0M0U4MDBDMTM4MzkgLyog
QjNBdG9taWNWYWx1ZS5jcHAgKi8sCiAJCQkJMEYyQzYzQjQxRTYzNDNFODAwQzEzODM5IC8qIEIz
QXRvbWljVmFsdWUuaCAqLywKKwkJCQkwRjVCRjE2NjFGMjNBMDk4MDAyOUQ5MUQgLyogQjNCYWNr
d2FyZHNDRkcuaCAqLywKKwkJCQkwRjVCRjE2QTFGMjNBMEMxMDAyOUQ5MUQgLyogQjNCYWNrd2Fy
ZHNEb21pbmF0b3JzLmggKi8sCiAJCQkJMEYyQzYzQUIxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFu
ay5jcHAgKi8sCiAJCQkJMEYyQzYzQUMxRTYwQUUzQzAwQzEzODM5IC8qIEIzQmFuay5oICovLAog
CQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLApAQCAt
NTUwOSw2ICs1NTIzLDggQEAKIAkJCQkwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZl
Y3RzLmggKi8sCiAJCQkJMEY3MjVDQTMxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRlQ29t
bW9uU3ViZXhwcmVzc2lvbnMuY3BwICovLAogCQkJCTBGNzI1Q0E0MUM1MDNERUQwMEFEOTQzQSAv
KiBCM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmggKi8sCisJCQkJMEY1QkYxNkUxRjIz
QTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3BwICovLAorCQkJCTBGNUJG
MTZGMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmggKi8sCiAJCQkJ
MEY2OTcxRTgxRDkyRjQyMTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEY2
OTcxRTkxRDkyRjQyMTAwQkEwMkE1IC8qIEIzRmVuY2VWYWx1ZS5oICovLAogCQkJCTBGNkI4QUUw
MUM0RUZFMTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5jcHAgKi8sCkBAIC01NTIzLDYgKzU1MzksOCBA
QAogCQkJCTBGMkM2M0I1MUU2MzQzRTgwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlv
blNldC5oICovLAogCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLywKIAkJCQkwRkVDODVDMDFCRTE2N0EwMDA4MEZGNzQgLyogQjNIZWFw
UmFuZ2UuaCAqLywKKwkJCQkwRjVCRjE2MTFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJ
bnZhcmlhbnRWYWx1ZXMuY3BwICovLAorCQkJCTBGNUJGMTYyMUYyMzE3MTIwMDI5RDkxRCAvKiBC
M0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oICovLAogCQkJCURDNjlCOTlBMUQxNUY5MEYwMDJF
M0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuY3BwICovLAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJF
M0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuaCAqLywKIAkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwICovLApAQCAtNTU0Niw2ICs1NTY0LDcgQEAKIAkJCQkw
RjMzOEUwMzFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmNwcCAqLywKIAkJCQkw
RjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi8sCiAJCQkJMEYy
QzYzQzExRTY2NEE1QTAwQzEzODM5IC8qIEIzTmF0aXZlVHJhaXRzLmggKi8sCisJCQkJMEY1QkYx
NjgxRjIzQTBBQTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEYzMzhFMDUx
QkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi8sCiAJCQkJMEYzMzhFMDYx
QkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5jcHAgKi8sCiAJCQkJMEYzMzhF
MDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0cy5oICovLApAQCAtNzM3MCw3
ICs3Mzg5LDYgQEAKIAkJCQkwRjhGMTQzMjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJl
bW92YWxQaGFzZS5oICovLAogCQkJCTBGRjJDRDU5MUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0
aUdldEJ5T2Zmc2V0RGF0YS5jcHAgKi8sCiAJCQkJMEZGMkNENUExQjYxQTRGODAwNDk1NUE4IC8q
IERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggKi8sCi0JCQkJQTczNzgxMEExNzk5RUEyRTAwODE3
NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8sCiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3
NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2
QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZH
Tm9kZS5oICovLApAQCAtODQ5MSw2ICs4NTA5LDcgQEAKIAkJCQkwRkJCNzNCQjFERUY4NjQ1MDAy
QzAwOUUgLyogRGVsZXRlQWxsQ29kZUVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjMw
M0MxRDQxOTJDRDAwNTYwOUQ5IC8qIERlc3RydWN0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc3QTQyM0UxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY1QkYxNjkxRjIzQTBBQTAwMjlEOTFEIC8qIEIzTmF0dXJhbExvb3BzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJB
NTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC04Njc1LDYgKzg2OTQsNyBAQAogCQkJCTBGMUZCMzk3MUUxQUY3RTMwMEE5QkU1
MCAvKiBERkdXb3JrbGlzdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE4MUFB
OTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTA1MDE2MUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1bWVudHNPZmZzZXQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNUJGMTcxMUYyM0E1QTEwMDI5RDkxRCAvKiBCM0Vuc3VyZUxvb3BQcmVI
ZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyog
RGlyZWN0RXZhbENvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzUxREQ2OTg5
NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4NTksMTAgKzg4NzksMTIgQEAKIAkJCQlBNUZEMDA3
NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUJGMTZCMUYyM0EwQzEwMDI5RDkxRCAvKiBCM0Jh
Y2t3YXJkc0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlBMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0Mzg2QTc5MURENjk4OUMwMDg2NTJDNCAvKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRU
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCRjE2NzFGMjNBMDk4MDAyOUQ5MUQgLyogQjNC
YWNrd2FyZHNDRkcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2
NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGOEJERUIxQUQ0
Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDEwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAq
LywKQEAgLTkxNjYsNiArOTE4OCw3IEBACiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5IC8q
IE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAy
ODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMw
MTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjVCRjE2NDFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNy
b0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3
MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzJB
QjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMzY1LDcgKzEwMzg4LDYgQEAKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5
MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYxNDM1MUFE
RjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjJDRDVCMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0
YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZH
TmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVE
Rjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzhBMURDQjk0MjYw
MEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwNzI3LDYgKzEwNzQ5LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3
MzYgLyogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
RDJGQ0JFQTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjVCRjE2MzFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExv
b3BJbnZhcmlhbnRWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcw
MTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTEwNzkzLDYgKzEwODE2LDcgQEAKIAkJCQkwRkQzRTQwQjFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
NjlERTYxMDdFQzdFNzAwNjUwNDQ2IC8qIE9iamVjdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEY1QkYxNzAxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9v
cFByZUhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OUEwRUQxRDNBRTAwRjFG
NjgxIC8qIE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1MDEwN0VDMEQ3MDAx
M0U3QjIgLyogT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZB
QjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0NGRy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJkc0NGRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDRkcu
aCIKKyNpbmNsdWRlIDx3dGYvQmFja3dhcmRzR3JhcGguaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhY2t3YXJkc0NGRyA6IHB1YmxpYyBCYWNrd2FyZHNHcmFw
aDxDRkc+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNrd2FyZHNDRkcpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEJhY2t3YXJkc0NGRyhQcm9jZWR1
cmUmIHByb2MpCisgICAgICAgIDogQmFja3dhcmRzR3JhcGg8Q0ZHPihwcm9jLmNmZygpKQorICAg
IHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JhY2t3YXJk
c0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YWNrd2FyZHNEb21pbmF0b3JzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFja3dhcmRzRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYWNrd2FyZHND
RkcuaCIKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQmFja3dhcmRzRG9taW5hdG9ycyA6IHB1YmxpYyBXVEY6OkRv
bWluYXRvcnM8QmFja3dhcmRzQ0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja3dh
cmRzRG9taW5hdG9ycyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQmFja3dhcmRzRG9taW5hdG9ycyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogV1RGOjpE
b21pbmF0b3JzPEJhY2t3YXJkc0NGRz4ocHJvYy5iYWNrd2FyZHNDRkcoKSkKKyAgICB7CisgICAg
fQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBCYXNpY0Jsb2NrOjph
cHBlbmQoVmFsdWUqIHZhbHVlKQogdm9pZCBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChW
YWx1ZSogdmFsdWUpCiB7CiAgICAgbV92YWx1ZXMuYXBwZW5kKG1fdmFsdWVzLmxhc3QoKSk7Ci0g
ICAgbV92YWx1ZXNbbV92YWx1ZXMuc2l6ZSgpIC0gMV0gPSB2YWx1ZTsKKyAgICBtX3ZhbHVlc1tt
X3ZhbHVlcy5zaXplKCkgLSAyXSA9IHZhbHVlOwogICAgIHZhbHVlLT5vd25lciA9IHRoaXM7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NGRy5oCShyZXZpc2lvbiAyMTk3ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDRkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25zdCB7IHJl
dHVybiBub2RlLT5pbmRleCgpOyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3Byb2NbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtTm9kZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb2Muc2l6ZSgpOyB9Ci0KKyAgICAKICAgICBQb2ludGVyRHVtcDxCYXNp
Y0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7
IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw5
IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAvLyBNZW1vcnkgZmVuY2VzIGNhbm5vdCBiZSByZW9y
ZGVyZWQgYXJvdW5kIGVhY2ggb3RoZXIgcmVnYXJkbGVzcyBvZiB0aGVpciBlZmZlY3RzLiBUaGlz
IGlzIGZsYWdnZWQKICAgICAvLyBpZiB0aGUgb3BlcmF0aW9uIGlzIGEgbWVtb3J5IGZlbmNlLgog
ICAgIGJvb2wgZmVuY2UgeyBmYWxzZSB9OworICAgIAorICAgIC8vIFdBUk5JTkc6IFRoZSBCMzo6
aG9pc3RMb29wSW52YXJpYW50VmFsdWVzKCkgcGhhc2UgdGhpbmtzIHRoYXQgaXQgdW5kZXJzdGFu
ZHMgdGhpcyBleGhhdXN0aXZlbHkuIElmIHlvdQorICAgIC8vIGFkZCBhbnkgbmV3IGtpbmRzIG9m
IHRoaW5ncyB0aGF0IGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4sIHlvdSBzaG91bGQgY2hlY2sgdGhh
dCBwaGFzZS4KIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vuc3VyZUxvb3BQcmVI
ZWFkZXJzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNF
bnN1cmVMb29wUHJlSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNFbnN1cmVMb29wUHJlSGVhZGVycy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJCM0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBlbnN1cmVMb29wUHJl
SGVhZGVycyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgTmF0dXJhbExvb3BzJiBsb29wcyA9IHBy
b2MubmF0dXJhbExvb3BzKCk7CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KHByb2MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbG9vcHMubnVt
TG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29w
ID0gbG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBvdXRPZkJvZHlQcmVkZWNlc3NvcnM7CisgICAgICAgIGRvdWJsZSB0b3RhbEZy
ZXF1ZW5jeSA9IDA7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBsb29w
LmhlYWRlcigpLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxvb3BzLmJlbG9u
Z3NUbyhwcmVkZWNlc3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG91dE9mQm9keVByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgdG90YWxGcmVxdWVuY3kgKz0gcHJlZGVjZXNzb3ItPmZyZXF1
ZW5jeSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3V0T2ZCb2R5UHJlZGVj
ZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSBpbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKGxv
b3AuaGVhZGVyKCksIHRvdGFsRnJlcXVlbmN5KTsKKyAgICAgICAgcHJlSGVhZGVyLT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEp1bXAsIGxvb3AuaGVhZGVyKCktPmF0KDApLT5vcmlnaW4oKSk7Cisg
ICAgICAgIHByZUhlYWRlci0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sobG9vcC5oZWFk
ZXIoKSkpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6
IG91dE9mQm9keVByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxh
Y2VTdWNjZXNzb3IobG9vcC5oZWFkZXIoKSwgcHJlSGVhZGVyKTsKKyAgICAgICAgICAgIHByZUhl
YWRlci0+YWRkUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgbG9vcC5oZWFk
ZXIoKS0+cmVtb3ZlUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBsb29wLmhlYWRlcigpLT5hZGRQcmVkZWNlc3NvcihwcmVIZWFkZXIpOworICAg
IH0KKyAgICAKKyAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkgeworICAgICAgICBwcm9j
LmludmFsaWRhdGVDRkcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbnN1
cmVMb29wUHJlSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Vuc3VyZUxvb3BQcmVIZWFkZXJzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRW5zdXJlTG9vcFByZUhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gQ3JlYXRlcyBhIHByZS1o
ZWFkZXIgZm9yIGFueSBsb29wIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gQSBsb29wIGhh
cyBhIHByZS1oZWFkZXIgaWYgaXRzIGhlYWRlciBoYXMKKy8vIGV4YWN0bHkgb25lIHByZWRlY2Vz
c29yIHRoYXQgaXNuJ3QgaW4gdGhlIGxvb3AgYm9keS4gSWYgYSBsb29wIGhlYWRlciBoYXMgbW9y
ZSB0aGFuIG9uZSBvdXQtb2YtYm9keQorLy8gcHJlZGVjZXNzb3IsIHRoZW4gdGhpcyBjcmVhdGVz
IGEgbmV3IGJsb2NrIGFuZCByZXdpcmVzIHRob3NlIHByZWRlY2Vzc29ycyB0byBpdC4KKworYm9v
bCBlbnN1cmVMb29wUHJlSGVhZGVycyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5oIgogI2luY2x1
ZGUgIkIzRml4U1NBLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0YW50cy5oIgorI2luY2x1
ZGUgIkIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgiCiAjaW5jbHVkZSAiQjNJbmZlclN3aXRj
aGVzLmgiCiAjaW5jbHVkZSAiQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCIKICNpbmNsdWRlICJC
M0xvd2VyTWFjcm9zLmgiCkBAIC04Myw2ICs4NCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSkKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikgewog
ICAgICAgICByZWR1Y2VEb3VibGVUb0Zsb2F0KHByb2NlZHVyZSk7CiAgICAgICAgIHJlZHVjZVN0
cmVuZ3RoKHByb2NlZHVyZSk7CisgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhwcm9j
ZWR1cmUpOwogICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUp
OwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxpY2F0ZVRh
aWxzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIb2lzdExv
b3BJbnZhcmlhbnRWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNIb2lz
dExvb3BJbnZhcmlhbnRWYWx1ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0JhY2t3YXJkc0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiQjNFbnN1cmVMb29wUHJl
SGVhZGVycy5oIgorI2luY2x1ZGUgIkIzTmF0dXJhbExvb3BzLmgiCisjaW5jbHVkZSAiQjNQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmFuZ2VTZXQuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2Nl
ZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImhvaXN0TG9v
cEludmFyaWFudFZhbHVlcyIpOworICAgIAorICAgIGVuc3VyZUxvb3BQcmVIZWFkZXJzKHByb2Mp
OworICAgIAorICAgIE5hdHVyYWxMb29wcyYgbG9vcHMgPSBwcm9jLm5hdHVyYWxMb29wcygpOwor
ICAgIGlmICghbG9vcHMubnVtTG9vcHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cHJvYy5yZXNldFZhbHVlT3duZXJzKCk7CisgICAgRG9taW5hdG9ycyYgZG9taW5hdG9ycyA9IHBy
b2MuZG9taW5hdG9ycygpOworICAgIEJhY2t3YXJkc0RvbWluYXRvcnMmIGJhY2t3YXJkc0RvbWlu
YXRvcnMgPSBwcm9jLmJhY2t3YXJkc0RvbWluYXRvcnMoKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgYSByZXVzYWJsZSBCMzo6RWZmZWN0c1NldCBkYXRhIHN0cnVjdHVyZS4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NzYyCisg
ICAgc3RydWN0IExvb3BEYXRhIHsKKyAgICAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7
CisgICAgICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
d3JpdGVzUGlubmVkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBzaWRlRXhpdHMgeyBmYWxzZSB9
OworICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgeyBudWxscHRyIH07CisgICAgfTsKKyAg
ICAKKyAgICBJbmRleE1hcDxOYXR1cmFsTG9vcCwgTG9vcERhdGE+IGRhdGEobG9vcHMubnVtTG9v
cHMoKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBsb29wcy5udW1Mb29w
cygpOyBsb29wSW5kZXgtLTspIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBs
b29wcy5sb29wKGxvb3BJbmRleCk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgOiBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgaWYgKGxv
b3BzLmJlbG9uZ3NUbyhwcmVkZWNlc3NvciwgbG9vcCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghZGF0YVtsb29wXS5wcmVIZWFkZXIpOwor
ICAgICAgICAgICAgZGF0YVtsb29wXS5wcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAg
ICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGxvb3BzLmlubmVyTW9zdExvb3BPZihibG9j
ayk7CisgICAgICAgIGlmICghbG9vcCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3Rz
ID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgIGRhdGFbKmxvb3BdLndyaXRlcy5hZGQo
ZWZmZWN0cy53cml0ZXMpOworICAgICAgICAgICAgZGF0YVsqbG9vcF0ud3JpdGVzTG9jYWxTdGF0
ZSB8PSBlZmZlY3RzLndyaXRlc0xvY2FsU3RhdGU7CisgICAgICAgICAgICBkYXRhWypsb29wXS53
cml0ZXNQaW5uZWQgfD0gZWZmZWN0cy53cml0ZXNQaW5uZWQ7CisgICAgICAgICAgICBkYXRhWyps
b29wXS5zaWRlRXhpdHMgfD0gZWZmZWN0cy5leGl0c1NpZGV3YXlzOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbG9vcHMubnVtTG9vcHMoKTsg
bG9vcEluZGV4LS07KSB7CisgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbG9vcHMu
bG9vcChsb29wSW5kZXgpOworICAgICAgICBmb3IgKGNvbnN0IE5hdHVyYWxMb29wKiBjdXJyZW50
ID0gbG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKGxvb3ApOyBjdXJyZW50OyBjdXJyZW50ID0gbG9v
cHMuaW5uZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50KSkgeworICAgICAgICAgICAgZGF0YVsqY3Vy
cmVudF0ud3JpdGVzLmFkZEFsbChkYXRhW2xvb3BdLndyaXRlcyk7CisgICAgICAgICAgICBkYXRh
WypjdXJyZW50XS53cml0ZXNMb2NhbFN0YXRlIHw9IGRhdGFbbG9vcF0ud3JpdGVzTG9jYWxTdGF0
ZTsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLndyaXRlc1Bpbm5lZCB8PSBkYXRhW2xvb3Bd
LndyaXRlc1Bpbm5lZDsKKyAgICAgICAgICAgIGRhdGFbKmN1cnJlbnRdLnNpZGVFeGl0cyB8PSBk
YXRhW2xvb3BdLnNpZGVFeGl0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBQcmUtb3JkZXIgZW5zdXJlcyB0aGF0IHdlIHZp
c2l0IG91ciBkb21pbmF0b3JzIGJlZm9yZSB3ZSB2aXNpdCBvdXJzZWx2ZXMuIE90aGVyd2lzZSB3
ZSdkIG1pc3Mgc29tZQorICAgIC8vIGhvaXN0aW5nIG9wcG9ydHVuaXRpZXMgaW4gY29tcGxleCBD
RkdzLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmJsb2Nrc0luUHJlT3JkZXIo
KSkgeworICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBibG9ja0xvb3BzID0gbG9v
cHMubG9vcHNPZihibG9jayk7CisgICAgICAgIGlmIChibG9ja0xvb3BzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yIChWYWx1ZSomIHZhbHVl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0
cygpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZXZlciBob2lzdCB3cml0ZSBl
ZmZlY3RzIG9yIGNvbnRyb2wgY29uc3RydWN0cy4KKyAgICAgICAgICAgIGlmIChlZmZlY3RzLm11
c3RFeGVjdXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8v
IFRyeSBvdXRlcm1vc3QgbG9vcCBmaXJzdC4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrTG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgTmF0dXJh
bExvb3AmIGxvb3AgPSAqYmxvY2tMb29wc1tpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGls
ZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5h
dG9ycy5kb21pbmF0ZXMoY2hpbGQtPm93bmVyLCBkYXRhW2xvb3BdLnByZUhlYWRlcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZWZmZWN0cy5jb250cm9sRGVwZW5kZW50
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmFja3dhcmRzRG9taW5hdG9ycy5kb21pbmF0
ZXMoYmxvY2ssIGRhdGFbbG9vcF0ucHJlSGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgc3VwZXIgY29uc2VydmF0aXZlLiBJbiByZWFsaXR5LCB3ZSBqdXN0IG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJlbid0
IGFueSBzaWRlIGV4aXRzIGJldHdlZW4gaGVyZSBhbmQgdGhlIHByZS1oZWFkZXIgYWNjb3JkaW5n
IHRvIGJhY2t3YXJkcyBzZWFyY2guCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ3NjMKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRhdGFbbG9vcF0uc2lkZUV4aXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChlZmZlY3RzLnJlYWRzUGlubmVkICYmIGRhdGFbbG9vcF0ud3JpdGVzUGlubmVkKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgJiYgZGF0YVtsb29wXS53cml0ZXNMb2Nh
bFN0YXRlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoZGF0YVtsb29wXS53cml0ZXMub3ZlcmxhcHMoZWZmZWN0cy5y
ZWFkcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGRhdGFbbG9vcF0ucHJlSGVhZGVyLT5hcHBlbmROb25UZXJtaW5hbCh2
YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jLmFkZDxWYWx1ZT4oTm9wLCBWb2lk
LCB2YWx1ZS0+b3JpZ2luKCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBjaGFuZ2VkOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZh
bHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hvaXN0TG9v
cEludmFyaWFudFZhbHVlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0hvaXN0TG9vcEludmFyaWFudFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGRvZXMgbG9vcC1pbnZh
cmlhbnQgY29kZSBtb3Rpb24gKExJQ00pLiBJdCBjYW4gaG9pc3QgcHVyZSB2YWx1ZXMgYXMgd2Vs
bCBhcyByZWFkcyBvZiBzdGF0ZSB0aGF0IGlzbid0CisvLyBtb2RpZmllZCBpbnNpZGUgdGhlIGxv
b3AuCisKK2Jvb2wgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKFByb2NlZHVyZSYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgPHd0Zi9OYXR1cmFsTG9vcHMuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3R5cGVkZWYgV1RGOjpOYXR1cmFsTG9vcDxDRkc+
IE5hdHVyYWxMb29wOworCitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFs
TG9vcHM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOYXR1cmFsTG9vcHMoUHJv
Y2VkdXJlJiBwcm9jKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4ocHJvYy5jZmco
KSwgcHJvYy5kb21pbmF0b3JzKCkpCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkIzQmFja3dhcmRzQ0ZHLmgiCisjaW5jbHVkZSAiQjNCYWNrd2FyZHNEb21p
bmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCiAjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiQjNDRkcuaCIKICNpbmNsdWRlICJCM0RhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQjNEb21p
bmF0b3JzLmgiCisjaW5jbHVkZSAiQjNOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJCM09wYXF1
ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNT
dGFja1Nsb3QuaCIKQEAgLTIwMCw2ICsyMDMsOSBAQCB2b2lkIFByb2NlZHVyZTo6cmVzZXRSZWFj
aGFiaWxpdHkoKQogdm9pZCBQcm9jZWR1cmU6OmludmFsaWRhdGVDRkcoKQogewogICAgIG1fZG9t
aW5hdG9ycyA9IG51bGxwdHI7CisgICAgbV9uYXR1cmFsTG9vcHMgPSBudWxscHRyOworICAgIG1f
YmFja3dhcmRzQ0ZHID0gbnVsbHB0cjsKKyAgICBtX2JhY2t3YXJkc0RvbWluYXRvcnMgPSBudWxs
cHRyOwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApA
QCAtMjkxLDYgKzI5NywyNyBAQCBEb21pbmF0b3JzJiBQcm9jZWR1cmU6OmRvbWluYXRvcnMoKQog
ICAgIHJldHVybiAqbV9kb21pbmF0b3JzOwogfQogCitOYXR1cmFsTG9vcHMmIFByb2NlZHVyZTo6
bmF0dXJhbExvb3BzKCkKK3sKKyAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQorICAgICAgICBtX25h
dHVyYWxMb29wcyA9IHN0ZDo6bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7CisgICAg
cmV0dXJuICptX25hdHVyYWxMb29wczsKK30KKworQmFja3dhcmRzQ0ZHJiBQcm9jZWR1cmU6OmJh
Y2t3YXJkc0NGRygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0NGRykKKyAgICAgICAgbV9iYWNr
d2FyZHNDRkcgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhY2t3YXJkc0NGRz4oKnRoaXMpOworICAgIHJl
dHVybiAqbV9iYWNrd2FyZHNDRkc7Cit9CisKK0JhY2t3YXJkc0RvbWluYXRvcnMmIFByb2NlZHVy
ZTo6YmFja3dhcmRzRG9taW5hdG9ycygpCit7CisgICAgaWYgKCFtX2JhY2t3YXJkc0RvbWluYXRv
cnMpCisgICAgICAgIG1fYmFja3dhcmRzRG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8QmFj
a3dhcmRzRG9taW5hdG9ycz4oKnRoaXMpOworICAgIHJldHVybiAqbV9iYWNrd2FyZHNEb21pbmF0
b3JzOworfQorCiB2b2lkIFByb2NlZHVyZTo6YWRkRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5
JiBjb25zdGFudCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIx
OTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMCArNDgsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CiAKK2NsYXNzIEJhY2t3YXJkc0NGRzsKK2NsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBj
bGFzcyBCYXNpY0Jsb2NrOwogY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBDRkc7CiBj
bGFzcyBEb21pbmF0b3JzOworY2xhc3MgTmF0dXJhbExvb3BzOwogY2xhc3MgU3RhY2tTbG90Owog
Y2xhc3MgVmFsdWU7CiBjbGFzcyBWYXJpYWJsZTsKQEAgLTE3NSw2ICsxNzgsOSBAQCBwdWJsaWM6
CiAgICAgQ0ZHJiBjZmcoKSBjb25zdCB7IHJldHVybiAqbV9jZmc7IH0KIAogICAgIERvbWluYXRv
cnMmIGRvbWluYXRvcnMoKTsKKyAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcygpOworICAg
IEJhY2t3YXJkc0NGRyYgYmFja3dhcmRzQ0ZHKCk7CisgICAgQmFja3dhcmRzRG9taW5hdG9ycyYg
YmFja3dhcmRzRG9taW5hdG9ycygpOwogCiAgICAgdm9pZCBhZGRGYXN0Q29uc3RhbnQoY29uc3Qg
VmFsdWVLZXkmKTsKICAgICBib29sIGlzRmFzdENvbnN0YW50KGNvbnN0IFZhbHVlS2V5Jik7CkBA
IC0yNzEsNiArMjc3LDkgQEAgcHJpdmF0ZToKICAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiBt
X3ZhbHVlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1
cmFsTG9vcHM+IG1fbmF0dXJhbExvb3BzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHND
Rkc+IG1fYmFja3dhcmRzQ0ZHOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrd2FyZHNEb21pbmF0
b3JzPiBtX2JhY2t3YXJkc0RvbWluYXRvcnM7CiAgICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0
Q29uc3RhbnRzOwogICAgIHVuc2lnbmVkIG1fbnVtRW50cnlwb2ludHMgeyAxIH07CiAgICAgY29u
c3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU5Miw2ICsxNDU5Miw1NTkgQEAgdm9pZCB0ZXN0
T3B0aW1pemVNYXRlcmlhbGl6YXRpb24oKQogICAgIENIRUNLKGZvdW5kKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgZ2VuZXJhdGVMb29wKFByb2NlZHVyZSYgcHJvYywgY29u
c3QgRnVuYyYgZnVuYykKK3sKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIGxvb3AgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9j
ayogZW5kID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVXBzaWxvblZhbHVlKiBpbml0aWFsSW5k
ZXggPSByb290LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPigKKyAgICAgICAgcHJvYywgT3JpZ2lu
KCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBKdW1wLCBPcmlnaW4oKSk7CisgICAgcm9v
dC0+c2V0U3VjY2Vzc29ycyhsb29wKTsKKyAgICAKKyAgICBWYWx1ZSogaW5kZXggPSBsb29wLT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFBoaSwgSW50MzIsIE9yaWdpbigpKTsKKyAgICBpbml0aWFs
SW5kZXgtPnNldFBoaShpbmRleCk7CisgICAgCisgICAgVmFsdWUqIG9uZSA9IGZ1bmMobG9vcCwg
aW5kZXgpOworICAgIAorICAgIFZhbHVlKiBuZXh0SW5kZXggPSBsb29wLT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGluZGV4LCBvbmUpOworICAgIFVwc2lsb25WYWx1ZSog
bG9vcEluZGV4ID0gbG9vcC0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4ocHJvYywgT3JpZ2luKCks
IG5leHRJbmRleCk7CisgICAgbG9vcEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIGxvb3AtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMZXNzVGhhbiwgT3Jp
Z2luKCksIG5leHRJbmRleCwKKyAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAxMDApKSk7CisgICAgbG9vcC0+c2V0U3VjY2Vzc29ycyhsb29w
LCBlbmQpOworICAgIAorICAgIGVuZC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpKTsKK30KKworc3RkOjphcnJheTxpbnQsIDEwMD4gbWFrZUFycmF5Rm9yTG9vcHMoKQor
eworICAgIHN0ZDo6YXJyYXk8aW50LCAxMDA+IHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRbaV0gPSBpICYgMTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBn
ZW5lcmF0ZUxvb3BOb3RCYWNrd2FyZHNEb21pbmFudChQcm9jZWR1cmUmIHByb2MsIHN0ZDo6YXJy
YXk8aW50LCAxMDA+JiBhcnJheSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BIZWFkZXIgPSBw
cm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcENhbGwgPSBwcm9jLmFkZEJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbG9vcEZvb3RlciA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiBlbmQgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBVcHNpbG9uVmFsdWUqIGlu
aXRpYWxJbmRleCA9IHJvb3QtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KAorICAgICAgICBwcm9j
LCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDApKTsKKyAgICAvLyBJZiB5b3UgbG9vayBjYXJlZnVsbHksIHlvdSdsbCBub3RpY2UgdGhhdCB0
aGlzIGlzIGFuIGV4dHJlbWVseSBzbmVha3kgdXNlIG9mIFVwc2lsb24gdGhhdCBkZW1vbnN0cmF0
ZXMKKyAgICAvLyB0aGUgZXh0ZW50IHRvIHdoaWNoIG91ciBTU0EgaXMgZGlmZmVyZW50IGZyb20g
bm9ybWFsLXBlcnNvbiBTU0EuCisgICAgVXBzaWxvblZhbHVlKiBkZWZhdWx0T25lID0gcm9vdC0+
YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdpbigpLCByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCkpOworICAgIHJvb3QtPnNldFN1Y2Nl
c3NvcnMobG9vcEhlYWRlcik7CisgICAgCisgICAgVmFsdWUqIGluZGV4ID0gbG9vcEhlYWRlci0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgaW5pdGlh
bEluZGV4LT5zZXRQaGkoaW5kZXgpOworICAgIAorICAgIC8vIGlmIChhcnJheVtpbmRleF0pCisg
ICAgbG9vcEhlYWRlci0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQnJhbmNoLCBP
cmlnaW4oKSwKKyAgICAgICAgbG9vcEhlYWRlci0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIGxvb3BI
ZWFkZXItPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICBsb29wSGVhZGVyLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksICZhcnJheSksCisgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgTXVsLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgbG9vcEhlYWRlci0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBaRXh0MzIsIE9yaWdpbigpLCBpbmRleCksCisgICAgICAgICAgICAgICAgICAgIGxvb3BIZWFk
ZXItPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgc2l6ZW9mKGludCkp
KSkpKTsKKyAgICBsb29wSGVhZGVyLT5zZXRTdWNjZXNzb3JzKGxvb3BDYWxsLCBsb29wRm9vdGVy
KTsKKyAgICAKKyAgICBWYWx1ZSogZnVuY3Rpb25DYWxsID0gZnVuYyhsb29wQ2FsbCwgaW5kZXgp
OworICAgIFVwc2lsb25WYWx1ZSogb25lRnJvbUZ1bmN0aW9uID0gbG9vcENhbGwtPmFwcGVuZE5l
dzxVcHNpbG9uVmFsdWU+KHByb2MsIE9yaWdpbigpLCBmdW5jdGlvbkNhbGwpOworICAgIGxvb3BD
YWxsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpKTsKKyAgICBsb29wQ2Fs
bC0+c2V0U3VjY2Vzc29ycyhsb29wRm9vdGVyKTsKKyAgICAKKyAgICBWYWx1ZSogb25lID0gbG9v
cEZvb3Rlci0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7Cisg
ICAgZGVmYXVsdE9uZS0+c2V0UGhpKG9uZSk7CisgICAgb25lRnJvbUZ1bmN0aW9uLT5zZXRQaGko
b25lKTsKKyAgICBWYWx1ZSogbmV4dEluZGV4ID0gbG9vcEZvb3Rlci0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBpbmRleCwgb25lKTsKKyAgICBVcHNpbG9uVmFsdWUqIGxv
b3BJbmRleCA9IGxvb3BGb290ZXItPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBuZXh0SW5kZXgpOworICAgIGxvb3BJbmRleC0+c2V0UGhpKGluZGV4KTsKKyAgICBsb29w
Rm9vdGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBCcmFuY2gsIE9yaWdpbigp
LAorICAgICAgICBsb29wRm9vdGVyLT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgTGVzc1RoYW4sIE9yaWdpbigpLCBuZXh0SW5kZXgsCisgICAgICAgICAgICBsb29wRm9vdGVy
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTAwKSkpOworICAgIGxv
b3BGb290ZXItPnNldFN1Y2Nlc3NvcnMobG9vcEhlYWRlciwgZW5kKTsKKyAgICAKKyAgICBlbmQt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7Cit9CisKK3N0YXRpYyBp
bnQgb25lRnVuY3Rpb24oaW50KiBjYWxsQ291bnQpCit7CisgICAgKCpjYWxsQ291bnQpKys7Cisg
ICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG5vT3BGdW5jdGlvbigpCit7Cit9CisKK3Zv
aWQgdGVzdExJQ01QdXJlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxv
b3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUq
KSAtPiBWYWx1ZSogeworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZh
bHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5v
bmUoKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3Vu
dCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJl
U2lkZUV4aXRzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisg
ICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBW
YWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgICAgICAgICAgZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBP
cmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9u
KSkpOworCisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAor
ICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxD
b3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAg
ICBDSEVDS19FUShjYWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVXcml0ZXNQ
aW5uZWQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAg
ICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVl
KiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAg
ICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2lu
KCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsK
KworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKKyAgICAg
ICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQg
PSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hF
Q0tfRVEoY2FsbENvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01QdXJlV3JpdGVzKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAg
ICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZm
ZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjM0NzkpOworICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBl
ZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisKKyAg
ICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksCisgICAgICAgICAg
ICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsK
KyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VR
KGNhbGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNMb2NhbFN0YXRlKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAg
ICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZm
ZWN0cy5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2lu
KCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisg
ICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAg
dW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZj
YWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7IC8vIFdlJ2xsIGZhaWwg
dG8gaG9pc3QgYmVjYXVzZSB0aGUgbG9vcCBoYXMgVXBzaWxvbnMuCit9CisKK3ZvaWQgdGVzdExJ
Q01SZWFkc1Bpbm5lZCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29w
KAorICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikg
LT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUo
KTsKKyAgICAgICAgICAgIGVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9j
LCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9u
ZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAg
fSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVu
PHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMXUpOwor
fQorCit2b2lkIHRlc3RMSUNNUmVhZHMoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdl
bmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29w
LCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAg
ICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lz
ZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7Cisg
ICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShj
YWxsQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFu
dCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VBcnJheUZv
ckxvb3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisgICAgICAg
IHByb2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4g
VmFsdWUqIHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpub25lKCks
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAg
ICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2Fs
bENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOwor
ICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUHVyZUZvaWxl
ZEJ5Q2hpbGQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAg
ICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSogaW5kZXgp
IC0+IFZhbHVlKiB7CisgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9u
ZSgpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAg
ICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICBpbmRleCk7CisgICAgICAg
IH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1
bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUp
OworfQorCit2b2lkIHRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50Rm9pbGVkQnlDaGls
ZCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VBcnJheUZv
ckxvb3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisgICAgICAg
IHByb2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKiBpbmRl
eCkgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZlY3RzOjpu
b25lKCksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAg
ICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIGluZGV4KTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5k
UnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgNTB1
KTsKK30KKwordm9pZCB0ZXN0TElDTUV4aXRzU2lkZXdheXMoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3RzIGVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLmV4aXRzU2lkZXdh
eXMgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50
ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENI
RUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJQ01Xcml0ZXNMb2NhbFN0
YXRlKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAg
IHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSog
eworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAg
ICAgICAgZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgSW50
MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5j
dGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIH0pOwor
ICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lk
Pihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291bnQsIDEwMHUpOworfQor
Cit2b2lkIHRlc3RMSUNNV3JpdGVzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5l
cmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwg
VmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0
czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjY2KTsK
KyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9j
YXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAg
Y29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxs
Q291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNRmVuY2UoKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIGdlbmVyYXRlTG9vcCgKKyAgICAgICAgcHJvYywKKyAgICAgICAgWyZdIChC
YXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSopIC0+IFZhbHVlKiB7CisgICAgICAgICAgICBFZmZlY3Rz
IGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLmZlbmNlID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAg
ICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0
d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7
CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19F
UShjYWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNV3JpdGVzUGlubmVkKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAg
ICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCks
IGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgdW5z
aWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxs
Q291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKK3ZvaWQgdGVzdExJ
Q01Db250cm9sRGVwZW5kZW50KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0
ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFs
dWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6
bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9IDA7CisgICAgY29t
cGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVDS19FUShjYWxsQ291
bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnROb3RCYWNrd2FyZHNE
b21pbmFudCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgYXV0byBhcnJheSA9IG1ha2VB
cnJheUZvckxvb3BzKCk7CisgICAgZ2VuZXJhdGVMb29wTm90QmFja3dhcmRzRG9taW5hbnQoCisg
ICAgICAgIHByb2MsIGFycmF5LAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVl
KikgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5v
bmUoKTsKKyAgICAgICAgICAgIGVmZmVjdHMuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBp
bGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50
LCA1MHUpOworfQorCit2b2lkIHRlc3RMSUNNQ29udHJvbERlcGVuZGVudFNpZGVFeGl0cygpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAorICAgICAgICBwcm9jLAor
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4gVmFsdWUqIHsKKyAgICAg
ICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAgIGVm
ZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVj
dHMsCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgICAg
IGVmZmVjdHMuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbG9v
cC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBP
cmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24p
KSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICB9KTsKKyAgICAK
KyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNvbXBpbGVBbmRSdW48dm9pZD4ocHJv
YywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENvdW50LCAxMDB1KTsKK30KKwordm9p
ZCB0ZXN0TElDTVJlYWRzUGlubmVkV3JpdGVzUGlubmVkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsmXSAoQmFzaWNC
bG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgRWZmZWN0cyBlZmZl
Y3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAgZWZmZWN0cy53cml0ZXNQaW5uZWQg
PSB0cnVlOworICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAg
ICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9j
YXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzUGlubmVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
Yml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3At
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHVuc2lnbmVkIGNhbGxDb3VudCA9
IDA7CisgICAgY29tcGlsZUFuZFJ1bjx2b2lkPihwcm9jLCAmY2FsbENvdW50KTsKKyAgICBDSEVD
S19FUShjYWxsQ291bnQsIDEwMHUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNXcml0ZXNEaWZm
ZXJlbnRIZWFwcygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgZ2VuZXJhdGVMb29wKAor
ICAgICAgICBwcm9jLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxvb3AsIFZhbHVlKikgLT4g
VmFsdWUqIHsKKyAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsK
KyAgICAgICAgICAgIGVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKDY0MzYpOworICAgICAgICAg
ICAgbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZv
aWQsIE9yaWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVu
Y3Rpb24pKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlKDQ4ODYpOworICAg
ICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgfSk7CisgICAgCisgICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21w
aWxlQW5kUnVuPHZvaWQ+KHByb2MsICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3Vu
dCwgMXUpOworfQorCit2b2lkIHRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBzKCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2Ms
CisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAg
ICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICAgICAg
ZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjQzNiwgNzQ0NTgpOworICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9y
aWdpbigpLCBlZmZlY3RzLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24p
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7
CisgICAgICAgICAgICBlZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlKDQ4ODY0LCA3ODIzOSk7Cisg
ICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAorICAgICAgICAg
ICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKKyAgICAgICAgICAgICAgICBs
b29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICB9KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjYWxsQ291bnQgPSAwOworICAgIGNv
bXBpbGVBbmRSdW48dm9pZD4ocHJvYywgJmNhbGxDb3VudCk7CisgICAgQ0hFQ0tfRVEoY2FsbENv
dW50LCAxMDB1KTsKK30KKwordm9pZCB0ZXN0TElDTURlZmF1bHRDYWxsKCkKK3sKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBnZW5lcmF0ZUxvb3AoCisgICAgICAgIHByb2MsCisgICAgICAgIFsm
XSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogeworICAgICAgICAgICAgcmV0
dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBJ
bnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSks
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICBjb21waWxlQW5kUnVuPHZvaWQ+KHByb2Ms
ICZjYWxsQ291bnQpOworICAgIENIRUNLX0VRKGNhbGxDb3VudCwgMTAwdSk7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKIHsKQEAgLTE3MTI4LDcg
KzE3NjgxLDI5IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdExv
YWRCYXNlSW5kZXhTaGlmdDIoKSk7CiAgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4U2hpZnQzMigp
KTsKICAgICBSVU4odGVzdE9wdGltaXplTWF0ZXJpYWxpemF0aW9uKCkpOwotICAgIAorICAgIFJV
Tih0ZXN0TElDTVB1cmUoKSk7CisgICAgUlVOKHRlc3RMSUNNUHVyZVNpZGVFeGl0cygpKTsKKyAg
ICBSVU4odGVzdExJQ01QdXJlV3JpdGVzUGlubmVkKCkpOworICAgIFJVTih0ZXN0TElDTVB1cmVX
cml0ZXMoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHNMb2NhbFN0YXRlKCkpOworICAgIFJVTih0
ZXN0TElDTVJlYWRzUGlubmVkKCkpOworICAgIFJVTih0ZXN0TElDTVJlYWRzKCkpOworICAgIFJV
Tih0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudCgpKTsKKyAgICBSVU4odGVzdExJQ01Q
dXJlRm9pbGVkQnlDaGlsZCgpKTsKKyAgICBSVU4odGVzdExJQ01QdXJlTm90QmFja3dhcmRzRG9t
aW5hbnRGb2lsZWRCeUNoaWxkKCkpOworICAgIFJVTih0ZXN0TElDTUV4aXRzU2lkZXdheXMoKSk7
CisgICAgUlVOKHRlc3RMSUNNV3JpdGVzTG9jYWxTdGF0ZSgpKTsKKyAgICBSVU4odGVzdExJQ01X
cml0ZXMoKSk7CisgICAgUlVOKHRlc3RMSUNNV3JpdGVzUGlubmVkKCkpOworICAgIFJVTih0ZXN0
TElDTUZlbmNlKCkpOworICAgIFJVTih0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnQoKSk7CisgICAg
UlVOKHRlc3RMSUNNQ29udHJvbERlcGVuZGVudE5vdEJhY2t3YXJkc0RvbWluYW50KCkpOworICAg
IFJVTih0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnRTaWRlRXhpdHMoKSk7CisgICAgUlVOKHRlc3RM
SUNNUmVhZHNQaW5uZWRXcml0ZXNQaW5uZWQoKSk7CisgICAgUlVOKHRlc3RMSUNNUmVhZHNXcml0
ZXNEaWZmZXJlbnRIZWFwcygpKTsKKyAgICBSVU4odGVzdExJQ01SZWFkc1dyaXRlc092ZXJsYXBw
aW5nSGVhcHMoKSk7CisgICAgUlVOKHRlc3RMSUNNRGVmYXVsdENhbGwoKSk7CisKICAgICBSVU4o
dGVzdEF0b21pY1dlYWtDQVM8aW50OF90PigpKTsKICAgICBSVU4odGVzdEF0b21pY1dlYWtDQVM8
aW50MTZfdD4oKSk7CiAgICAgUlVOKHRlc3RBdG9taWNXZWFrQ0FTPGludDMyX3Q+KCkpOwpAQCAt
MTcxODEsNyArMTc3NTYsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVO
KHRlc3RGbG9hdEVxdWFsT3JVbm9yZGVyZWRGb2xkaW5nKCkpOwogICAgIFJVTih0ZXN0RmxvYXRF
cXVhbE9yVW5vcmRlcmVkRm9sZGluZ05hTigpKTsKICAgICBSVU4odGVzdEZsb2F0RXF1YWxPclVu
b3JkZXJlZERvbnRGb2xkKCkpOwotCisgICAgCiAgICAgUlVOKHRlc3RTaHVmZmxlRG9lc250VHJh
c2hDYWxsZWVTYXZlcygpKTsKIAogICAgIGlmIChpc1g4NigpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMjE5Nzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyOSw5ICsyMjksNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9j
CiAgICAgZmxvYXQgZXhlY3V0aW9uQ291bnQ7CiAgICAgCiAgICAgLy8gVGhlc2UgZmllbGRzIGFy
ZSByZXNlcnZlZCBmb3IgTmF0dXJhbExvb3BzLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzID0gMjsKLSAgICB1bnNpZ25lZCBpbm5lck1vc3RM
b29wSW5kaWNlc1tudW1iZXJPZklubmVyTW9zdExvb3BJbmRpY2VzXTsKLQorICAgIAogICAgIHN0
cnVjdCBTU0FEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVi
bGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCShyZXZpc2lvbiAyMTk3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleChOb2RlIG5vZGUpIGNv
bnN0IHsgcmV0dXJuIG5vZGUtPmluZGV4OyB9CiAgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLmJsb2NrKGluZGV4KTsgfQogICAgIHVuc2lnbmVkIG51
bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaC5udW1CbG9ja3MoKTsgfQotCisgICAgCiAg
ICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2RlIG5vZGUpIGNvbnN0IHsgcmV0dXJu
IHBvaW50ZXJEdW1wKG5vZGUpOyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29w
cy5jcHAJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmF0dXJhbExvb3BzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQot
Ci0jaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi12b2lkIE5hdHVyYWxMb29wOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJbSGVhZGVyOiAiLCAqaGVh
ZGVyKCksICIsIEJvZHk6Iik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5z
aXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KCIgIiwgKm1fYm9keVtpXSk7Ci0gICAgb3V0
LnByaW50KCJdIik7Ci19Ci0KLU5hdHVyYWxMb29wczo6TmF0dXJhbExvb3BzKEdyYXBoJiBncmFw
aCkKLXsKLSAgICBBU1NFUlQoZ3JhcGgubV9kb21pbmF0b3JzKTsKLQotICAgIC8vIEltcGxlbWVu
dCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZp
cnN0Ci0gICAgLy8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBC
IHdoZXJlIEIgZG9taW5hdGVzIEEuCi0gICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5k
IEEgaXMgYSBiYWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKLSAgICAvLyB0aGVuIGFj
Y3VtdWxhdGUsIGZvciBlYWNoIGxvb3AgaGVhZGVyLCBtdWx0aXBsZSBiYWNrd2FyZCBicmFuY2hp
bmcKLSAgICAvLyBibG9ja3MuIFRoZW4gd2UgYmFja3dhcmRzIGdyYXBoIHNlYXJjaCBmcm9tIHRo
ZSBiYWNrd2FyZCBicmFuY2hpbmcKLSAgICAvLyBibG9ja3MgdG8gdGhlaXIgbG9vcCBoZWFkZXJz
LCB3aGljaCBnaXZlcyB1cyBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUKLSAgICAvLyBsb29wIGJv
ZHkuCi0gICAgCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIAot
ICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAg
ICAgICAgZ3JhcGgubV9kb21pbmF0b3JzLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgfQot
ICAgIAotICAgIG1fbG9vcHMuc2hyaW5rKDApOwotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgewotICAgICAgICAgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKLSAgICAgICAgICAg
IGlmICghZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgewot
ICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2pdLmhlYWRlcigpID09IHN1Y2Nlc3Nvcikgewot
ICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2pdLmFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm91bmQpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBOYXR1cmFsTG9vcCBsb29wKHN1
Y2Nlc3NvciwgbV9sb29wcy5zaXplKCkpOwotICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9j
ayk7Ci0gICAgICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFw
OiAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0gICAgRmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOwot
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gYmxvY2tXb3JrbGlzdDsKLSAgICBzZWVuQmxvY2tz
LnJlc2l6ZShncmFwaC5udW1CbG9ja3MoKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xv
b3BzW2ldOwotICAgICAgICAKLSAgICAgICAgc2VlbkJsb2Nrcy5jbGVhckFsbCgpOwotICAgICAg
ICBBU1NFUlQoYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29w
LCAiXG4iKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgp
OyBqLS07KSB7Ci0gICAgICAgICAgICBzZWVuQmxvY2tzW2xvb3Bbal0tPmluZGV4XSA9IHRydWU7
Ci0gICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgd2hpbGUgKCFibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBEZWFsaW5nIHdpdGggIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVyKCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOwotICAgICAgICAgICAg
ICAgIGlmIChzZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5pbmRleF0pCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxvb3AuYWRk
QmxvY2socHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5k
KHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBzZWVuQmxvY2tzW3ByZWRlY2Vzc29yLT5p
bmRleF0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
RmlndXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJvbSBibG9ja3MgdG8gbG9vcHMuCi0gICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IEJhc2ljQmxvY2s6Om51bWJlck9mSW5uZXJNb3N0TG9vcEluZGljZXM7
IGktLTspCi0gICAgICAgICAgICBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbaV0gPSBVSU5U
X01BWDsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2xvb3BzLnNpemUo
KTsgbG9vcEluZGV4LS07KSB7Ci0gICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1ts
b29wSW5kZXhdOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4SW5M
b29wID0gbG9vcC5zaXplKCk7IGJsb2NrSW5kZXhJbkxvb3AtLTspIHsKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbG9vcFtibG9ja0luZGV4SW5Mb29wXTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEJhc2ljQmxvY2s6Om51bWJlck9m
SW5uZXJNb3N0TG9vcEluZGljZXM7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRo
aXNJbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1tpXTsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpc0luZGV4ID09IFVJTlRfTUFYIHx8IGxvb3Auc2l6ZSgpIDwgbV9sb29wc1t0aGlz
SW5kZXhdLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbnRvQm91bmRlZFZl
Y3RvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNl
cywgQmFzaWNCbG9jazo6bnVtYmVyT2ZJbm5lck1vc3RMb29wSW5kaWNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb3BJbmRleCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICAvLyBOb3cgZWFjaCBibG9jayBrbm93cyBpdHMgaW5uZXItbW9zdCBsb29wIGFuZCBpdHMg
bmV4dC10by1pbm5lci1tb3N0IGxvb3AuIFVzZQotICAgIC8vIHRoaXMgdG8gZmlndXJlIG91dCBs
b29wIHBhcmVudGluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0t
OykgewotICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbaV07Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxvb3AuaGVhZGVyKCktPmlubmVyTW9zdExvb3BJbmRpY2VzWzBdID09IGkp
OwotICAgICAgICAKLSAgICAgICAgbG9vcC5tX291dGVyTG9vcEluZGV4ID0gbG9vcC5oZWFkZXIo
KS0+aW5uZXJNb3N0TG9vcEluZGljZXNbMV07Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0
aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIERvIHNvbWUgc2VsZi12ZXJpZmljYXRpb24gdGhh
dCB3ZSd2ZSBkb25lIHNvbWUgb2YgdGhpcyBjb3JyZWN0bHkuCi0gICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4g
c2ltcGxlTG9vcHNPZjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tp
XS5jb250YWlucyhibG9jaykpCi0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUxvb3BzT2YuYXBw
ZW5kKCZtX2xvb3BzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gZmFuY3lMb29wc09mID0gbG9vcHNPZihibG9j
ayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6c29ydChzaW1wbGVMb29wc09mLmJl
Z2luKCksIHNpbXBsZUxvb3BzT2YuZW5kKCkpOwotICAgICAgICAgICAgc3RkOjpzb3J0KGZhbmN5
TG9vcHNPZi5iZWdpbigpLCBmYW5jeUxvb3BzT2YuZW5kKCkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzaW1wbGVMb29wc09mID09IGZhbmN5TG9vcHNPZik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKLX0KLQotTmF0dXJhbExvb3BzOjp+TmF0dXJhbExv
b3BzKCkgeyB9Ci0KLVZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9v
cHNPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLXsKLSAgICBWZWN0b3I8Y29uc3QgTmF0dXJh
bExvb3AqPiByZXN1bHQ7Ci0gICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVy
TW9zdExvb3BPZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3Ap
KQotICAgICAgICByZXN1bHQuYXBwZW5kKGxvb3ApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgTmF0dXJhbExvb3BzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KCJOYXR1cmFsTG9vcHM6eyIpOwotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sb29wcy5zaXplKCk7ICsraSkKLSAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBtX2xvb3BzW2ldKTsKLSAgICBvdXQucHJpbnQoIn0iKTsKLX0KLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkocmV2
aXNpb24gMjE5Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9v
cHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNywxNDIgKzI3LDIzIEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAotI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdEb21pbmF0b3Jz
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTmF0dXJhbExv
b3BzLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotY2xhc3MgTmF0dXJhbExvb3BzOwordHlwZWRlZiBXVEY6Ok5hdHVy
YWxMb29wPENGRz4gTmF0dXJhbExvb3A7CiAKLWNsYXNzIE5hdHVyYWxMb29wIHsKLXB1YmxpYzoK
LSAgICBOYXR1cmFsTG9vcCgpCi0gICAgICAgIDogbV9oZWFkZXIoMCkKLSAgICAgICAgLCBtX291
dGVyTG9vcEluZGV4KFVJTlRfTUFYKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgTmF0dXJhbExv
b3AoQmFzaWNCbG9jayogaGVhZGVyLCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgOiBtX2hlYWRl
cihoZWFkZXIpCi0gICAgICAgICwgbV9vdXRlckxvb3BJbmRleChVSU5UX01BWCkKLSAgICAgICAg
LCBtX2luZGV4KGluZGV4KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogaGVh
ZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LnNpemUoKTsgfQotICAgIEJhc2ljQmxvY2sqIGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQotICAgIEJhc2ljQmxvY2sqIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLQotICAgIC8vIFRo
aXMgaXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBi
ZWxvbmdzIHRvCi0gICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0
dXJhbExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKLSAgICAvLyB0cmllcyB0byBiZSBPKGxvb3Ag
ZGVwdGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcwotICAgIC8vIGFs
bW9zdCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgotICAg
IGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
bV9ib2R5W2ldID09IGJsb2NrKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIoKSk7IC8vIEhlYWRlciBzaG91bGQg
YmUgY29udGFpbmVkLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhl
IGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMuCi0gICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgCi0gICAgYm9vbCBpc091dGVyTW9zdExv
b3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYOyB9Ci0gICAg
Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci1wcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBOYXR1cmFsTG9vcHM7Ci0gICAgCi0gICAgdm9pZCBhZGRCbG9jayhCYXNpY0Jsb2Nr
KiBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQotICAgIAotICAgIEJhc2ljQmxvY2sq
IG1faGVhZGVyOwotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gbV9ib2R5OwotICAgIHVuc2ln
bmVkIG1fb3V0ZXJMb29wSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLX07Ci0KLWNsYXNz
IE5hdHVyYWxMb29wcyB7CitjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgV1RGOjpOYXR1cmFs
TG9vcHM8Q0ZHPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0dXJhbExvb3BzKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBOYXR1cmFsTG9vcHMoR3Jh
cGgmKTsKLSAgICB+TmF0dXJhbExvb3BzKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtTG9vcHMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9vcHMuc2l6ZSgpOwotICAgIH0KLSAg
ICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbG9vcHNbaV07Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybiBlaXRoZXIg
bnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCi0gICAgLy8gbG9v
cCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCYXNpY0Js
b2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
ID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKLSAgICAgICAgaWYgKCFsb29wKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChsb29wLT5oZWFkZXIoKSA9PSBibG9jaykKLSAgICAg
ICAgICAgIHJldHVybiBsb29wOwotICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAg
ICAgICAgICAgZm9yICg7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKQot
ICAgICAgICAgICAgICAgIEFTU0VSVChsb29wLT5oZWFkZXIoKSAhPSBibG9jayk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxMb29w
KiBpbm5lck1vc3RMb29wT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IGJsb2NrLT5pbm5lck1vc3RMb29wSW5kaWNlc1swXTsKLSAgICAg
ICAgaWYgKGluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiAmbV9sb29wc1tpbmRleF07Ci0gICAgfQotICAgIAotICAgIGNvbnN0IE5hdHVyYWxM
b29wKiBpbm5lck1vc3RPdXRlckxvb3AoY29uc3QgTmF0dXJhbExvb3AmIGxvb3ApIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAobG9vcC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJM
b29wSW5kZXhdOwotICAgIH0KLSAgICAKLSAgICBib29sIGJlbG9uZ3NUbyhCYXNpY0Jsb2NrKiBi
bG9jaywgY29uc3QgTmF0dXJhbExvb3AmIGNhbmRpZGF0ZUxvb3ApIGNvbnN0Ci0gICAgewotICAg
ICAgICAvLyBJdCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxm
LCBpZiBpdCdzIHNtYWxsLgotICAgICAgICBpZiAoY2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQot
ICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29udGFpbnMoYmxvY2spOwotICAgICAg
ICAKLSAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9zdExvb3BP
ZihibG9jayk7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3AoKmxvb3ApKSB7Ci0gICAg
ICAgICAgICBpZiAobG9vcCA9PSAmY2FuZGlkYXRlTG9vcCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIHVuc2lnbmVkIGxvb3BEZXB0aChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICBOYXR1
cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6TmF0dXJhbExvb3BzPENGRz4o
KmdyYXBoLm1fY2ZnLCBncmFwaC5lbnN1cmVEb21pbmF0b3JzKCksIHZhbGlkYXRpb25FbmFibGVk
KCkpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBkZXB0aCA9IDA7Ci0gICAgICAgIGZvciAoY29u
c3QgTmF0dXJhbExvb3AqIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29w
ID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKLSAgICAgICAgICAgIGRlcHRoKys7Ci0gICAg
ICAgIHJldHVybiBkZXB0aDsKICAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRpY2Vz
IG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxM
b29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29uc3Q7Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgLy8gSWYgd2UgZXZlciBoYWQgYSBzY2FsYWJp
bGl0eSBwcm9ibGVtIGluIG91ciBuYXR1cmFsIGxvb3AgZmluZGVyLCB3ZSBjb3VsZAotICAgIC8v
IHVzZSBzb21lIEhhc2hNYXAncyBoZXJlLiBCdXQgaXQganVzdCBmZWVscyBhIGhlY2sgb2YgYSBs
b3QgbGVzcyBjb252ZW5pZW50LgotICAgIFZlY3RvcjxOYXR1cmFsTG9vcCwgND4gbV9sb29wczsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTk3ODkp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE3LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGRvIExJQ00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgTW92ZWQgREZHOjpOYXR1cmFsTG9vcHMgdG8gV1RGLiBUaGUgbmV3
IHRlbXBsYXRpemVkIE5hdHVyYWxMb29wczw+IHVzZXMgdGhlIHNhbWUgR3JhcGggYWJzdHJhY3Rp
b24gYXMKKyAgICAgICAgRG9taW5hdG9yczw+LiBUaGlzIGFsbG93cyB1cyB0byBhZGQgYSBCMzo6
TmF0dXJhbExvb3BzIGZvciBmcmVlLgorICAgICAgICAKKyAgICAgICAgQWxzbyBtYWRlIHNtYWxs
IHR3ZWFrcyB0byBSYW5nZVNldCwgd2hpY2ggdGhlIExJQ00gdXNlcy4KKworICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiB3dGYvRG9taW5hdG9ycy5oOgorICAgICAgICAqIHd0Zi9OYXR1cmFsTG9v
cHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpOYXR1cmFsTG9vcCk6Cisg
ICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpncmFwaCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxM
b29wOjpoZWFkZXIpOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcDo6c2l6ZSk6CisgICAgICAg
IChXVEY6Ok5hdHVyYWxMb29wOjphdCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpvcGVy
YXRvcltdKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6OmNvbnRhaW5zKToKKyAgICAgICAg
KFdURjo6TmF0dXJhbExvb3A6OmluZGV4KToKKyAgICAgICAgKFdURjo6TmF0dXJhbExvb3A6Omlz
T3V0ZXJNb3N0TG9vcCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TmF0dXJhbExvb3A6OmFkZEJsb2NrKToKKyAgICAgICAgKFdURjo6TmF0dXJhbExv
b3BzOjpOYXR1cmFsTG9vcHMpOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6OmdyYXBoKToK
KyAgICAgICAgKFdURjo6TmF0dXJhbExvb3BzOjpudW1Mb29wcyk6CisgICAgICAgIChXVEY6Ok5h
dHVyYWxMb29wczo6bG9vcCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6aGVhZGVyT2Yp
OgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6OmlubmVyTW9zdExvb3BPZik6CisgICAgICAg
IChXVEY6Ok5hdHVyYWxMb29wczo6aW5uZXJNb3N0T3V0ZXJMb29wKToKKyAgICAgICAgKFdURjo6
TmF0dXJhbExvb3BzOjpiZWxvbmdzVG8pOgorICAgICAgICAoV1RGOjpOYXR1cmFsTG9vcHM6Omxv
b3BEZXB0aCk6CisgICAgICAgIChXVEY6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAg
IChXVEY6Ok5hdHVyYWxMb29wczo6ZHVtcCk6CisgICAgICAgICogd3RmL1JhbmdlU2V0Lmg6Cisg
ICAgICAgIChXVEY6OlJhbmdlU2V0OjpiZWdpbik6CisgICAgICAgIChXVEY6OlJhbmdlU2V0Ojpl
bmQpOgorICAgICAgICAoV1RGOjpSYW5nZVNldDo6YWRkQWxsKToKKwogMjAxNy0wNy0xNCAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEl0IHNob3VsZCBiZSBlYXN5
IHRvIGRlY2lkZSBob3cgV2ViS2l0IHlpZWxkcwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcg
QEAKIAkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRv
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnVi
YmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAv
KiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQ
cmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2Nr
ZWRQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJF
MURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjAsNiArODYxLDcgQEAKIAkJCQkwRjY2QjI4MjFEQzk3
QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi8sCiAJCQkJMEY2NkIyODMxREM5N0JB
QjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBC
QTY4RkQgLyogTmFrZWRQdHIuaCAqLywKKwkJCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyog
TmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMUEzRjZCRTYxNzRBREEyMTAwQjJFRUE3IC8qIE5ldmVy
RGVzdHJveWVkLmggKi8sCiAJCQkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5o
ICovLAogCQkJCUE4QTQ3MkQwMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25jb3B5YWJsZS5oICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxOTc4OSkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHNldChX
VEZfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1ZS5oCiAgICAgTWV0YUFsbG9jYXRvci5oCiAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZS5oCisgICAgTmF0dXJhbExvb3BzLmgKICAgICBNb25vdG9uaWNU
aW1lLmgKICAgICBOb25jb3B5YWJsZS5oCiAgICAgTnVtYmVyT2ZDb3Jlcy5oCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9t
aW5hdG9ycy5oCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV1RGRG9taW5hdG9y
c19oCiAjZGVmaW5lIFdURkRvbWluYXRvcnNfaAogCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0dyYXBo
Tm9kZVdvcmtsaXN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRG9taW5hdG9ycy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9v
cHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgTmF0dXJhbExvb3AgeworcHVi
bGljOgorICAgIE5hdHVyYWxMb29wKCkKKyAgICAgICAgOiBtX2dyYXBoKG51bGxwdHIpCisgICAg
ICAgICwgbV9oZWFkZXIobnVsbHB0cikKKyAgICAgICAgLCBtX291dGVyTG9vcEluZGV4KFVJTlRf
TUFYKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTmF0dXJhbExvb3AoR3JhcGgmIGdyYXBoLCB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBoZWFkZXIsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICA6IG1f
Z3JhcGgoJmdyYXBoKQorICAgICAgICAsIG1faGVhZGVyKGhlYWRlcikKKyAgICAgICAgLCBtX291
dGVyTG9vcEluZGV4KFVJTlRfTUFYKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBHcmFwaCogZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoOyB9
CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaGVhZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9oZWFkZXI7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
b2R5LnNpemUoKTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGF0KHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIG9wZXJh
dG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKworICAgIC8vIFRoaXMg
aXMgdGhlIHNsb3dlciwgYnV0IHNpbXBsZXIsIHdheSBvZiBhc2tpbmcgaWYgYSBibG9jayBiZWxv
bmdzIHRvCisgICAgLy8gYSBuYXR1cmFsIGxvb3AuIEl0J3MgZmFzdGVyIHRvIGNhbGwgTmF0dXJh
bExvb3BzOjpiZWxvbmdzVG8oKSwgd2hpY2gKKyAgICAvLyB0cmllcyB0byBiZSBPKGxvb3AgZGVw
dGgpIHJhdGhlciB0aGFuIE8obG9vcCBzaXplKS4gTG9vcCBkZXB0aCBpcworICAgIC8vIGFsbW9z
dCBhbHdheXMgc21hbGxlciB0aGFuIGxvb3Agc2l6ZS4gQSAqbG90KiBzbWFsbGVyLgorICAgIGJv
b2wgY29udGFpbnModHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIGNvbnN0CisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChibG9jayAhPSBoZWFkZXIoKSk7IC8vIEhlYWRlciBz
aG91bGQgYmUgY29udGFpbmVkLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gVGhlIGluZGV4IG9mIHRoaXMgbG9vcCBpbiBOYXR1cmFsTG9vcHMuCisgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgYm9vbCBpc091dGVy
TW9zdExvb3AoKSBjb25zdCB7IHJldHVybiBtX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYOyB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fZ3JhcGgpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG91dC5wcmlu
dCgiW0hlYWRlcjogIiwgbV9ncmFwaC0+ZHVtcChoZWFkZXIoKSksICIsIEJvZHk6Iik7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JvZHkuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAiLCBtX2dyYXBoLT5kdW1wKG1fYm9keVtpXSkpOworICAgICAgICBv
dXQucHJpbnQoIl0iKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lPgorICAgIGZyaWVuZCBjbGFzcyBOYXR1cmFsTG9vcHM7CisgICAgCisgICAgdm9pZCBhZGRC
bG9jayh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsg
fQorCisgICAgR3JhcGgqIG1fZ3JhcGg7CisgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgbV9oZWFk
ZXI7CisgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCA0PiBtX2JvZHk7CisgICAgdW5z
aWduZWQgbV9vdXRlckxvb3BJbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBOYXR1cmFsTG9vcHMgeworcHVibGljOgorICAg
IHR5cGVkZWYgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gSW5uZXJNb3N0TG9vcEluZGljZXM7CisK
KyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoLCBEb21pbmF0b3JzPEdyYXBoPiYgZG9taW5h
dG9ycywgYm9vbCBzZWxmQ2hlY2sgPSBmYWxzZSkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQor
ICAgICAgICAsIG1faW5uZXJNb3N0TG9vcEluZGljZXMoZ3JhcGgudGVtcGxhdGUgbmV3TWFwPElu
bmVyTW9zdExvb3BJbmRpY2VzPigpKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50IHRoZSBj
bGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1cmFsIGxvb3AgZmluZGVyLiBUaGUgZmlyc3QKKyAg
ICAgICAgLy8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdo
ZXJlIEIgZG9taW5hdGVzIEEuCisgICAgICAgIC8vIFRoZW4gQiBpcyBhIGxvb3AgaGVhZGVyIGFu
ZCBBIGlzIGEgYmFja3dhcmQgYnJhbmNoaW5nIGJsb2NrLiBXZSB3aWxsCisgICAgICAgIC8vIHRo
ZW4gYWNjdW11bGF0ZSwgZm9yIGVhY2ggbG9vcCBoZWFkZXIsIG11bHRpcGxlIGJhY2t3YXJkIGJy
YW5jaGluZworICAgICAgICAvLyBibG9ja3MuIFRoZW4gd2UgYmFja3dhcmRzIGdyYXBoIHNlYXJj
aCBmcm9tIHRoZSBiYWNrd2FyZCBicmFuY2hpbmcKKyAgICAgICAgLy8gYmxvY2tzIHRvIHRoZWly
IGxvb3AgaGVhZGVycywgd2hpY2ggZ2l2ZXMgdXMgYWxsIG9mIHRoZSBibG9ja3MgaW4gdGhlCisg
ICAgICAgIC8vIGxvb3AgYm9keS4KKyAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOworICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiRG9taW5hdG9yczpcbiIpOworICAgICAgICAgICAgZG9taW5hdG9ycy5kdW1wKFdU
Rjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbV9sb29wcy5zaHJpbmso
MCk7CisgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5v
ZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZ3JhcGguc3VjY2Vzc29ycyhibG9jaykuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgc3VjY2Vzc29yID0gZ3JhcGguc3VjY2Vz
c29ycyhibG9jaylbaV07CisgICAgICAgICAgICAgICAgaWYgKCFkb21pbmF0b3JzLmRvbWluYXRl
cyhzdWNjZXNzb3IsIGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2xvb3BzW2pdLmhlYWRlcigpID09IHN1Y2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9sb29wc1tqXS5hZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZm91
bmQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5hdHVy
YWxMb29wPEdyYXBoPiBsb29wKGdyYXBoLCBzdWNjZXNzb3IsIG1fbG9vcHMuc2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX2xv
b3BzLmFwcGVuZChsb29wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3RzdHJhcDogIiwg
KnRoaXMsICJcbiIpOworICAgIAorICAgICAgICBGYXN0Qml0VmVjdG9yIHNlZW5CbG9ja3M7Cisg
ICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZSwgND4gYmxvY2tXb3JrbGlzdDsKKyAg
ICAgICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubnVtTm9kZXMoKSk7CisgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBO
YXR1cmFsTG9vcDxHcmFwaD4mIGxvb3AgPSBtX2xvb3BzW2ldOworICAgICAgICAKKyAgICAgICAg
ICAgIHNlZW5CbG9ja3MuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChibG9ja1dvcmts
aXN0LmlzRW1wdHkoKSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGxvb3AgIiwgbG9vcCwgIlxuIik7Cisg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTsp
IHsKKyAgICAgICAgICAgICAgICBzZWVuQmxvY2tzW2dyYXBoLmluZGV4KGxvb3Bbal0pXSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKCFibG9ja1dvcmtsaXN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0g
YmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdp
dGggIiwgZ3JhcGguZHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
Z3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3IgPSBncmFwaC5wcmVkZWNlc3Nv
cnMoYmxvY2spW2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbkJsb2Nrc1tncmFwaC5p
bmRleChwcmVkZWNlc3NvcildKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHNlZW5CbG9ja3NbZ3JhcGguaW5kZXgocHJlZGVj
ZXNzb3IpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gRmlndXJlIG91dCByZXZlcnNlIG1hcHBpbmcgZnJvbSBibG9ja3Mg
dG8gbG9vcHMuCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGdyYXBoLm51bU5v
ZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGQ6OnR1cGxlX3NpemU8SW5uZXJNb3N0TG9vcEluZGljZXM+Ojp2YWx1ZTsgaS0tOykKKyAg
ICAgICAgICAgICAgICBtX2lubmVyTW9zdExvb3BJbmRpY2VzW2Jsb2NrXVtpXSA9IFVJTlRfTUFY
OworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgbG9vcEluZGV4ID0gbV9sb29wcy5z
aXplKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICAgICAgTmF0dXJhbExvb3A8R3JhcGg+JiBs
b29wID0gbV9sb29wc1tsb29wSW5kZXhdOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYmxvY2tJbmRleEluTG9vcCA9IGxvb3Auc2l6ZSgpOyBibG9ja0luZGV4SW5Mb29wLS07
KSB7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBsb29wW2Js
b2NrSW5kZXhJbkxvb3BdOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0ZDo6dHVwbGVfc2l6ZTxJbm5lck1vc3RMb29wSW5kaWNlcz46OnZh
bHVlOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGhpc0luZGV4ID0gbV9p
bm5lck1vc3RMb29wSW5kaWNlc1tibG9ja11baV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzSW5kZXggPT0gVUlOVF9NQVggfHwgbG9vcC5zaXplKCkgPCBtX2xvb3BzW3RoaXNJbmRleF0u
c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbnRvQm91bmRlZFZlY3Rv
cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubmVyTW9zdExvb3BJbmRpY2VzW2Js
b2NrXSwgc3RkOjp0dXBsZV9zaXplPElubmVyTW9zdExvb3BJbmRpY2VzPjo6dmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcEluZGV4LCBpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBlYWNoIGJsb2Nr
IGtub3dzIGl0cyBpbm5lci1tb3N0IGxvb3AgYW5kIGl0cyBuZXh0LXRvLWlubmVyLW1vc3QgbG9v
cC4gVXNlCisgICAgICAgIC8vIHRoaXMgdG8gZmlndXJlIG91dCBsb29wIHBhcmVudGluZy4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCA9IG1fbG9vcHNbaV07CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2lubmVyTW9zdExvb3BJbmRpY2VzW2xvb3AuaGVhZGVyKCldWzBdID09
IGkpOworICAgICAgICAKKyAgICAgICAgICAgIGxvb3AubV9vdXRlckxvb3BJbmRleCA9IG1faW5u
ZXJNb3N0TG9vcEluZGljZXNbbG9vcC5oZWFkZXIoKV1bMV07CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgaWYgKHNlbGZDaGVjaykgeworICAgICAgICAgICAgLy8gRG8gc29tZSBzZWxmLXZlcmlm
aWNhdGlvbiB0aGF0IHdlJ3ZlIGRvbmUgc29tZSBvZiB0aGlzIGNvcnJlY3RseS4KKyAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBncmFwaC5udW1Ob2Rlcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUg
YmxvY2sgPSBncmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPio+IHNpbXBsZUxvb3BzT2Y7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3Bz
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5jb250
YWlucyhibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVMb29wc09mLmFwcGVu
ZCgmbV9sb29wc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPio+IGZhbmN5TG9vcHNPZiA9
IGxvb3BzT2YoYmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RkOjpzb3J0
KHNpbXBsZUxvb3BzT2YuYmVnaW4oKSwgc2ltcGxlTG9vcHNPZi5lbmQoKSk7CisgICAgICAgICAg
ICAgICAgc3RkOjpzb3J0KGZhbmN5TG9vcHNPZi5iZWdpbigpLCBmYW5jeUxvb3BzT2YuZW5kKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2ltcGxlTG9v
cHNPZiA9PSBmYW5jeUxvb3BzT2YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiUmVzdWx0czogIiwgKnRo
aXMsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dy
YXBoOyB9CisgICAgCisgICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbG9vcHMuc2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBOYXR1cmFsTG9vcDxH
cmFwaD4mIGxvb3AodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xv
b3BzW2ldOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm4gZWl0aGVyIG51bGwgaWYgdGhlIGJs
b2NrIGlzbid0IGEgbG9vcCBoZWFkZXIsIG9yIHRoZQorICAgIC8vIGxvb3AgaXQgYmVsb25ncyB0
by4KKyAgICBjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGhlYWRlck9mKHR5cGVuYW1lIEdyYXBo
OjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgTmF0dXJhbExvb3A8R3Jh
cGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgaWYgKCFsb29wKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChsb29wLT5oZWFkZXIoKSA9PSBibG9j
aykKKyAgICAgICAgICAgIHJldHVybiBsb29wOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICAgICAgZm9yICg7IGxvb3A7IGxvb3AgPSBpbm5lck1vc3RPdXRlckxvb3Ao
Kmxvb3ApKQorICAgICAgICAgICAgICAgIEFTU0VSVChsb29wLT5oZWFkZXIoKSAhPSBibG9jayk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGNvbnN0IE5h
dHVyYWxMb29wPEdyYXBoPiogaW5uZXJNb3N0TG9vcE9mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJs
b2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBtX2lubmVyTW9zdExv
b3BJbmRpY2VzW2Jsb2NrXVswXTsKKyAgICAgICAgaWYgKGluZGV4ID09IFVJTlRfTUFYKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9sb29wc1tpbmRleF07CisgICAg
fQorICAgIAorICAgIGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiogaW5uZXJNb3N0T3V0ZXJMb29w
KGNvbnN0IE5hdHVyYWxMb29wPEdyYXBoPiYgbG9vcCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRlckxvb3BJbmRleF07CisgICAg
fQorICAgIAorICAgIGJvb2wgYmVsb25nc1RvKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrLCBj
b25zdCBOYXR1cmFsTG9vcDxHcmFwaD4mIGNhbmRpZGF0ZUxvb3ApIGNvbnN0CisgICAgeworICAg
ICAgICAvLyBJdCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxm
LCBpZiBpdCdzIHNtYWxsLgorICAgICAgICBpZiAoY2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQor
ICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29udGFpbnMoYmxvY2spOworICAgICAg
ICAKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1v
c3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0gaW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkg
eworICAgICAgICAgICAgaWYgKGxvb3AgPT0gJmNhbmRpZGF0ZUxvb3ApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBsb29wRGVwdGgodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBkZXB0aCA9IDA7CisgICAgICAgIGZvciAo
Y29uc3QgTmF0dXJhbExvb3A8R3JhcGg+KiBsb29wID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsg
bG9vcDsgbG9vcCA9IGlubmVyTW9zdE91dGVyTG9vcCgqbG9vcCkpCisgICAgICAgICAgICBkZXB0
aCsrOworICAgICAgICByZXR1cm4gZGVwdGg7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybiBh
bGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRvLiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHZlY3RvciBp
cyB0aGUgaW5uZXJtb3N0IGxvb3AuIFRoZSBsYXN0IGlzIHRoZQorICAgIC8vIG91dGVybW9zdCBs
b29wLgorICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcDxHcmFwaD4qPiBsb29wc09mKHR5cGVu
YW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPGNvbnN0
IE5hdHVyYWxMb29wPEdyYXBoPio+IHJlc3VsdDsKKyAgICAgICAgZm9yIChjb25zdCBOYXR1cmFs
TG9vcDxHcmFwaD4qIGxvb3AgPSBpbm5lck1vc3RMb29wT2YoYmxvY2spOyBsb29wOyBsb29wID0g
aW5uZXJNb3N0T3V0ZXJMb29wKCpsb29wKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobG9v
cCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIk5hdHVyYWxMb29w
czp7Iik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbG9vcHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG1fbG9vcHNbaV0pOworICAgICAgICBvdXQucHJpbnQoIn0iKTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIC8vIElmIHdlIGV2ZXIg
aGFkIGEgc2NhbGFiaWxpdHkgcHJvYmxlbSBpbiBvdXIgbmF0dXJhbCBsb29wIGZpbmRlciwgd2Ug
Y291bGQKKyAgICAvLyB1c2Ugc29tZSBIYXNoTWFwJ3MgaGVyZS4gQnV0IGl0IGp1c3QgZmVlbHMg
YSBoZWNrIG9mIGEgbG90IGxlc3MgY29udmVuaWVudC4KKyAgICBWZWN0b3I8TmF0dXJhbExvb3A8
R3JhcGg+LCA0PiBtX2xvb3BzOworICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjp0ZW1wbGF0ZSBN
YXA8SW5uZXJNb3N0TG9vcEluZGljZXM+IG1faW5uZXJNb3N0TG9vcEluZGljZXM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpOYXR1cmFsTG9vcDsKK3VzaW5nIFdURjo6
TmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL1dURi93dGYvUmFuZ2VTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SYW5nZVNldC5oCShyZXZpc2lvbiAyMTk3ODkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9SYW5nZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIFJhbmdlVHlwZSBSYW5nZTsKICAgICB0eXBlZGVmIHR5cGVuYW1l
IFJhbmdlOjpUeXBlIFR5cGU7CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxSYW5nZSwgOD4gVmVjdG9y
VHlwZTsKKyAgICAKICAgICBSYW5nZVNldCgpCiAgICAgewogICAgIH0KQEAgLTEyNSw4ICsxMjcs
MjMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgb3V0LnByaW50KCJ7IiwgbGlzdER1bXAobV9y
YW5nZXMpLCAiLCBpc0NvbXBhY3QgPSAiLCBtX2lzQ29tcGFjdCwgIn0iKTsKICAgICB9CisgICAg
CisgICAgdHlwZW5hbWUgVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2VzLmJlZ2luKCk7CisgICAgfQorICAgIAorICAg
IHR5cGVuYW1lIFZlY3RvclR5cGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9yYW5nZXMuZW5kKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRk
QWxsKGNvbnN0IFJhbmdlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGZvciAoUmFuZ2UgcmFu
Z2UgOiBvdGhlcikKKyAgICAgICAgICAgIGFkZChyYW5nZSk7CisgICAgfQogCi1wcml2YXRlOgog
ICAgIHZvaWQgY29tcGFjdCgpCiAgICAgewogICAgICAgICBpZiAobV9pc0NvbXBhY3QpCkBAIC0x
NjQsNiArMTgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9pc0NvbXBhY3QgPSB0cnVlOwogICAg
IH0KICAgICAKK3ByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgb3ZlcmxhcHNOb25FbXB0eShjb25z
dCBSYW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCiAgICAgewogICAgICAgICByZXR1cm4gbm9uRW1w
dHlSYW5nZXNPdmVybGFwKGEuYmVnaW4oKSwgYS5lbmQoKSwgYi5iZWdpbigpLCBiLmVuZCgpKTsK
QEAgLTE4Nyw3ICsyMDUsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAg
ICAgfQogICAgIAotICAgIFZlY3RvcjxSYW5nZSwgOD4gbV9yYW5nZXM7CisgICAgVmVjdG9yVHlw
ZSBtX3JhbmdlczsKICAgICBib29sIG1faXNDb21wYWN0IHsgdHJ1ZSB9OwogfTsKIAo=
</data>
<flag name="review"
          id="336932"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>