<?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>232220</bug_id>
          
          <creation_ts>2021-10-24 13:33:28 -0700</creation_ts>
          <short_desc>[CF] Reduce duplication and unneeded buffer allocations and copying in URL code, also remove unused methods and functions</short_desc>
          <delta_ts>2021-11-10 17:06:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>232915</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1808250</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-24 13:33:28 -0700</bug_when>
    <thetext>[CF] Reduce duplication and unneeded buffer allocations and copying, also remove unused methods and functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808261</commentid>
    <comment_count>1</comment_count>
      <attachid>442322</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-24 14:11:47 -0700</bug_when>
    <thetext>Created attachment 442322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808262</commentid>
    <comment_count>2</comment_count>
      <attachid>442323</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-24 14:15:37 -0700</bug_when>
    <thetext>Created attachment 442323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809825</commentid>
    <comment_count>3</comment_count>
      <attachid>442741</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-28 14:10:24 -0700</bug_when>
    <thetext>Created attachment 442741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809844</commentid>
    <comment_count>4</comment_count>
      <attachid>442745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-28 14:46:50 -0700</bug_when>
    <thetext>Created attachment 442745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810518</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-31 13:34:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/84859824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813289</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 13:32:44 -0800</bug_when>
    <thetext>This 2-week-old patch (from before my week of vacation) is looking good and I think it can get reviewed and landed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813306</commentid>
    <comment_count>7</comment_count>
      <attachid>442745</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-09 13:46:36 -0800</bug_when>
    <thetext>Comment on attachment 442745
Patch

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

&gt; Source/WTF/wtf/cf/CFURLExtras.cpp:37
&gt; +    auto buffer = static_cast&lt;uint8_t*&gt;(malloc(bytesLength));

Is it possible to use fastMalloc and then make a CFAllocator that calls fastFree?

&gt; Source/WebKit/Shared/cf/ArgumentCodersCF.cpp:646
&gt; +    encoder &lt;&lt; IPC::DataReference(bytesAsVector(url));

It seems like this could be even further optimized in the future because we don&apos;t need the bytes in a vector.  We just need the bytes to go into the encoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813316</commentid>
    <comment_count>8</comment_count>
      <attachid>442745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 14:00:15 -0800</bug_when>
    <thetext>Comment on attachment 442745
Patch

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

I’ll look into both of your suggestions, Alex, for a follow-up.

&gt;&gt; Source/WTF/wtf/cf/CFURLExtras.cpp:37
&gt;&gt; +    auto buffer = static_cast&lt;uint8_t*&gt;(malloc(bytesLength));
&gt; 
&gt; Is it possible to use fastMalloc and then make a CFAllocator that calls fastFree?

Note that this function is only used in the originalURLData function, which has been using malloc/realloc until now, so the use of malloc here is not a change.

And, yes, that *is* possible.

I’m not sure if it’s worth it.

We’d have to store the CFAllocatorRef in a global, and it would be kind of a lot more code, and the CFURL itself is stored in something allocated by malloc, not fastMalloc.

&gt;&gt; Source/WebKit/Shared/cf/ArgumentCodersCF.cpp:646
&gt;&gt; +    encoder &lt;&lt; IPC::DataReference(bytesAsVector(url));
&gt; 
&gt; It seems like this could be even further optimized in the future because we don&apos;t need the bytes in a vector.  We just need the bytes to go into the encoder.

Yes; would be a lot more code but could be good.

Note that in non-pathological cases there is no fastMalloc/Free here because the vector has inline capacity. So an optimized implementation would save a copy, but there is not the epic slowness implied by the way this code looks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813342</commentid>
    <comment_count>9</comment_count>
      <attachid>442745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 14:39:03 -0800</bug_when>
    <thetext>Comment on attachment 442745
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/cf/CFURLExtras.cpp:37
&gt;&gt;&gt; +    auto buffer = static_cast&lt;uint8_t*&gt;(malloc(bytesLength));
&gt;&gt; 
&gt;&gt; Is it possible to use fastMalloc and then make a CFAllocator that calls fastFree?
&gt; 
&gt; Note that this function is only used in the originalURLData function, which has been using malloc/realloc until now, so the use of malloc here is not a change.
&gt; 
&gt; And, yes, that *is* possible.
&gt; 
&gt; I’m not sure if it’s worth it.
&gt; 
&gt; We’d have to store the CFAllocatorRef in a global, and it would be kind of a lot more code, and the CFURL itself is stored in something allocated by malloc, not fastMalloc.

Occurs to me that we could also maybe use the fastMalloc CFAllocator for the CFData object itself, not just the data payload. Again, not sure how valuable, but we could probably use that all over the place in WebKit when calling CF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813349</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 14:58:49 -0800</bug_when>
    <thetext>Committed r285536 (244053@main): &lt;https://commits.webkit.org/244053@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813410</commentid>
    <comment_count>11</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-11-09 16:59:11 -0800</bug_when>
    <thetext>It looks like this change has caused some API tests to crash:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.CoreFoundation            0x00007fff31381c71 CFURLGetBytes + 43
1   com.apple.JavaScriptCore            0x0000000101cc263f WTF::bytesAsString(__CFURL const*) + 31 (CFURLExtras.cpp:46)
2   com.apple.WebKit                    0x0000000103e0a51e -[WKBrowsingContextController loadHTMLString:baseURL:userData:] + 168 (WKBrowsingContextController.mm:176)
3   TestWebKitAPI                       0x0000000100f5ee46 WebKit2UserContentTest_RemoveAllUserScripts_Test::TestBody() + 422 (UserContentTest.mm:241)
4   TestWebKitAPI                       0x0000000101070f5c void testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::Test, void&gt;(testing::Test*, void (testing::Test::*)(), char const*) + 72
5   TestWebKitAPI                       0x0000000101070ec5 testing::Test::Run() + 193
6   TestWebKitAPI                       0x0000000101071be6 testing::TestInfo::Run() + 240
7   TestWebKitAPI                       0x00000001010723a9 testing::TestSuite::Run() + 303
8   TestWebKitAPI                       0x000000010107d1c4 testing::internal::UnitTestImpl::RunAllTests() + 840
9   TestWebKitAPI                       0x000000010107cd65 bool testing::internal::HandleExceptionsInMethodIfSupported&lt;testing::internal::UnitTestImpl, bool&gt;(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) + 72
10  TestWebKitAPI                       0x000000010107ccf0 testing::UnitTest::Run() + 108
11  TestWebKitAPI                       0x0000000100f2ebf8 TestWebKitAPI::TestsController::run(int, char**) + 120 (TestsController.cpp:90)
12  TestWebKitAPI                       0x000000010104906f main + 378
13  libdyld.dylib                       0x00007fff6b3f9cc9 start + 1

https://build.webkit.org/#/builders/13/builds/6631/steps/17/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813412</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 16:59:53 -0800</bug_when>
    <thetext>But not in EWS? OK, please revert the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813414</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-09 17:03:07 -0800</bug_when>
    <thetext>Looks like it did fail in EWS and I ignored it :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813417</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-09 17:03:59 -0800</bug_when>
    <thetext>It was all green when I reviewed it.  Something strange is going on with EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813418</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-11-09 17:05:22 -0800</bug_when>
    <thetext>The result from https://ews-build.webkit.org/#/builders/3/builds/59830 came back 1 hour ago, perhaps it hadn&apos;t completed by the time it was reviewed and landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813422</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-11-09 17:07:21 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 232915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813664</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-10 09:56:06 -0800</bug_when>
    <thetext>Committed r285588 (244096@main): &lt;https://commits.webkit.org/244096@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813848</commentid>
    <comment_count>18</comment_count>
      <attachid>442745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-10 17:06:04 -0800</bug_when>
    <thetext>Comment on attachment 442745
Patch

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

&gt;&gt;&gt; Source/WebKit/Shared/cf/ArgumentCodersCF.cpp:646
&gt;&gt;&gt; +    encoder &lt;&lt; IPC::DataReference(bytesAsVector(url));
&gt;&gt; 
&gt;&gt; It seems like this could be even further optimized in the future because we don&apos;t need the bytes in a vector.  We just need the bytes to go into the encoder.
&gt; 
&gt; Yes; would be a lot more code but could be good.
&gt; 
&gt; Note that in non-pathological cases there is no fastMalloc/Free here because the vector has inline capacity. So an optimized implementation would save a copy, but there is not the epic slowness implied by the way this code looks.

After further exploration this isn’t practical.

The CFURLGetBytes function returns all the bytes in a provided buffer, and the Encoder abstraction does not allow clients to first get a pointer and then put bytes there, so we can’t easily do better than the Vector with inline capacity.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442322</attachid>
            <date>2021-10-24 14:11:47 -0700</date>
            <delta_ts>2021-10-24 14:30:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232220-20211024141146.patch</filename>
            <type>text/plain</type>
            <size>63016</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiZDg5ZTg4NjViZmVmZTdkYmZkYzZi
ZTBkNGRjODBlZWJhODBjYWMuLmQ4ZWFkMjAxNjMyZGNlMzNjMDEzYmFjYmEwYjNhMGQ0NjEyMTA4
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMTAtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRl
ZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1VSTC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1
ZGVzLiBVc2UgZGVmYXVsdCBpbnN0ZWFkIG9mIHsgfQorICAgICAgICBmb3IgZW1wdHkgZGVzdHJ1
Y3Rvci4gQWRkZWQgZW1wdHlDRlVSTCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9jZi9DRlVS
TEV4dHJhcy5jcHA6CisgICAgICAgIChXVEY6OmJ5dGVzQXNDRkRhdGEpOiBBZGRlZC4gUmVwbGFj
ZXMgb3JpZ2luYWxVUkxEYXRhIGZyb20gTlNVUkxFeHRyYXMubW0sCisgICAgICAgIGJ1dCB3aXRo
IGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhbmQgbW9yZSBlcnJvciBjaGVja2luZy4gSGVyZSBp
dCdzIGFsc28KKyAgICAgICAgYWxvbmdzaWRlIHRoZSBvdGhlciBuZWFybHkgaWRlbnRpY2FsIGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1N0cmluZyk6IEFkZGVkLiBSZXBsYWNlcyBn
ZXRVUkxCeXRlcyBmb3IgY2FsbGVycyB0aGF0IGFyZQorICAgICAgICBnb2luZyB0byB0dXJuIHRo
ZSBieXRlcyBpbnRvIGEgV1RGOjpTdHJpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY2FsbGVy
cworICAgICAgICB3ZXJlIGNvbnZlcnRpbmcgZnJvbSBDRlVSTFJlZiB0byBXVEY6OkNTdHJpbmcg
YW5kIHRoZW4gdG8gV1RGOjpTdHJpbmcsIHNvCisgICAgICAgIHRoaXMgZWxpbWluYXRlcyB0aGUg
bWFsbG9jL2ZyZWUgcGFpciBmb3IgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1ZlY3Rv
cik6IEFkZGVkLiBSZXBsYWNlcyBnZXRVUkxCeXRlcyB1c2luZyBhIHJldHVybiB2YWx1ZQorICAg
ICAgICBpbnN0ZWFkIG9mIGFuIG91dCBhcmd1bWVudC4gQWRkcyB0aGUgb3B0aW1pemF0aW9uIG9m
IGZpbGxpbmcgdGhlIGJ1ZmZlciBpZgorICAgICAgICB0aGUgaW5saW5lIGNhcGFjaXR5IGlzIHN1
ZmZpY2llbnQsIHdoaWNoIHdhcyBpbiBvcmlnaW5hbFVSTERhdGEsIGJ1dCBub3QKKyAgICAgICAg
aGVyZSBpbiBnZXRVUkxCeXRlcyBiZWZvcmUuCisgICAgICAgIChXVEY6OmlzU2FtZU9yaWdpbik6
IFJlbmFtZWQgZnJvbSBpc0NGVVJMU2FtZU9yaWdpbiBhbmQgcmV3cm90ZSB0aGlzIHRvCisgICAg
ICAgIGhhdmUgZmV3ZXIgdHlwZSBjYXN0cyBhbmQgbW9yZSBwYXJhbGxlbCBzdHJ1Y3R1cmUgc28g
aXQncyBlYXNpZXIgdG8gcmVhZCwKKyAgICAgICAgd2hpbGUgYWRhcHRpbmcgaXQgdG8gdXNlIGJ5
dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiB3dGYvY2YvQ0ZVUkxFeHRyYXMuaDogUmVwbGFjZWQg
VVJMQ2hhckJ1ZmZlciwgZ2V0VVJMQnl0ZXMsIGFuZAorICAgICAgICBpc0NGVVJMU2FtZU9yaWdp
biB3aXRoIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHksIGJ5dGVzQXNDRkRhdGEsCisgICAg
ICAgIGJ5dGVzQXNTdHJpbmcsIGJ5dGVzQXNWZWN0b3IsIGFuZCBpc1NhbWVPcmlnaW4uIEdvdCBy
aWQgb2YgdW5uZWVkZWQKKyAgICAgICAgaW5jbHVkZXMuCisKKyAgICAgICAgKiB3dGYvY2YvVVJM
Q0YuY3BwOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IFVzZSBieXRlc0FzU3RyaW5nIHRvIHN0
cmVhbWxpbmUgaW1wbGVtZW50YXRpb24gYW5kCisgICAgICAgIHJlbW92ZSBhbGxvY2F0aW9uL2Rl
YWxsY2F0aW9uIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6VVJMOjplbXB0eUNGVVJMKTog
QWRkZWQuIFVzZWQgdG8gcmVmYWN0b3IgY3JlYXRlQ0ZVUkwgc28gd2UgY2FuCisgICAgICAgIHNo
YXJlIGl0IGFjcm9zcyBGb3VuZGF0aW9uIGFuZCBub24tRm91bmRhdGlvbiB2ZXJzaW9ucy4KKyAg
ICAgICAgKFdURjo6VVJMOjpjcmVhdGVDRlVSTCBjb25zdCk6IEFkZGVkIHRoZSBsb2dpYyB0aGF0
IHdhcyBpbiB0aGUgdmVyc2lvbgorICAgICAgICBpbiBVUkxDb2NvYS5tbSBzbyB3ZSBjYW4gc2hh
cmUgdGhpcyBzaW5nbGUgdmVyc2lvbiwgYW5kIHJlbW92ZWQgdGhlICNpZgorICAgICAgICBzdXJy
b3VuZGluZyB0aGlzLgorICAgICAgICAoV1RGOjpVUkw6OmZpbGVTeXN0ZW1QYXRoIGNvbnN0KTog
VXNlIGF1dG8uCisKKyAgICAgICAgKiB3dGYvY29jb2EvTlNVUkxFeHRyYXMuaDogQ2hhbmdlZCBV
UkxXaXRoVXNlclR5cGVkU3RyaW5nIHRvIGlnbm9yZQorICAgICAgICB0aGUgYmFzZVVSTCBhcmd1
bWVudC4gSXQncyBub3QgdXNlZCwgYnV0IHRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCBhbmQKKyAg
ICAgICAgY3VycmVudGx5IHVzZWQgaW4gU2FmYXJpIHNvdXJjZSBjb2RlLCB3aGljaCwgbGlrZSBh
bGwgY2FsbGVycyBwYXNzZXMKKyAgICAgICAgYSBuaWwgZm9yIGJhc2VVUkwuIHNvLCBmb3Igbm93
IGxlZnQgdGhlIGFyZ3VtZW50LiBSZW1vdmVkIHRoZSBiYXNlVVJMCisgICAgICAgIGFyZ3VtZW50
IGZyb20gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQuIFJlbW92ZWQgdW51c2VkIGZ1
bmN0aW9ucworICAgICAgICByYW5nZU9mVVJMU2NoZW1lIGFuZCBsb29rc0xpa2VBYnNvbHV0ZVVS
TC4KKworICAgICAgICAqIHd0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbTogUmVtb3ZlZCAidXNpbmcg
bmFtZXNwYWNlIFVSTEhlbHBlcnMiLgorICAgICAgICAoV1RGOjpyZWFkSUROQWxsb3dlZFNjcmlw
dExpc3RGaWxlKTogVXNlIFVSTEhlbHBlcnMgZXhwbGljaXRseS4KKyAgICAgICAgKFdURjo6ZGVj
b2RlSG9zdE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6ZW5jb2RlSG9zdE5hbWUpOiBEaXR0
by4KKyAgICAgICAgKFdURjo6VVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9u
ZW50KTogU2ltcGxpZmllZCBieSB1c2luZworICAgICAgICB0aGUgYnl0ZXNBc1ZlY3RvciBmdW5j
dGlvbi4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ1Jlc291cmNlU3BlY2lmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VVJMV2l0aERhdGEpOiBDYWxsIFVSTEJ5VHJ1bmNhdGluZ09u
ZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudAorICAgICAgICBkaXJlY3RseS4KKyAgICAgICAgKFdU
Rjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZyk6IFJlbW92ZWQgdGhlIHVubmVlZGVkIHN1cHBvcnQg
Zm9yIGEKKyAgICAgICAgYmFzZSBVUkwuIFVzZSBVUkxIZWxwZXJzIGV4cGxpY2l0bHkuCisgICAg
ICAgIChXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6Omhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmluZyk6IFVzZSBicmlkZ2VfY2Fz
dC4KKyAgICAgICAgKFdURjo6ZGF0YUZvclVSTENvbXBvbmVudFR5cGUpOiBSZWFycmFuZ2VkIHRv
IHNpbXBsaWZ5IGEgYml0LCByZW1vdmUgc3VwcG9ydAorICAgICAgICBmb3Igc3BlY2lhbCB2YWx1
ZSBmb3IgQ0ZVUkxDb21wb25lbnRUeXBlIHRoYXQgbWVhbnMgdGhlIGNvbXBsZXRlIFVSTCwgc2lu
Y2UKKyAgICAgICAgbm8gY2FsbGVycyB3ZXJlIHVzaW5nIHRoYXQsIGFuZCB1c2UgYnl0ZXNBc1Zl
Y3Rvci4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRD
aGFyYWN0ZXIpOiBVc2UgYnJpZGdlX2Nhc3QgYW5kCisgICAgICAgIGJ5dGVzQXNWZWN0b3IuCisg
ICAgICAgIChXVEY6Om9yaWdpbmFsVVJMRGF0YSk6IFVzZSBicmlkZ2VfY2FzdCBhbmQgYnl0ZXNB
c0NGRGF0YS4KKyAgICAgICAgKFdURjo6dXNlclZpc2libGVTdHJpbmcpOiBVc2UgVVJMSGVscGVy
cyBleHBsaWNpdGx5LgorICAgICAgICAoV1RGOjppc1VzZXJWaXNpYmxlVVJMKTogUmV3cm90ZSBm
b3Igc2ltcGxpY2l0eSBhbmQgY29kaW5nIHN0eWxlOyBzaW5jZQorICAgICAgICB0aGUgbG9jYWwg
Y2hhcmFjdGVycyBhcmUgYSBudWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmcsIHdlIGRvbid0IG5lZWQK
KyAgICAgICAgbGVuZ3RoIGNoZWNrcyBhcyBsb25nIGFzIHdlIHZhbGlkYXRlIGNoYXJhY3RlcnMg
Zmlyc3QsIHNpbmNlIGEgJ1wwJworICAgICAgICBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgYW5kIHdp
bGwgbm90IGJlIHZhbGlkLgorICAgICAgICAoV1RGOjpyYW5nZU9mVVJMU2NoZW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6bG9va3NMaWtlQWJzb2x1dGVVUkwpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL2NvY29hL1VSTENvY29hLm1tOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IENo
YW5nZWQgdG8ganVzdCBjYWxsIHRoZSBDRlVSTFJlZiBjb25zdHJ1Y3RvciBzbyB3ZQorICAgICAg
ICBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGluZ3MgdHdpY2UuCisgICAgICAgIChXVEY6OlVSTDo6
ZW1wdHlDRlVSTCk6IEFkZGVkLiBUaGlzIGlzIHRoZSBvbmUgcGFydCBvZiB0aGUgY3JlYXRlQ0ZV
UkwKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBkZXBlbmRzIG9uIE9iamVjdGl2ZS1DLgorICAgICAg
ICAoV1RGOjpVUkw6OmNyZWF0ZUNGVVJMIGNvbnN0KTogTWVyZ2VkIGludG8gdGhlIGZ1bmN0aW9u
IGluIFVSTENGLmNwcC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJy
aWRnZV9jYXN0IGluc3RlYWQgb2YgdGhlIHRyaWNraWVyCisgICAgICAgIGlkaW9tIHdpdGggZXhw
bGljaXQgY2FsbHMgdG8gbGVha1JlZiBhbmQgX19icmlkZ2VfdHJhbnNmZXIuCisKKyAgICAgICAg
KiB3dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW06OnNl
dE1ldGFkYXRhVVJMKTogVXBkYXRlZCBzaW5jZSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nCisgICAg
ICAgIG5vIGxvbmdlciByZXF1aXJlcyBhIGJhc2VVUkwgb2YgbmlsIHRvIGJlIHBhc3NlZC4gQWxz
byByZW1vdmVkIGV4cGxpY2l0CisgICAgICAgIFdURiBuYW1lc3BhY2Ugc2luY2UgdGhpcyBjb2Rl
IGl0c2VsZiBpcyBpbiB0aGUgV1RGIG5hbWVzcGFjZS4KKwogMjAyMS0xMC0yNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZG9wdCBicmlkZ2VfY2Fz
dCBhbmQgbWFrZVZlY3RvciBpbiBhIGZldyBtb3JlIHBsYWNlcywgaW5jbHVkaW5nIGNhc2VzIHdo
ZXJlIGFkb3B0Q0YvTlMgd2FzIHVzZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDc2NmE0NTE3
ZGQ2MzM4YTlhMWYwOGRlZmMxYTI3OWIxYmE5ZTI4NC4uMTNmOTYwYWI4OWEzYjZlMzU3MmQ5MGI5
Njg3NGE4ZTk4NTllNTcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAyMS0xMC0yNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NGXSBSZWR1Y2UgZHVw
bGljYXRpb24gYW5kIHVubmVlZGVkIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weWluZyBpbiBV
UkwgY29kZSwgYWxzbyByZW1vdmUgdW51c2VkIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMjIwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2Mv
Y2YvV0tVUkxDRi5tbToKKyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aENGVVJMKTogVXNlIGJ5dGVz
QXNTdHJpbmcsIHNhdmluZyBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24KKyAgICAgICAgb2YgYSBD
U3RyaW5nIGVhY2ggdGltZSB0aGlzIGlzIGNhbGxlZC4KKworICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ1VSTFdy
YXBwZXIgZW5jb2RlV2l0aENvZGVyOl0pOiBVc2UgYnl0ZXNBc1ZlY3Rvci4KKworICAgICAgICAq
IFNoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLmg6IFJlbW92ZWQgdW51c2VkIG1ldGhvZHMKKyAg
ICAgICAgK1tOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6cmVsYXRpdmVUb1VSTDpdIGFuZAor
ICAgICAgICAtW05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLgorCisgICAgICAg
ICogU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMubW06CisgICAgICAgICgrW05TVVJMIF93ZWJf
VVJMV2l0aFdURlN0cmluZzpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtO
U1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSk6IERlbGV0ZWQuCisKKyAgICAgICAg
KiBTaGFyZWQvQ29jb2EvV0tOU1VSTFJlcXVlc3QubW06CisgICAgICAgICgtW1dLTlNVUkxSZXF1
ZXN0IFVSTF0pOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gK1tOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6XQorICAgICAgICBiZWNhdXNlIHRoaXMgY29kZSBpcyBjb252ZXJ0aW5nIGEgV1RG
OjpVUkwgdG8gYW4gTlNVUkwsIHdoaWNoIGNhbiB1c2UgdGhlIGNvbnZlcnNpb24KKyAgICAgICAg
b3BlcmF0b3IgaW4gdGhlIFdURjo6VVJMIGNsYXNzLgorCisgICAgICAgICogU2hhcmVkL2NmL0Fy
Z3VtZW50Q29kZXJzQ0YuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENGVVJMUmVm
Pjo6ZW5jb2RlKTogVXNlIGJ5dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyIGxvYWRGaWxlVVJMOnJlc3RyaWN0VG9GaWxlc1dpdGhpbjp1
c2VyRGF0YTpdKToKKyAgICAgICAgVXNlIGJ5dGVzQXNTdHJpbmcgYW5kIGJyaWRnZV9jYXN0Lgor
ICAgICAgICAoLVtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgbG9hZEhUTUxTdHJpbmc6YmFz
ZVVSTDp1c2VyRGF0YTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciBsb2FkRGF0YTpNSU1FVHlwZTp0ZXh0RW5jb2RpbmdOYW1lOmJhc2VVUkw6dXNlckRh
dGE6XSk6IERpdHRvLgorICAgICAgICAoc2V0VXBQYWdlUG9saWN5Q2xpZW50KTogUmVtb3ZlZCB1
bm5lZWRlZCBjYWxsIHRvICtbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl0KKyAgICAgICAg
YmVjYXVzZSB0aGlzIGNvZGUgaXMgY29udmVydGluZyBhIFdURjo6VVJMIHRvIGFuIE5TVVJMLCB3
aGljaCBjYW4gdXNlIHRoZSBjb252ZXJzaW9uCisgICAgICAgIG9wZXJhdG9yIGluIHRoZSBXVEY6
OlVSTCBjbGFzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENs
aWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5RG93bmxvYWRDbGllbnQ6OndpbGxTZW5k
UmVxdWVzdCk6IFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0bworICAgICAgICArW05TVVJMIF93ZWJf
VVJMV2l0aFdURlN0cmluZzpdIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGNvbnZlcnRpbmcgYSBXVEY6
OlVSTCB0byBhbiBOU1VSTCwKKyAgICAgICAgd2hpY2ggY2FuIHVzZSB0aGUgY29udmVyc2lvbiBv
cGVyYXRvciBpbiB0aGUgV1RGOjpVUkwgY2xhc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW06CisgICAgICAg
ICgtW1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lIFVSTF0pOiBEaXR0by4KKwogMjAyMS0xMC0yNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZG9wdCBi
cmlkZ2VfY2FzdCBhbmQgbWFrZVZlY3RvciBpbiBhIGZldyBtb3JlIHBsYWNlcywgaW5jbHVkaW5n
IGNhc2VzIHdoZXJlIGFkb3B0Q0YvTlMgd2FzIHVzZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCAxNjVlMDVmZmE1YWVjMTllY2UxZTdhNjQ4YjI3NmY2NWI2Mzdj
MmRjLi45ZTQ1M2UzNjVjMjc5YjM3YTQ2ODUwYTJlM2U0ZTllZDA1NmFjMDIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjEtMTAtMjQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9u
IGFuZCB1bm5lZWRlZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJOU1VSTEV4dHJhcy5oOiBUd2Vha2VkIGNv
bW1lbnRzIGEgYml0LiBObyBuZWVkIHRvIHNheSBtZXRob2RzIGFyZSAibmV3Iiwgc2luY2UKKyAg
ICAgICAgdGhhdCB3b24ndCBiZSB0cnVlIGluIHRoZSBmdXR1cmUuIFJlbW92ZWQgdW51c2VkIG1l
dGhvZHMKKyAgICAgICAgK1tOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6cmVsYXRp
dmVUb1VSTDpdLAorICAgICAgICArW05TVVJMIF93ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZzpyZWxhdGl2ZVRvVVJMOl0sCisgICAgICAgICtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YTpdLCAr
W05TVVJMIF93ZWJfVVJMV2l0aERhdGE6cmVsYXR2ZVRvVVJMOl0uCisgICAgICAgIFdhbnRlZCB0
byByZW1vdmUgZXZlbiBtb3JlIG5lYXJseSB1bnVzZWQgbWV0aG9kczogbWFueSB3ZXJlIHVzZWQg
b25seQorICAgICAgICBpbnNpZGUgdGhlIFdlYktpdCBwcm9qZWN0LCBpbiBsZWdhY3kgcGx1Zy1p
biBjb2RlLCBhbmQgc29tZSBzZWVtZWQgdW51c2VkLAorICAgICAgICBidXQgaXQgd2Fzbid0IGVh
c3kgZm9yIG1lIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCisKKyAgICAgICAgKiBNaXNjL1dlYk5T
VVJMRXh0cmFzLm1tOiBSZW1vdmVkICJ1c2luZyBuYW1lc3BhY2UgV2ViQ29yZSIgYW5kCisgICAg
ICAgICJ1c2luZyBuYW1lc3BhY2UgV1RGIi4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxXaXRo
VXNlclR5cGVkU3RyaW5nOnJlbGF0aXZlVG9VUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgrW05T
VVJMIF93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzpdKTogVXNlIFdURiBwcmVmaXggZXhwbGlj
aXRseS4KKyAgICAgICAgKCtbTlNVUkwgX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOnJl
bGF0aXZlVG9VUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgrW05TVVJMIF93ZWJraXRfVVJMV2l0
aFVzZXJUeXBlZFN0cmluZzpdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAg
KCtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOl0pOiBSZW1vdmVkIHNwZWNpYWwgY2Fz
ZSBmb3IgbmlsIHNpbmNlIHRoZSBjb2RlCisgICAgICAgIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5n
IHdpdGggbmlsIHdpdGhvdXQgYW4gZXhwbGljaXQgY2hlY2suCisgICAgICAgICgrW05TVVJMIF93
ZWJfVVJMV2l0aERhdGFBc1N0cmluZzpyZWxhdGl2ZVRvVVJMXSk6IERpdHRvLiBBbHNvIGZvcm1h
dHRlZCB0aGUgY29kZQorICAgICAgICBhcyBhIG9uZS1saW5lci4KKyAgICAgICAgKCtbTlNVUkwg
X3dlYl9VUkxXaXRoRGF0YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxX
aXRoRGF0YTpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtOU1VSTCBfd2Vi
X29yaWdpbmFsRGF0YV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtO
U1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtOU1VS
TCBfd2ViX2lzRW1wdHldKTogVXNlIGJyaWRnZV9jYXN0IGFuZCBtYWtlIGNvZGUgc3R5bGUgY2hl
Y2tlciBoYXBweSBieSB1c2luZworICAgICAgICAiISIgaW5zdGVhZCBvZiAiPT0gMCIuCisgICAg
ICAgICgtW05TVVJMIF93ZWJfVVJMQ1N0cmluZ10pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5
LgorICAgICAgICAoLVtOU1VSTCBfd2Via2l0X2Nhbm9uaWNhbGl6ZV0pOiBVc2UgV2ViQ29yZSBw
cmVmaXggZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNVUkwgX3dlYmtpdF9VUkxCeVJlbW92aW5n
RnJhZ21lbnRdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNVUkwg
X3dlYl9zY2hlbWVTZXBhcmF0b3JXaXRob3V0Q29sb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
TlNVUkwgX3dlYl9kYXRhRm9yVVJMQ29tcG9uZW50VHlwZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bTlNVUkwgX3dlYl9ob3N0RGF0YV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LiBSZWFy
cmFuZ2VkIGZvciBjbGFyaXR5IGFuZAorICAgICAgICBzbGlnaHRseSBpbXByb3ZlZCBlZmZpY2ll
bmN5IGFzIHdlbGwuCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJfaXNVc2VyVmlzaWJsZVVSTF0p
OiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtOU1N0cmluZyBfd2Via2l0
X3N0cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNjYXBlc10pOiBVc2UgV2ViQ29yZSBwcmVm
aXgKKyAgICAgICAgZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYl9kZWNvZGVI
b3N0TmFtZV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtOU1N0cmlu
ZyBfd2ViX2VuY29kZUhvc3ROYW1lXSk6IERpdHRvLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Vi
a2l0X2RlY29kZUhvc3ROYW1lXSk6IERpdHRvLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Via2l0
X2VuY29kZUhvc3ROYW1lXSk6IERpdHRvLgorCiAyMDIxLTEwLTI0ICBJYW4gQW5kZXJzb24gIDxp
YW5hQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgdGhlIG1vZHVsZXMgdmVyaWZpZXIgZm9y
IFdlYktpdExlZ2FjeSBpbiBBcHBsZSBpbnRlcm5hbCB3aGVuIHVzaW5nIGEgbmV3IGVub3VnaCBY
Y29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJMLmggYi9Tb3VyY2UvV1RGL3d0Zi9V
UkwuaAppbmRleCBlNTg2OTAyNmVjYTIxMDJiMGI3OTNkMmUwNTMyNjQzZWE0Y2YyOTM3Li5jZWE0
YjdhNzU0MmJkNjFkZjdiZDU4NTc3MDA4MzBjODE5MWY5YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9VUkwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VUkwuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDggKzI1LDYg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lm
IFVTRShHTElCKSAmJiBIQVZFKEdVUkkpCkBAIC01MCw3ICs0OCw3IEBAIGNsYXNzIFVSTFRleHRF
bmNvZGluZyB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gZW5jb2RlRm9y
VVJMUGFyc2luZyhTdHJpbmdWaWV3KSBjb25zdCA9IDA7CiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB+VVJMVGV4dEVuY29kaW5nKCkgeyB9CisgICAgdmlydHVhbCB+VVJMVGV4dEVuY29kaW5nKCkg
PSBkZWZhdWx0OwogfTsKIAogY2xhc3MgVVJMIHsKQEAgLTgyLDcgKzgwLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogCi0g
ICAgLy8gU2luY2Ugd2Ugb3ZlcmxvYWQgb3BlcmF0b3IgTlNVUkwqIHdlIGhhdmUgdGhpcyB0byBw
cmV2ZW50IGFjY2lkZW50YWxseSB1c2luZyB0aGF0IG9wZXJhdG9yCisgICAgLy8gU2luY2Ugd2Ug
b3ZlcmxvYWQgb3BlcmF0b3IgTlNVUkwgKiB3ZSBoYXZlIHRoaXMgdG8gcHJldmVudCBhY2NpZGVu
dGFsbHkgdXNpbmcgdGhhdCBvcGVyYXRvcgogICAgIC8vIHdoZW4gcGxhY2luZyBhIFVSTCBpbiBh
biBpZiBzdGF0bWVudC4KICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgPSBkZWxldGU7CiAKQEAg
LTE5NSw3ICsxOTMsOCBAQCBwdWJsaWM6CiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgcHJpbnQo
KSBjb25zdDsKICNlbmRpZgotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgVVJMJik7CkBA
IC0yMTQsNiArMjEzLDEwIEBAIHByaXZhdGU6CiAKICAgICBmcmllbmQgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGNvbnN0IFVSTCYsIGNvbnN0IFVS
TCYpOwogCisjaWYgVVNFKENGKQorICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGVtcHR5
Q0ZVUkwoKTsKKyNlbmRpZgorCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogCiAgICAgdW5zaWduZWQg
bV9pc1ZhbGlkIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFz
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmNwcAppbmRleCBjOGJlMDY3NGE0
ZWFiYzU5MDkwYjczM2U3YzUyMWIzODJmNDkwNmI5Li40YzYxZWVhYTE2YjRjNWI1ZmM0NDAyNTM0
N2NjYWUyNzgwMjEyNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJh
cy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQzICsyNyw2
MyBAQAogI2luY2x1ZGUgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgogCiAjaW5jbHVkZSA8d3RmL1VS
TC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
LXZvaWQgZ2V0VVJMQnl0ZXMoQ0ZVUkxSZWYgdXJsLCBVUkxDaGFyQnVmZmVyJiByZXN1bHQpCitS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBieXRlc0FzQ0ZEYXRhKENGVVJMUmVmIHVybCkKIHsKLSAgICBD
RkluZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIG51bGxwdHIsIDApOwotICAg
IHJlc3VsdC5yZXNpemUoYnl0ZXNMZW5ndGgpOwotICAgIENGSW5kZXggZmluYWxMZW5ndGggPSBD
RlVSTEdldEJ5dGVzKHVybCwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KHJlc3VsdC5kYXRhKCkp
LCBieXRlc0xlbmd0aCk7Ci0gICAgQVNTRVJUX1VOVVNFRChmaW5hbExlbmd0aCwgZmluYWxMZW5n
dGggPT0gYnl0ZXNMZW5ndGgpOworICAgIGF1dG8gYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVz
KHVybCwgbnVsbHB0ciwgMCk7CisgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZXNMZW5ndGggIT0gLTEp
OworICAgIGF1dG8gYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1hbGxvYyhieXRlc0xl
bmd0aCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGJ1ZmZlcik7CisgICAgQ0ZVUkxHZXRCeXRlcyh1
cmwsIGJ1ZmZlciwgYnl0ZXNMZW5ndGgpOworICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0
ZVdpdGhCeXRlc05vQ29weShudWxscHRyLCBidWZmZXIsIGJ5dGVzTGVuZ3RoLCBrQ0ZBbGxvY2F0
b3JNYWxsb2MpKTsKIH0KIAotdm9pZCBnZXRVUkxCeXRlcyhDRlVSTFJlZiB1cmwsIENTdHJpbmcm
IHJlc3VsdCkKK1N0cmluZyBieXRlc0FzU3RyaW5nKENGVVJMUmVmIHVybCkKIHsKLSAgICBDRklu
ZGV4IGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIG51bGxwdHIsIDApOwotICAgIGNo
YXIqIGJ5dGVzOwotICAgIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoYnl0ZXNM
ZW5ndGgsIGJ5dGVzKTsKLSAgICBDRkluZGV4IGZpbmFsTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1
cmwsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihieXRlcyksIGJ5dGVzTGVuZ3RoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKGZpbmFsTGVuZ3RoLCBmaW5hbExlbmd0aCA9PSBieXRlc0xlbmd0aCk7Cisg
ICAgYXV0byBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCBudWxscHRyLCAwKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCAhPSAtMSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
Ynl0ZXNMZW5ndGggPD0gU3RyaW5nOjpNYXhMZW5ndGgpOworICAgIExDaGFyKiBidWZmZXI7Cisg
ICAgYXV0byByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnl0ZXNMZW5ndGgs
IGJ1ZmZlcik7CisgICAgQ0ZVUkxHZXRCeXRlcyh1cmwsIGJ1ZmZlciwgYnl0ZXNMZW5ndGgpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgaXNDRlVSTFNhbWVPcmlnaW4oQ0ZVUkxSZWYg
Y2ZVUkwsIGNvbnN0IFVSTCYgdXJsKQorVmVjdG9yPHVpbnQ4X3QsIFVSTEJ5dGVzVmVjdG9ySW5s
aW5lQ2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3IoQ0ZVUkxSZWYgdXJsKQogewotICAgIEFTU0VSVCh1
cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKTsKKyAgICBWZWN0b3I8dWludDhfdCwgVVJMQnl0
ZXNWZWN0b3JJbmxpbmVDYXBhY2l0eT4gcmVzdWx0KFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNp
dHkpOworICAgIGF1dG8gYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgcmVzdWx0LmRh
dGEoKSwgVVJMQnl0ZXNWZWN0b3JJbmxpbmVDYXBhY2l0eSk7CisgICAgaWYgKGJ5dGVzTGVuZ3Ro
ICE9IC0xKQorICAgICAgICByZXN1bHQuc2hyaW5rKGJ5dGVzTGVuZ3RoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVuZ3RoICE9IC0xKTsKKyAgICAgICAgcmVzdWx0
Lmdyb3coYnl0ZXNMZW5ndGgpOworICAgICAgICBDRlVSTEdldEJ5dGVzKHVybCwgcmVzdWx0LmRh
dGEoKSwgYnl0ZXNMZW5ndGgpOworICAgIH0KIAotICAgIGlmICh1cmwuaGFzQ3JlZGVudGlhbHMo
KSkKLSAgICAgICAgcmV0dXJuIHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCh1cmwsIFVSTCB7
IGNmVVJMIH0pOworICAgIC8vIFRoaXMgbWF5IGxvb2sgbGlrZSBpdCBjb3BpZXMgdGhlIGJ5dGVz
IGluIHRoZSB2ZWN0b3IsIGJ1dCBkdWUgdG8gdGhlIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRpb24g
aXQgZG9lcyBub3QuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBpc1NhbWVPcmlnaW4o
Q0ZVUkxSZWYgYSwgY29uc3QgVVJMJiBiKQoreworICAgIEFTU0VSVChiLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSk7CisKKyAgICBpZiAoYi5oYXNDcmVkZW50aWFscygpKQorICAgICAgICByZXR1
cm4gcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGEsIGIpOwogCi0gICAgVVJMQ2hhckJ1ZmZl
ciBieXRlczsKLSAgICBnZXRVUkxCeXRlcyhjZlVSTCwgYnl0ZXMpOwotICAgIFN0cmluZ1ZpZXcg
Y2ZVUkxTdHJpbmcgeyByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnl0ZXMuZGF0YSgp
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ5dGVzLnNpemUoKSkgfTsKKyAgICBhdXRvIGFCeXRl
cyA9IGJ5dGVzQXNWZWN0b3IoYSk7CisgICAgU3RyaW5nVmlldyBhU3RyaW5nIHsgYUJ5dGVzLmRh
dGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFCeXRlcy5zaXplKCkpIH07CisgICAgU3RyaW5n
VmlldyBiU3RyaW5nIHsgYi5zdHJpbmcoKSB9OwogCi0gICAgaWYgKCF1cmwuaGFzUGF0aCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nVmlldyB7IHVybC5zdHJpbmcoKSB9ID09IGNmVVJMU3RyaW5n
OworICAgIGlmICghYi5oYXNQYXRoKCkpCisgICAgICAgIHJldHVybiBhU3RyaW5nID09IGJTdHJp
bmc7CiAKLSAgICBhdXRvIHVybFdpdGhvdXRQYXRoID0gU3RyaW5nVmlldyB7IHVybC5zdHJpbmco
KSB9LnN1YnN0cmluZygwLCB1cmwucGF0aFN0YXJ0KCkgKyAxKTsKLSAgICByZXR1cm4gY2ZVUkxT
dHJpbmcuc3RhcnRzV2l0aCh1cmxXaXRob3V0UGF0aCk7CisgICAgdW5zaWduZWQgYWZ0ZXJQYXRo
U2VwYXJhdG9yID0gYi5wYXRoU3RhcnQoKSArIDE7CisgICAgcmV0dXJuIGFTdHJpbmcubGVmdChh
ZnRlclBhdGhTZXBhcmF0b3IpID09IGJTdHJpbmcubGVmdChhZnRlclBhdGhTZXBhcmF0b3IpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5oIGIvU291
cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuaAppbmRleCBmMWI0NzkzYTFmZWFlZjhjYTE5MDMy
ZDBjYTUxODFkYjM0NzQ1OTA3Li44NDQ3N2I1ZTM2YTE4NzNiOTExNDFiNDJkZjRjZTc1MmQ0MjNl
YzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcgKzI2LDIyIEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRh
dGEqIENGRGF0YVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkwqIENGVVJMUmVmOwog
CiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgVVJMOwotdHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEy
PiBVUkxDaGFyQnVmZmVyOworY29uc3RleHByIHNpemVfdCBVUkxCeXRlc1ZlY3RvcklubGluZUNh
cGFjaXR5ID0gMjA0ODsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2V0VVJMQnl0ZXMoQ0ZV
UkxSZWYsIFVSTENoYXJCdWZmZXImKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGdldFVSTEJ5
dGVzKENGVVJMUmVmLCBDU3RyaW5nJik7CitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBieXRlc0FzQ0ZE
YXRhKENGVVJMUmVmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYnl0ZXNBc1N0cmluZyhD
RlVSTFJlZik7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3QsIFVSTEJ5dGVzVmVj
dG9ySW5saW5lQ2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3IoQ0ZVUkxSZWYpOwogCi1ib29sIGlzQ0ZV
UkxTYW1lT3JpZ2luKENGVVJMUmVmLCBjb25zdCBVUkwmKTsKK2Jvb2wgaXNTYW1lT3JpZ2luKENG
VVJMUmVmLCBjb25zdCBVUkwmKTsKIAogfQorCit1c2luZyBXVEY6OmJ5dGVzQXNDRkRhdGE7Cit1
c2luZyBXVEY6OmJ5dGVzQXNTdHJpbmc7Cit1c2luZyBXVEY6OmJ5dGVzQXNWZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9VUkxDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9V
UkxDRi5jcHAKaW5kZXggZWQ1MTVjMDgwODk5MDBmZjhjNTJkZWI3OGUwZTczZGVlNDg3ZmEzZi4u
NDljYjcwN2YyYWIwM2M0MmEzYTBiMzc4OTU4MzBhZGFlZmU3N2JiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvY2YvVVJMQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL1VSTENGLmNw
cApAQCAtMzUsMzkgKzM1LDQ3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBVUkw6OlVSTChDRlVSTFJl
ZiB1cmwpCiB7Ci0gICAgaWYgKCF1cmwpIHsKKyAgICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRv
IGlnbm9yZSB0aGUgYmFzZSBVUkwgaW4gdGhlIENGVVJMIGhlcmU/CisgICAgaWYgKCF1cmwpCiAg
ICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIGJhc2UgVVJMIGhlcmU/Ci0gICAgQ1N0cmluZyB1
cmxCeXRlczsKLSAgICBnZXRVUkxCeXRlcyh1cmwsIHVybEJ5dGVzKTsKLSAgICBVUkxQYXJzZXIg
cGFyc2VyKHVybEJ5dGVzLmRhdGEoKSk7Ci0gICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7Cisg
ICAgZWxzZQorICAgICAgICAqdGhpcyA9IFVSTFBhcnNlcihieXRlc0FzU3RyaW5nKHVybCkpLnJl
c3VsdCgpOwogfQogCiAjaWYgIVVTRShGT1VOREFUSU9OKQorCitSZXRhaW5QdHI8Q0ZVUkxSZWY+
IFVSTDo6ZW1wdHlDRlVSTCgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgor
CiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRlQ0ZVUkwoKSBjb25zdAogewotICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gY2ZVUkw7CisgICAgaWYgKGlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUNG
VVJMKCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHJlc3VsdDsKICAgICBpZiAoTElLRUxZ
KG1fc3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5nLmlzQWxsQVNDSUkoKSkpCi0gICAgICAgIGNm
VVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1f
c3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGlu
Z1VURjgsIG51bGxwdHIsIHRydWUpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDRlVSTENy
ZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCks
IG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUp
KTsKICAgICBlbHNlIHsKICAgICAgICAgQ1N0cmluZyB1dGY4ID0gbV9zdHJpbmcudXRmOCgpOwot
ICAgICAgICBjZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhu
dWxscHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0Vu
Y29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdENGKENG
VVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgdXRmOC5kYXRhQXNVSW50OFB0
cigpLCB1dGY4Lmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUp
KTsKICAgICB9CiAKLSAgICBpZiAocHJvdG9jb2xJc0luSFRUUEZhbWlseSgpICYmICFpc0NGVVJM
U2FtZU9yaWdpbihjZlVSTC5nZXQoKSwgKnRoaXMpKQorICAgIGlmIChwcm90b2NvbElzSW5IVFRQ
RmFtaWx5KCkgJiYgIWlzU2FtZU9yaWdpbihyZXN1bHQuZ2V0KCksICp0aGlzKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY2ZVUkw7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KLSNlbmRpZgogCiBTdHJpbmcgVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0CiB7Ci0gICAg
UmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGNyZWF0ZUNGVVJMKCk7CisgICAgYXV0byBjZlVS
TCA9IGNyZWF0ZUNGVVJMKCk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oIGIv
U291cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMuaAppbmRleCBiYjZkY2MyMzI1MWI0ODhh
YTE3NmNkNjMyNTAwOWU1MzI2MWY5NTIyLi40MTU1ZTAyNmEyYmFmNjZjZTE5OThlZWI0MzNjZjY3
MDU3ZjY3Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDEyLCAyMDE0IEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogV1RGX0VYUE9SVF9QUklWQVRF
IE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBOU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqLCBOU1VSTCAqYmFzZVVS
TCk7IC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVhbnMgZXJyb3IuCitXVEZfRVhQT1JUX1BSSVZB
VEUgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKiwgTlNVUkwgKmlnbm9y
ZWQgPSBuaWwpOyAvLyBSZXR1cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yLgogV1RGX0VYUE9S
VF9QUklWQVRFIE5TVVJMICpVUkxCeVJlbW92aW5nVXNlckluZm8oTlNVUkwgKik7CiBXVEZfRVhQ
T1JUX1BSSVZBVEUgTlNTdHJpbmcgKmRlY29kZUhvc3ROYW1lKE5TU3RyaW5nICopOyAvLyBSZXR1
cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yLgogV1RGX0VYUE9SVF9QUklWQVRFIE5TU3RyaW5n
ICplbmNvZGVIb3N0TmFtZShOU1N0cmluZyAqKTsgLy8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFu
cyBlcnJvci4KQEAgLTQxLDEwICs0MSw4IEBAIFdURl9FWFBPUlRfUFJJVkFURSBOU1VSTCAqVVJM
QnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KE5TVVJMICosIENGCiBXVEZf
RVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqLCBOU1VSTCAqYmFzZVVS
TCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpvcmlnaW5hbFVSTERhdGEoTlNVUkwgKik7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShOU1VS
TCAqLCBDRlVSTENvbXBvbmVudFR5cGUpOwotV1RGX0VYUE9SVF9QUklWQVRFIE5TVVJMICpVUkxX
aXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0cmluZyAqLCBOU1VSTCAqYmFzZVVSTCk7
CitXVEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNh
dGVkKE5TU3RyaW5nICopOwogCi1OU1JhbmdlIHJhbmdlT2ZVUkxTY2hlbWUoTlNTdHJpbmcgKik7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgQk9PTCBpc1VzZXJWaXNpYmxlVVJMKE5TU3RyaW5nICopOwot
V1RGX0VYUE9SVF9QUklWQVRFIEJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJpbmcgKik7
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2Ev
TlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbQppbmRl
eCAwZDk2ZTlkNDgwOWEzODlhYWVhNDE3ZGVjMjRkZWE5YWIyZjg3ODAzLi4yMDg3NDQwYjBmNmZk
YzRkNWIwM2MyOTJjN2UzNjI4ZWYyMzhkYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9OU1VSTEV4dHJhcy5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJh
cy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMiwxNyArMzIsMTQgQEAKICNpbXBvcnQgPG11dGV4PgogI2ltcG9y
dCA8d3RmL0Z1bmN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3
dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvVVJMSGVscGVycy5oPgotI2ltcG9ydCA8d3RmL1VSTFBh
cnNlci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0
cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKLXVzaW5nIG5hbWVzcGFjZSBVUkxIZWxwZXJzOwotCi1jb25zdGV4cHIgdW5zaWdu
ZWQgdXJsQnl0ZXNCdWZmZXJMZW5ndGggPSAyMDQ4OwotCiBzdGF0aWMgQk9PTCByZWFkSUROQWxs
b3dlZFNjcmlwdExpc3RGaWxlKE5TU3RyaW5nICpmaWxlbmFtZSkKIHsKICAgICBpZiAoIWZpbGVu
YW1lKQpAQCAtNjcsNyArNjQsNyBAQCBzdGF0aWMgQk9PTCByZWFkSUROQWxsb3dlZFNjcmlwdExp
c3RGaWxlKE5TU3RyaW5nICpmaWxlbmFtZSkKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQg
PT0gMSkgewogICAgICAgICAgICAgLy8gR290IGEgd29yZCwgbWFwIHRvIHNjcmlwdCBjb2RlIGFu
ZCBwdXQgaXQgaW50byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBhZGRTY3JpcHRUb0lETkFsbG93
ZWRTY3JpcHRMaXN0KHdvcmQpOworICAgICAgICAgICAgVVJMSGVscGVyczo6YWRkU2NyaXB0VG9J
RE5BbGxvd2VkU2NyaXB0TGlzdCh3b3JkKTsKICAgICAgICAgfQogICAgIH0KICAgICBmY2xvc2Uo
ZmlsZSk7CkBAIC0xMDAsNyArOTcsNyBAQCBzdGF0aWMgU3RyaW5nIGRlY29kZVBlcmNlbnRFc2Nh
cGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogCiBOU1N0cmluZyAqZGVjb2RlSG9zdE5hbWUoTlNT
dHJpbmcgKnN0cmluZykKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaG9zdCA9IG1hcEhv
c3ROYW1lKHN0cmluZywgbnVsbHB0cik7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGhvc3Qg
PSBVUkxIZWxwZXJzOjptYXBIb3N0TmFtZShzdHJpbmcsIG51bGxwdHIpOwogICAgIGlmICghaG9z
dCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gISpob3N0ID8gc3RyaW5nIDogKE5T
U3RyaW5nICopKmhvc3Q7CkBAIC0xMDgsNyArMTA1LDcgQEAgTlNTdHJpbmcgKmRlY29kZUhvc3RO
YW1lKE5TU3RyaW5nICpzdHJpbmcpCiAKIE5TU3RyaW5nICplbmNvZGVIb3N0TmFtZShOU1N0cmlu
ZyAqc3RyaW5nKQogewotICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBob3N0ID0gbWFwSG9zdE5h
bWUoc3RyaW5nLCBkZWNvZGVQZXJjZW50RXNjYXBlcyk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IGhvc3QgPSBVUkxIZWxwZXJzOjptYXBIb3N0TmFtZShzdHJpbmcsIGRlY29kZVBlcmNlbnRF
c2NhcGVzKTsKICAgICBpZiAoIWhvc3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJu
ICEqaG9zdCA/IHN0cmluZyA6IChOU1N0cmluZyAqKSpob3N0OwpAQCAtMTI2LDI4ICsxMjMsMTcg
QEAgTlNVUkwgKlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudChOU1VS
TCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUKICAgICBpZiAoIVVSTCkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSAgICBDRlJhbmdlIGZyYWdSZyA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29t
cG9uZW50KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGNvbXBvbmVudCwgbnVsbHB0cik7Ci0gICAg
aWYgKGZyYWdSZy5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKKyAgICBDRlJhbmdlIHJhbmdlID0g
Q0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoYnJpZGdlX2Nhc3QoVVJMKSwgY29tcG9uZW50
LCBudWxscHRyKTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCiAgICAg
ICAgIHJldHVybiBVUkw7CiAKLSAgICBWZWN0b3I8VUludDgsIHVybEJ5dGVzQnVmZmVyTGVuZ3Ro
PiB1cmxCeXRlcyh1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9
IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgdXJsQnl0ZXMuZGF0YSgpLCB1
cmxCeXRlcy5zaXplKCkpOwotICAgIGlmIChudW1CeXRlcyA9PSAtMSkgewotICAgICAgICBudW1C
eXRlcyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgbnVsbHB0ciwgMCk7
Ci0gICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMpOwotICAgICAgICBDRlVSTEdldEJ5dGVz
KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgbnVtQnl0ZXMpOwotICAg
IH0KKyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2VfY2FzdChVUkwpKTsKIAot
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1
cmxCeXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCwgbnVsbHB0cikpOworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhC
eXRlcyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJhbmdlLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5n
RW5jb2RpbmdVVEY4LCBudWxscHRyKSk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3Vs
dCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMobnVsbHB0ciwgdXJsQnl0ZXMuZGF0YSgp
LCBmcmFnUmcubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgbnVsbHB0
cikpOwotICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LmJyaWRnaW5nQXV0b3Jl
bGVhc2UoKSA6IFVSTDsKLX0KKyAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdp
dGhCeXRlcyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJhbmdlLmxvY2F0aW9uIC0gMSwga0NGU3Ry
aW5nRW5jb2RpbmdJU09MYXRpbjEsIG51bGxwdHIpKTsKIAotc3RhdGljIE5TVVJMICpVUkxCeVJl
bW92aW5nUmVzb3VyY2VTcGVjaWZpZXIoTlNVUkwgKlVSTCkKLXsKLSAgICByZXR1cm4gVVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KFVSTCwga0NGVVJMQ29tcG9uZW50
UmVzb3VyY2VTcGVjaWZpZXIpOworICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdB
dXRvcmVsZWFzZSgpIDogVVJMOwogfQogCiBOU1VSTCAqVVJMV2l0aERhdGEoTlNEYXRhICpkYXRh
LCBOU1VSTCAqYmFzZVVSTCkKQEAgLTE1NywxNSArMTQzLDE1IEBAIE5TVVJMICpVUkxXaXRoRGF0
YShOU0RhdGEgKmRhdGEsIE5TVVJMICpiYXNlVVJMKQogICAgIAogICAgIHNpemVfdCBsZW5ndGgg
PSBbZGF0YSBsZW5ndGhdOwogICAgIGlmIChsZW5ndGggPiAwKSB7Ci0gICAgICAgIC8vIHdvcmsg
YXJvdW5kIDxyZGFyOi8vNDQ3MDc3MT46IENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMo
Li4sIFRSVUUpIGRvZXNuJ3QgcmVtb3ZlIG5vbi1wYXRoIGNvbXBvbmVudHMuCi0gICAgICAgIGJh
c2VVUkwgPSBVUkxCeVJlbW92aW5nUmVzb3VyY2VTcGVjaWZpZXIoYmFzZVVSTCk7Ci0gICAgICAg
IAorICAgICAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovLzQ0NzA3NzE+OiBDRlVSTENyZWF0ZUFi
c29sdXRlVVJMV2l0aEJ5dGVzKC4uLCBUUlVFKSBkb2Vzbid0IHJlbW92ZSBub24tcGF0aCBjb21w
b25lbnRzLgorICAgICAgICBiYXNlVVJMID0gVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVm
b3JlQ29tcG9uZW50KGJhc2VVUkwsIGtDRlVSTENvbXBvbmVudFJlc291cmNlU3BlY2lmaWVyKTsK
KwogICAgICAgICBjb25zdCBVSW50OCAqYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBVSW50OCo+
KFtkYXRhIGJ5dGVzXSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENGVVJMQ3JlYXRlQWJzb2x1
dGVVUkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4gdG8gY29uc29sZSBpZiB3ZSBwYXNzZWQgYSBw
YXRoIHRvIGl0LgogICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gJy8nICYmICFiYXNlVVJMKQogICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCisKICAgICAgICAgLy8gTk9URTogV2UgdXNl
IFVURi04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0
cmluZ3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAgICAgLy8gKGUuZyBjYWxs
cyB0byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMgbm90IHRvbGVyYW50
IG9mIGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGljaAogICAgICAgICAvLyBjb3VsZCBlaXRo
ZXIgYmUgYSBtYWxmb3JtZWQgc3RyaW5nIG9yIGJ5dGVzIGluIGEgZGlmZmVyZW50IGVuY29kaW5n
LCBsaWtlIHNoaWZ0LWppcywgc28gd2UgZmFsbCBiYWNrCkBAIC0xNzcsNiArMTYzLDcgQEAgTlNV
UkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqZGF0YSwgTlNVUkwgKmJhc2VVUkwpCiAgICAgfQogICAg
IHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIiJdOwogfQorCiBzdGF0aWMgTlNEYXRhICpk
YXRhV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqc3RyaW5nKQogewogICAgIE5TRGF0YSAq
dXNlclR5cGVkRGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddOwpAQCAtMjExLDE3ICsxOTgsMTcgQEAgc3RhdGljIE5TRGF0YSAqZGF0YVdpdGhVc2Vy
VHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZykKICAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzTm9Db3B5Om91dEJ5dGVzIGxlbmd0aDpvdXRMZW5ndGhdOyAvLyBhZG9wdHMgb3V0Qnl0
ZXMKIH0KIAotTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZywg
TlNVUkwgKm5zVVJMKQorTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0
cmluZywgTlNVUkwgKikKIHsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIGF1dG8gbWFwcGVkU3RyaW5nID0gbWFwSG9zdE5hbWVzKHN0cmluZ0J5VHJpbW1pbmdX
aGl0ZXNwYWNlKHN0cmluZykuZ2V0KCksIGRlY29kZVBlcmNlbnRFc2NhcGVzKTsKKyAgICBhdXRv
IG1hcHBlZFN0cmluZyA9IFVSTEhlbHBlcnM6Om1hcEhvc3ROYW1lcyhzdHJpbmdCeVRyaW1taW5n
V2hpdGVzcGFjZShzdHJpbmcpLmdldCgpLCBkZWNvZGVQZXJjZW50RXNjYXBlcyk7CiAgICAgaWYg
KCFtYXBwZWRTdHJpbmcpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBMZXQncyBjaGVj
ayB3aGV0aGVyIHRoZSBVUkwgaXMgYm9ndXMuCi0gICAgVVJMIHVybCB7IFVSTCB7IG5zVVJMIH0s
IG1hcHBlZFN0cmluZyB9OworICAgIFVSTCB1cmwgeyBVUkwgeyB9LCBtYXBwZWRTdHJpbmcgfTsK
ICAgICBpZiAoIXVybC5jcmVhdGVDRlVSTCgpKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0y
MzEsMTEzICsyMTgsODYgQEAgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcg
KnN0cmluZywgTlNVUkwgKm5zVVJMKQogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIFtO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07CiAKLSAgICByZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwg
bnNVUkwpOworICAgIHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBuaWwpOwogfQogCi1OU1VSTCAq
VVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoTlNTdHJpbmcgKnN0cmluZywgTlNVUkwg
KlVSTCkKK05TVVJMICpVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0cmluZyAq
c3RyaW5nKQogewogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
TlNVUkwgKnJlc3VsdCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nLCBVUkwpOworICAg
IE5TVVJMICpyZXN1bHQgPSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nKHN0cmluZyk7CiAgICAgaWYg
KCFyZXN1bHQpIHsKICAgICAgICAgTlNEYXRhICpyZXN1bHREYXRhID0gZGF0YVdpdGhVc2VyVHlw
ZWRTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgaWYgKCFyZXN1bHREYXRhKQogICAgICAgICAgICAg
cmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07Ci0gICAgICAgIHJlc3VsdCA9IFVSTFdp
dGhEYXRhKHJlc3VsdERhdGEsIFVSTCk7CisgICAgICAgIHJlc3VsdCA9IFVSTFdpdGhEYXRhKHJl
c3VsdERhdGEsIG5pbCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IEJPT0wgaGFzUXVlc3Rpb25NYXJrT25seVF1ZXJ5U3RyaW5nKE5TVVJMICpVUkwpCitzdGF0aWMg
Ym9vbCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJpbmcoTlNVUkwgKlVSTCkKIHsKICAgICBD
RlJhbmdlIHJhbmdlV2l0aFNlcGFyYXRvcnM7Ci0gICAgQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21w
b25lbnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwga0NGVVJMQ29tcG9uZW50UXVlcnksICZyYW5n
ZVdpdGhTZXBhcmF0b3JzKTsKLSAgICBpZiAocmFuZ2VXaXRoU2VwYXJhdG9ycy5sb2NhdGlvbiAh
PSBrQ0ZOb3RGb3VuZCAmJiByYW5nZVdpdGhTZXBhcmF0b3JzLmxlbmd0aCA9PSAxKQotICAgICAg
ICByZXR1cm4gWUVTOwotCi0gICAgcmV0dXJuIE5POworICAgIENGVVJMR2V0Qnl0ZVJhbmdlRm9y
Q29tcG9uZW50KGJyaWRnZV9jYXN0KFVSTCksIGtDRlVSTENvbXBvbmVudFF1ZXJ5LCAmcmFuZ2VX
aXRoU2VwYXJhdG9ycyk7CisgICAgcmV0dXJuIHJhbmdlV2l0aFNlcGFyYXRvcnMubG9jYXRpb24g
IT0ga0NGTm90Rm91bmQgJiYgcmFuZ2VXaXRoU2VwYXJhdG9ycy5sZW5ndGggPT0gMTsKIH0KIAog
TlNEYXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVu
dFR5cGUgY29tcG9uZW50VHlwZSkKIHsKLSAgICBWZWN0b3I8VUludDgsIHVybEJ5dGVzQnVmZmVy
TGVuZ3RoPiBhbGxCeXRlc0J1ZmZlcih1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRl
eCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYWxs
Qnl0ZXNCdWZmZXIuZGF0YSgpLCBhbGxCeXRlc0J1ZmZlci5zaXplKCkpOwotICAgIGlmIChieXRl
c0ZpbGxlZCA9PSAtMSkgewotICAgICAgICBDRkluZGV4IGJ5dGVzVG9BbGxvY2F0ZSA9IENGVVJM
R2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgIGFs
bEJ5dGVzQnVmZmVyLmdyb3coYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICAgICAgYnl0ZXNGaWxsZWQg
PSBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLmRh
dGEoKSwgYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgQ0ZVUkxDb21w
b25lbnRUeXBlIGNvbXBsZXRlVVJMID0gKENGVVJMQ29tcG9uZW50VHlwZSktMTsKLSAgICBDRlJh
bmdlIHJhbmdlOwotICAgIGlmIChjb21wb25lbnRUeXBlICE9IGNvbXBsZXRlVVJMKSB7Ci0gICAg
ICAgIHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKF9fYnJpZGdlIENGVVJM
UmVmKVVSTCwgY29tcG9uZW50VHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChyYW5nZS5sb2Nh
dGlvbiA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcmFuZ2UubG9jYXRpb24gPSAwOwotICAgICAgICByYW5nZS5sZW5ndGggPSBi
eXRlc0ZpbGxlZDsKLSAgICB9Ci0gICAgCi0gICAgTlNEYXRhICpjb21wb25lbnREYXRhID0gW05T
RGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyLmRhdGEoKSArIHJhbmdlLmxvY2F0aW9u
IGxlbmd0aDpyYW5nZS5sZW5ndGhdOyAKLSAgICAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpi
eXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oW2NvbXBvbmVudERhdGEg
Ynl0ZXNdKTsKLSAgICBOU011dGFibGVEYXRhICpyZXN1bHREYXRhID0gW05TTXV0YWJsZURhdGEg
ZGF0YV07Ci0gICAgLy8gTk9URTogYWRkIGxlYWRpbmcgJz8nIHRvIHF1ZXJ5IHN0cmluZ3Mgbm9u
LXplcm8gbGVuZ3RoIHF1ZXJ5IHN0cmluZ3MuCi0gICAgLy8gTk9URTogcmV0YWluIHF1ZXN0aW9u
LW1hcmsgb25seSBxdWVyeSBzdHJpbmdzLgorICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlVSTEdldEJ5
dGVSYW5nZUZvckNvbXBvbmVudChicmlkZ2VfY2FzdChVUkwpLCBjb21wb25lbnRUeXBlLCBudWxs
cHRyKTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBhdXRvIGJ5dGVzQnVmZmVyID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2Vf
Y2FzdChVUkwpKTsKKyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNCdWZmZXIuZGF0YSgpICsgcmFuZ2Uu
bG9jYXRpb247CisKKyAgICBOU011dGFibGVEYXRhICpyZXN1bHQgPSBbTlNNdXRhYmxlRGF0YSBk
YXRhXTsKKworICAgIC8vIFdlIGFkZCBsZWFkaW5nICc/JyB0byBub24temVybyBsZW5ndGggcXVl
cnkgc3RyaW5ncyBpbmNsdWRpbmcgcXVlc3Rpb24tbWFyayBvbmx5IHF1ZXJ5IHN0cmluZ3MuCiAg
ICAgaWYgKGNvbXBvbmVudFR5cGUgPT0ga0NGVVJMQ29tcG9uZW50UXVlcnkpIHsKLSAgICAgICAg
aWYgKHJhbmdlLmxlbmd0aCA+IDAgfHwgaGFzUXVlc3Rpb25NYXJrT25seVF1ZXJ5U3RyaW5nKFVS
TCkpCi0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBlbmRCeXRlczoiPyIgbGVuZ3RoOjFdOyAg
ICAKKyAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCB8fCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlT
dHJpbmcoVVJMKSkKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQnl0ZXM6Ij8iIGxlbmd0aDox
XTsKICAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZS5sZW5ndGg7IGkrKykgewor
CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgdW5zaWduZWQgY2hhciBjID0gYnl0ZXNbaV07Ci0gICAgICAgIGlmIChjIDw9IDB4MjAgfHwg
YyA+PSAweDdmKSB7Ci0gICAgICAgICAgICBjaGFyIGVzY2FwZWRbM107Ci0gICAgICAgICAgICBl
c2NhcGVkWzBdID0gJyUnOwotICAgICAgICAgICAgZXNjYXBlZFsxXSA9IHVwcGVyTmliYmxlVG9B
U0NJSUhleERpZ2l0KGMpOwotICAgICAgICAgICAgZXNjYXBlZFsyXSA9IGxvd2VyTmliYmxlVG9B
U0NJSUhleERpZ2l0KGMpOwotICAgICAgICAgICAgW3Jlc3VsdERhdGEgYXBwZW5kQnl0ZXM6ZXNj
YXBlZCBsZW5ndGg6M107ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hhciBi
WzFdOwotICAgICAgICAgICAgYlswXSA9IGM7Ci0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBl
bmRCeXRlczpiIGxlbmd0aDoxXTsgICAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKGMgPiAweDIwICYmIGMgPCAweDdGKQorICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRC
eXRlczomYnl0ZXNbaV0gbGVuZ3RoOjFdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNo
YXIgZXNjYXBlZFszXSA9IHsgJyUnLCB1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjKSwgbG93
ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYykgfTsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5k
Qnl0ZXM6ZXNjYXBlZCBsZW5ndGg6M107CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdERhdGE7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgTlNVUkwg
KlVSTEJ5UmVtb3ZpbmdDb21wb25lbnRBbmRTdWJzZXF1ZW50Q2hhcmFjdGVyKE5TVVJMICpVUkws
IENGVVJMQ29tcG9uZW50VHlwZSBjb21wb25lbnQpCiB7Ci0gICAgQ0ZSYW5nZSByYW5nZSA9IENG
VVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGNvbXBv
bmVudCwgMCk7CisgICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9u
ZW50KGJyaWRnZV9jYXN0KFVSTCksIGNvbXBvbmVudCwgMCk7CiAgICAgaWYgKHJhbmdlLmxvY2F0
aW9uID09IGtDRk5vdEZvdW5kKQogICAgICAgICByZXR1cm4gVVJMOwotICAgIAorCiAgICAgLy8g
UmVtb3ZlIG9uZSBzdWJzZXF1ZW50IGNoYXJhY3Rlci4KICAgICByYW5nZS5sZW5ndGgrKzsKIAot
ICAgIFZlY3RvcjxVSW50OCwgdXJsQnl0ZXNCdWZmZXJMZW5ndGg+IGJ1ZmZlcih1cmxCeXRlc0J1
ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJp
ZGdlIENGVVJMUmVmKVVSTCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgaWYg
KG51bUJ5dGVzID09IC0xKSB7Ci0gICAgICAgIG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoX19i
cmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAgICAgICAgYnVmZmVyLmdyb3cobnVt
Qnl0ZXMpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGJ1
ZmZlci5kYXRhKCksIG51bUJ5dGVzKTsKLSAgICB9Ci0gICAgVUludDgqIHVybEJ5dGVzID0gYnVm
ZmVyLmRhdGEoKTsKLSAgICAgICAgCisgICAgYXV0byBieXRlcyA9IGJ5dGVzQXNWZWN0b3IoYnJp
ZGdlX2Nhc3QoVVJMKSk7CisgICAgYXV0byB1cmxCeXRlcyA9IGJ5dGVzLmRhdGEoKTsKKyAgICBD
RkluZGV4IG51bUJ5dGVzID0gYnl0ZXMuc2l6ZSgpOworCiAgICAgaWYgKG51bUJ5dGVzIDwgcmFu
Z2UubG9jYXRpb24pCiAgICAgICAgIHJldHVybiBVUkw7CiAgICAgaWYgKG51bUJ5dGVzIDwgcmFu
Z2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgpCiAgICAgICAgIHJhbmdlLmxlbmd0aCA9IG51bUJ5
dGVzIC0gcmFuZ2UubG9jYXRpb247Ci0gICAgICAgIAorCiAgICAgbWVtbW92ZSh1cmxCeXRlcyAr
IHJhbmdlLmxvY2F0aW9uLCB1cmxCeXRlcyArIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3Ro
LCBudW1CeXRlcyAtIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAKKwogICAg
IGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxC
eXRlcywgbnVtQnl0ZXMgLSByYW5nZS5sZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVs
bHB0cikpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJM
Q3JlYXRlV2l0aEJ5dGVzKG51bGxwdHIsIHVybEJ5dGVzLCBudW1CeXRlcyAtIHJhbmdlLmxlbmd0
aCwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAg
ICAKKwogICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdBdXRvcmVsZWFzZSgpIDog
VVJMOwogfQogCkBAIC0zNDgsOTcgKzMwOCw0MiBAQCBOU1VSTCAqVVJMQnlSZW1vdmluZ1VzZXJJ
bmZvKE5TVVJMICpVUkwpCiAKIE5TRGF0YSAqb3JpZ2luYWxVUkxEYXRhKE5TVVJMICpVUkwpCiB7
Ci0gICAgVUludDggKmJ1ZmZlciA9IChVSW50OCAqKW1hbGxvYyh1cmxCeXRlc0J1ZmZlckxlbmd0
aCk7Ci0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENG
VVJMUmVmKVVSTCwgYnVmZmVyLCB1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKGJ5dGVz
RmlsbGVkID09IC0xKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxH
ZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAgICAgICAgYnVm
ZmVyID0gKFVJbnQ4ICopcmVhbGxvYyhidWZmZXIsIGJ5dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAg
IGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBidWZm
ZXIsIGJ5dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAgIEFTU0VSVChieXRlc0ZpbGxlZCA9PSBieXRl
c1RvQWxsb2NhdGUpOwotICAgIH0KLSAgICAKLSAgICAvLyBidWZmZXIgaXMgYWRvcHRlZCBieSB0
aGUgTlNEYXRhCi0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzTm9Db3B5
OmJ1ZmZlciBsZW5ndGg6Ynl0ZXNGaWxsZWQgZnJlZVdoZW5Eb25lOllFU107Ci0gICAgCi0gICAg
TlNVUkwgKmJhc2VVUkwgPSAoX19icmlkZ2UgTlNVUkwgKilDRlVSTEdldEJhc2VVUkwoKF9fYnJp
ZGdlIENGVVJMUmVmKVVSTCk7Ci0gICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIHJldHVybiBvcmln
aW5hbFVSTERhdGEoVVJMV2l0aERhdGEoZGF0YSwgYmFzZVVSTCkpOwotICAgIHJldHVybiBkYXRh
OworICAgIGF1dG8gZGF0YSA9IGJyaWRnZV9jYXN0KGJ5dGVzQXNDRkRhdGEoYnJpZGdlX2Nhc3Qo
VVJMKSkpOworICAgIGlmIChhdXRvIGJhc2VVUkwgPSBicmlkZ2VfY2FzdChDRlVSTEdldEJhc2VV
UkwoYnJpZGdlX2Nhc3QoVVJMKSkpKQorICAgICAgICByZXR1cm4gb3JpZ2luYWxVUkxEYXRhKFVS
TFdpdGhEYXRhKGRhdGEuZ2V0KCksIGJhc2VVUkwpKTsKKyAgICByZXR1cm4gZGF0YS5hdXRvcmVs
ZWFzZSgpOwogfQogCiBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKlVSTCkKIHsK
ICAgICBOU0RhdGEgKmRhdGEgPSBvcmlnaW5hbFVSTERhdGEoVVJMKTsKLSAgICBDU3RyaW5nIHN0
cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3Ro
XSk7Ci0gICAgcmV0dXJuIHVzZXJWaXNpYmxlVVJMKHN0cmluZyk7CisgICAgcmV0dXJuIFVSTEhl
bHBlcnM6OnVzZXJWaXNpYmxlVVJMKENTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFtk
YXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pKTsKIH0KIAogQk9PTCBpc1VzZXJWaXNpYmxlVVJM
KE5TU3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgQk9PTCB2YWxpZCA9IFlFUzsKLSAgICAvLyBnZXQg
YnVmZmVyCi0gICAgCi0gICAgY2hhciBzdGF0aWNfYnVmZmVyWzEwMjRdOwotICAgIGNvbnN0IGNo
YXIgKnA7Ci0gICAgQk9PTCBzdWNjZXNzID0gQ0ZTdHJpbmdHZXRDU3RyaW5nKChfX2JyaWRnZSBD
RlN0cmluZ1JlZilzdHJpbmcsIHN0YXRpY19idWZmZXIsIDEwMjMsIGtDRlN0cmluZ0VuY29kaW5n
VVRGOCk7Ci0gICAgcCA9IHN1Y2Nlc3MgPyBzdGF0aWNfYnVmZmVyIDogW3N0cmluZyBVVEY4U3Ry
aW5nXTsKLSAgICAKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHApOwotICAgIAotICAgIC8vIGNo
ZWNrIGZvciBjaGFyYWN0ZXJzIDw9IDB4MjAgb3IgPj0weDdmLCAlLWVzY2FwZSBzZXF1ZW5jZXMg
b2YgJTdmLCBhbmQgeG4tLSwgdGhlc2UKLSAgICAvLyBhcmUgdGhlIHRoaW5ncyB0aGF0IHdpbGwg
bGVhZCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIHRvIGFjdHVhbGx5IGNoYW5nZSB0aGluZ3MuCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBj
aGFyIGMgPSBwW2ldOwotICAgICAgICAvLyBlc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzLCBzcGFj
ZSwgYW5kIGRlbGV0ZQotICAgICAgICBpZiAoYyA8PSAweDIwIHx8IGMgPT0gMHg3ZikgewotICAg
ICAgICAgICAgdmFsaWQgPSBOTzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2Ug
aWYgKGMgPT0gJyUnICYmIChpICsgMSA8IGxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQocFtpICsg
MV0pKSAmJiBpICsgMiA8IGxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQocFtpICsgMl0pKSB7Ci0g
ICAgICAgICAgICBhdXRvIHUgPSB0b0FTQ0lJSGV4VmFsdWUocFtpICsgMV0sIHBbaSArIDJdKTsK
LSAgICAgICAgICAgIGlmICh1ID4gMHg3ZikgewotICAgICAgICAgICAgICAgIHZhbGlkID0gTk87
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBmb3IgInhuLS0iIGlu
IGFuIGVmZmljaWVudCwgbm9uLWNhc2Utc2Vuc2l0aXZlLCB3YXkuCi0gICAgICAgICAgICBpZiAo
YyA9PSAnLScgJiYgaSA+PSAzICYmIChwW2kgLSAzXSB8IDB4MjApID09ICd4JyAmJiAocFtpIC0g
Ml0gfCAweDIwKSA9PSAnbicgJiYgcFtpIC0gMV0gPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAg
dmFsaWQgPSBOTzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSB1c2VyVmlzaWJsZVN0cmluZyBmdW5jdGlv
biBpcyBndWFyYW50ZWVkIHRvIG5vdCBjaGFuZ2UgdGhlIHBhc3NlZC1pbiBVUkwuCisgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wdGltaXplIGFsbCB0aGUgbW9zdCBjb21tb24gY2Fz
ZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0aGUgdXNlclZpc2libGVTdHJpbmcgYWxnb3JpdGhtLgor
CisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgYXV0byBzdWNjZXNzID0gQ0ZTdHJpbmdHZXRD
U3RyaW5nKGJyaWRnZV9jYXN0KHN0cmluZyksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZl
ciksIHNpemVvZihidWZmZXIpIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICBhdXRv
IGNoYXJhY3RlcnMgPSBzdWNjZXNzID8gYnVmZmVyIDogW3N0cmluZyBVVEY4U3RyaW5nXTsKKwor
ICAgIC8vIENoZWNrIGZvciBjb250cm9sIGNoYXJhY3RlcnMsICUtZXNjYXBlIHNlcXVlbmNlcyB0
aGF0IGFyZSBub24tQVNDSUksIGFuZCB4bi0tOiB0aGVzZQorICAgIC8vIGFyZSB0aGUgdGhpbmdz
IHRoYXQgbWlnaHQgbGVhZCB0aGUgdXNlclZpc2libGVTdHJpbmcgZnVuY3Rpb24gdG8gYWN0dWFs
bHkgY2hhbmdlIHRoZSBzdHJpbmcuCisgICAgd2hpbGUgKGF1dG8gY2hhcmFjdGVyID0gKmNoYXJh
Y3RlcnMrKykgeworICAgICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBzcGFj
ZSwgd2lsbCBiZSBlc2NhcGVkIGJ5IHVzZXJWaXNpYmxlU3RyaW5nLgorICAgICAgICBpZiAoY2hh
cmFjdGVyIDw9IDB4MjAgfHwgY2hhcmFjdGVyID09IDB4N0YpCisgICAgICAgICAgICByZXR1cm4g
Tk87CisgICAgICAgIC8vIEVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBleHBhbmQgdG8gbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMgbWF5IGJlIGNvbnZlcnRlZCB0byBub24tZXNjYXBlZCBVVEYtOCBzZXF1ZW5j
ZXMuCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChjaGFy
YWN0ZXJzWzBdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyc1sxXSkgJiYgIWlzQVNDSUko
dG9BU0NJSUhleFZhbHVlKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pKSkKKyAgICAgICAg
ICAgIHJldHVybiBOTzsKKyAgICAgICAgLy8gSWYgInhuLS0iIGFwcGVhcnMsIHRoZW4gd2UgbWln
aHQgbmVlZCB0byBydW4gdGhlIElETiBhbGdvcml0aG0gaWYgaXQncyBhIGhvc3QgbmFtZS4KKyAg
ICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyLCAneCcpICYmIGlz
QVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ24nKSAmJiBjaGFyYWN0ZXJz
WzFdID09ICctJyAmJiBjaGFyYWN0ZXJzWzJdID09ICctJykKKyAgICAgICAgICAgIHJldHVybiBO
TzsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHZhbGlkOwotfQogCi1OU1JhbmdlIHJhbmdlT2ZV
UkxTY2hlbWUoTlNTdHJpbmcgKnN0cmluZykKLXsKLSAgICBOU1JhbmdlIGNvbG9uID0gW3N0cmlu
ZyByYW5nZU9mU3RyaW5nOkAiOiJdOwotICAgIGlmIChjb2xvbi5sb2NhdGlvbiAhPSBOU05vdEZv
dW5kICYmIGNvbG9uLmxvY2F0aW9uID4gMCkgewotICAgICAgICBOU1JhbmdlIHNjaGVtZSA9IHsw
LCBjb2xvbi5sb2NhdGlvbn07Ci0gICAgICAgIC8qCi0gICAgICAgICBUaGlzIHN0dWZmIGlzIHZl
cnkgZXhwZW5zaXZlLiAgMTAtMTUgbXNlYyBvbiBhIDJ4MS4yR0h6LiAgSWYgbm90IGNhY2hlZCBp
dCBzd2FtcHMKLSAgICAgICAgIGV2ZXJ5dGhpbmcgZWxzZSB3aGVuIGFkZGluZyBpdGVtcyB0byB0
aGUgYXV0b2NvbXBsZXRlIERCLiAgTWFrZXMgbWUgd29uZGVyIGlmIHdlCi0gICAgICAgICBldmVu
IG5lZWQgdG8gZW5mb3JjZSB0aGUgY2hhcmFjdGVyIHNldCBoZXJlLgotICAgICAgICAgKi8KLSAg
ICAgICAgTlNTdHJpbmcgKmFjY2VwdGFibGVDaGFyYWN0ZXJzID0gQCJBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsuLSI7Ci0gICAg
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TQ2hhcmFjdGVyU2V0Pj4g
aW52ZXJzZVNjaGVtZUNoYXJhY3RlclNldDsKLSAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VLZXk7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFsmXSB7Ci0gICAgICAg
ICAgICBpbnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0LmNvbnN0cnVjdChbW05TQ2hhcmFjdGVyU2V0
IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6YWNjZXB0YWJsZUNoYXJhY3RlcnNd
IGludmVydGVkU2V0XSk7Ci0gICAgICAgIH0pOwotICAgICAgICBOU1JhbmdlIGlsbGVnYWxzID0g
W3N0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDppbnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0
LmdldCgpLmdldCgpIG9wdGlvbnM6MCByYW5nZTpzY2hlbWVdOwotICAgICAgICBpZiAoaWxsZWdh
bHMubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBzY2hlbWU7Ci0g
ICAgfQotICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4g
WUVTOwogfQogCi1CT09MIGxvb2tzTGlrZUFic29sdXRlVVJMKE5TU3RyaW5nICpzdHJpbmcpCi17
Ci0gICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGJlY2F1c2UgX3dlYl9VUkxXaXRoU3RyaW5nIGFsbG93
cyB3aGl0ZXNwYWNlLgotICAgIHJldHVybiByYW5nZU9mVVJMU2NoZW1lKHN0cmluZ0J5VHJpbW1p
bmdXaGl0ZXNwYWNlKHN0cmluZykuZ2V0KCkpLmxvY2F0aW9uICE9IE5TTm90Rm91bmQ7CiB9Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29h
L1VSTENvY29hLm1tIGIvU291cmNlL1dURi93dGYvY29jb2EvVVJMQ29jb2EubW0KaW5kZXggMjdk
N2RjMzY2MmZhZjU0NmQwMDFhOGUyMmNiNzA3ZDkwYjZmY2IwZi4uNWQ5ZTE1NjU3NzQ1MmEyMjcz
ZWYyZGY2N2E2ZDhlNDdkN2EzNWEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2Ev
VVJMQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvVVJMQ29jb2EubW0KQEAgLTM5
LDE3ICszOSw4IEBAIEBlbmQKIG5hbWVzcGFjZSBXVEYgewogCiBVUkw6OlVSTChOU1VSTCAqY29j
b2FVUkwpCisgICAgOiBVUkwoYnJpZGdlX2Nhc3QoY29jb2FVUkwpKQogewotICAgIGlmICghY29j
b2FVUkwpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVyZT8KLSAg
ICBDU3RyaW5nIGJ5dGVzOwotICAgIFdURjo6Z2V0VVJMQnl0ZXMoYnJpZGdlX2Nhc3QoY29jb2FV
UkwpLCBieXRlcyk7Ci0gICAgVVJMUGFyc2VyIHBhcnNlcihieXRlcy5kYXRhKCkpOwotICAgICp0
aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiBVUkw6Om9wZXJhdG9yIE5TVVJMICooKSBjb25z
dApAQCAtNTksMjggKzUwLDExIEBAIFVSTDo6b3BlcmF0b3IgTlNVUkwgKigpIGNvbnN0CiAgICAg
cmV0dXJuIGNyZWF0ZUNGVVJMKCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgpOwogfQogCi1SZXRhaW5Q
dHI8Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRlQ0ZVUkwoKSBjb25zdAorUmV0YWluUHRyPENGVVJMUmVm
PiBVUkw6OmVtcHR5Q0ZVUkwoKQogewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIHVzZSB0aGUg
dG9sbC1mcmVlIGJyaWRnZSBiZXR3ZWVuIE5TVVJMIGFuZCBDRlVSTCB0byBjcmVhdGUgYSBDRlVS
TFJlZiBzdXBwb3J0aW5nIGJvdGggZW1wdHkgYW5kIG51bGwgdmFsdWVzLgotICAgICAgICByZXR1
cm4gYnJpZGdlX2Nhc3QoYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJd
KSk7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTDsKLSAgICBpZiAoTElL
RUxZKG1fc3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5nLmlzQWxsQVNDSUkoKSkpCi0gICAgICAg
IGNmVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIs
IG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1N0cmluZyB1
dGY4ID0gbV9zdHJpbmcudXRmOCgpOwotICAgICAgICBjZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxscHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0
ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOwotICAg
IH0KLQotICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIVdURjo6aXNDRlVSTFNh
bWVPcmlnaW4oY2ZVUkwuZ2V0KCksICp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gY2ZVUkw7CisgICAgLy8gV2UgdXNlIHRoZSB0b2xsLWZyZWUgYnJpZGdlIHRv
IGNyZWF0ZSBhbiBlbXB0eSB2YWx1ZSB0aGF0IGlzIGRpc3RpbmN0IGZyb20gbnVsbCB0aGF0IG5v
IENGVVJMIGZ1bmN0aW9uIGNhbiBjcmVhdGUuCisgICAgLy8gRklYTUU6IFdoZW4gd2Ugb3JpZ2lu
YWxseSB3cm90ZSB0aGlzLCB3ZSB0aG91Z2h0IHRoYXQgY3JlYXRpbmcgZW1wdHkgQ0YgVVJMcyB3
YXMgdmFsdWFibGU7IGNhbiB3ZSBkbyB3aXRob3V0IGl0IG5vdz8KKyAgICByZXR1cm4gYnJpZGdl
X2Nhc3QoYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKSk7CiB9CiAK
IGJvb2wgVVJMOjpob3N0SXNJUEFkZHJlc3MoU3RyaW5nVmlldyBob3N0KQpAQCAtOTAsNyArNjQs
NyBAQCBib29sIFVSTDo6aG9zdElzSVBBZGRyZXNzKFN0cmluZ1ZpZXcgaG9zdCkKIAogUmV0YWlu
UHRyPGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgVVJMJiB2ZWN0b3JFbGVtZW50KQogewot
ICAgIHJldHVybiBhZG9wdE5TKChfX2JyaWRnZV90cmFuc2ZlciBpZCl2ZWN0b3JFbGVtZW50LmNy
ZWF0ZUNGVVJMKCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gYnJpZGdlX2Nhc3QodmVjdG9yRWxl
bWVudC5jcmVhdGVDRlVSTCgpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxVUkw+IG1ha2VWZWN0b3JF
bGVtZW50KGNvbnN0IFVSTCosIGlkIGFycmF5RWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL21hYy9GaWxlU3lzdGVtTWFjLm1tIGIvU291cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0
ZW1NYWMubW0KaW5kZXggNWUxOTMwMDU2OWI2MjFjYjRiOWNmOWMwZTdkNjIzNDUxNzczY2FiYS4u
MmFkOTE1Y2FmNjc4OTc0ZTlkNGMwZmZlZmQ5OTAxZTI0ZWE4YjFkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dURi93dGYvbWFj
L0ZpbGVTeXN0ZW1NYWMubW0KQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIFdURiB7CiB2b2lk
IEZpbGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBtZXRhZGF0YVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKIHsKICAgICBT
dHJpbmcgdXJsU3RyaW5nOwotICAgIGlmIChOU1VSTCAqdXJsID0gVVJMV2l0aFVzZXJUeXBlZFN0
cmluZyhtZXRhZGF0YVVSTFN0cmluZywgbmlsKSkKLSAgICAgICAgdXJsU3RyaW5nID0gV1RGOjp1
c2VyVmlzaWJsZVN0cmluZyhXVEY6OlVSTEJ5UmVtb3ZpbmdVc2VySW5mbyh1cmwpKTsKKyAgICBp
ZiAoTlNVUkwgKnVybCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcobWV0YWRhdGFVUkxTdHJpbmcp
KQorICAgICAgICB1cmxTdHJpbmcgPSB1c2VyVmlzaWJsZVN0cmluZyhVUkxCeVJlbW92aW5nVXNl
ckluZm8odXJsKSk7CiAgICAgZWxzZQogICAgICAgICB1cmxTdHJpbmcgPSBtZXRhZGF0YVVSTFN0
cmluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvY2YvV0tVUkxD
Ri5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0KaW5kZXggYWM2
ZDA4NjNmNTMwNWMwNDgzNzcyNmY0ZDYwMGQ3MWNkMTkxMTY0YS4uY2NlODI3NjVhZDliMTY5NWQ5
M2FiODdhNTkzOWJlMzU5NjE3MDc3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL2MvY2YvV0tVUkxDRi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9jZi9X
S1VSTENGLm1tCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0ICJXS05TVVJMLmgiCiAjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgotI2ltcG9y
dCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBzdGF0aWMgaW5saW5lIENsYXNzIHdrTlNVUkxDbGFz
cygpCiB7CkBAIC00NSwxNiArNDQsMTQgQEAgc3RhdGljIGlubGluZSBDbGFzcyB3a05TVVJMQ2xh
c3MoKQogV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoQ0ZVUkxSZWYgY2ZVUkwpCiB7CiAg
ICAgaWYgKCFjZlVSTCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgLy8gU2luY2UgV0tOU1VSTCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB3aXRoIG5vIHN1
YmNsYXNzZXMsIHdlIGNhbiBkbyBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjay4KICAgICBpZiAob2Jq
ZWN0X2dldENsYXNzKChfX2JyaWRnZSBOU1VSTCAqKWNmVVJMKSA9PSB3a05TVVJMQ2xhc3MoKSkK
ICAgICAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoc3RhdGljX2Nhc3Q8QVBJOjpVUkwqPigmWyhX
S05TVVJMICopKF9fYnJpZGdlIE5TVVJMICopQ0ZSZXRhaW4oY2ZVUkwpIF9hcGlPYmplY3RdKSk7
CiAKLSAgICBDU3RyaW5nIHVybEJ5dGVzOwotICAgIFdURjo6Z2V0VVJMQnl0ZXMoY2ZVUkwsIHVy
bEJ5dGVzKTsKLQotICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkVVJMQVBJKHVybEJ5dGVzLmRh
dGEoKSk7CisgICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgdGhlIGJhc2UgVVJM
IGluIHRoZSBDRlVSTCBoZXJlPworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkVVJMQVBJKGJ5
dGVzQXNTdHJpbmcoY2ZVUkwpKTsKIH0KIAogQ0ZVUkxSZWYgV0tVUkxDb3B5Q0ZVUkwoQ0ZBbGxv
Y2F0b3JSZWYgYWxsb2NhdG9yUmVmLCBXS1VSTFJlZiBVUkxSZWYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQppbmRleCBkOTFkMjBhMGUz
NWIwZmVlZmIwNjZjYjJjMGViNjhiYmUzZjZmYTYxLi42MTI4NGIwNGQxMTZjZmI4N2EyM2QzMDY4
YThjMmMyYjUwOWQ2NjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9B
cmd1bWVudENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0Fy
Z3VtZW50Q29kZXJzQ29jb2EubW0KQEAgLTEwNCw5ICsxMDQsOCBAQCAtICh2b2lkKWVuY29kZVdp
dGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCiAgICAgaWYgKGhhc0Jhc2VVUkwpCiAgICAgICAgIFtj
b2RlciBlbmNvZGVPYmplY3Q6YmFzZVVSTCBmb3JLZXk6YmFzZVVSTEtleV07CiAKLSAgICBXVEY6
OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7Ci0gICAgV1RGOjpnZXRVUkxCeXRlcyhicmlkZ2VfY2Fz
dChtX3dyYXBwZWRVUkwuZ2V0KCkpLCB1cmxCeXRlcyk7Ci0gICAgW2NvZGVyIGVuY29kZUJ5dGVz
OnVybEJ5dGVzLmRhdGEoKSBsZW5ndGg6dXJsQnl0ZXMuc2l6ZSgpXTsKKyAgICBhdXRvIGJ5dGVz
ID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2VfY2FzdChtX3dyYXBwZWRVUkwuZ2V0KCkpKTsKKyAgICBb
Y29kZXIgZW5jb2RlQnl0ZXM6Ynl0ZXMuZGF0YSgpIGxlbmd0aDpieXRlcy5zaXplKCldOwogfQog
CiAtIChfTnVsbGFibGUgaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2Rl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5oCmluZGV4IDIwZGRj
YjA5M2ZiOWI5N2UyNjQ5NDliZWQ4MjZlMGJiZTA5YmI0ZjcuLjU3YTNjZDJiMjRmMWRkMWYxYTU2
NjZiMzA4ZWNkZWIzOWJiNmVkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL1dLTlNVUkxFeHRyYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05T
VVJMRXh0cmFzLmgKQEAgLTI4LDggKzI4LDUgQEAKIEBpbnRlcmZhY2UgTlNVUkwgKFdLRXh0cmFz
KQogCiArIChpbnN0YW5jZXR5cGUpX3dlYl9VUkxXaXRoV1RGU3RyaW5nOihjb25zdCBTdHJpbmcm
KXN0cmluZzsKLSsgKGluc3RhbmNldHlwZSlfd2ViX1VSTFdpdGhXVEZTdHJpbmc6KGNvbnN0IFN0
cmluZyYpc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTDsKLQotLSAoU3RyaW5n
KV93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmc7CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLm1tCmluZGV4IDI2MDI3MWEwYjNjZDU3NWQ2NTRmODBm
MTA2ZjNkZTg1ZTM0NWI4N2QuLjE4MWI4M2E4N2I5NmVlYTc1ZTVjZDk1NDY3ODEwNDk3YWJmYzk2
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMu
bW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5tbQpAQCAt
MjcsOSArMjcsNiBAQAogI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgogCiAjaW1wb3J0IDx3dGYv
VVJMLmg+Ci0jaW1wb3J0IDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBAaW1wbGVtZW50
YXRpb24gTlNVUkwgKFdLRXh0cmFzKQogCkBAIC0zOSwxOCArMzYsNCBAQCArIChpbnN0YW5jZXR5
cGUpX3dlYl9VUkxXaXRoV1RGU3RyaW5nOihjb25zdCBTdHJpbmcmKXN0cmluZwogICAgIHJldHVy
biAoTlNVUkwgKil1cmw7CiB9CiAKLSsgKGluc3RhbmNldHlwZSlfd2ViX1VSTFdpdGhXVEZTdHJp
bmc6KGNvbnN0IFN0cmluZyYpc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTAot
ewotICAgIFVSTCB1cmwgeyBVUkwgeyBiYXNlVVJMIH0sIHN0cmluZyB9OwotICAgIHJldHVybiAo
TlNVUkwgKil1cmw7Ci19Ci0KLS0gKFN0cmluZylfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5n
Ci17Ci0gICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVyZT8K
LSAgICBDU3RyaW5nIG9yaWdpbmFsRGF0YTsKLSAgICBXVEY6OmdldFVSTEJ5dGVzKChfX2JyaWRn
ZSBDRlVSTFJlZilzZWxmLCBvcmlnaW5hbERhdGEpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KG9yaWdpbmFsRGF0YSk7Ci19Ci0KIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL1dLTlNVUkxSZXF1ZXN0Lm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvV0tOU1VSTFJlcXVlc3QubW0KaW5kZXggZDBjOTFmN2RlMjkzOTA1OTE3Y2Q1NjlkNmQwNTc3
ZjEwZjZlODIzOS4uNGYyMWFhOTAzMDJhYjY4Y2JmNjE5YWFjZWU2MDM5NjVjYWQzYmUwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTFJlcXVlc3QubW0KKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTFJlcXVlc3QubW0KQEAgLTM3LDcg
KzM3LDcgQEAgLSAoTlNPYmplY3QgKilfd2ViX2NyZWF0ZVRhcmdldAogCiAtIChOU1VSTCAqKVVS
TAogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnN0YXRpY19jYXN0
PEFQSTo6VVJMUmVxdWVzdCo+KCZzZWxmLl9hcGlPYmplY3QpLT5yZXNvdXJjZVJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6VVJMUmVxdWVzdCo+
KCZzZWxmLl9hcGlPYmplY3QpLT5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKIH0KIAogI3ByYWdt
YSBtYXJrIE5TQ29weWluZyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNwcAppbmRleCAyNjc3NmRmNWZkMzZkNjE1MTg0
NDZmMDliYWNiMTBkNmE3MDdlYzE5Li40NjJlODU5NDJiZjVkNDFhYjA5NzRmNDRiOTRkNDdiNjMx
YWRhZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVy
c0NGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNw
cApAQCAtNjQzLDkgKzY0Myw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBDRlVSTFJlZiB1cmwpCiAgICAgaWYgKGJhc2VVUkwpCiAgICAg
ICAgIGVuY29kZXIgPDwgYmFzZVVSTDsKIAotICAgIFdURjo6VVJMQ2hhckJ1ZmZlciB1cmxCeXRl
czsKLSAgICBXVEY6OmdldFVSTEJ5dGVzKHVybCwgdXJsQnl0ZXMpOwotICAgIGVuY29kZXIgPDwg
SVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHVybEJ5
dGVzLmRhdGEoKSksIHVybEJ5dGVzLnNpemUoKSk7CisgICAgZW5jb2RlciA8PCBJUEM6OkRhdGFS
ZWZlcmVuY2UoYnl0ZXNBc1ZlY3Rvcih1cmwpKTsKIH0KIAogdGVtcGxhdGUgdm9pZCBBcmd1bWVu
dENvZGVyPENGVVJMUmVmPjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBDRlVSTFJlZik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCBlMDcxMjZhYmJkOTQxMWFmZGMxMmIy
YWJmZDA4YTRkMTA3MjQyMTkzLi42ZGM1ZDAzM2RjNjkzMWQxYmI0NzQwNzY1MmJiZjU3ZmQyYTA2
YzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTYwLDYgKzYwLDcgQEAK
ICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJh
cy5oPgogCiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uSXNNYWluRnJhbWVLZXkgPSBAIldLQWN0
aW9uSXNNYWluRnJhbWVLZXkiOwogTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk5hdmlnYXRpb25U
eXBlS2V5ID0gQCJXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5IjsKQEAgLTE1Nyw3ICsxNTgsNyBA
QCAtICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAqKVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46
KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeQogICAgIGlmICh1c2VyRGF0YSkKICAgICAgICAgd2tV
c2VyRGF0YSA9IFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwogCi0g
ICAgX3BhZ2UtPmxvYWRGaWxlKFtVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1dURlN0cmluZ10sIFth
bGxvd2VkRGlyZWN0b3J5IF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLCB3a1VzZXJEYXRh
LmdldCgpKTsKKyAgICBfcGFnZS0+bG9hZEZpbGUoYnl0ZXNBc1N0cmluZyhicmlkZ2VfY2FzdChV
UkwpKSwgYnl0ZXNBc1N0cmluZyhicmlkZ2VfY2FzdChhbGxvd2VkRGlyZWN0b3J5KSksIHdrVXNl
ckRhdGEuZ2V0KCkpOwogfQogCiAtICh2b2lkKWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhU
TUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCkBAIC0xNzIsNyArMTczLDcgQEAgLSAo
dm9pZClsb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCB1c2VyRGF0YToKICAgICAgICAgd2tVc2VyRGF0YSA9IFdlYktpdDo6T2JqQ09i
amVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwogCiAgICAgTlNEYXRhICpkYXRhID0gW0hUTUxT
dHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwotICAgIF9wYWdl
LT5sb2FkRGF0YSh7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0
YS5sZW5ndGggfSwgInRleHQvaHRtbCJfcywgIlVURi04Il9zLCBbYmFzZVVSTCBfd2ViX29yaWdp
bmFsRGF0YUFzV1RGU3RyaW5nXSwgd2tVc2VyRGF0YS5nZXQoKSk7CisgICAgX3BhZ2UtPmxvYWRE
YXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0
aCB9LCAidGV4dC9odG1sIl9zLCAiVVRGLTgiX3MsIGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3Qo
YmFzZVVSTCkpLCB3a1VzZXJEYXRhLmdldCgpKTsKIH0KIAogLSAodm9pZClsb2FkQWx0ZXJuYXRl
SFRNTFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIGZv
clVucmVhY2hhYmxlVVJMOihOU1VSTCAqKXVucmVhY2hhYmxlVVJMCkBAIC0xOTIsNyArMTkzLDcg
QEAgLSAodm9pZClsb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilN
SU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOigKICAgICBpZiAodXNlckRhdGEpCiAgICAgICAgIHdr
VXNlckRhdGEgPSBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKIAot
ICAgIF9wYWdlLT5sb2FkRGF0YSh7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5
dGVzKSwgZGF0YS5sZW5ndGggfSwgTUlNRVR5cGUsIGVuY29kaW5nTmFtZSwgW2Jhc2VVUkwgX3dl
Yl9vcmlnaW5hbERhdGFBc1dURlN0cmluZ10sIHdrVXNlckRhdGEuZ2V0KCkpOworICAgIF9wYWdl
LT5sb2FkRGF0YSh7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0
YS5sZW5ndGggfSwgTUlNRVR5cGUsIGVuY29kaW5nTmFtZSwgYnl0ZXNBc1N0cmluZyhicmlkZ2Vf
Y2FzdChiYXNlVVJMKSksIHdrVXNlckRhdGEuZ2V0KCkpOwogfQogCiAtICh2b2lkKXN0b3BMb2Fk
aW5nCkBAIC01MDgsNyArNTA5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
CiAKICAgICAgICAgICAgIGlmIChvcmlnaW5hdGluZ0ZyYW1lKSB7CiAgICAgICAgICAgICAgICAg
YWN0aW9uRGljdGlvbmFyeSA9IGFkb3B0TlMoW2FjdGlvbkRpY3Rpb25hcnkgbXV0YWJsZUNvcHld
KTsKLSAgICAgICAgICAgICAgICBbKE5TTXV0YWJsZURpY3Rpb25hcnkgKilhY3Rpb25EaWN0aW9u
YXJ5LmdldCgpIHNldE9iamVjdDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOldlYktpdDo6
dG9JbXBsKG9yaWdpbmF0aW5nRnJhbWUpLT51cmwoKS5zdHJpbmcoKV0gZm9yS2V5OldLQWN0aW9u
T3JpZ2luYXRpbmdGcmFtZVVSTEtleV07CisgICAgICAgICAgICAgICAgWyhOU011dGFibGVEaWN0
aW9uYXJ5ICopYWN0aW9uRGljdGlvbmFyeS5nZXQoKSBzZXRPYmplY3Q6KE5TVVJMICopV2ViS2l0
Ojp0b0ltcGwob3JpZ2luYXRpbmdGcmFtZSktPnVybCgpIGZvcktleTpXS0FjdGlvbk9yaWdpbmF0
aW5nRnJhbWVVUkxLZXldOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBbcG9saWN5RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpicm93c2luZ0NvbnRl
eHQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjphY3Rpb25EaWN0aW9uYXJ5LmdldCgp
IGRlY2lzaW9uSGFuZGxlcjptYWtlUG9saWN5RGVjaXNpb25CbG9jayhsaXN0ZW5lcikuZ2V0KCld
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5RG93bmxv
YWRDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9h
ZENsaWVudC5tbQppbmRleCAwZmI3ZThhZDk5YmE0NzFmODlkZjFhZTkxMDk4MzMyMTY4MGViYjFj
Li42NTVkODliOGQ4MGNmZmM0MGQ5NTMyNzgxMTBlNzBkM2U2YTBlOWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENsaWVudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENsaWVudC5tbQpA
QCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTGVnYWN5RG93bmxvYWRDbGllbnQ6OmxlZ2FjeURpZENh
bmNlbChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogdm9pZCBMZWdhY3lEb3dubG9hZENs
aWVudDo6d2lsbFNlbmRSZXF1ZXN0KERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHksIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAobV9kZWxlZ2F0ZU1ldGhvZHMuZG93
bmxvYWREaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RUb1VSTCkKLSAgICAgICAgW21fZGVsZWdhdGUg
X2Rvd25sb2FkOltfV0tEb3dubG9hZCBkb3dubG9hZFdpdGhEb3dubG9hZDp3cmFwcGVyKGRvd25s
b2FkUHJveHkpXSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RUb1VSTDpbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOnJlcXVlc3QudXJsKCkuc3RyaW5nKCldXTsKKyAgICAgICAgW21fZGVsZWdh
dGUgX2Rvd25sb2FkOltfV0tEb3dubG9hZCBkb3dubG9hZFdpdGhEb3dubG9hZDp3cmFwcGVyKGRv
d25sb2FkUHJveHkpXSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RUb1VSTDpyZXF1ZXN0LnVybCgp
XTsKIAogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVxdWVzdCkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9X
S1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KaW5kZXggZmRh
ZDEzMGUwMmJjM2M1NjhhYTQ5OTQ3M2UyYjFkNzgwODRhZTI0ZS4uYzgxMWVhZDgyOTc4ODAwZmRl
MDBkYWZmNWMyY2M0Yzc5NDZhOGJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dL
V2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCkBAIC0xMTAsNyArMTEwLDcgQEAgLSAoV0tXZWJQcm9j
ZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyICopX2Jyb3dzZXJDb250ZXh0Q29udHJv
bGxlcgogCiAtIChOU1VSTCAqKVVSTAogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRo
V1RGU3RyaW5nOl9mcmFtZS0+dXJsKCkuc3RyaW5nKCldOworICAgIHJldHVybiBfZnJhbWUtPnVy
bCgpOwogfQogCiAtIChOU0FycmF5ICopY2hpbGRGcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaAppbmRleCBlYzcwZWEzNDVjNGU0NTI4NjdkNzVh
ZDQyZWRhZDc2ZTU1MDdjNTZmLi5lYzc0ODYyMTRjNmM0ZTdmYjNhNWJhZDkwZGQxY2RhYjIwNTEw
ZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0
cmFzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsMzAgKzI4LDIzIEBACiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgogCi0vLyBGSVhNRTogQ2hhbmdlIG1ldGhvZCBuYW1lcyBiYWNrIHRvIF93ZWJfIGZy
b20gX3dlYmtpdF8gd2hlbiBpZGVudGljYWxseS1uYW1lZAotLy8gbWV0aG9kcyBhcmUgbm8gbG9u
Z2VyIHByZXNlbnQgaW4gRm91bmRhdGlvbi4KKy8vIEZJWE1FOiBDb25zaWRlciByZW5hbWluZyB0
byBfd2ViXyBmcm9tIF93ZWJraXRfIG9uY2UgaWRlbnRpY2FsbHktbmFtZWQgbWV0aG9kcyBhcmUg
bm8gbG9uZ2VyIHByZXNlbnQgaW4gRm91bmRhdGlvbi4KIAogQGludGVyZmFjZSBOU1VSTCAoV2Vi
TlNVUkxFeHRyYXMpCiAKLS8vIERlcHJlY2F0ZWQgYXMgaXQgaWdub3JlcyBVUkwgcGFyc2luZyBl
cnJvci4KLS8vIFBsZWFzZSB1c2UgdGhlIF93ZWJraXRfIGNvdW50ZXJwYXJ0cy4KKy8vIERlcHJl
Y2F0ZWQsIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3JzLgorLy8gUGxlYXNlIHVzZSB0
aGUgX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nIGluc3RlYWQuCiArIChOU1VSTCAqKV93
ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7Ci0rIChOU1VSTCAq
KV93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVU
b1VSTDooTlNVUkwgKilVUkw7CiAKLS8vIE5ldyBTUEkuCiAvLyBSZXR1cm4gdmFsdWUgb2Ygbmls
IG1lYW5zIGVycm9yIGluIFVSTCBwYXJzaW5nLgogKyAoTlNVUkwgKilfd2Via2l0X1VSTFdpdGhV
c2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotKyAoTlNVUkwgKilfd2Via2l0X1VS
TFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5T
VVJMICopVVJMOwogCiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzooTlNTdHJp
bmcgKilzdHJpbmc7CiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMOwogCi0rIChOU1VSTCAq
KV93ZWJfVVJMV2l0aERhdGE6KE5TRGF0YSAqKWRhdGE7Ci0rIChOU1VSTCAqKV93ZWJfVVJMV2l0
aERhdGE6KE5TRGF0YSAqKWRhdGEgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMOwotCiAt
IChOU0RhdGEgKilfd2ViX29yaWdpbmFsRGF0YTsKIC0gKE5TU3RyaW5nICopX3dlYl9vcmlnaW5h
bERhdGFBc1N0cmluZzsKLS0gKGNvbnN0IGNoYXIgKilfd2ViX1VSTENTdHJpbmc7CistIChjb25z
dCBjaGFyKilfd2ViX1VSTENTdHJpbmc7CiAKIC0gKE5TU3RyaW5nICopX3dlYl9ob3N0U3RyaW5n
OwogCkBAIC03OCwxNCArNzEsMTYgQEAKIAogLSAoQk9PTClfd2ViX2lzVXNlclZpc2libGVVUkw7
CiAKLS8vIERlcHJlY2F0ZWQgYXMgaXQgaWdub3JlcyBVUkwgcGFyc2luZyBlcnJvci4KLS8vIFBs
ZWFzZSB1c2UgdGhlIF93ZWJraXRfIGNvdW50ZXJwYXJ0cy4KLS8vIHR1cm5zIGZ1bm55LWxvb2tp
bmcgQVNDSUkgZm9ybSBpbnRvIFVuaWNvZGUsIHJldHVybnMgc2VsZiBpZiBubyBkZWNvZGluZyBu
ZWVkZWQsIGNvbnZlbmllbnQgY292ZXIKKy8vIERlcHJlY2F0ZWQgYXMgaXQgaWdub3JlcyBVUkwg
cGFyc2luZyBlcnJvcnMuCisvLyBQbGVhc2UgdXNlIF93ZWJraXRfZGVjb2RlSG9zdE5hbWUgaW5z
dGVhZC4KKy8vIFR1cm5zIGZ1bm55LWxvb2tpbmcgQVNDSUkgZm9ybSBpbnRvIFVuaWNvZGUsIHJl
dHVybnMgc2VsZiBpZiBubyBkZWNvZGluZyBuZWVkZWQuCiAtIChOU1N0cmluZyAqKV93ZWJfZGVj
b2RlSG9zdE5hbWU7Ci0vLyB0dXJucyBVbmljb2RlIGludG8gZnVubnktbG9va2luZyBBU0NJSSBm
b3JtLCByZXR1cm5zIHNlbGYgaWYgbm8gZGVjb2RpbmcgbmVlZGVkLCBjb252ZW5pZW50IGNvdmVy
CisKKy8vIERlcHJlY2F0ZWQgYXMgaXQgaWdub3JlcyBVUkwgcGFyc2luZyBlcnJvcnMuCisvLyBQ
bGVhc2UgdXNlIHRoZSBfd2Via2l0X2VuY29kZUhvc3ROYW1lIGluc3RlYWQuCisvLyBUdXJucyBV
bmljb2RlIGludG8gZnVubnktbG9va2luZyBBU0NJSSBmb3JtLCByZXR1cm5zIHNlbGYgaWYgbm8g
ZW5jb2RpbmcgbmVlZGVkLgogLSAoTlNTdHJpbmcgKilfd2ViX2VuY29kZUhvc3ROYW1lOwogCi0v
LyBOZXcgU1BJLgogLy8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFucyBlcnJvciBpbiBVUkwgcGFy
c2luZy4KIC0gKE5TU3RyaW5nICopX3dlYmtpdF9kZWNvZGVIb3N0TmFtZTsKIC0gKE5TU3RyaW5n
ICopX3dlYmtpdF9lbmNvZGVIb3N0TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9N
aXNjL1dlYk5TVVJMRXh0cmFzLm1tCmluZGV4IDFlYzA0ZWFhZjViNDY0NzZkODk5ZGZlODU1ZWVm
MjZjYzI5MzU4MmMuLjQ0OGYyMmY5YTMxNmQwYTdhZjJjMzdhZWRhMmM5MGY1YjY2YzRmNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQxLDcwICs0MSwzOCBAQAogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0
Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLSNkZWZpbmUgVVJMX0JZVEVT
X0JVRkZFUl9MRU5HVEggMjA0OAorI2ltcG9ydCA8d3RmL2NvY29hL1R5cGVDYXN0c0NvY29hLmg+
CiAKIEBpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViTlNVUkxFeHRyYXMpCiAKLSsgKE5TVVJMICop
X3dlYl9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRv
VVJMOihOU1VSTCAqKVVSTAotewotICAgIHJldHVybiBVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVw
cmVjYXRlZChzdHJpbmcsIFVSTCk7Ci19Ci0KICsgKE5TVVJMICopX3dlYl9VUkxXaXRoVXNlclR5
cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewotICAgIHJldHVybiBVUkxXaXRoVXNlclR5
cGVkU3RyaW5nRGVwcmVjYXRlZChzdHJpbmcsIG5pbCk7Ci19Ci0KLSsgKE5TVVJMICopX3dlYmtp
dF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvVVJM
OihOU1VSTCAqKVVSTAotewotICAgIHJldHVybiBVUkxXaXRoVXNlclR5cGVkU3RyaW5nKHN0cmlu
ZywgVVJMKTsKKyAgICByZXR1cm4gV1RGOjpVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRl
ZChzdHJpbmcpOwogfQogCiArIChOU1VSTCAqKV93ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSAgICByZXR1cm4gVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZyhzdHJpbmcsIG5pbCk7CisgICAgcmV0dXJuIFdURjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZyhz
dHJpbmcpOwogfQogCiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcKIHsKLSAgICBpZiAoc3RyaW5nID09IG5pbCkgewotICAgICAgICByZXR1cm4g
bmlsOwotICAgIH0KICAgICByZXR1cm4gW3NlbGYgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOnN0
cmluZyByZWxhdGl2ZVRvVVJMOm5pbF07CiB9CiAKICsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0
YUFzU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VV
UkwKIHsKLSAgICBpZiAoc3RyaW5nID09IG5pbCkgewotICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KLSAgICBzdHJpbmcgPSBbc3RyaW5nIF93ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3Bh
Y2VdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNJU09M
YXRpbjFTdHJpbmdFbmNvZGluZ107Ci0gICAgcmV0dXJuIFVSTFdpdGhEYXRhKGRhdGEsIGJhc2VV
UkwpOwotfQotCi0rIChOU1VSTCAqKV93ZWJfVVJMV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEKLXsK
LSAgICByZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwgbmlsKTsKLX0gICAgICAKLQotKyAoTlNVUkwg
Kilfd2ViX1VSTFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIHJlbGF0aXZlVG9VUkw6KE5TVVJMICop
YmFzZVVSTAotewotICAgIHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBiYXNlVVJMKTsKKyAgICBy
ZXR1cm4gV1RGOjpVUkxXaXRoRGF0YShbW3N0cmluZyBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdX
aGl0ZXNwYWNlXSBkYXRhVXNpbmdFbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSwg
YmFzZVVSTCk7CiB9CiAKIC0gKE5TRGF0YSAqKV93ZWJfb3JpZ2luYWxEYXRhCiB7Ci0gICAgcmV0
dXJuIG9yaWdpbmFsVVJMRGF0YShzZWxmKTsKKyAgICByZXR1cm4gV1RGOjpvcmlnaW5hbFVSTERh
dGEoc2VsZik7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZwog
ewotICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpvcmln
aW5hbFVSTERhdGEoc2VsZikgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ10pLmF1
dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOldURjo6b3JpZ2luYWxVUkxEYXRhKHNlbGYpIGVuY29kaW5nOk5TSVNPTGF0aW4xU3Ry
aW5nRW5jb2RpbmddKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJfdXNl
clZpc2libGVTdHJpbmcKQEAgLTExNCwyMiArODIsMjIgQEAgLSAoTlNTdHJpbmcgKilfd2ViX3Vz
ZXJWaXNpYmxlU3RyaW5nCiAKIC0gKEJPT0wpX3dlYl9pc0VtcHR5CiB7Ci0gICAgaWYgKCFDRlVS
TEdldEJhc2VVUkwoKENGVVJMUmVmKXNlbGYpKQotICAgICAgICByZXR1cm4gQ0ZVUkxHZXRCeXRl
cygoQ0ZVUkxSZWYpc2VsZiwgTlVMTCwgMCkgPT0gMDsKLSAgICByZXR1cm4gW29yaWdpbmFsVVJM
RGF0YShzZWxmKSBsZW5ndGhdID09IDA7CisgICAgaWYgKCFDRlVSTEdldEJhc2VVUkwoYnJpZGdl
X2Nhc3Qoc2VsZikpKQorICAgICAgICByZXR1cm4gIUNGVVJMR2V0Qnl0ZXMoYnJpZGdlX2Nhc3Qo
c2VsZiksIG51bGxwdHIsIDApOworICAgIHJldHVybiAhW1dURjo6b3JpZ2luYWxVUkxEYXRhKHNl
bGYpIGxlbmd0aF07CiB9CiAKLS0gKGNvbnN0IGNoYXIgKilfd2ViX1VSTENTdHJpbmcKKy0gKGNv
bnN0IGNoYXIqKV93ZWJfVVJMQ1N0cmluZwogewogICAgIE5TTXV0YWJsZURhdGEgKmRhdGEgPSBb
TlNNdXRhYmxlRGF0YSBkYXRhXTsKLSAgICBbZGF0YSBhcHBlbmREYXRhOm9yaWdpbmFsVVJMRGF0
YShzZWxmKV07CisgICAgW2RhdGEgYXBwZW5kRGF0YTpXVEY6Om9yaWdpbmFsVVJMRGF0YShzZWxm
KV07CiAgICAgW2RhdGEgYXBwZW5kQnl0ZXM6IlwwIiBsZW5ndGg6MV07Ci0gICAgcmV0dXJuIChj
b25zdCBjaGFyICopW2RhdGEgYnl0ZXNdOworICAgIHJldHVybiAoY29uc3QgY2hhciopW2RhdGEg
Ynl0ZXNdOwogIH0KIAogLSAoTlNVUkwgKilfd2Via2l0X2Nhbm9uaWNhbGl6ZQogewotICAgIHJl
dHVybiBVUkxCeUNhbm9uaWNhbGl6aW5nVVJMKHNlbGYpOworICAgIHJldHVybiBXZWJDb3JlOjpV
UkxCeUNhbm9uaWNhbGl6aW5nVVJMKHNlbGYpOwogfQogCiAtIChOU1VSTCAqKV93ZWJraXRfY2Fu
b25pY2FsaXplX3dpdGhfd3RmCkBAIC0xNDAsNyArMTA4LDcgQEAgLSAoTlNVUkwgKilfd2Via2l0
X2Nhbm9uaWNhbGl6ZV93aXRoX3d0ZgogCiAtIChOU1VSTCAqKV93ZWJraXRfVVJMQnlSZW1vdmlu
Z0ZyYWdtZW50IAogewotICAgIHJldHVybiBVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZv
cmVDb21wb25lbnQoc2VsZiwga0NGVVJMQ29tcG9uZW50RnJhZ21lbnQpOworICAgIHJldHVybiBX
VEY6OlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudChzZWxmLCBrQ0ZV
UkxDb21wb25lbnRGcmFnbWVudCk7CiB9CiAKIC0gKE5TVVJMICopX3dlYl9VUkxCeVJlbW92aW5n
VXNlckluZm8KQEAgLTE2MywyNyArMTMxLDYgQEAgLSAoQk9PTClfd2Via2l0X2lzRmlsZVVSTAog
ICAgIHJldHVybiBbW3NlbGYgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10gX3dlYmtpdF9pc0Zp
bGVVUkxdOwogfQogCi0tKE5TRGF0YSAqKV93ZWJfc2NoZW1lU2VwYXJhdG9yV2l0aG91dENvbG9u
Ci17Ci0gICAgTlNEYXRhICpyZXN1bHQgPSBuaWw7Ci0gICAgQ0ZSYW5nZSByYW5nZVdpdGhTZXBh
cmF0b3JzOwotICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVu
dCgoQ0ZVUkxSZWYpc2VsZiwga0NGVVJMQ29tcG9uZW50U2NoZW1lLCAmcmFuZ2VXaXRoU2VwYXJh
dG9ycyk7Ci0gICAgaWYgKHJhbmdlV2l0aFNlcGFyYXRvcnMubG9jYXRpb24gIT0ga0NGTm90Rm91
bmQpIHsKLSAgICAgICAgTlNTdHJpbmcgKmFic29sdXRlU3RyaW5nID0gW3NlbGYgYWJzb2x1dGVT
dHJpbmddOwotICAgICAgICBOU1JhbmdlIHNlcGFyYXRvcnNSYW5nZSA9IE5TTWFrZVJhbmdlKHJh
bmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoICsgMSwgcmFuZ2VXaXRoU2VwYXJhdG9ycy5sZW5n
dGggLSByYW5nZS5sZW5ndGggLSAxKTsKLSAgICAgICAgaWYgKHNlcGFyYXRvcnNSYW5nZS5sb2Nh
dGlvbiArIHNlcGFyYXRvcnNSYW5nZS5sZW5ndGggPD0gW2Fic29sdXRlU3RyaW5nIGxlbmd0aF0p
IHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpzbGFzaGVzID0gW2Fic29sdXRlU3RyaW5nIHN1YnN0
cmluZ1dpdGhSYW5nZTpzZXBhcmF0b3JzUmFuZ2VdOwotICAgICAgICAgICAgcmVzdWx0ID0gW3Ns
YXNoZXMgZGF0YVVzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ107Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLShOU0RhdGEgKilfd2ViX2Rh
dGFGb3JVUkxDb21wb25lbnRUeXBlOihDRlVSTENvbXBvbmVudFR5cGUpY29tcG9uZW50VHlwZQot
ewotICAgIHJldHVybiBXVEY6OmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKHNlbGYsIGNvbXBvbmVu
dFR5cGUpOwotfQotCiAtKE5TRGF0YSAqKV93ZWJfc2NoZW1lRGF0YQogewogICAgIHJldHVybiBX
VEY6OmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKHNlbGYsIGtDRlVSTENvbXBvbmVudFNjaGVtZSk7
CkBAIC0xOTIsMTEgKzEzOSwxMSBAQCAtKE5TRGF0YSAqKV93ZWJfc2NoZW1lRGF0YQogLShOU0Rh
dGEgKilfd2ViX2hvc3REYXRhCiB7CiAgICAgTlNEYXRhICpyZXN1bHQgPSBXVEY6OmRhdGFGb3JV
UkxDb21wb25lbnRUeXBlKHNlbGYsIGtDRlVSTENvbXBvbmVudEhvc3QpOwotICAgIE5TRGF0YSAq
c2NoZW1lID0gW3NlbGYgX3dlYl9zY2hlbWVEYXRhXTsKLSAgICAvLyBUYWtlIG9mZiBsb2NhbGhv
c3QgZm9yIGZpbGUKLSAgICBpZiAoW3NjaGVtZSBfd2ViX2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxU
b0NTdHJpbmc6ImZpbGUiXSkgewotICAgICAgICByZXR1cm4gKFtyZXN1bHQgX3dlYl9pc0Nhc2VJ
bnNlbnNpdGl2ZUVxdWFsVG9DU3RyaW5nOiJsb2NhbGhvc3QiXSkgPyBuaWwgOiByZXN1bHQ7Ci0g
ICAgfQorCisgICAgLy8gVGFrZSBvZmYgbG9jYWxob3N0IGZvciBmaWxlLgorICAgIGlmIChbcmVz
dWx0IF93ZWJfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvQ1N0cmluZzoibG9jYWxob3N0Il0gJiYg
W1tzZWxmIF93ZWJfc2NoZW1lRGF0YV0gX3dlYl9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9DU3Ry
aW5nOiJmaWxlIl0pCisgICAgICAgIHJldHVybiBuaWw7CisKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0yMjMsNyArMTcwLDcgQEAgQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChXZWJOU1VS
TEV4dHJhcykKIAogLSAoQk9PTClfd2ViX2lzVXNlclZpc2libGVVUkwKIHsKLSAgICByZXR1cm4g
aXNVc2VyVmlzaWJsZVVSTChzZWxmKTsKKyAgICByZXR1cm4gV1RGOjppc1VzZXJWaXNpYmxlVVJM
KHNlbGYpOwogfQogCiAtIChCT09MKV93ZWJraXRfaXNKYXZhU2NyaXB0VVJMCkBAIC0yMzgsNyAr
MTg1LDcgQEAgLSAoQk9PTClfd2Via2l0X2lzRmlsZVVSTAogCiAtIChOU1N0cmluZyAqKV93ZWJr
aXRfc3RyaW5nQnlSZXBsYWNpbmdWYWxpZFBlcmNlbnRFc2NhcGVzCiB7Ci0gICAgcmV0dXJuIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmcoc2VsZikpOworICAgIHJldHVybiBXZWJDb3Jl
OjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKHNlbGYpKTsKIH0KIAogLSAoTlNTdHJp
bmcgKilfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTApAQCAtMjUxLDI0ICsxOTgsMjQgQEAg
LSAoTlNTdHJpbmcgKilfd2Via2l0X3NjcmlwdElmSmF2YVNjcmlwdFVSTAogCiAtIChOU1N0cmlu
ZyAqKV93ZWJfZGVjb2RlSG9zdE5hbWUKIHsKLSAgICBOU1N0cmluZyAqbmFtZSA9IGRlY29kZUhv
c3ROYW1lKHNlbGYpOworICAgIE5TU3RyaW5nICpuYW1lID0gV1RGOjpkZWNvZGVIb3N0TmFtZShz
ZWxmKTsKICAgICByZXR1cm4gIW5hbWUgPyBzZWxmIDogbmFtZTsKIH0KIAogLSAoTlNTdHJpbmcg
Kilfd2ViX2VuY29kZUhvc3ROYW1lCiB7Ci0gICAgTlNTdHJpbmcgKm5hbWUgPSBlbmNvZGVIb3N0
TmFtZShzZWxmKTsKKyAgICBOU1N0cmluZyAqbmFtZSA9IFdURjo6ZW5jb2RlSG9zdE5hbWUoc2Vs
Zik7CiAgICAgcmV0dXJuICFuYW1lID8gc2VsZiA6IG5hbWU7CiB9CiAKIC0gKE5TU3RyaW5nICop
X3dlYmtpdF9kZWNvZGVIb3N0TmFtZQogewotICAgIHJldHVybiBkZWNvZGVIb3N0TmFtZShzZWxm
KTsKKyAgICByZXR1cm4gV1RGOjpkZWNvZGVIb3N0TmFtZShzZWxmKTsKIH0KIAogLSAoTlNTdHJp
bmcgKilfd2Via2l0X2VuY29kZUhvc3ROYW1lCiB7Ci0gICAgcmV0dXJuIGVuY29kZUhvc3ROYW1l
KHNlbGYpOworICAgIHJldHVybiBXVEY6OmVuY29kZUhvc3ROYW1lKHNlbGYpOwogfQogCiAtKE5T
UmFuZ2UpX3dlYmtpdF9yYW5nZU9mVVJMU2NoZW1lCg==
</data>
<flag name="commit-queue"
          id="466787"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442323</attachid>
            <date>2021-10-24 14:15:37 -0700</date>
            <delta_ts>2021-10-28 14:10:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232220-20211024141536.patch</filename>
            <type>text/plain</type>
            <size>63012</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiZDg5ZTg4NjViZmVmZTdkYmZkYzZi
ZTBkNGRjODBlZWJhODBjYWMuLmQ4ZWFkMjAxNjMyZGNlMzNjMDEzYmFjYmEwYjNhMGQ0NjEyMTA4
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMjEtMTAtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRl
ZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1VSTC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1
ZGVzLiBVc2UgZGVmYXVsdCBpbnN0ZWFkIG9mIHsgfQorICAgICAgICBmb3IgZW1wdHkgZGVzdHJ1
Y3Rvci4gQWRkZWQgZW1wdHlDRlVSTCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9jZi9DRlVS
TEV4dHJhcy5jcHA6CisgICAgICAgIChXVEY6OmJ5dGVzQXNDRkRhdGEpOiBBZGRlZC4gUmVwbGFj
ZXMgb3JpZ2luYWxVUkxEYXRhIGZyb20gTlNVUkxFeHRyYXMubW0sCisgICAgICAgIGJ1dCB3aXRo
IGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhbmQgbW9yZSBlcnJvciBjaGVja2luZy4gSGVyZSBp
dCdzIGFsc28KKyAgICAgICAgYWxvbmdzaWRlIHRoZSBvdGhlciBuZWFybHkgaWRlbnRpY2FsIGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1N0cmluZyk6IEFkZGVkLiBSZXBsYWNlcyBn
ZXRVUkxCeXRlcyBmb3IgY2FsbGVycyB0aGF0IGFyZQorICAgICAgICBnb2luZyB0byB0dXJuIHRo
ZSBieXRlcyBpbnRvIGEgV1RGOjpTdHJpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY2FsbGVy
cworICAgICAgICB3ZXJlIGNvbnZlcnRpbmcgZnJvbSBDRlVSTFJlZiB0byBXVEY6OkNTdHJpbmcg
YW5kIHRoZW4gdG8gV1RGOjpTdHJpbmcsIHNvCisgICAgICAgIHRoaXMgZWxpbWluYXRlcyB0aGUg
bWFsbG9jL2ZyZWUgcGFpciBmb3IgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1ZlY3Rv
cik6IEFkZGVkLiBSZXBsYWNlcyBnZXRVUkxCeXRlcyB1c2luZyBhIHJldHVybiB2YWx1ZQorICAg
ICAgICBpbnN0ZWFkIG9mIGFuIG91dCBhcmd1bWVudC4gQWRkcyB0aGUgb3B0aW1pemF0aW9uIG9m
IGZpbGxpbmcgdGhlIGJ1ZmZlciBpZgorICAgICAgICB0aGUgaW5saW5lIGNhcGFjaXR5IGlzIHN1
ZmZpY2llbnQsIHdoaWNoIHdhcyBpbiBvcmlnaW5hbFVSTERhdGEsIGJ1dCBub3QKKyAgICAgICAg
aGVyZSBpbiBnZXRVUkxCeXRlcyBiZWZvcmUuCisgICAgICAgIChXVEY6OmlzU2FtZU9yaWdpbik6
IFJlbmFtZWQgZnJvbSBpc0NGVVJMU2FtZU9yaWdpbiBhbmQgcmV3cm90ZSB0aGlzIHRvCisgICAg
ICAgIGhhdmUgZmV3ZXIgdHlwZSBjYXN0cyBhbmQgbW9yZSBwYXJhbGxlbCBzdHJ1Y3R1cmUgc28g
aXQncyBlYXNpZXIgdG8gcmVhZCwKKyAgICAgICAgd2hpbGUgYWRhcHRpbmcgaXQgdG8gdXNlIGJ5
dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiB3dGYvY2YvQ0ZVUkxFeHRyYXMuaDogUmVwbGFjZWQg
VVJMQ2hhckJ1ZmZlciwgZ2V0VVJMQnl0ZXMsIGFuZAorICAgICAgICBpc0NGVVJMU2FtZU9yaWdp
biB3aXRoIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHksIGJ5dGVzQXNDRkRhdGEsCisgICAg
ICAgIGJ5dGVzQXNTdHJpbmcsIGJ5dGVzQXNWZWN0b3IsIGFuZCBpc1NhbWVPcmlnaW4uIEdvdCBy
aWQgb2YgdW5uZWVkZWQKKyAgICAgICAgaW5jbHVkZXMuCisKKyAgICAgICAgKiB3dGYvY2YvVVJM
Q0YuY3BwOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IFVzZSBieXRlc0FzU3RyaW5nIHRvIHN0
cmVhbWxpbmUgaW1wbGVtZW50YXRpb24gYW5kCisgICAgICAgIHJlbW92ZSBhbGxvY2F0aW9uL2Rl
YWxsY2F0aW9uIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6VVJMOjplbXB0eUNGVVJMKTog
QWRkZWQuIFVzZWQgdG8gcmVmYWN0b3IgY3JlYXRlQ0ZVUkwgc28gd2UgY2FuCisgICAgICAgIHNo
YXJlIGl0IGFjcm9zcyBGb3VuZGF0aW9uIGFuZCBub24tRm91bmRhdGlvbiB2ZXJzaW9ucy4KKyAg
ICAgICAgKFdURjo6VVJMOjpjcmVhdGVDRlVSTCBjb25zdCk6IEFkZGVkIHRoZSBsb2dpYyB0aGF0
IHdhcyBpbiB0aGUgdmVyc2lvbgorICAgICAgICBpbiBVUkxDb2NvYS5tbSBzbyB3ZSBjYW4gc2hh
cmUgdGhpcyBzaW5nbGUgdmVyc2lvbiwgYW5kIHJlbW92ZWQgdGhlICNpZgorICAgICAgICBzdXJy
b3VuZGluZyB0aGlzLgorICAgICAgICAoV1RGOjpVUkw6OmZpbGVTeXN0ZW1QYXRoIGNvbnN0KTog
VXNlIGF1dG8uCisKKyAgICAgICAgKiB3dGYvY29jb2EvTlNVUkxFeHRyYXMuaDogQ2hhbmdlZCBV
UkxXaXRoVXNlclR5cGVkU3RyaW5nIHRvIGlnbm9yZQorICAgICAgICB0aGUgYmFzZVVSTCBhcmd1
bWVudC4gSXQncyBub3QgdXNlZCwgYnV0IHRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCBhbmQKKyAg
ICAgICAgY3VycmVudGx5IHVzZWQgaW4gU2FmYXJpIHNvdXJjZSBjb2RlLCB3aGljaCwgbGlrZSBh
bGwgY2FsbGVycyBwYXNzZXMKKyAgICAgICAgYSBuaWwgZm9yIGJhc2VVUkwuIHNvLCBmb3Igbm93
IGxlZnQgdGhlIGFyZ3VtZW50LiBSZW1vdmVkIHRoZSBiYXNlVVJMCisgICAgICAgIGFyZ3VtZW50
IGZyb20gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQuIFJlbW92ZWQgdW51c2VkIGZ1
bmN0aW9ucworICAgICAgICByYW5nZU9mVVJMU2NoZW1lIGFuZCBsb29rc0xpa2VBYnNvbHV0ZVVS
TC4KKworICAgICAgICAqIHd0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbTogUmVtb3ZlZCAidXNpbmcg
bmFtZXNwYWNlIFVSTEhlbHBlcnMiLgorICAgICAgICAoV1RGOjpyZWFkSUROQWxsb3dlZFNjcmlw
dExpc3RGaWxlKTogVXNlIFVSTEhlbHBlcnMgZXhwbGljaXRseS4KKyAgICAgICAgKFdURjo6ZGVj
b2RlSG9zdE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6ZW5jb2RlSG9zdE5hbWUpOiBEaXR0
by4KKyAgICAgICAgKFdURjo6VVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9u
ZW50KTogU2ltcGxpZmllZCBieSB1c2luZworICAgICAgICB0aGUgYnl0ZXNBc1ZlY3RvciBmdW5j
dGlvbi4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ1Jlc291cmNlU3BlY2lmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VVJMV2l0aERhdGEpOiBDYWxsIFVSTEJ5VHJ1bmNhdGluZ09u
ZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudAorICAgICAgICBkaXJlY3RseS4KKyAgICAgICAgKFdU
Rjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZyk6IFJlbW92ZWQgdGhlIHVubmVlZGVkIHN1cHBvcnQg
Zm9yIGEKKyAgICAgICAgYmFzZSBVUkwuIFVzZSBVUkxIZWxwZXJzIGV4cGxpY2l0bHkuCisgICAg
ICAgIChXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6Omhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmluZyk6IFVzZSBicmlkZ2VfY2Fz
dC4KKyAgICAgICAgKFdURjo6ZGF0YUZvclVSTENvbXBvbmVudFR5cGUpOiBSZWFycmFuZ2VkIHRv
IHNpbXBsaWZ5IGEgYml0LCByZW1vdmUgc3VwcG9ydAorICAgICAgICBmb3Igc3BlY2lhbCB2YWx1
ZSBmb3IgQ0ZVUkxDb21wb25lbnRUeXBlIHRoYXQgbWVhbnMgdGhlIGNvbXBsZXRlIFVSTCwgc2lu
Y2UKKyAgICAgICAgbm8gY2FsbGVycyB3ZXJlIHVzaW5nIHRoYXQsIGFuZCB1c2UgYnl0ZXNBc1Zl
Y3Rvci4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRD
aGFyYWN0ZXIpOiBVc2UgYnJpZGdlX2Nhc3QgYW5kCisgICAgICAgIGJ5dGVzQXNWZWN0b3IuCisg
ICAgICAgIChXVEY6Om9yaWdpbmFsVVJMRGF0YSk6IFVzZSBicmlkZ2VfY2FzdCBhbmQgYnl0ZXNB
c0NGRGF0YS4KKyAgICAgICAgKFdURjo6dXNlclZpc2libGVTdHJpbmcpOiBVc2UgVVJMSGVscGVy
cyBleHBsaWNpdGx5LgorICAgICAgICAoV1RGOjppc1VzZXJWaXNpYmxlVVJMKTogUmV3cm90ZSBm
b3Igc2ltcGxpY2l0eSBhbmQgY29kaW5nIHN0eWxlOyBzaW5jZQorICAgICAgICB0aGUgbG9jYWwg
Y2hhcmFjdGVycyBhcmUgYSBudWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmcsIHdlIGRvbid0IG5lZWQK
KyAgICAgICAgbGVuZ3RoIGNoZWNrcyBhcyBsb25nIGFzIHdlIHZhbGlkYXRlIGNoYXJhY3RlcnMg
Zmlyc3QsIHNpbmNlIGEgJ1wwJworICAgICAgICBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgYW5kIHdp
bGwgbm90IGJlIHZhbGlkLgorICAgICAgICAoV1RGOjpyYW5nZU9mVVJMU2NoZW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6bG9va3NMaWtlQWJzb2x1dGVVUkwpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL2NvY29hL1VSTENvY29hLm1tOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IENo
YW5nZWQgdG8ganVzdCBjYWxsIHRoZSBDRlVSTFJlZiBjb25zdHJ1Y3RvciBzbyB3ZQorICAgICAg
ICBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGluZ3MgdHdpY2UuCisgICAgICAgIChXVEY6OlVSTDo6
ZW1wdHlDRlVSTCk6IEFkZGVkLiBUaGlzIGlzIHRoZSBvbmUgcGFydCBvZiB0aGUgY3JlYXRlQ0ZV
UkwKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBkZXBlbmRzIG9uIE9iamVjdGl2ZS1DLgorICAgICAg
ICAoV1RGOjpVUkw6OmNyZWF0ZUNGVVJMIGNvbnN0KTogTWVyZ2VkIGludG8gdGhlIGZ1bmN0aW9u
IGluIFVSTENGLmNwcC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJy
aWRnZV9jYXN0IGluc3RlYWQgb2YgdGhlIHRyaWNraWVyCisgICAgICAgIGlkaW9tIHdpdGggZXhw
bGljaXQgY2FsbHMgdG8gbGVha1JlZiBhbmQgX19icmlkZ2VfdHJhbnNmZXIuCisKKyAgICAgICAg
KiB3dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW06OnNl
dE1ldGFkYXRhVVJMKTogVXBkYXRlZCBzaW5jZSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nCisgICAg
ICAgIG5vIGxvbmdlciByZXF1aXJlcyBhIGJhc2VVUkwgb2YgbmlsIHRvIGJlIHBhc3NlZC4gQWxz
byByZW1vdmVkIGV4cGxpY2l0CisgICAgICAgIFdURiBuYW1lc3BhY2Ugc2luY2UgdGhpcyBjb2Rl
IGl0c2VsZiBpcyBpbiB0aGUgV1RGIG5hbWVzcGFjZS4KKwogMjAyMS0xMC0yNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBBZG9wdCBicmlkZ2VfY2Fz
dCBhbmQgbWFrZVZlY3RvciBpbiBhIGZldyBtb3JlIHBsYWNlcywgaW5jbHVkaW5nIGNhc2VzIHdo
ZXJlIGFkb3B0Q0YvTlMgd2FzIHVzZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTJiNTBiNzBh
ZGYyNWFmN2E0Mzk2MzJmMmFjZGNhYTQ1YjAxOGViZS4uYTM2YmI5ODc2NjkyZGRiMDY0Y2Y2MjA3
MWI2M2I2YWE3MmFhMmExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAyMS0xMC0yNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NGXSBSZWR1Y2UgZHVw
bGljYXRpb24gYW5kIHVubmVlZGVkIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weWluZyBpbiBV
UkwgY29kZSwgYWxzbyByZW1vdmUgdW51c2VkIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMjIwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2Mv
Y2YvV0tVUkxDRi5tbToKKyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aENGVVJMKTogVXNlIGJ5dGVz
QXNTdHJpbmcsIHNhdmluZyBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24KKyAgICAgICAgb2YgYSBD
U3RyaW5nIGVhY2ggdGltZSB0aGlzIGlzIGNhbGxlZC4KKworICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9Bcmd1bWVudENvZGVyc0NvY29hLm1tOgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ1VSTFdy
YXBwZXIgZW5jb2RlV2l0aENvZGVyOl0pOiBVc2UgYnl0ZXNBc1ZlY3Rvci4KKworICAgICAgICAq
IFNoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLmg6IFJlbW92ZWQgdW51c2VkIG1ldGhvZHMKKyAg
ICAgICAgK1tOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6cmVsYXRpdmVUb1VSTDpdIGFuZAor
ICAgICAgICAtW05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLgorCisgICAgICAg
ICogU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMubW06CisgICAgICAgICgrW05TVVJMIF93ZWJf
VVJMV2l0aFdURlN0cmluZzpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtO
U1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSk6IERlbGV0ZWQuCisKKyAgICAgICAg
KiBTaGFyZWQvQ29jb2EvV0tOU1VSTFJlcXVlc3QubW06CisgICAgICAgICgtW1dLTlNVUkxSZXF1
ZXN0IFVSTF0pOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gK1tOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6XQorICAgICAgICBiZWNhdXNlIHRoaXMgY29kZSBpcyBjb252ZXJ0aW5nIGEgV1RG
OjpVUkwgdG8gYW4gTlNVUkwsIHdoaWNoIGNhbiB1c2UgdGhlIGNvbnZlcnNpb24KKyAgICAgICAg
b3BlcmF0b3IgaW4gdGhlIFdURjo6VVJMIGNsYXNzLgorCisgICAgICAgICogU2hhcmVkL2NmL0Fy
Z3VtZW50Q29kZXJzQ0YuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENGVVJMUmVm
Pjo6ZW5jb2RlKTogVXNlIGJ5dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyIGxvYWRGaWxlVVJMOnJlc3RyaWN0VG9GaWxlc1dpdGhpbjp1
c2VyRGF0YTpdKToKKyAgICAgICAgVXNlIGJ5dGVzQXNTdHJpbmcgYW5kIGJyaWRnZV9jYXN0Lgor
ICAgICAgICAoLVtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgbG9hZEhUTUxTdHJpbmc6YmFz
ZVVSTDp1c2VyRGF0YTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciBsb2FkRGF0YTpNSU1FVHlwZTp0ZXh0RW5jb2RpbmdOYW1lOmJhc2VVUkw6dXNlckRh
dGE6XSk6IERpdHRvLgorICAgICAgICAoc2V0VXBQYWdlUG9saWN5Q2xpZW50KTogUmVtb3ZlZCB1
bm5lZWRlZCBjYWxsIHRvICtbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl0KKyAgICAgICAg
YmVjYXVzZSB0aGlzIGNvZGUgaXMgY29udmVydGluZyBhIFdURjo6VVJMIHRvIGFuIE5TVVJMLCB3
aGljaCBjYW4gdXNlIHRoZSBjb252ZXJzaW9uCisgICAgICAgIG9wZXJhdG9yIGluIHRoZSBXVEY6
OlVSTCBjbGFzcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENs
aWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5RG93bmxvYWRDbGllbnQ6OndpbGxTZW5k
UmVxdWVzdCk6IFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0bworICAgICAgICArW05TVVJMIF93ZWJf
VVJMV2l0aFdURlN0cmluZzpdIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGNvbnZlcnRpbmcgYSBXVEY6
OlVSTCB0byBhbiBOU1VSTCwKKyAgICAgICAgd2hpY2ggY2FuIHVzZSB0aGUgY29udmVyc2lvbiBv
cGVyYXRvciBpbiB0aGUgV1RGOjpVUkwgY2xhc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW06CisgICAgICAg
ICgtW1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lIFVSTF0pOiBEaXR0by4KKwogMjAyMS0xMC0yNCAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIHNob3VsZCBub3Qgc2VuZCBJUEMgaW4gdGhlIG1pZGRsZSBvZiBkZXN0
cnVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDE2NWUwNWZmYTVhZWMxOWVj
ZTFlN2E2NDhiMjc2ZjY1YjYzN2MyZGMuLjQyZDE2NTFjZTA1NjE1YzdiMjYzY2U4ZjA3N2E4NTVl
YjNiOWRjMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAyMS0xMC0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NG
XSBSZWR1Y2UgZHVwbGljYXRpb24gYW5kIHVubmVlZGVkIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQg
Y29weWluZyBpbiBVUkwgY29kZSwgYWxzbyByZW1vdmUgdW51c2VkIG1ldGhvZHMgYW5kIGZ1bmN0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMy
MjIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
aXNjL1dlYk5TVVJMRXh0cmFzLmg6IFR3ZWFrZWQgY29tbWVudHMgYSBiaXQuIE5vIG5lZWQgdG8g
c2F5IG1ldGhvZHMgYXJlICJuZXciLCBzaW5jZQorICAgICAgICB0aGF0IHdvbid0IGJlIHRydWUg
aW4gdGhlIGZ1dHVyZS4gUmVtb3ZlZCB1bnVzZWQgbWV0aG9kcworICAgICAgICArW05TVVJMIF93
ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzpyZWxhdGl2ZVRvVVJMOl0sCisgICAgICAgICtbTlNV
UkwgX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOnJlbGF0aXZlVG9VUkw6XSwKKyAgICAg
ICAgK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRhOl0sICtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YTpy
ZWxhdHZlVG9VUkw6XS4KKyAgICAgICAgV2FudGVkIHRvIHJlbW92ZSBldmVuIG1vcmUgbmVhcmx5
IHVudXNlZCBtZXRob2RzOiBtYW55IHdlcmUgdXNlZCBvbmx5CisgICAgICAgIGluc2lkZSB0aGUg
V2ViS2l0IHByb2plY3QsIGluIGxlZ2FjeSBwbHVnLWluIGNvZGUsIGFuZCBzb21lIHNlZW1lZCB1
bnVzZWQsCisgICAgICAgIGJ1dCBpdCB3YXNuJ3QgZWFzeSBmb3IgbWUgdG8gcXVpY2tseSB2ZXJp
ZnkgdGhhdC4KKworICAgICAgICAqIE1pc2MvV2ViTlNVUkxFeHRyYXMubW06IFJlbW92ZWQgInVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlIiBhbmQKKyAgICAgICAgInVzaW5nIG5hbWVzcGFjZSBXVEYi
LgorICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6cmVsYXRpdmVU
b1VSTDpdKTogRGVsZXRlZC4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxXaXRoVXNlclR5cGVk
U3RyaW5nOl0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoK1tOU1VSTCBf
d2Via2l0X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6cmVsYXRpdmVUb1VSTDpdKTogRGVsZXRlZC4K
KyAgICAgICAgKCtbTlNVUkwgX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOl0pOiBVc2Ug
V1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRh
QXNTdHJpbmc6XSk6IFJlbW92ZWQgc3BlY2lhbCBjYXNlIGZvciBuaWwgc2luY2UgdGhlIGNvZGUK
KyAgICAgICAgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCBuaWwgd2l0aG91dCBhbiBleHBs
aWNpdCBjaGVjay4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOnJl
bGF0aXZlVG9VUkxdKTogRGl0dG8uIEFsc28gZm9ybWF0dGVkIHRoZSBjb2RlCisgICAgICAgIGFz
IGEgb25lLWxpbmVyLgorICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRhOl0pOiBEZWxl
dGVkLgorICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRhOnJlbGF0aXZlVG9VUkw6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhXSk6IFVzZSBXVEYg
cHJlZml4IGV4cGxpY2l0bHkuCisgICAgICAgICgtW05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNT
dHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW05TVVJMIF93ZWJfaXNFbXB0eV0pOiBVc2UgYnJp
ZGdlX2Nhc3QgYW5kIG1ha2UgY29kZSBzdHlsZSBjaGVja2VyIGhhcHB5IGJ5IHVzaW5nCisgICAg
ICAgICIhIiBpbnN0ZWFkIG9mICI9PSAwIi4KKyAgICAgICAgKC1bTlNVUkwgX3dlYl9VUkxDU3Ry
aW5nXSk6IFVzZSBXVEYgcHJlZml4IGV4cGxpY2l0bHkuCisgICAgICAgICgtW05TVVJMIF93ZWJr
aXRfY2Fub25pY2FsaXplXSk6IFVzZSBXZWJDb3JlIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAg
ICAoLVtOU1VSTCBfd2Via2l0X1VSTEJ5UmVtb3ZpbmdGcmFnbWVudF0pOiBVc2UgV1RGIHByZWZp
eCBleHBsaWNpdGx5LgorICAgICAgICAoLVtOU1VSTCBfd2ViX3NjaGVtZVNlcGFyYXRvcldpdGhv
dXRDb2xvbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtOU1VSTCBfd2ViX2RhdGFGb3JVUkxDb21w
b25lbnRUeXBlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtOU1VSTCBfd2ViX2hvc3REYXRhXSk6
IFVzZSBXVEYgcHJlZml4IGV4cGxpY2l0bHkuIFJlYXJyYW5nZWQgZm9yIGNsYXJpdHkgYW5kCisg
ICAgICAgIHNsaWdodGx5IGltcHJvdmVkIGVmZmljaWVuY3kgYXMgd2VsbC4KKyAgICAgICAgKC1b
TlNTdHJpbmcgX3dlYl9pc1VzZXJWaXNpYmxlVVJMXSk6IFVzZSBXVEYgcHJlZml4IGV4cGxpY2l0
bHkuCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfc3RyaW5nQnlSZXBsYWNpbmdWYWxpZFBl
cmNlbnRFc2NhcGVzXSk6IFVzZSBXZWJDb3JlIHByZWZpeAorICAgICAgICBleHBsaWNpdGx5Lgor
ICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RlY29kZUhvc3ROYW1lXSk6IFVzZSBXVEYgcHJlZml4
IGV4cGxpY2l0bHkuCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJfZW5jb2RlSG9zdE5hbWVdKTog
RGl0dG8uCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfZGVjb2RlSG9zdE5hbWVdKTogRGl0
dG8uCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJraXRfZW5jb2RlSG9zdE5hbWVdKTogRGl0dG8u
CisKIDIwMjEtMTAtMjQgIElhbiBBbmRlcnNvbiAgPGlhbmFAYXBwbGUuY29tPgogCiAgICAgICAg
IEVuYWJsZSB0aGUgbW9kdWxlcyB2ZXJpZmllciBmb3IgV2ViS2l0TGVnYWN5IGluIEFwcGxlIGlu
dGVybmFsIHdoZW4gdXNpbmcgYSBuZXcgZW5vdWdoIFhjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9VUkwuaCBiL1NvdXJjZS9XVEYvd3RmL1VSTC5oCmluZGV4IGU1ODY5MDI2ZWNhMjEw
MmIwYjc5M2QyZTA1MzI2NDNlYTRjZjI5MzcuLmNlYTRiN2E3NTQyYmQ2MWRmN2JkNTg1NzcwMDgz
MGM4MTkxZjlhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VSTC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1VSTC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgVVNFKEdMSUIpICYmIEhBVkUoR1VSSSkK
QEAgLTUwLDcgKzQ4LDcgQEAgY2xhc3MgVVJMVGV4dEVuY29kaW5nIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVGb3JVUkxQYXJzaW5nKFN0cmluZ1ZpZXcpIGNv
bnN0ID0gMDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5VUkxUZXh0RW5jb2RpbmcoKSB7IH0K
KyAgICB2aXJ0dWFsIH5VUkxUZXh0RW5jb2RpbmcoKSA9IGRlZmF1bHQ7CiB9OwogCiBjbGFzcyBV
UkwgewpAQCAtODIsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKLSAgICAvLyBTaW5jZSB3ZSBvdmVybG9hZCBv
cGVyYXRvciBOU1VSTCogd2UgaGF2ZSB0aGlzIHRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IHVzaW5n
IHRoYXQgb3BlcmF0b3IKKyAgICAvLyBTaW5jZSB3ZSBvdmVybG9hZCBvcGVyYXRvciBOU1VSTCAq
IHdlIGhhdmUgdGhpcyB0byBwcmV2ZW50IGFjY2lkZW50YWxseSB1c2luZyB0aGF0IG9wZXJhdG9y
CiAgICAgLy8gd2hlbiBwbGFjaW5nIGEgVVJMIGluIGFuIGlmIHN0YXRtZW50LgogICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCA9IGRlbGV0ZTsKIApAQCAtMTk1LDcgKzE5Myw4IEBAIHB1YmxpYzoK
ICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBwcmludCgpIGNvbnN0OwogI2VuZGlmCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImLCBVUkwmKTsKQEAgLTIxNCw2ICsyMTMsMTAgQEAgcHJpdmF0
ZToKIAogICAgIGZyaWVuZCBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwoY29uc3QgVVJMJiwgY29uc3QgVVJMJik7CiAKKyNpZiBVU0UoQ0YpCisgICAg
c3RhdGljIFJldGFpblB0cjxDRlVSTFJlZj4gZW1wdHlDRlVSTCgpOworI2VuZGlmCisKICAgICBT
dHJpbmcgbV9zdHJpbmc7CiAKICAgICB1bnNpZ25lZCBtX2lzVmFsaWQgOiAxOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuY3BwIGIvU291cmNlL1dURi93dGYvY2Yv
Q0ZVUkxFeHRyYXMuY3BwCmluZGV4IGM4YmUwNjc0YTRlYWJjNTkwOTBiNzMzZTdjNTIxYjM4MmY0
OTA2YjkuLmUzYTdmNzFkM2UxZTI1ODBjZmNjYmI0MGY1ZjA0YjY1YjM0NjIzZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9jZi9DRlVSTEV4dHJhcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDMgKzI3LDYzIEBACiAjaW5jbHVkZSA8d3RmL2NmL0NG
VVJMRXh0cmFzLmg+CiAKICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBnZXRVUkxCeXRlcyhDRlVSTFJl
ZiB1cmwsIFVSTENoYXJCdWZmZXImIHJlc3VsdCkKK1JldGFpblB0cjxDRkRhdGFSZWY+IGJ5dGVz
QXNDRkRhdGEoQ0ZVUkxSZWYgdXJsKQogewotICAgIENGSW5kZXggYnl0ZXNMZW5ndGggPSBDRlVS
TEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0gICAgcmVzdWx0LnJlc2l6ZShieXRlc0xlbmd0
aCk7Ci0gICAgQ0ZJbmRleCBmaW5hbExlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCByZWludGVy
cHJldF9jYXN0PFVJbnQ4Kj4ocmVzdWx0LmRhdGEoKSksIGJ5dGVzTGVuZ3RoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGZpbmFsTGVuZ3RoLCBmaW5hbExlbmd0aCA9PSBieXRlc0xlbmd0aCk7CisgICAg
YXV0byBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCBudWxscHRyLCAwKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCAhPSAtMSk7CisgICAgYXV0byBidWZmZXIgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obWFsbG9jKGJ5dGVzTGVuZ3RoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoYnVmZmVyKTsKKyAgICBDRlVSTEdldEJ5dGVzKHVybCwgYnVmZmVyLCBieXRlc0xlbmd0aCk7
CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KG51bGxwdHIs
IGJ1ZmZlciwgYnl0ZXNMZW5ndGgsIGtDRkFsbG9jYXRvck1hbGxvYykpOwogfQogCi12b2lkIGdl
dFVSTEJ5dGVzKENGVVJMUmVmIHVybCwgQ1N0cmluZyYgcmVzdWx0KQorU3RyaW5nIGJ5dGVzQXNT
dHJpbmcoQ0ZVUkxSZWYgdXJsKQogewotICAgIENGSW5kZXggYnl0ZXNMZW5ndGggPSBDRlVSTEdl
dEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0gICAgY2hhciogYnl0ZXM7Ci0gICAgcmVzdWx0ID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChieXRlc0xlbmd0aCwgYnl0ZXMpOwotICAgIENGSW5k
ZXggZmluYWxMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgcmVpbnRlcnByZXRfY2FzdDxVSW50
OCo+KGJ5dGVzKSwgYnl0ZXNMZW5ndGgpOwotICAgIEFTU0VSVF9VTlVTRUQoZmluYWxMZW5ndGgs
IGZpbmFsTGVuZ3RoID09IGJ5dGVzTGVuZ3RoKTsKKyAgICBhdXRvIGJ5dGVzTGVuZ3RoID0gQ0ZV
UkxHZXRCeXRlcyh1cmwsIG51bGxwdHIsIDApOworICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVu
Z3RoICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCA8PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KFN0cmluZzo6TWF4TGVuZ3RoKSk7CisgICAgTENoYXIqIGJ1ZmZlcjsKKyAgICBh
dXRvIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChieXRlc0xlbmd0aCwgYnVm
ZmVyKTsKKyAgICBDRlVSTEdldEJ5dGVzKHVybCwgYnVmZmVyLCBieXRlc0xlbmd0aCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBpc0NGVVJMU2FtZU9yaWdpbihDRlVSTFJlZiBjZlVS
TCwgY29uc3QgVVJMJiB1cmwpCitWZWN0b3I8dWludDhfdCwgVVJMQnl0ZXNWZWN0b3JJbmxpbmVD
YXBhY2l0eT4gYnl0ZXNBc1ZlY3RvcihDRlVSTFJlZiB1cmwpCiB7Ci0gICAgQVNTRVJUKHVybC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpOworICAgIFZlY3Rvcjx1aW50OF90LCBVUkxCeXRlc1Zl
Y3RvcklubGluZUNhcGFjaXR5PiByZXN1bHQoVVJMQnl0ZXNWZWN0b3JJbmxpbmVDYXBhY2l0eSk7
CisgICAgYXV0byBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCByZXN1bHQuZGF0YSgp
LCBVUkxCeXRlc1ZlY3RvcklubGluZUNhcGFjaXR5KTsKKyAgICBpZiAoYnl0ZXNMZW5ndGggIT0g
LTEpCisgICAgICAgIHJlc3VsdC5zaHJpbmsoYnl0ZXNMZW5ndGgpOworICAgIGVsc2UgeworICAg
ICAgICBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCBudWxscHRyLCAwKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZXNMZW5ndGggIT0gLTEpOworICAgICAgICByZXN1bHQuZ3Jv
dyhieXRlc0xlbmd0aCk7CisgICAgICAgIENGVVJMR2V0Qnl0ZXModXJsLCByZXN1bHQuZGF0YSgp
LCBieXRlc0xlbmd0aCk7CisgICAgfQogCi0gICAgaWYgKHVybC5oYXNDcmVkZW50aWFscygpKQot
ICAgICAgICByZXR1cm4gcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHVybCwgVVJMIHsgY2ZV
UkwgfSk7CisgICAgLy8gVGhpcyBtYXkgbG9vayBsaWtlIGl0IGNvcGllcyB0aGUgYnl0ZXMgaW4g
dGhlIHZlY3RvciwgYnV0IGR1ZSB0byB0aGUgcmV0dXJuIHZhbHVlIG9wdGltaXphdGlvbiBpdCBk
b2VzIG5vdC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGlzU2FtZU9yaWdpbihDRlVS
TFJlZiBhLCBjb25zdCBVUkwmIGIpCit7CisgICAgQVNTRVJUKGIucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKTsKKworICAgIGlmIChiLmhhc0NyZWRlbnRpYWxzKCkpCisgICAgICAgIHJldHVybiBw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoYSwgYik7CiAKLSAgICBVUkxDaGFyQnVmZmVyIGJ5
dGVzOwotICAgIGdldFVSTEJ5dGVzKGNmVVJMLCBieXRlcyk7Ci0gICAgU3RyaW5nVmlldyBjZlVS
TFN0cmluZyB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihieXRlcy5kYXRhKCkpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYnl0ZXMuc2l6ZSgpKSB9OworICAgIGF1dG8gYUJ5dGVzID0g
Ynl0ZXNBc1ZlY3RvcihhKTsKKyAgICBTdHJpbmdWaWV3IGFTdHJpbmcgeyBhQnl0ZXMuZGF0YSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYUJ5dGVzLnNpemUoKSkgfTsKKyAgICBTdHJpbmdWaWV3
IGJTdHJpbmcgeyBiLnN0cmluZygpIH07CiAKLSAgICBpZiAoIXVybC5oYXNQYXRoKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmdWaWV3IHsgdXJsLnN0cmluZygpIH0gPT0gY2ZVUkxTdHJpbmc7Cisg
ICAgaWYgKCFiLmhhc1BhdGgoKSkKKyAgICAgICAgcmV0dXJuIGFTdHJpbmcgPT0gYlN0cmluZzsK
IAotICAgIGF1dG8gdXJsV2l0aG91dFBhdGggPSBTdHJpbmdWaWV3IHsgdXJsLnN0cmluZygpIH0u
c3Vic3RyaW5nKDAsIHVybC5wYXRoU3RhcnQoKSArIDEpOwotICAgIHJldHVybiBjZlVSTFN0cmlu
Zy5zdGFydHNXaXRoKHVybFdpdGhvdXRQYXRoKTsKKyAgICB1bnNpZ25lZCBhZnRlclBhdGhTZXBh
cmF0b3IgPSBiLnBhdGhTdGFydCgpICsgMTsKKyAgICByZXR1cm4gYVN0cmluZy5sZWZ0KGFmdGVy
UGF0aFNlcGFyYXRvcikgPT0gYlN0cmluZy5sZWZ0KGFmdGVyUGF0aFNlcGFyYXRvcik7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5oCmluZGV4IGYxYjQ3OTNhMWZlYWVmOGNhMTkwMzJkMGNh
NTE4MWRiMzQ3NDU5MDcuLjg0NDc3YjVlMzZhMTg3M2I5MTE0MWI0MmRmNGNlNzUyZDQyM2VjOWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmgKKysrIGIvU291cmNl
L1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNyArMjYsMjIgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSog
Q0ZEYXRhUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTCogQ0ZVUkxSZWY7CiAKIG5h
bWVzcGFjZSBXVEYgewogCi1jbGFzcyBVUkw7Ci10eXBlZGVmIFZlY3RvcjxjaGFyLCA1MTI+IFVS
TENoYXJCdWZmZXI7Citjb25zdGV4cHIgc2l6ZV90IFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNp
dHkgPSAyMDQ4OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZXRVUkxCeXRlcyhDRlVSTFJl
ZiwgVVJMQ2hhckJ1ZmZlciYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2V0VVJMQnl0ZXMo
Q0ZVUkxSZWYsIENTdHJpbmcmKTsKK1JldGFpblB0cjxDRkRhdGFSZWY+IGJ5dGVzQXNDRkRhdGEo
Q0ZVUkxSZWYpOworV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBieXRlc0FzU3RyaW5nKENGVVJM
UmVmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8dWludDhfdCwgVVJMQnl0ZXNWZWN0b3JJ
bmxpbmVDYXBhY2l0eT4gYnl0ZXNBc1ZlY3RvcihDRlVSTFJlZik7CiAKLWJvb2wgaXNDRlVSTFNh
bWVPcmlnaW4oQ0ZVUkxSZWYsIGNvbnN0IFVSTCYpOworYm9vbCBpc1NhbWVPcmlnaW4oQ0ZVUkxS
ZWYsIGNvbnN0IFVSTCYpOwogCiB9CisKK3VzaW5nIFdURjo6Ynl0ZXNBc0NGRGF0YTsKK3VzaW5n
IFdURjo6Ynl0ZXNBc1N0cmluZzsKK3VzaW5nIFdURjo6Ynl0ZXNBc1ZlY3RvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL2NmL1VSTENGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL1VSTENG
LmNwcAppbmRleCBlZDUxNWMwODA4OTkwMGZmOGM1MmRlYjc4ZTBlNzNkZWU0ODdmYTNmLi40OWNi
NzA3ZjJhYjAzYzQyYTNhMGIzNzg5NTgzMGFkYWVmZTc3YmIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9jZi9VUkxDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvVVJMQ0YuY3BwCkBA
IC0zNSwzOSArMzUsNDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFVSTDo6VVJMKENGVVJMUmVmIHVy
bCkKIHsKLSAgICBpZiAoIXVybCkgeworICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdu
b3JlIHRoZSBiYXNlIFVSTCBpbiB0aGUgQ0ZVUkwgaGVyZT8KKyAgICBpZiAoIXVybCkKICAgICAg
ICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVyZT8KLSAgICBDU3RyaW5nIHVybEJ5
dGVzOwotICAgIGdldFVSTEJ5dGVzKHVybCwgdXJsQnl0ZXMpOwotICAgIFVSTFBhcnNlciBwYXJz
ZXIodXJsQnl0ZXMuZGF0YSgpKTsKLSAgICAqdGhpcyA9IHBhcnNlci5yZXN1bHQoKTsKKyAgICBl
bHNlCisgICAgICAgICp0aGlzID0gVVJMUGFyc2VyKGJ5dGVzQXNTdHJpbmcodXJsKSkucmVzdWx0
KCk7CiB9CiAKICNpZiAhVVNFKEZPVU5EQVRJT04pCisKK1JldGFpblB0cjxDRlVSTFJlZj4gVVJM
OjplbXB0eUNGVVJMKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2VuZGlmCisKIFJl
dGFpblB0cjxDRlVSTFJlZj4gVVJMOjpjcmVhdGVDRlVSTCgpIGNvbnN0CiB7Ci0gICAgUmV0YWlu
UHRyPENGVVJMUmVmPiBjZlVSTDsKKyAgICBpZiAoaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5Q0ZVUkwo
KTsKKworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gcmVzdWx0OwogICAgIGlmIChMSUtFTFkobV9z
dHJpbmcuaXM4Qml0KCkgJiYgbV9zdHJpbmcuaXNBbGxBU0NJSSgpKSkKLSAgICAgICAgY2ZVUkwg
PSBhZG9wdENGKENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgbV9zdHJp
bmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCwgbnVsbHB0ciwgdHJ1ZSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRl
QWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgbV9z
dHJpbmcubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOwog
ICAgIGVsc2UgewogICAgICAgICBDU3RyaW5nIHV0ZjggPSBtX3N0cmluZy51dGY4KCk7Ci0gICAg
ICAgIGNmVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxw
dHIsIHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5sZW5ndGgoKSwga0NGU3RyaW5nRW5jb2Rp
bmdVVEY4LCBudWxscHRyLCB0cnVlKSk7CisgICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZVUkxD
cmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxscHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCks
IHV0ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOwog
ICAgIH0KIAotICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIWlzQ0ZVUkxTYW1l
T3JpZ2luKGNmVVJMLmdldCgpLCAqdGhpcykpCisgICAgaWYgKHByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSAmJiAhaXNTYW1lT3JpZ2luKHJlc3VsdC5nZXQoKSwgKnRoaXMpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjZlVSTDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQot
I2VuZGlmCiAKIFN0cmluZyBVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKIHsKLSAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IGNmVVJMID0gY3JlYXRlQ0ZVUkwoKTsKKyAgICBhdXRvIGNmVVJMID0g
Y3JlYXRlQ0ZVUkwoKTsKICAgICBpZiAoIWNmVVJMKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oCmluZGV4IGJiNmRjYzIzMjUxYjQ4OGFhMTc2
Y2Q2MzI1MDA5ZTUzMjYxZjk1MjIuLjQxNTVlMDI2YTJiYWY2NmNlMTk5OGVlYjQzM2NmNjcwNTdm
NjdjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLmgKKysr
IGIvU291cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTIsIDIwMTQgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNT
dHJpbmcgKnVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICopOwotV1RGX0VYUE9SVF9QUklWQVRFIE5T
VVJMICpVUkxXaXRoVXNlclR5cGVkU3RyaW5nKE5TU3RyaW5nICosIE5TVVJMICpiYXNlVVJMKTsg
Ly8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFucyBlcnJvci4KK1dURl9FWFBPUlRfUFJJVkFURSBO
U1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqLCBOU1VSTCAqaWdub3JlZCA9
IG5pbCk7IC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVhbnMgZXJyb3IuCiBXVEZfRVhQT1JUX1BS
SVZBVEUgTlNVUkwgKlVSTEJ5UmVtb3ZpbmdVc2VySW5mbyhOU1VSTCAqKTsKIFdURl9FWFBPUlRf
UFJJVkFURSBOU1N0cmluZyAqZGVjb2RlSG9zdE5hbWUoTlNTdHJpbmcgKik7IC8vIFJldHVybiB2
YWx1ZSBvZiBuaWwgbWVhbnMgZXJyb3IuCiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNTdHJpbmcgKmVu
Y29kZUhvc3ROYW1lKE5TU3RyaW5nICopOyAvLyBSZXR1cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVy
cm9yLgpAQCAtNDEsMTAgKzQxLDggQEAgV1RGX0VYUE9SVF9QUklWQVRFIE5TVVJMICpVUkxCeVRy
dW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnQoTlNVUkwgKiwgQ0YKIFdURl9FWFBP
UlRfUFJJVkFURSBOU1VSTCAqVVJMV2l0aERhdGEoTlNEYXRhICosIE5TVVJMICpiYXNlVVJMKTsK
IFdURl9FWFBPUlRfUFJJVkFURSBOU0RhdGEgKm9yaWdpbmFsVVJMRGF0YShOU1VSTCAqKTsKIFdU
Rl9FWFBPUlRfUFJJVkFURSBOU0RhdGEgKmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKE5TVVJMICos
IENGVVJMQ29tcG9uZW50VHlwZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhV
c2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKE5TU3RyaW5nICosIE5TVVJMICpiYXNlVVJMKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSBOU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQo
TlNTdHJpbmcgKik7CiAKLU5TUmFuZ2UgcmFuZ2VPZlVSTFNjaGVtZShOU1N0cmluZyAqKTsKIFdU
Rl9FWFBPUlRfUFJJVkFURSBCT09MIGlzVXNlclZpc2libGVVUkwoTlNTdHJpbmcgKik7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgQk9PTCBsb29rc0xpa2VBYnNvbHV0ZVVSTChOU1N0cmluZyAqKTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VS
TEV4dHJhcy5tbSBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tCmluZGV4IDBk
OTZlOWQ0ODA5YTM4OWFhZWE0MTdkZWMyNGRlYTlhYjJmODc4MDMuLjIwODc0NDBiMGY2ZmRjNGQ1
YjAzYzI5MmM3ZTM2MjhlZjIzOGRiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29h
L05TVVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1t
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDE3ICszMiwxNCBAQAogI2ltcG9ydCA8bXV0ZXg+CiAjaW1wb3J0IDx3
dGYvRnVuY3Rpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9V
UkwuaD4KICNpbXBvcnQgPHd0Zi9VUkxIZWxwZXJzLmg+Ci0jaW1wb3J0IDx3dGYvVVJMUGFyc2Vy
Lmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAjaW1wb3J0IDx3dGYvY2YvQ0ZVUkxFeHRyYXMu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIAotdXNpbmcgbmFtZXNwYWNlIFVSTEhlbHBlcnM7Ci0KLWNvbnN0ZXhwciB1bnNpZ25lZCB1
cmxCeXRlc0J1ZmZlckxlbmd0aCA9IDIwNDg7Ci0KIHN0YXRpYyBCT09MIHJlYWRJRE5BbGxvd2Vk
U2NyaXB0TGlzdEZpbGUoTlNTdHJpbmcgKmZpbGVuYW1lKQogewogICAgIGlmICghZmlsZW5hbWUp
CkBAIC02Nyw3ICs2NCw3IEBAIHN0YXRpYyBCT09MIHJlYWRJRE5BbGxvd2VkU2NyaXB0TGlzdEZp
bGUoTlNTdHJpbmcgKmZpbGVuYW1lKQogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdCA9PSAx
KSB7CiAgICAgICAgICAgICAvLyBHb3QgYSB3b3JkLCBtYXAgdG8gc2NyaXB0IGNvZGUgYW5kIHB1
dCBpdCBpbnRvIHRoZSBhcnJheS4KLSAgICAgICAgICAgIGFkZFNjcmlwdFRvSUROQWxsb3dlZFNj
cmlwdExpc3Qod29yZCk7CisgICAgICAgICAgICBVUkxIZWxwZXJzOjphZGRTY3JpcHRUb0lETkFs
bG93ZWRTY3JpcHRMaXN0KHdvcmQpOwogICAgICAgICB9CiAgICAgfQogICAgIGZjbG9zZShmaWxl
KTsKQEAgLTEwMCw3ICs5Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZGVjb2RlUGVyY2VudEVzY2FwZXMo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAKIE5TU3RyaW5nICpkZWNvZGVIb3N0TmFtZShOU1N0cmlu
ZyAqc3RyaW5nKQogewotICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBob3N0ID0gbWFwSG9zdE5h
bWUoc3RyaW5nLCBudWxscHRyKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaG9zdCA9IFVS
TEhlbHBlcnM6Om1hcEhvc3ROYW1lKHN0cmluZywgbnVsbHB0cik7CiAgICAgaWYgKCFob3N0KQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiAhKmhvc3QgPyBzdHJpbmcgOiAoTlNTdHJp
bmcgKikqaG9zdDsKQEAgLTEwOCw3ICsxMDUsNyBAQCBOU1N0cmluZyAqZGVjb2RlSG9zdE5hbWUo
TlNTdHJpbmcgKnN0cmluZykKIAogTlNTdHJpbmcgKmVuY29kZUhvc3ROYW1lKE5TU3RyaW5nICpz
dHJpbmcpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGhvc3QgPSBtYXBIb3N0TmFtZShz
dHJpbmcsIGRlY29kZVBlcmNlbnRFc2NhcGVzKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4g
aG9zdCA9IFVSTEhlbHBlcnM6Om1hcEhvc3ROYW1lKHN0cmluZywgZGVjb2RlUGVyY2VudEVzY2Fw
ZXMpOwogICAgIGlmICghaG9zdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gISpo
b3N0ID8gc3RyaW5nIDogKE5TU3RyaW5nICopKmhvc3Q7CkBAIC0xMjYsMjggKzEyMywxNyBAQCBO
U1VSTCAqVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KE5TVVJMICpV
UkwsIENGVVJMQ29tcG9uZW50VHlwZQogICAgIGlmICghVVJMKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIAotICAgIENGUmFuZ2UgZnJhZ1JnID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25l
bnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgY29tcG9uZW50LCBudWxscHRyKTsKLSAgICBpZiAo
ZnJhZ1JnLmxvY2F0aW9uID09IGtDRk5vdEZvdW5kKQorICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlVS
TEdldEJ5dGVSYW5nZUZvckNvbXBvbmVudChicmlkZ2VfY2FzdChVUkwpLCBjb21wb25lbnQsIG51
bGxwdHIpOworICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKICAgICAgICAg
cmV0dXJuIFVSTDsKIAotICAgIFZlY3RvcjxVSW50OCwgdXJsQnl0ZXNCdWZmZXJMZW5ndGg+IHVy
bEJ5dGVzKHVybEJ5dGVzQnVmZmVyTGVuZ3RoKTsKLSAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZV
UkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCB1cmxCeXRlcy5kYXRhKCksIHVybEJ5
dGVzLnNpemUoKSk7Ci0gICAgaWYgKG51bUJ5dGVzID09IC0xKSB7Ci0gICAgICAgIG51bUJ5dGVz
ID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAg
ICAgICAgdXJsQnl0ZXMuZ3JvdyhudW1CeXRlcyk7Ci0gICAgICAgIENGVVJMR2V0Qnl0ZXMoKF9f
YnJpZGdlIENGVVJMUmVmKVVSTCwgdXJsQnl0ZXMuZGF0YSgpLCBudW1CeXRlcyk7Ci0gICAgfQor
ICAgIGF1dG8gYnl0ZXMgPSBieXRlc0FzVmVjdG9yKGJyaWRnZV9jYXN0KFVSTCkpOwogCi0gICAg
YXV0byByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEJ5dGVzKG51bGxwdHIsIHVybEJ5
dGVzLmRhdGEoKSwgZnJhZ1JnLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBu
dWxscHRyKSk7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEJ5dGVz
KG51bGxwdHIsIGJ5dGVzLmRhdGEoKSwgcmFuZ2UubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjgsIG51bGxwdHIpKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmVzdWx0ID0g
YWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxCeXRlcy5kYXRhKCksIGZy
YWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xLCBudWxscHRyKSk7
Ci0gICAgICAgIAotICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdBdXRvcmVsZWFz
ZSgpIDogVVJMOwotfQorICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEJ5
dGVzKG51bGxwdHIsIGJ5dGVzLmRhdGEoKSwgcmFuZ2UubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdF
bmNvZGluZ0lTT0xhdGluMSwgbnVsbHB0cikpOwogCi1zdGF0aWMgTlNVUkwgKlVSTEJ5UmVtb3Zp
bmdSZXNvdXJjZVNwZWNpZmllcihOU1VSTCAqVVJMKQotewotICAgIHJldHVybiBVUkxCeVRydW5j
YXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnQoVVJMLCBrQ0ZVUkxDb21wb25lbnRSZXNv
dXJjZVNwZWNpZmllcik7CisgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5icmlkZ2luZ0F1dG9y
ZWxlYXNlKCkgOiBVUkw7CiB9CiAKIE5TVVJMICpVUkxXaXRoRGF0YShOU0RhdGEgKmRhdGEsIE5T
VVJMICpiYXNlVVJMKQpAQCAtMTU3LDE1ICsxNDMsMTUgQEAgTlNVUkwgKlVSTFdpdGhEYXRhKE5T
RGF0YSAqZGF0YSwgTlNVUkwgKmJhc2VVUkwpCiAgICAgCiAgICAgc2l6ZV90IGxlbmd0aCA9IFtk
YXRhIGxlbmd0aF07CiAgICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAgLy8gd29yayBhcm91
bmQgPHJkYXI6Ly80NDcwNzcxPjogQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyguLiwg
VFJVRSkgZG9lc24ndCByZW1vdmUgbm9uLXBhdGggY29tcG9uZW50cy4KLSAgICAgICAgYmFzZVVS
TCA9IFVSTEJ5UmVtb3ZpbmdSZXNvdXJjZVNwZWNpZmllcihiYXNlVVJMKTsKLSAgICAgICAgCisg
ICAgICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vNDQ3MDc3MT46IENGVVJMQ3JlYXRlQWJzb2x1
dGVVUkxXaXRoQnl0ZXMoLi4sIFRSVUUpIGRvZXNuJ3QgcmVtb3ZlIG5vbi1wYXRoIGNvbXBvbmVu
dHMuCisgICAgICAgIGJhc2VVUkwgPSBVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVD
b21wb25lbnQoYmFzZVVSTCwga0NGVVJMQ29tcG9uZW50UmVzb3VyY2VTcGVjaWZpZXIpOworCiAg
ICAgICAgIGNvbnN0IFVJbnQ4ICpieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IFVJbnQ4Kj4oW2Rh
dGEgYnl0ZXNdKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVS
TFdpdGhCeXRlcyB3b3VsZCBjb21wbGFpbiB0byBjb25zb2xlIGlmIHdlIHBhc3NlZCBhIHBhdGgg
dG8gaXQuCiAgICAgICAgIGlmIChieXRlc1swXSA9PSAnLycgJiYgIWJhc2VVUkwpCiAgICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICAKKwogICAgICAgICAvLyBOT1RFOiBXZSB1c2UgVVRG
LTggaGVyZSBzaW5jZSB0aGlzIGVuY29kaW5nIGlzIHVzZWQgd2hlbiBjb21wdXRpbmcgc3RyaW5n
cyB3aGVuIHJldHVybmluZyBVUkwgY29tcG9uZW50cwogICAgICAgICAvLyAoZS5nIGNhbGxzIHRv
IE5TVVJMIC1wYXRoKS4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBpcyBub3QgdG9sZXJhbnQgb2Yg
aWxsZWdhbCBVVEYtOCBzZXF1ZW5jZXMsIHdoaWNoCiAgICAgICAgIC8vIGNvdWxkIGVpdGhlciBi
ZSBhIG1hbGZvcm1lZCBzdHJpbmcgb3IgYnl0ZXMgaW4gYSBkaWZmZXJlbnQgZW5jb2RpbmcsIGxp
a2Ugc2hpZnQtamlzLCBzbyB3ZSBmYWxsIGJhY2sKQEAgLTE3Nyw2ICsxNjMsNyBAQCBOU1VSTCAq
VVJMV2l0aERhdGEoTlNEYXRhICpkYXRhLCBOU1VSTCAqYmFzZVVSTCkKICAgICB9CiAgICAgcmV0
dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07CiB9CisKIHN0YXRpYyBOU0RhdGEgKmRhdGFX
aXRoVXNlclR5cGVkU3RyaW5nKE5TU3RyaW5nICpzdHJpbmcpCiB7CiAgICAgTlNEYXRhICp1c2Vy
VHlwZWREYXRhID0gW3N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z107CkBAIC0yMTEsMTcgKzE5OCwxNyBAQCBzdGF0aWMgTlNEYXRhICpkYXRhV2l0aFVzZXJUeXBl
ZFN0cmluZyhOU1N0cmluZyAqc3RyaW5nKQogICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQnl0
ZXNOb0NvcHk6b3V0Qnl0ZXMgbGVuZ3RoOm91dExlbmd0aF07IC8vIGFkb3B0cyBvdXRCeXRlcwog
fQogCi1OU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqc3RyaW5nLCBOU1VS
TCAqbnNVUkwpCitOU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqc3RyaW5n
LCBOU1VSTCAqKQogewogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgYXV0byBtYXBwZWRTdHJpbmcgPSBtYXBIb3N0TmFtZXMoc3RyaW5nQnlUcmltbWluZ1doaXRl
c3BhY2Uoc3RyaW5nKS5nZXQoKSwgZGVjb2RlUGVyY2VudEVzY2FwZXMpOworICAgIGF1dG8gbWFw
cGVkU3RyaW5nID0gVVJMSGVscGVyczo6bWFwSG9zdE5hbWVzKHN0cmluZ0J5VHJpbW1pbmdXaGl0
ZXNwYWNlKHN0cmluZykuZ2V0KCksIGRlY29kZVBlcmNlbnRFc2NhcGVzKTsKICAgICBpZiAoIW1h
cHBlZFN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIExldCdzIGNoZWNrIHdo
ZXRoZXIgdGhlIFVSTCBpcyBib2d1cy4KLSAgICBVUkwgdXJsIHsgVVJMIHsgbnNVUkwgfSwgbWFw
cGVkU3RyaW5nIH07CisgICAgVVJMIHVybCB7IFVSTCB7IH0sIG1hcHBlZFN0cmluZyB9OwogICAg
IGlmICghdXJsLmNyZWF0ZUNGVVJMKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTIzMSwx
MTMgKzIxOCw4NiBAQCBOU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqc3Ry
aW5nLCBOU1VSTCAqbnNVUkwpCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gW05TVVJM
IFVSTFdpdGhTdHJpbmc6QCIiXTsKIAotICAgIHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBuc1VS
TCk7CisgICAgcmV0dXJuIFVSTFdpdGhEYXRhKGRhdGEsIG5pbCk7CiB9CiAKLU5TVVJMICpVUkxX
aXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0cmluZyAqc3RyaW5nLCBOU1VSTCAqVVJM
KQorTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKE5TU3RyaW5nICpzdHJp
bmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOU1VS
TCAqcmVzdWx0ID0gVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhzdHJpbmcsIFVSTCk7CisgICAgTlNV
UkwgKnJlc3VsdCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nKTsKICAgICBpZiAoIXJl
c3VsdCkgewogICAgICAgICBOU0RhdGEgKnJlc3VsdERhdGEgPSBkYXRhV2l0aFVzZXJUeXBlZFN0
cmluZyhzdHJpbmcpOwogICAgICAgICBpZiAoIXJlc3VsdERhdGEpCiAgICAgICAgICAgICByZXR1
cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCIiXTsKLSAgICAgICAgcmVzdWx0ID0gVVJMV2l0aERh
dGEocmVzdWx0RGF0YSwgVVJMKTsKKyAgICAgICAgcmVzdWx0ID0gVVJMV2l0aERhdGEocmVzdWx0
RGF0YSwgbmlsKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgQk9P
TCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJpbmcoTlNVUkwgKlVSTCkKK3N0YXRpYyBib29s
IGhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmluZyhOU1VSTCAqVVJMKQogewogICAgIENGUmFu
Z2UgcmFuZ2VXaXRoU2VwYXJhdG9yczsKLSAgICBDRlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVu
dCgoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBrQ0ZVUkxDb21wb25lbnRRdWVyeSwgJnJhbmdlV2l0
aFNlcGFyYXRvcnMpOwotICAgIGlmIChyYW5nZVdpdGhTZXBhcmF0b3JzLmxvY2F0aW9uICE9IGtD
Rk5vdEZvdW5kICYmIHJhbmdlV2l0aFNlcGFyYXRvcnMubGVuZ3RoID09IDEpCi0gICAgICAgIHJl
dHVybiBZRVM7Ci0KLSAgICByZXR1cm4gTk87CisgICAgQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21w
b25lbnQoYnJpZGdlX2Nhc3QoVVJMKSwga0NGVVJMQ29tcG9uZW50UXVlcnksICZyYW5nZVdpdGhT
ZXBhcmF0b3JzKTsKKyAgICByZXR1cm4gcmFuZ2VXaXRoU2VwYXJhdG9ycy5sb2NhdGlvbiAhPSBr
Q0ZOb3RGb3VuZCAmJiByYW5nZVdpdGhTZXBhcmF0b3JzLmxlbmd0aCA9PSAxOwogfQogCiBOU0Rh
dGEgKmRhdGFGb3JVUkxDb21wb25lbnRUeXBlKE5TVVJMICpVUkwsIENGVVJMQ29tcG9uZW50VHlw
ZSBjb21wb25lbnRUeXBlKQogewotICAgIFZlY3RvcjxVSW50OCwgdXJsQnl0ZXNCdWZmZXJMZW5n
dGg+IGFsbEJ5dGVzQnVmZmVyKHVybEJ5dGVzQnVmZmVyTGVuZ3RoKTsKLSAgICBDRkluZGV4IGJ5
dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBhbGxCeXRl
c0J1ZmZlci5kYXRhKCksIGFsbEJ5dGVzQnVmZmVyLnNpemUoKSk7Ci0gICAgaWYgKGJ5dGVzRmls
bGVkID09IC0xKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxHZXRC
eXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAgICAgICAgYWxsQnl0
ZXNCdWZmZXIuZ3JvdyhieXRlc1RvQWxsb2NhdGUpOwotICAgICAgICBieXRlc0ZpbGxlZCA9IENG
VVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIuZGF0YSgp
LCBieXRlc1RvQWxsb2NhdGUpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBDRlVSTENvbXBvbmVu
dFR5cGUgY29tcGxldGVVUkwgPSAoQ0ZVUkxDb21wb25lbnRUeXBlKS0xOwotICAgIENGUmFuZ2Ug
cmFuZ2U7Ci0gICAgaWYgKGNvbXBvbmVudFR5cGUgIT0gY29tcGxldGVVUkwpIHsKLSAgICAgICAg
cmFuZ2UgPSBDRlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVudCgoX19icmlkZ2UgQ0ZVUkxSZWYp
VVJMLCBjb21wb25lbnRUeXBlLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9u
ID09IGtDRk5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICByYW5nZS5sb2NhdGlvbiA9IDA7Ci0gICAgICAgIHJhbmdlLmxlbmd0aCA9IGJ5dGVz
RmlsbGVkOwotICAgIH0KLSAgICAKLSAgICBOU0RhdGEgKmNvbXBvbmVudERhdGEgPSBbTlNEYXRh
IGRhdGFXaXRoQnl0ZXM6YWxsQnl0ZXNCdWZmZXIuZGF0YSgpICsgcmFuZ2UubG9jYXRpb24gbGVu
Z3RoOnJhbmdlLmxlbmd0aF07IAotICAgIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihbY29tcG9uZW50RGF0YSBieXRl
c10pOwotICAgIE5TTXV0YWJsZURhdGEgKnJlc3VsdERhdGEgPSBbTlNNdXRhYmxlRGF0YSBkYXRh
XTsKLSAgICAvLyBOT1RFOiBhZGQgbGVhZGluZyAnPycgdG8gcXVlcnkgc3RyaW5ncyBub24temVy
byBsZW5ndGggcXVlcnkgc3RyaW5ncy4KLSAgICAvLyBOT1RFOiByZXRhaW4gcXVlc3Rpb24tbWFy
ayBvbmx5IHF1ZXJ5IHN0cmluZ3MuCisgICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJMR2V0Qnl0ZVJh
bmdlRm9yQ29tcG9uZW50KGJyaWRnZV9jYXN0KFVSTCksIGNvbXBvbmVudFR5cGUsIG51bGxwdHIp
OworICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIGF1dG8gYnl0ZXNCdWZmZXIgPSBieXRlc0FzVmVjdG9yKGJyaWRnZV9jYXN0
KFVSTCkpOworICAgIGF1dG8gYnl0ZXMgPSBieXRlc0J1ZmZlci5kYXRhKCkgKyByYW5nZS5sb2Nh
dGlvbjsKKworICAgIE5TTXV0YWJsZURhdGEgKnJlc3VsdCA9IFtOU011dGFibGVEYXRhIGRhdGFd
OworCisgICAgLy8gV2UgYWRkIGxlYWRpbmcgJz8nIHRvIG5vbi16ZXJvIGxlbmd0aCBxdWVyeSBz
dHJpbmdzIGluY2x1ZGluZyBxdWVzdGlvbi1tYXJrIG9ubHkgcXVlcnkgc3RyaW5ncy4KICAgICBp
ZiAoY29tcG9uZW50VHlwZSA9PSBrQ0ZVUkxDb21wb25lbnRRdWVyeSkgewotICAgICAgICBpZiAo
cmFuZ2UubGVuZ3RoID4gMCB8fCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJpbmcoVVJMKSkK
LSAgICAgICAgICAgIFtyZXN1bHREYXRhIGFwcGVuZEJ5dGVzOiI/IiBsZW5ndGg6MV07ICAgIAor
ICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIHx8IGhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmlu
ZyhVUkwpKQorICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRCeXRlczoiPyIgbGVuZ3RoOjFdOwog
ICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhbmdlLmxlbmd0aDsgaSsrKSB7CisKKyAg
ICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByYW5nZS5sZW5ndGg7IGkrKykgewogICAgICAgICB1
bnNpZ25lZCBjaGFyIGMgPSBieXRlc1tpXTsKLSAgICAgICAgaWYgKGMgPD0gMHgyMCB8fCBjID49
IDB4N2YpIHsKLSAgICAgICAgICAgIGNoYXIgZXNjYXBlZFszXTsKLSAgICAgICAgICAgIGVzY2Fw
ZWRbMF0gPSAnJSc7Ci0gICAgICAgICAgICBlc2NhcGVkWzFdID0gdXBwZXJOaWJibGVUb0FTQ0lJ
SGV4RGlnaXQoYyk7Ci0gICAgICAgICAgICBlc2NhcGVkWzJdID0gbG93ZXJOaWJibGVUb0FTQ0lJ
SGV4RGlnaXQoYyk7Ci0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBlbmRCeXRlczplc2NhcGVk
IGxlbmd0aDozXTsgICAgCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIGJbMV07
Ci0gICAgICAgICAgICBiWzBdID0gYzsKLSAgICAgICAgICAgIFtyZXN1bHREYXRhIGFwcGVuZEJ5
dGVzOmIgbGVuZ3RoOjFdOyAgICAKLSAgICAgICAgfSAgICAgICAgICAgICAgIAorICAgICAgICBp
ZiAoYyA+IDB4MjAgJiYgYyA8IDB4N0YpCisgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEJ5dGVz
OiZieXRlc1tpXSBsZW5ndGg6MV07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hhciBl
c2NhcGVkWzNdID0geyAnJScsIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGMpLCBsb3dlck5p
YmJsZVRvQVNDSUlIZXhEaWdpdChjKSB9OworICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRCeXRl
czplc2NhcGVkIGxlbmd0aDozXTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0RGF0YTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBOU1VSTCAqVVJM
QnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRDaGFyYWN0ZXIoTlNVUkwgKlVSTCwgQ0ZV
UkxDb21wb25lbnRUeXBlIGNvbXBvbmVudCkKIHsKLSAgICBDRlJhbmdlIHJhbmdlID0gQ0ZVUkxH
ZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgY29tcG9uZW50
LCAwKTsKKyAgICBDRlJhbmdlIHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQo
YnJpZGdlX2Nhc3QoVVJMKSwgY29tcG9uZW50LCAwKTsKICAgICBpZiAocmFuZ2UubG9jYXRpb24g
PT0ga0NGTm90Rm91bmQpCiAgICAgICAgIHJldHVybiBVUkw7Ci0gICAgCisKICAgICAvLyBSZW1v
dmUgb25lIHN1YnNlcXVlbnQgY2hhcmFjdGVyLgogICAgIHJhbmdlLmxlbmd0aCsrOwogCi0gICAg
VmVjdG9yPFVJbnQ4LCB1cmxCeXRlc0J1ZmZlckxlbmd0aD4gYnVmZmVyKHVybEJ5dGVzQnVmZmVy
TGVuZ3RoKTsKLSAgICBDRkluZGV4IG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2Ug
Q0ZVUkxSZWYpVVJMLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICBpZiAobnVt
Qnl0ZXMgPT0gLTEpIHsKLSAgICAgICAgbnVtQnl0ZXMgPSBDRlVSTEdldEJ5dGVzKChfX2JyaWRn
ZSBDRlVSTFJlZilVUkwsIG51bGxwdHIsIDApOwotICAgICAgICBidWZmZXIuZ3JvdyhudW1CeXRl
cyk7Ci0gICAgICAgIENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYnVmZmVy
LmRhdGEoKSwgbnVtQnl0ZXMpOwotICAgIH0KLSAgICBVSW50OCogdXJsQnl0ZXMgPSBidWZmZXIu
ZGF0YSgpOwotICAgICAgICAKKyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2Vf
Y2FzdChVUkwpKTsKKyAgICBhdXRvIHVybEJ5dGVzID0gYnl0ZXMuZGF0YSgpOworICAgIENGSW5k
ZXggbnVtQnl0ZXMgPSBieXRlcy5zaXplKCk7CisKICAgICBpZiAobnVtQnl0ZXMgPCByYW5nZS5s
b2NhdGlvbikKICAgICAgICAgcmV0dXJuIFVSTDsKICAgICBpZiAobnVtQnl0ZXMgPCByYW5nZS5s
b2NhdGlvbiArIHJhbmdlLmxlbmd0aCkKICAgICAgICAgcmFuZ2UubGVuZ3RoID0gbnVtQnl0ZXMg
LSByYW5nZS5sb2NhdGlvbjsKLSAgICAgICAgCisKICAgICBtZW1tb3ZlKHVybEJ5dGVzICsgcmFu
Z2UubG9jYXRpb24sIHVybEJ5dGVzICsgcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIG51
bUJ5dGVzIC0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgpOwotICAgIAorCiAgICAgYXV0
byByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEJ5dGVzKG51bGxwdHIsIHVybEJ5dGVz
LCBudW1CeXRlcyAtIHJhbmdlLmxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBudWxscHRy
KSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVXaXRoQnl0ZXMobnVsbHB0ciwgdXJsQnl0ZXMsIG51bUJ5dGVzIC0gcmFuZ2UubGVuZ3RoLCBr
Q0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgbnVsbHB0cikpOwotICAgICAgICAgICAgICAgIAor
CiAgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5icmlkZ2luZ0F1dG9yZWxlYXNlKCkgOiBVUkw7
CiB9CiAKQEAgLTM0OCw5NyArMzA4LDQyIEBAIE5TVVJMICpVUkxCeVJlbW92aW5nVXNlckluZm8o
TlNVUkwgKlVSTCkKIAogTlNEYXRhICpvcmlnaW5hbFVSTERhdGEoTlNVUkwgKlVSTCkKIHsKLSAg
ICBVSW50OCAqYnVmZmVyID0gKFVJbnQ4ICopbWFsbG9jKHVybEJ5dGVzQnVmZmVyTGVuZ3RoKTsK
LSAgICBDRkluZGV4IGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxS
ZWYpVVJMLCBidWZmZXIsIHVybEJ5dGVzQnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoYnl0ZXNGaWxs
ZWQgPT0gLTEpIHsKLSAgICAgICAgQ0ZJbmRleCBieXRlc1RvQWxsb2NhdGUgPSBDRlVSTEdldEJ5
dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIG51bGxwdHIsIDApOwotICAgICAgICBidWZmZXIg
PSAoVUludDggKilyZWFsbG9jKGJ1ZmZlciwgYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICAgICAgYnl0
ZXNGaWxsZWQgPSBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGJ1ZmZlciwg
Ynl0ZXNUb0FsbG9jYXRlKTsKLSAgICAgICAgQVNTRVJUKGJ5dGVzRmlsbGVkID09IGJ5dGVzVG9B
bGxvY2F0ZSk7Ci0gICAgfQotICAgIAotICAgIC8vIGJ1ZmZlciBpcyBhZG9wdGVkIGJ5IHRoZSBO
U0RhdGEKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXNOb0NvcHk6YnVm
ZmVyIGxlbmd0aDpieXRlc0ZpbGxlZCBmcmVlV2hlbkRvbmU6WUVTXTsKLSAgICAKLSAgICBOU1VS
TCAqYmFzZVVSTCA9IChfX2JyaWRnZSBOU1VSTCAqKUNGVVJMR2V0QmFzZVVSTCgoX19icmlkZ2Ug
Q0ZVUkxSZWYpVVJMKTsKLSAgICBpZiAoYmFzZVVSTCkKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFs
VVJMRGF0YShVUkxXaXRoRGF0YShkYXRhLCBiYXNlVVJMKSk7Ci0gICAgcmV0dXJuIGRhdGE7Cisg
ICAgYXV0byBkYXRhID0gYnJpZGdlX2Nhc3QoYnl0ZXNBc0NGRGF0YShicmlkZ2VfY2FzdChVUkwp
KSk7CisgICAgaWYgKGF1dG8gYmFzZVVSTCA9IGJyaWRnZV9jYXN0KENGVVJMR2V0QmFzZVVSTChi
cmlkZ2VfY2FzdChVUkwpKSkpCisgICAgICAgIHJldHVybiBvcmlnaW5hbFVSTERhdGEoVVJMV2l0
aERhdGEoZGF0YS5nZXQoKSwgYmFzZVVSTCkpOworICAgIHJldHVybiBkYXRhLmF1dG9yZWxlYXNl
KCk7CiB9CiAKIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqVVJMKQogewogICAg
IE5TRGF0YSAqZGF0YSA9IG9yaWdpbmFsVVJMRGF0YShVUkwpOwotICAgIENTdHJpbmcgc3RyaW5n
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsK
LSAgICByZXR1cm4gdXNlclZpc2libGVVUkwoc3RyaW5nKTsKKyAgICByZXR1cm4gVVJMSGVscGVy
czo6dXNlclZpc2libGVVUkwoQ1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEg
Ynl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSkpOwogfQogCiBCT09MIGlzVXNlclZpc2libGVVUkwoTlNT
dHJpbmcgKnN0cmluZykKIHsKLSAgICBCT09MIHZhbGlkID0gWUVTOwotICAgIC8vIGdldCBidWZm
ZXIKLSAgICAKLSAgICBjaGFyIHN0YXRpY19idWZmZXJbMTAyNF07Ci0gICAgY29uc3QgY2hhciAq
cDsKLSAgICBCT09MIHN1Y2Nlc3MgPSBDRlN0cmluZ0dldENTdHJpbmcoKF9fYnJpZGdlIENGU3Ry
aW5nUmVmKXN0cmluZywgc3RhdGljX2J1ZmZlciwgMTAyMywga0NGU3RyaW5nRW5jb2RpbmdVVEY4
KTsKLSAgICBwID0gc3VjY2VzcyA/IHN0YXRpY19idWZmZXIgOiBbc3RyaW5nIFVURjhTdHJpbmdd
OwotICAgIAotICAgIGludCBsZW5ndGggPSBzdHJsZW4ocCk7Ci0gICAgCi0gICAgLy8gY2hlY2sg
Zm9yIGNoYXJhY3RlcnMgPD0gMHgyMCBvciA+PTB4N2YsICUtZXNjYXBlIHNlcXVlbmNlcyBvZiAl
N2YsIGFuZCB4bi0tLCB0aGVzZQotICAgIC8vIGFyZSB0aGUgdGhpbmdzIHRoYXQgd2lsbCBsZWFk
IF93ZWJfdXNlclZpc2libGVTdHJpbmcgdG8gYWN0dWFsbHkgY2hhbmdlIHRoaW5ncy4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
YyA9IHBbaV07Ci0gICAgICAgIC8vIGVzY2FwZSBjb250cm9sIGNoYXJhY3RlcnMsIHNwYWNlLCBh
bmQgZGVsZXRlCi0gICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdmKSB7Ci0gICAgICAg
ICAgICB2YWxpZCA9IE5POwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnJScgJiYgKGkgKyAxIDwgbGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdChwW2kgKyAxXSkp
ICYmIGkgKyAyIDwgbGVuZ3RoICYmIGlzQVNDSUlIZXhEaWdpdChwW2kgKyAyXSkpIHsKLSAgICAg
ICAgICAgIGF1dG8gdSA9IHRvQVNDSUlIZXhWYWx1ZShwW2kgKyAxXSwgcFtpICsgMl0pOwotICAg
ICAgICAgICAgaWYgKHUgPiAweDdmKSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBOTzsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgKz0gMjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIENoZWNrIGZvciAieG4tLSIgaW4gYW4g
ZWZmaWNpZW50LCBub24tY2FzZS1zZW5zaXRpdmUsIHdheS4KLSAgICAgICAgICAgIGlmIChjID09
ICctJyAmJiBpID49IDMgJiYgKHBbaSAtIDNdIHwgMHgyMCkgPT0gJ3gnICYmIChwW2kgLSAyXSB8
IDB4MjApID09ICduJyAmJiBwW2kgLSAxXSA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICB2YWxp
ZCA9IE5POwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIHVzZXJWaXNpYmxlU3RyaW5nIGZ1bmN0aW9uIGlz
IGd1YXJhbnRlZWQgdG8gbm90IGNoYW5nZSB0aGUgcGFzc2VkLWluIFVSTC4KKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIHVzZWQgdG8gb3B0aW1pemUgYWxsIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyB3
aGVyZSB3ZSBkb24ndCBuZWVkIHRoZSB1c2VyVmlzaWJsZVN0cmluZyBhbGdvcml0aG0uCisKKyAg
ICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBDRlN0cmluZ0dldENTdHJp
bmcoYnJpZGdlX2Nhc3Qoc3RyaW5nKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSwg
c2l6ZW9mKGJ1ZmZlcikgLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOworICAgIGF1dG8gY2hh
cmFjdGVycyA9IHN1Y2Nlc3MgPyBidWZmZXIgOiBbc3RyaW5nIFVURjhTdHJpbmddOworCisgICAg
Ly8gQ2hlY2sgZm9yIGNvbnRyb2wgY2hhcmFjdGVycywgJS1lc2NhcGUgc2VxdWVuY2VzIHRoYXQg
YXJlIG5vbi1BU0NJSSwgYW5kIHhuLS06IHRoZXNlCisgICAgLy8gYXJlIHRoZSB0aGluZ3MgdGhh
dCBtaWdodCBsZWFkIHRoZSB1c2VyVmlzaWJsZVN0cmluZyBmdW5jdGlvbiB0byBhY3R1YWxseSBj
aGFuZ2UgdGhlIHN0cmluZy4KKyAgICB3aGlsZSAoYXV0byBjaGFyYWN0ZXIgPSAqY2hhcmFjdGVy
cysrKSB7CisgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycywgaW5jbHVkaW5nIHNwYWNlLCB3
aWxsIGJlIGVzY2FwZWQgYnkgdXNlclZpc2libGVTdHJpbmcuCisgICAgICAgIGlmIChjaGFyYWN0
ZXIgPD0gMHgyMCB8fCBjaGFyYWN0ZXIgPT0gMHg3RikKKyAgICAgICAgICAgIHJldHVybiBOTzsK
KyAgICAgICAgLy8gRXNjYXBlIHNlcXVlbmNlcyB0aGF0IGV4cGFuZCB0byBub24tQVNDSUkgY2hh
cmFjdGVycyBtYXkgYmUgY29udmVydGVkIHRvIG5vbi1lc2NhcGVkIFVURi04IHNlcXVlbmNlcy4K
KyAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnJScgJiYgaXNBU0NJSUhleERpZ2l0KGNoYXJhY3Rl
cnNbMF0pICYmIGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0ZXJzWzFdKSAmJiAhaXNBU0NJSSh0b0FT
Q0lJSGV4VmFsdWUoY2hhcmFjdGVyc1swXSwgY2hhcmFjdGVyc1sxXSkpKQorICAgICAgICAgICAg
cmV0dXJuIE5POworICAgICAgICAvLyBJZiAieG4tLSIgYXBwZWFycywgdGhlbiB3ZSBtaWdodCBu
ZWVkIHRvIHJ1biB0aGUgSUROIGFsZ29yaXRobSBpZiBpdCdzIGEgaG9zdCBuYW1lLgorICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXIsICd4JykgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChjaGFyYWN0ZXJzWzBdLCAnbicpICYmIGNoYXJhY3RlcnNbMV0g
PT0gJy0nICYmIGNoYXJhY3RlcnNbMl0gPT0gJy0nKQorICAgICAgICAgICAgcmV0dXJuIE5POwog
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdmFsaWQ7Ci19CiAKLU5TUmFuZ2UgcmFuZ2VPZlVSTFNj
aGVtZShOU1N0cmluZyAqc3RyaW5nKQotewotICAgIE5TUmFuZ2UgY29sb24gPSBbc3RyaW5nIHJh
bmdlT2ZTdHJpbmc6QCI6Il07Ci0gICAgaWYgKGNvbG9uLmxvY2F0aW9uICE9IE5TTm90Rm91bmQg
JiYgY29sb24ubG9jYXRpb24gPiAwKSB7Ci0gICAgICAgIE5TUmFuZ2Ugc2NoZW1lID0gezAsIGNv
bG9uLmxvY2F0aW9ufTsKLSAgICAgICAgLyoKLSAgICAgICAgIFRoaXMgc3R1ZmYgaXMgdmVyeSBl
eHBlbnNpdmUuICAxMC0xNSBtc2VjIG9uIGEgMngxLjJHSHouICBJZiBub3QgY2FjaGVkIGl0IHN3
YW1wcwotICAgICAgICAgZXZlcnl0aGluZyBlbHNlIHdoZW4gYWRkaW5nIGl0ZW1zIHRvIHRoZSBh
dXRvY29tcGxldGUgREIuICBNYWtlcyBtZSB3b25kZXIgaWYgd2UKLSAgICAgICAgIGV2ZW4gbmVl
ZCB0byBlbmZvcmNlIHRoZSBjaGFyYWN0ZXIgc2V0IGhlcmUuCi0gICAgICAgICAqLwotICAgICAg
ICBOU1N0cmluZyAqYWNjZXB0YWJsZUNoYXJhY3RlcnMgPSBAIkFCQ0RFRkdISUpLTE1OT1BRUlNU
VVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky4tIjsKLSAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNDaGFyYWN0ZXJTZXQ+PiBpbnZl
cnNlU2NoZW1lQ2hhcmFjdGVyU2V0OwotICAgICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKLSAgICAgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgWyZdIHsKLSAgICAgICAgICAg
IGludmVyc2VTY2hlbWVDaGFyYWN0ZXJTZXQuY29uc3RydWN0KFtbTlNDaGFyYWN0ZXJTZXQgY2hh
cmFjdGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzphY2NlcHRhYmxlQ2hhcmFjdGVyc10gaW52
ZXJ0ZWRTZXRdKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIE5TUmFuZ2UgaWxsZWdhbHMgPSBbc3Ry
aW5nIHJhbmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OmludmVyc2VTY2hlbWVDaGFyYWN0ZXJTZXQuZ2V0
KCkuZ2V0KCkgb3B0aW9uczowIHJhbmdlOnNjaGVtZV07Ci0gICAgICAgIGlmIChpbGxlZ2Fscy5s
b2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIHNjaGVtZTsKLSAgICB9
Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIHJldHVybiBZRVM7
CiB9CiAKLUJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJpbmcgKnN0cmluZykKLXsKLSAg
ICAvLyBUcmltIHdoaXRlc3BhY2UgYmVjYXVzZSBfd2ViX1VSTFdpdGhTdHJpbmcgYWxsb3dzIHdo
aXRlc3BhY2UuCi0gICAgcmV0dXJuIHJhbmdlT2ZVUkxTY2hlbWUoc3RyaW5nQnlUcmltbWluZ1do
aXRlc3BhY2Uoc3RyaW5nKS5nZXQoKSkubG9jYXRpb24gIT0gTlNOb3RGb3VuZDsKIH0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvVVJM
Q29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9VUkxDb2NvYS5tbQppbmRleCAyN2Q3ZGMz
NjYyZmFmNTQ2ZDAwMWE4ZTIyY2I3MDdkOTBiNmZjYjBmLi41ZDllMTU2NTc3NDUyYTIyNzNlZjJk
ZjY3YTZkOGU0N2Q3YTM1YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9VUkxD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9VUkxDb2NvYS5tbQpAQCAtMzksMTcg
KzM5LDggQEAgQGVuZAogbmFtZXNwYWNlIFdURiB7CiAKIFVSTDo6VVJMKE5TVVJMICpjb2NvYVVS
TCkKKyAgICA6IFVSTChicmlkZ2VfY2FzdChjb2NvYVVSTCkpCiB7Ci0gICAgaWYgKCFjb2NvYVVS
TCkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGlnbm9yZSBiYXNlIFVSTCBoZXJlPwotICAgIENT
dHJpbmcgYnl0ZXM7Ci0gICAgV1RGOjpnZXRVUkxCeXRlcyhicmlkZ2VfY2FzdChjb2NvYVVSTCks
IGJ5dGVzKTsKLSAgICBVUkxQYXJzZXIgcGFyc2VyKGJ5dGVzLmRhdGEoKSk7Ci0gICAgKnRoaXMg
PSBwYXJzZXIucmVzdWx0KCk7CiB9CiAKIFVSTDo6b3BlcmF0b3IgTlNVUkwgKigpIGNvbnN0CkBA
IC01OSwyOCArNTAsMTEgQEAgVVJMOjpvcGVyYXRvciBOU1VSTCAqKCkgY29uc3QKICAgICByZXR1
cm4gY3JlYXRlQ0ZVUkwoKS5icmlkZ2luZ0F1dG9yZWxlYXNlKCk7CiB9CiAKLVJldGFpblB0cjxD
RlVSTFJlZj4gVVJMOjpjcmVhdGVDRlVSTCgpIGNvbnN0CitSZXRhaW5QdHI8Q0ZVUkxSZWY+IFVS
TDo6ZW1wdHlDRlVSTCgpCiB7Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gV2UgdXNlIHRoZSB0b2xs
LWZyZWUgYnJpZGdlIGJldHdlZW4gTlNVUkwgYW5kIENGVVJMIHRvIGNyZWF0ZSBhIENGVVJMUmVm
IHN1cHBvcnRpbmcgYm90aCBlbXB0eSBhbmQgbnVsbCB2YWx1ZXMuCi0gICAgICAgIHJldHVybiBi
cmlkZ2VfY2FzdChhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0pKTsK
LSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChMSUtFTFko
bV9zdHJpbmcuaXM4Qml0KCkgJiYgbV9zdHJpbmcuaXNBbGxBU0NJSSgpKSkKLSAgICAgICAgY2ZV
UkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgbV9z
dHJpbmcuY2hhcmFjdGVyczgoKSwgbV9zdHJpbmcubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5n
VVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgIGVsc2UgewotICAgICAgICBDU3RyaW5nIHV0Zjgg
PSBtX3N0cmluZy51dGY4KCk7Ci0gICAgICAgIGNmVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFi
c29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIHV0ZjguZGF0YUFzVUludDhQdHIoKSwgdXRmOC5s
ZW5ndGgoKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBudWxscHRyLCB0cnVlKSk7Ci0gICAgfQot
Ci0gICAgaWYgKHByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSAmJiAhV1RGOjppc0NGVVJMU2FtZU9y
aWdpbihjZlVSTC5nZXQoKSwgKnRoaXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBjZlVSTDsKKyAgICAvLyBXZSB1c2UgdGhlIHRvbGwtZnJlZSBicmlkZ2UgdG8gY3Jl
YXRlIGFuIGVtcHR5IHZhbHVlIHRoYXQgaXMgZGlzdGluY3QgZnJvbSBudWxsIHRoYXQgbm8gQ0ZV
UkwgZnVuY3Rpb24gY2FuIGNyZWF0ZS4KKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBvcmlnaW5hbGx5
IHdyb3RlIHRoaXMsIHdlIHRob3VnaHQgdGhhdCBjcmVhdGluZyBlbXB0eSBDRiBVUkxzIHdhcyB2
YWx1YWJsZTsgY2FuIHdlIGRvIHdpdGhvdXQgaXQgbm93PworICAgIHJldHVybiBicmlkZ2VfY2Fz
dChhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0pKTsKIH0KIAogYm9v
bCBVUkw6Omhvc3RJc0lQQWRkcmVzcyhTdHJpbmdWaWV3IGhvc3QpCkBAIC05MCw3ICs2NCw3IEBA
IGJvb2wgVVJMOjpob3N0SXNJUEFkZHJlc3MoU3RyaW5nVmlldyBob3N0KQogCiBSZXRhaW5QdHI8
aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBVUkwmIHZlY3RvckVsZW1lbnQpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0TlMoKF9fYnJpZGdlX3RyYW5zZmVyIGlkKXZlY3RvckVsZW1lbnQuY3JlYXRl
Q0ZVUkwoKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBicmlkZ2VfY2FzdCh2ZWN0b3JFbGVtZW50
LmNyZWF0ZUNGVVJMKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFVSTD4gbWFrZVZlY3RvckVsZW1l
bnQoY29uc3QgVVJMKiwgaWQgYXJyYXlFbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvRmlsZVN5c3RlbU1h
Yy5tbQppbmRleCA1ZTE5MzAwNTY5YjYyMWNiNGI5Y2Y5YzBlN2Q2MjM0NTE3NzNjYWJhLi4yYWQ5
MTVjYWY2Nzg5NzRlOWQ0YzBmZmVmZDk5MDFlMjRlYThiMWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9tYWMvRmlsZVN5c3RlbU1hYy5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvRmls
ZVN5c3RlbU1hYy5tbQpAQCAtMzcsOCArMzcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgRmls
ZVN5c3RlbTo6c2V0TWV0YWRhdGFVUkwoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IG1ldGFkYXRhVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewogICAgIFN0cmlu
ZyB1cmxTdHJpbmc7Ci0gICAgaWYgKE5TVVJMICp1cmwgPSBVUkxXaXRoVXNlclR5cGVkU3RyaW5n
KG1ldGFkYXRhVVJMU3RyaW5nLCBuaWwpKQotICAgICAgICB1cmxTdHJpbmcgPSBXVEY6OnVzZXJW
aXNpYmxlU3RyaW5nKFdURjo6VVJMQnlSZW1vdmluZ1VzZXJJbmZvKHVybCkpOworICAgIGlmIChO
U1VSTCAqdXJsID0gVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhtZXRhZGF0YVVSTFN0cmluZykpCisg
ICAgICAgIHVybFN0cmluZyA9IHVzZXJWaXNpYmxlU3RyaW5nKFVSTEJ5UmVtb3ZpbmdVc2VySW5m
byh1cmwpKTsKICAgICBlbHNlCiAgICAgICAgIHVybFN0cmluZyA9IG1ldGFkYXRhVVJMU3RyaW5n
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9jZi9XS1VSTENGLm1t
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvY2YvV0tVUkxDRi5tbQppbmRleCBhYzZkMDg2
M2Y1MzA1YzA0ODM3NzI2ZjRkNjAwZDcxY2QxOTExNjRhLi5jY2U4Mjc2NWFkOWIxNjk1ZDkzYWI4
N2E1OTM5YmUzNTk2MTcwNzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
Yy9jZi9XS1VSTENGLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2NmL1dLVVJM
Q0YubW0KQEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIldLTlNVUkwuaCIKICNpbXBvcnQgPG9i
amMvcnVudGltZS5oPgogI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHN0YXRpYyBpbmxpbmUgQ2xhc3Mgd2tOU1VSTENsYXNzKCkK
IHsKQEAgLTQ1LDE2ICs0NCwxNCBAQCBzdGF0aWMgaW5saW5lIENsYXNzIHdrTlNVUkxDbGFzcygp
CiBXS1VSTFJlZiBXS1VSTENyZWF0ZVdpdGhDRlVSTChDRlVSTFJlZiBjZlVSTCkKIHsKICAgICBp
ZiAoIWNmVVJMKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAvLyBTaW5jZSBXS05TVVJMIGlzIGFuIGludGVybmFsIGNsYXNzIHdpdGggbm8gc3ViY2xh
c3Nlcywgd2UgY2FuIGRvIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrLgogICAgIGlmIChvYmplY3Rf
Z2V0Q2xhc3MoKF9fYnJpZGdlIE5TVVJMICopY2ZVUkwpID09IHdrTlNVUkxDbGFzcygpKQogICAg
ICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShzdGF0aWNfY2FzdDxBUEk6OlVSTCo+KCZbKFdLTlNV
UkwgKikoX19icmlkZ2UgTlNVUkwgKilDRlJldGFpbihjZlVSTCkgX2FwaU9iamVjdF0pKTsKIAot
ICAgIENTdHJpbmcgdXJsQnl0ZXM7Ci0gICAgV1RGOjpnZXRVUkxCeXRlcyhjZlVSTCwgdXJsQnl0
ZXMpOwotCi0gICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEkodXJsQnl0ZXMuZGF0YSgp
KTsKKyAgICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGlnbm9yZSB0aGUgYmFzZSBVUkwgaW4g
dGhlIENGVVJMIGhlcmU/CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEkoYnl0ZXNB
c1N0cmluZyhjZlVSTCkpOwogfQogCiBDRlVSTFJlZiBXS1VSTENvcHlDRlVSTChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3JSZWYsIFdLVVJMUmVmIFVSTFJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IGQ5MWQyMGEwZTM1YjBm
ZWVmYjA2NmNiMmMwZWI2OGJiZTNmNmZhNjEuLjYxMjg0YjA0ZDExNmNmYjg3YTIzZDMwNjhhOGMy
YzJiNTA5ZDY2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3Vt
ZW50Q29kZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1l
bnRDb2RlcnNDb2NvYS5tbQpAQCAtMTA0LDkgKzEwNCw4IEBAIC0gKHZvaWQpZW5jb2RlV2l0aENv
ZGVyOihOU0NvZGVyICopY29kZXIKICAgICBpZiAoaGFzQmFzZVVSTCkKICAgICAgICAgW2NvZGVy
IGVuY29kZU9iamVjdDpiYXNlVVJMIGZvcktleTpiYXNlVVJMS2V5XTsKIAotICAgIFdURjo6VVJM
Q2hhckJ1ZmZlciB1cmxCeXRlczsKLSAgICBXVEY6OmdldFVSTEJ5dGVzKGJyaWRnZV9jYXN0KG1f
d3JhcHBlZFVSTC5nZXQoKSksIHVybEJ5dGVzKTsKLSAgICBbY29kZXIgZW5jb2RlQnl0ZXM6dXJs
Qnl0ZXMuZGF0YSgpIGxlbmd0aDp1cmxCeXRlcy5zaXplKCldOworICAgIGF1dG8gYnl0ZXMgPSBi
eXRlc0FzVmVjdG9yKGJyaWRnZV9jYXN0KG1fd3JhcHBlZFVSTC5nZXQoKSkpOworICAgIFtjb2Rl
ciBlbmNvZGVCeXRlczpieXRlcy5kYXRhKCkgbGVuZ3RoOmJ5dGVzLnNpemUoKV07CiB9CiAKIC0g
KF9OdWxsYWJsZSBpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLmgKaW5kZXggMjBkZGNiMDkz
ZmI5Yjk3ZTI2NDk0OWJlZDgyNmUwYmJlMDliYjRmNy4uNTdhM2NkMmIyNGYxZGQxZjFhNTY2NmIz
MDhlY2RlYjM5YmI2ZWRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2Ev
V0tOU1VSTEV4dHJhcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxF
eHRyYXMuaApAQCAtMjgsOCArMjgsNSBAQAogQGludGVyZmFjZSBOU1VSTCAoV0tFeHRyYXMpCiAK
ICsgKGluc3RhbmNldHlwZSlfd2ViX1VSTFdpdGhXVEZTdHJpbmc6KGNvbnN0IFN0cmluZyYpc3Ry
aW5nOwotKyAoaW5zdGFuY2V0eXBlKV93ZWJfVVJMV2l0aFdURlN0cmluZzooY29uc3QgU3RyaW5n
JilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMOwotCi0tIChTdHJpbmcpX3dl
Yl9vcmlnaW5hbERhdGFBc1dURlN0cmluZzsKIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0NvY29hL1dLTlNVUkxFeHRyYXMubW0KaW5kZXggMjYwMjcxYTBiM2NkNTc1ZDY1NGY4MGYxMDZm
M2RlODVlMzQ1Yjg3ZC4uMTgxYjgzYTg3Yjk2ZWVhNzVlNWNkOTU0Njc4MTA0OTdhYmZjOTZiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLm1tCkBAIC0yNyw5
ICsyNyw2IEBACiAjaW1wb3J0ICJXS05TVVJMRXh0cmFzLmgiCiAKICNpbXBvcnQgPHd0Zi9VUkwu
aD4KLSNpbXBvcnQgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIEBpbXBsZW1lbnRhdGlv
biBOU1VSTCAoV0tFeHRyYXMpCiAKQEAgLTM5LDE4ICszNiw0IEBAICsgKGluc3RhbmNldHlwZSlf
d2ViX1VSTFdpdGhXVEZTdHJpbmc6KGNvbnN0IFN0cmluZyYpc3RyaW5nCiAgICAgcmV0dXJuIChO
U1VSTCAqKXVybDsKIH0KIAotKyAoaW5zdGFuY2V0eXBlKV93ZWJfVVJMV2l0aFdURlN0cmluZzoo
Y29uc3QgU3RyaW5nJilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMCi17Ci0g
ICAgVVJMIHVybCB7IFVSTCB7IGJhc2VVUkwgfSwgc3RyaW5nIH07Ci0gICAgcmV0dXJuIChOU1VS
TCAqKXVybDsKLX0KLQotLSAoU3RyaW5nKV93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmcKLXsK
LSAgICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGlnbm9yZSBiYXNlIFVSTCBoZXJlPwotICAg
IENTdHJpbmcgb3JpZ2luYWxEYXRhOwotICAgIFdURjo6Z2V0VVJMQnl0ZXMoKF9fYnJpZGdlIENG
VVJMUmVmKXNlbGYsIG9yaWdpbmFsRGF0YSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
b3JpZ2luYWxEYXRhKTsKLX0KLQogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29jb2EvV0tOU1VSTFJlcXVlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9X
S05TVVJMUmVxdWVzdC5tbQppbmRleCBkMGM5MWY3ZGUyOTM5MDU5MTdjZDU2OWQ2ZDA1NzdmMTBm
NmU4MjM5Li40ZjIxYWE5MDMwMmFiNjhjYmY2MTlhYWNlZTYwMzk2NWNhZDNiZTBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbQpAQCAtMzcsNyArMzcs
NyBAQCAtIChOU09iamVjdCAqKV93ZWJfY3JlYXRlVGFyZ2V0CiAKIC0gKE5TVVJMICopVVJMCiB7
Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c3RhdGljX2Nhc3Q8QVBJ
OjpVUkxSZXF1ZXN0Kj4oJnNlbGYuX2FwaU9iamVjdCktPnJlc291cmNlUmVxdWVzdCgpLnVybCgp
LnN0cmluZygpXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QVBJOjpVUkxSZXF1ZXN0Kj4oJnNl
bGYuX2FwaU9iamVjdCktPnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwogfQogCiAjcHJhZ21hIG1h
cmsgTlNDb3B5aW5nIHByb3RvY29sIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9jZi9Bcmd1bWVudENvZGVyc0NGLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCmluZGV4IDI2Nzc2ZGY1ZmQzNmQ2MTUxODQ0NmYw
OWJhY2IxMGQ2YTcwN2VjMTkuLjQ2MmU4NTk0MmJmNWQ0MWFiMDk3NGY0NGI5NGQ0N2I2MzFhZGFk
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0Yu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCkBA
IC02NDMsOSArNjQzLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPENGVVJMUmVmPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIENGVVJMUmVmIHVybCkKICAgICBpZiAoYmFzZVVSTCkKICAgICAgICAg
ZW5jb2RlciA8PCBiYXNlVVJMOwogCi0gICAgV1RGOjpVUkxDaGFyQnVmZmVyIHVybEJ5dGVzOwot
ICAgIFdURjo6Z2V0VVJMQnl0ZXModXJsLCB1cmxCeXRlcyk7Ci0gICAgZW5jb2RlciA8PCBJUEM6
OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXJsQnl0ZXMu
ZGF0YSgpKSwgdXJsQnl0ZXMuc2l6ZSgpKTsKKyAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVy
ZW5jZShieXRlc0FzVmVjdG9yKHVybCkpOwogfQogCiB0ZW1wbGF0ZSB2b2lkIEFyZ3VtZW50Q29k
ZXI8Q0ZVUkxSZWY+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIENGVVJMUmVmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCmluZGV4IGUwNzEyNmFiYmQ5NDExYWZkYzEyYjJhYmZk
MDhhNGQxMDcyNDIxOTMuLjZkYzVkMDMzZGM2OTMxZDFiYjQ3NDA3NjUyYmJmNTdmZDJhMDZjOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQpAQCAtNjAsNiArNjAsNyBAQAogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+
CiAKIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25Jc01haW5GcmFtZUtleSA9IEAiV0tBY3Rpb25J
c01haW5GcmFtZUtleSI7CiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uTmF2aWdhdGlvblR5cGVL
ZXkgPSBAIldLQWN0aW9uTmF2aWdhdGlvblR5cGVLZXkiOwpAQCAtMTU3LDcgKzE1OCw3IEBAIC0g
KHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJMICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjooTlNV
UkwgKilhbGxvd2VkRGlyZWN0b3J5CiAgICAgaWYgKHVzZXJEYXRhKQogICAgICAgICB3a1VzZXJE
YXRhID0gV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CiAKLSAgICBf
cGFnZS0+bG9hZEZpbGUoW1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSwgW2FsbG93
ZWREaXJlY3RvcnkgX3dlYl9vcmlnaW5hbERhdGFBc1dURlN0cmluZ10sIHdrVXNlckRhdGEuZ2V0
KCkpOworICAgIF9wYWdlLT5sb2FkRmlsZShieXRlc0FzU3RyaW5nKGJyaWRnZV9jYXN0KFVSTCkp
LCBieXRlc0FzU3RyaW5nKGJyaWRnZV9jYXN0KGFsbG93ZWREaXJlY3RvcnkpKSwgd2tVc2VyRGF0
YS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKQEAgLTE3Miw3ICsxNzMsNyBAQCAtICh2b2lk
KWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKili
YXNlVVJMIHVzZXJEYXRhOgogICAgICAgICB3a1VzZXJEYXRhID0gV2ViS2l0OjpPYmpDT2JqZWN0
R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CiAKICAgICBOU0RhdGEgKmRhdGEgPSBbSFRNTFN0cmlu
ZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgX3BhZ2UtPmxv
YWREYXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCB9LCAidGV4dC9odG1sIl9zLCAiVVRGLTgiX3MsIFtiYXNlVVJMIF93ZWJfb3JpZ2luYWxE
YXRhQXNXVEZTdHJpbmddLCB3a1VzZXJEYXRhLmdldCgpKTsKKyAgICBfcGFnZS0+bG9hZERhdGEo
eyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0s
ICJ0ZXh0L2h0bWwiX3MsICJVVEYtOCJfcywgYnl0ZXNBc1N0cmluZyhicmlkZ2VfY2FzdChiYXNl
VVJMKSksIHdrVXNlckRhdGEuZ2V0KCkpOwogfQogCiAtICh2b2lkKWxvYWRBbHRlcm5hdGVIVE1M
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgZm9yVW5y
ZWFjaGFibGVVUkw6KE5TVVJMICopdW5yZWFjaGFibGVVUkwKQEAgLTE5Miw3ICsxOTMsNyBAQCAt
ICh2b2lkKWxvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVU
eXBlIHRleHRFbmNvZGluZ05hbWU6KAogICAgIGlmICh1c2VyRGF0YSkKICAgICAgICAgd2tVc2Vy
RGF0YSA9IFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwogCi0gICAg
X3BhZ2UtPmxvYWREYXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMp
LCBkYXRhLmxlbmd0aCB9LCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBbYmFzZVVSTCBfd2ViX29y
aWdpbmFsRGF0YUFzV1RGU3RyaW5nXSwgd2tVc2VyRGF0YS5nZXQoKSk7CisgICAgX3BhZ2UtPmxv
YWREYXRhKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCB9LCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBieXRlc0FzU3RyaW5nKGJyaWRnZV9jYXN0
KGJhc2VVUkwpKSwgd2tVc2VyRGF0YS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc3RvcExvYWRpbmcK
QEAgLTUwOCw3ICs1MDksNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAog
ICAgICAgICAgICAgaWYgKG9yaWdpbmF0aW5nRnJhbWUpIHsKICAgICAgICAgICAgICAgICBhY3Rp
b25EaWN0aW9uYXJ5ID0gYWRvcHROUyhbYWN0aW9uRGljdGlvbmFyeSBtdXRhYmxlQ29weV0pOwot
ICAgICAgICAgICAgICAgIFsoTlNNdXRhYmxlRGljdGlvbmFyeSAqKWFjdGlvbkRpY3Rpb25hcnku
Z2V0KCkgc2V0T2JqZWN0OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6V2ViS2l0Ojp0b0lt
cGwob3JpZ2luYXRpbmdGcmFtZSktPnVybCgpLnN0cmluZygpXSBmb3JLZXk6V0tBY3Rpb25Pcmln
aW5hdGluZ0ZyYW1lVVJMS2V5XTsKKyAgICAgICAgICAgICAgICBbKE5TTXV0YWJsZURpY3Rpb25h
cnkgKilhY3Rpb25EaWN0aW9uYXJ5LmdldCgpIHNldE9iamVjdDooTlNVUkwgKilXZWJLaXQ6OnRv
SW1wbChvcmlnaW5hdGluZ0ZyYW1lKS0+dXJsKCkgZm9yS2V5OldLQWN0aW9uT3JpZ2luYXRpbmdG
cmFtZVVSTEtleV07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFtw
b2xpY3lEZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmJyb3dzaW5nQ29udGV4dCBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkuZ2V0KCkgZGVj
aXNpb25IYW5kbGVyOm1ha2VQb2xpY3lEZWNpc2lvbkJsb2NrKGxpc3RlbmVyKS5nZXQoKV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENs
aWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeURvd25sb2FkQ2xp
ZW50Lm1tCmluZGV4IDBmYjdlOGFkOTliYTQ3MWY4OWRmMWFlOTEwOTgzMzIxNjgwZWJiMWMuLjY1
NWQ4OWI4ZDgwY2ZmYzQwZDk1MzI3ODExMGU3MGQzZTZhMGU5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeURvd25sb2FkQ2xpZW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeURvd25sb2FkQ2xpZW50Lm1tCkBAIC0y
NzIsNyArMjcyLDcgQEAgdm9pZCBMZWdhY3lEb3dubG9hZENsaWVudDo6bGVnYWN5RGlkQ2FuY2Vs
KERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiB2b2lkIExlZ2FjeURvd25sb2FkQ2xpZW50
Ojp3aWxsU2VuZFJlcXVlc3QoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9h
ZERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdFRvVVJMKQotICAgICAgICBbbV9kZWxlZ2F0ZSBfZG93
bmxvYWQ6W19XS0Rvd25sb2FkIGRvd25sb2FkV2l0aERvd25sb2FkOndyYXBwZXIoZG93bmxvYWRQ
cm94eSldIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdFRvVVJMOltOU1VSTCBfd2ViX1VSTFdpdGhX
VEZTdHJpbmc6cmVxdWVzdC51cmwoKS5zdHJpbmcoKV1dOworICAgICAgICBbbV9kZWxlZ2F0ZSBf
ZG93bmxvYWQ6W19XS0Rvd25sb2FkIGRvd25sb2FkV2l0aERvd25sb2FkOndyYXBwZXIoZG93bmxv
YWRQcm94eSldIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdFRvVVJMOnJlcXVlc3QudXJsKCldOwog
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2Vi
UHJvY2Vzc1BsdWdJbkZyYW1lLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQppbmRleCBmZGFkMTMw
ZTAyYmMzYzU2OGFhNDk5NDczZTJiMWQ3ODA4NGFlMjRlLi5jODExZWFkODI5Nzg4MDBmZGUwMGRh
ZmY1YzJjYzRjNzk0NmE4YmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQ
cm9jZXNzUGx1Z0luRnJhbWUubW0KQEAgLTExMCw3ICsxMTAsNyBAQCAtIChXS1dlYlByb2Nlc3NQ
bHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKilfYnJvd3NlckNvbnRleHRDb250cm9sbGVy
CiAKIC0gKE5TVVJMICopVVJMCiB7Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZT
dHJpbmc6X2ZyYW1lLT51cmwoKS5zdHJpbmcoKV07CisgICAgcmV0dXJuIF9mcmFtZS0+dXJsKCk7
CiB9CiAKIC0gKE5TQXJyYXkgKiljaGlsZEZyYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCmluZGV4IGVjNzBlYTM0NWM0ZTQ1Mjg2N2Q3NWFkNDJl
ZGFkNzZlNTUwN2M1NmYuLmVjNzQ4NjIxNGM2YzRlN2ZiM2E1YmFkOTBkZDFjZGFiMjA1MTBmZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDksIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwzMCArMjgsMjMgQEAKIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CiAKLS8vIEZJWE1FOiBDaGFuZ2UgbWV0aG9kIG5hbWVzIGJhY2sgdG8gX3dlYl8gZnJvbSBf
d2Via2l0XyB3aGVuIGlkZW50aWNhbGx5LW5hbWVkCi0vLyBtZXRob2RzIGFyZSBubyBsb25nZXIg
cHJlc2VudCBpbiBGb3VuZGF0aW9uLgorLy8gRklYTUU6IENvbnNpZGVyIHJlbmFtaW5nIHRvIF93
ZWJfIGZyb20gX3dlYmtpdF8gb25jZSBpZGVudGljYWxseS1uYW1lZCBtZXRob2RzIGFyZSBubyBs
b25nZXIgcHJlc2VudCBpbiBGb3VuZGF0aW9uLgogCiBAaW50ZXJmYWNlIE5TVVJMIChXZWJOU1VS
TEV4dHJhcykKIAotLy8gRGVwcmVjYXRlZCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJzaW5nIGVycm9y
LgotLy8gUGxlYXNlIHVzZSB0aGUgX3dlYmtpdF8gY291bnRlcnBhcnRzLgorLy8gRGVwcmVjYXRl
ZCwgYXMgaXQgaWdub3JlcyBVUkwgcGFyc2luZyBlcnJvcnMuCisvLyBQbGVhc2UgdXNlIHRoZSBf
d2Via2l0X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmcgaW5zdGVhZC4KICsgKE5TVVJMICopX3dlYl9V
UkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKLSsgKE5TVVJMICopX3dl
Yl9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvVVJM
OihOU1VSTCAqKVVSTDsKIAotLy8gTmV3IFNQSS4KIC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVh
bnMgZXJyb3IgaW4gVVJMIHBhcnNpbmcuCiArIChOU1VSTCAqKV93ZWJraXRfVVJMV2l0aFVzZXJU
eXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7Ci0rIChOU1VSTCAqKV93ZWJraXRfVVJMV2l0
aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwg
KilVUkw7CiAKICsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZzsKICsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkw7CiAKLSsgKE5TVVJMICopX3dl
Yl9VUkxXaXRoRGF0YTooTlNEYXRhICopZGF0YTsKLSsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0
YTooTlNEYXRhICopZGF0YSByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkw7Ci0KIC0gKE5T
RGF0YSAqKV93ZWJfb3JpZ2luYWxEYXRhOwogLSAoTlNTdHJpbmcgKilfd2ViX29yaWdpbmFsRGF0
YUFzU3RyaW5nOwotLSAoY29uc3QgY2hhciAqKV93ZWJfVVJMQ1N0cmluZzsKKy0gKGNvbnN0IGNo
YXIqKV93ZWJfVVJMQ1N0cmluZzsKIAogLSAoTlNTdHJpbmcgKilfd2ViX2hvc3RTdHJpbmc7CiAK
QEAgLTc4LDE0ICs3MSwxNiBAQAogCiAtIChCT09MKV93ZWJfaXNVc2VyVmlzaWJsZVVSTDsKIAot
Ly8gRGVwcmVjYXRlZCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJzaW5nIGVycm9yLgotLy8gUGxlYXNl
IHVzZSB0aGUgX3dlYmtpdF8gY291bnRlcnBhcnRzLgotLy8gdHVybnMgZnVubnktbG9va2luZyBB
U0NJSSBmb3JtIGludG8gVW5pY29kZSwgcmV0dXJucyBzZWxmIGlmIG5vIGRlY29kaW5nIG5lZWRl
ZCwgY29udmVuaWVudCBjb3ZlcgorLy8gRGVwcmVjYXRlZCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJz
aW5nIGVycm9ycy4KKy8vIFBsZWFzZSB1c2UgX3dlYmtpdF9kZWNvZGVIb3N0TmFtZSBpbnN0ZWFk
LgorLy8gVHVybnMgZnVubnktbG9va2luZyBBU0NJSSBmb3JtIGludG8gVW5pY29kZSwgcmV0dXJu
cyBzZWxmIGlmIG5vIGRlY29kaW5nIG5lZWRlZC4KIC0gKE5TU3RyaW5nICopX3dlYl9kZWNvZGVI
b3N0TmFtZTsKLS8vIHR1cm5zIFVuaWNvZGUgaW50byBmdW5ueS1sb29raW5nIEFTQ0lJIGZvcm0s
IHJldHVybnMgc2VsZiBpZiBubyBkZWNvZGluZyBuZWVkZWQsIGNvbnZlbmllbnQgY292ZXIKKwor
Ly8gRGVwcmVjYXRlZCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJzaW5nIGVycm9ycy4KKy8vIFBsZWFz
ZSB1c2UgdGhlIF93ZWJraXRfZW5jb2RlSG9zdE5hbWUgaW5zdGVhZC4KKy8vIFR1cm5zIFVuaWNv
ZGUgaW50byBmdW5ueS1sb29raW5nIEFTQ0lJIGZvcm0sIHJldHVybnMgc2VsZiBpZiBubyBlbmNv
ZGluZyBuZWVkZWQuCiAtIChOU1N0cmluZyAqKV93ZWJfZW5jb2RlSG9zdE5hbWU7CiAKLS8vIE5l
dyBTUEkuCiAvLyBSZXR1cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yIGluIFVSTCBwYXJzaW5n
LgogLSAoTlNTdHJpbmcgKilfd2Via2l0X2RlY29kZUhvc3ROYW1lOwogLSAoTlNTdHJpbmcgKilf
d2Via2l0X2VuY29kZUhvc3ROYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViTlNVUkxFeHRyYXMubW0KaW5kZXggMWVjMDRlYWFmNWI0NjQ3NmQ4OTlkZmU4NTVlZWYyNmNj
MjkzNTgyYy4uNDQ4ZjIyZjlhMzE2ZDBhN2FmMmMzN2FlZGEyYzkwZjViNjZjNGY3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDEs
NzAgKzQxLDM4IEBACiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2ltcG9ydCA8d3RmL1VS
TC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL05TVVJMRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotI2RlZmluZSBVUkxfQllURVNfQlVG
RkVSX0xFTkdUSCAyMDQ4CisjaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KIAog
QGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJOU1VSTEV4dHJhcykKIAotKyAoTlNVUkwgKilfd2Vi
X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6
KE5TVVJMICopVVJMCi17Ci0gICAgcmV0dXJuIFVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNh
dGVkKHN0cmluZywgVVJMKTsKLX0KLQogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhVc2VyVHlwZWRT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgcmV0dXJuIFVSTFdpdGhVc2VyVHlwZWRT
dHJpbmdEZXByZWNhdGVkKHN0cmluZywgbmlsKTsKLX0KLQotKyAoTlNVUkwgKilfd2Via2l0X1VS
TFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5T
VVJMICopVVJMCi17Ci0gICAgcmV0dXJuIFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nLCBV
UkwpOworICAgIHJldHVybiBXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKHN0
cmluZyk7CiB9CiAKICsgKE5TVVJMICopX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZwogewotICAgIHJldHVybiBVUkxXaXRoVXNlclR5cGVkU3RyaW5nKHN0
cmluZywgbmlsKTsKKyAgICByZXR1cm4gV1RGOjpVUkxXaXRoVXNlclR5cGVkU3RyaW5nKHN0cmlu
Zyk7CiB9CiAKICsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZwogewotICAgIGlmIChzdHJpbmcgPT0gbmlsKSB7Ci0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgfQogICAgIHJldHVybiBbc2VsZiBfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6c3RyaW5n
IHJlbGF0aXZlVG9VUkw6bmlsXTsKIH0KIAogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhQXNT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTAog
ewotICAgIGlmIChzdHJpbmcgPT0gbmlsKSB7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQot
ICAgIHN0cmluZyA9IFtzdHJpbmcgX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV07
Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU0lTT0xhdGlu
MVN0cmluZ0VuY29kaW5nXTsKLSAgICByZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwgYmFzZVVSTCk7
Ci19Ci0KLSsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0YTooTlNEYXRhICopZGF0YQotewotICAg
IHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBuaWwpOwotfSAgICAgIAotCi0rIChOU1VSTCAqKV93
ZWJfVVJMV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNl
VVJMCi17Ci0gICAgcmV0dXJuIFVSTFdpdGhEYXRhKGRhdGEsIGJhc2VVUkwpOworICAgIHJldHVy
biBXVEY6OlVSTFdpdGhEYXRhKFtbc3RyaW5nIF93ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRl
c3BhY2VdIGRhdGFVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddLCBiYXNl
VVJMKTsKIH0KIAogLSAoTlNEYXRhICopX3dlYl9vcmlnaW5hbERhdGEKIHsKLSAgICByZXR1cm4g
b3JpZ2luYWxVUkxEYXRhKHNlbGYpOworICAgIHJldHVybiBXVEY6Om9yaWdpbmFsVVJMRGF0YShz
ZWxmKTsKIH0KIAogLSAoTlNTdHJpbmcgKilfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOm9yaWdpbmFs
VVJMRGF0YShzZWxmKSBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSkuYXV0b3Jl
bGVhc2UoKTsKKyAgICByZXR1cm4gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERh
dGE6V1RGOjpvcmlnaW5hbFVSTERhdGEoc2VsZikgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdF
bmNvZGluZ10pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dlYl91c2VyVmlz
aWJsZVN0cmluZwpAQCAtMTE0LDIyICs4MiwyMiBAQCAtIChOU1N0cmluZyAqKV93ZWJfdXNlclZp
c2libGVTdHJpbmcKIAogLSAoQk9PTClfd2ViX2lzRW1wdHkKIHsKLSAgICBpZiAoIUNGVVJMR2V0
QmFzZVVSTCgoQ0ZVUkxSZWYpc2VsZikpCi0gICAgICAgIHJldHVybiBDRlVSTEdldEJ5dGVzKChD
RlVSTFJlZilzZWxmLCBOVUxMLCAwKSA9PSAwOwotICAgIHJldHVybiBbb3JpZ2luYWxVUkxEYXRh
KHNlbGYpIGxlbmd0aF0gPT0gMDsKKyAgICBpZiAoIUNGVVJMR2V0QmFzZVVSTChicmlkZ2VfY2Fz
dChzZWxmKSkpCisgICAgICAgIHJldHVybiAhQ0ZVUkxHZXRCeXRlcyhicmlkZ2VfY2FzdChzZWxm
KSwgbnVsbHB0ciwgMCk7CisgICAgcmV0dXJuICFbV1RGOjpvcmlnaW5hbFVSTERhdGEoc2VsZikg
bGVuZ3RoXTsKIH0KIAotLSAoY29uc3QgY2hhciAqKV93ZWJfVVJMQ1N0cmluZworLSAoY29uc3Qg
Y2hhciopX3dlYl9VUkxDU3RyaW5nCiB7CiAgICAgTlNNdXRhYmxlRGF0YSAqZGF0YSA9IFtOU011
dGFibGVEYXRhIGRhdGFdOwotICAgIFtkYXRhIGFwcGVuZERhdGE6b3JpZ2luYWxVUkxEYXRhKHNl
bGYpXTsKKyAgICBbZGF0YSBhcHBlbmREYXRhOldURjo6b3JpZ2luYWxVUkxEYXRhKHNlbGYpXTsK
ICAgICBbZGF0YSBhcHBlbmRCeXRlczoiXDAiIGxlbmd0aDoxXTsKLSAgICByZXR1cm4gKGNvbnN0
IGNoYXIgKilbZGF0YSBieXRlc107CisgICAgcmV0dXJuIChjb25zdCBjaGFyKilbZGF0YSBieXRl
c107CiAgfQogCiAtIChOU1VSTCAqKV93ZWJraXRfY2Fub25pY2FsaXplCiB7Ci0gICAgcmV0dXJu
IFVSTEJ5Q2Fub25pY2FsaXppbmdVUkwoc2VsZik7CisgICAgcmV0dXJuIFdlYkNvcmU6OlVSTEJ5
Q2Fub25pY2FsaXppbmdVUkwoc2VsZik7CiB9CiAKIC0gKE5TVVJMICopX3dlYmtpdF9jYW5vbmlj
YWxpemVfd2l0aF93dGYKQEAgLTE0MCw3ICsxMDgsNyBAQCAtIChOU1VSTCAqKV93ZWJraXRfY2Fu
b25pY2FsaXplX3dpdGhfd3RmCiAKIC0gKE5TVVJMICopX3dlYmtpdF9VUkxCeVJlbW92aW5nRnJh
Z21lbnQgCiB7Ci0gICAgcmV0dXJuIFVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNv
bXBvbmVudChzZWxmLCBrQ0ZVUkxDb21wb25lbnRGcmFnbWVudCk7CisgICAgcmV0dXJuIFdURjo6
VVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KHNlbGYsIGtDRlVSTENv
bXBvbmVudEZyYWdtZW50KTsKIH0KIAogLSAoTlNVUkwgKilfd2ViX1VSTEJ5UmVtb3ZpbmdVc2Vy
SW5mbwpAQCAtMTYzLDI3ICsxMzEsNiBAQCAtIChCT09MKV93ZWJraXRfaXNGaWxlVVJMCiAgICAg
cmV0dXJuIFtbc2VsZiBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSBfd2Via2l0X2lzRmlsZVVS
TF07CiB9CiAKLS0oTlNEYXRhICopX3dlYl9zY2hlbWVTZXBhcmF0b3JXaXRob3V0Q29sb24KLXsK
LSAgICBOU0RhdGEgKnJlc3VsdCA9IG5pbDsKLSAgICBDRlJhbmdlIHJhbmdlV2l0aFNlcGFyYXRv
cnM7Ci0gICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KChD
RlVSTFJlZilzZWxmLCBrQ0ZVUkxDb21wb25lbnRTY2hlbWUsICZyYW5nZVdpdGhTZXBhcmF0b3Jz
KTsKLSAgICBpZiAocmFuZ2VXaXRoU2VwYXJhdG9ycy5sb2NhdGlvbiAhPSBrQ0ZOb3RGb3VuZCkg
ewotICAgICAgICBOU1N0cmluZyAqYWJzb2x1dGVTdHJpbmcgPSBbc2VsZiBhYnNvbHV0ZVN0cmlu
Z107Ci0gICAgICAgIE5TUmFuZ2Ugc2VwYXJhdG9yc1JhbmdlID0gTlNNYWtlUmFuZ2UocmFuZ2Uu
bG9jYXRpb24gKyByYW5nZS5sZW5ndGggKyAxLCByYW5nZVdpdGhTZXBhcmF0b3JzLmxlbmd0aCAt
IHJhbmdlLmxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoc2VwYXJhdG9yc1JhbmdlLmxvY2F0aW9u
ICsgc2VwYXJhdG9yc1JhbmdlLmxlbmd0aCA8PSBbYWJzb2x1dGVTdHJpbmcgbGVuZ3RoXSkgewot
ICAgICAgICAgICAgTlNTdHJpbmcgKnNsYXNoZXMgPSBbYWJzb2x1dGVTdHJpbmcgc3Vic3RyaW5n
V2l0aFJhbmdlOnNlcGFyYXRvcnNSYW5nZV07Ci0gICAgICAgICAgICByZXN1bHQgPSBbc2xhc2hl
cyBkYXRhVXNpbmdFbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tKE5TRGF0YSAqKV93ZWJfZGF0YUZv
clVSTENvbXBvbmVudFR5cGU6KENGVVJMQ29tcG9uZW50VHlwZSljb21wb25lbnRUeXBlCi17Ci0g
ICAgcmV0dXJuIFdURjo6ZGF0YUZvclVSTENvbXBvbmVudFR5cGUoc2VsZiwgY29tcG9uZW50VHlw
ZSk7Ci19Ci0KIC0oTlNEYXRhICopX3dlYl9zY2hlbWVEYXRhCiB7CiAgICAgcmV0dXJuIFdURjo6
ZGF0YUZvclVSTENvbXBvbmVudFR5cGUoc2VsZiwga0NGVVJMQ29tcG9uZW50U2NoZW1lKTsKQEAg
LTE5MiwxMSArMTM5LDExIEBAIC0oTlNEYXRhICopX3dlYl9zY2hlbWVEYXRhCiAtKE5TRGF0YSAq
KV93ZWJfaG9zdERhdGEKIHsKICAgICBOU0RhdGEgKnJlc3VsdCA9IFdURjo6ZGF0YUZvclVSTENv
bXBvbmVudFR5cGUoc2VsZiwga0NGVVJMQ29tcG9uZW50SG9zdCk7Ci0gICAgTlNEYXRhICpzY2hl
bWUgPSBbc2VsZiBfd2ViX3NjaGVtZURhdGFdOwotICAgIC8vIFRha2Ugb2ZmIGxvY2FsaG9zdCBm
b3IgZmlsZQotICAgIGlmIChbc2NoZW1lIF93ZWJfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvQ1N0
cmluZzoiZmlsZSJdKSB7Ci0gICAgICAgIHJldHVybiAoW3Jlc3VsdCBfd2ViX2lzQ2FzZUluc2Vu
c2l0aXZlRXF1YWxUb0NTdHJpbmc6ImxvY2FsaG9zdCJdKSA/IG5pbCA6IHJlc3VsdDsKLSAgICB9
CisKKyAgICAvLyBUYWtlIG9mZiBsb2NhbGhvc3QgZm9yIGZpbGUuCisgICAgaWYgKFtyZXN1bHQg
X3dlYl9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9DU3RyaW5nOiJsb2NhbGhvc3QiXSAmJiBbW3Nl
bGYgX3dlYl9zY2hlbWVEYXRhXSBfd2ViX2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb0NTdHJpbmc6
ImZpbGUiXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTIyMyw3ICsxNzAsNyBAQCBAaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYk5TVVJMRXh0
cmFzKQogCiAtIChCT09MKV93ZWJfaXNVc2VyVmlzaWJsZVVSTAogewotICAgIHJldHVybiBpc1Vz
ZXJWaXNpYmxlVVJMKHNlbGYpOworICAgIHJldHVybiBXVEY6OmlzVXNlclZpc2libGVVUkwoc2Vs
Zik7CiB9CiAKIC0gKEJPT0wpX3dlYmtpdF9pc0phdmFTY3JpcHRVUkwKQEAgLTIzOCw3ICsxODUs
NyBAQCAtIChCT09MKV93ZWJraXRfaXNGaWxlVVJMCiAKIC0gKE5TU3RyaW5nICopX3dlYmtpdF9z
dHJpbmdCeVJlcGxhY2luZ1ZhbGlkUGVyY2VudEVzY2FwZXMKIHsKLSAgICByZXR1cm4gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhzZWxmKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmcoc2VsZikpOwogfQogCiAtIChOU1N0cmluZyAq
KV93ZWJraXRfc2NyaXB0SWZKYXZhU2NyaXB0VVJMCkBAIC0yNTEsMjQgKzE5OCwyNCBAQCAtIChO
U1N0cmluZyAqKV93ZWJraXRfc2NyaXB0SWZKYXZhU2NyaXB0VVJMCiAKIC0gKE5TU3RyaW5nICop
X3dlYl9kZWNvZGVIb3N0TmFtZQogewotICAgIE5TU3RyaW5nICpuYW1lID0gZGVjb2RlSG9zdE5h
bWUoc2VsZik7CisgICAgTlNTdHJpbmcgKm5hbWUgPSBXVEY6OmRlY29kZUhvc3ROYW1lKHNlbGYp
OwogICAgIHJldHVybiAhbmFtZSA/IHNlbGYgOiBuYW1lOwogfQogCiAtIChOU1N0cmluZyAqKV93
ZWJfZW5jb2RlSG9zdE5hbWUKIHsKLSAgICBOU1N0cmluZyAqbmFtZSA9IGVuY29kZUhvc3ROYW1l
KHNlbGYpOworICAgIE5TU3RyaW5nICpuYW1lID0gV1RGOjplbmNvZGVIb3N0TmFtZShzZWxmKTsK
ICAgICByZXR1cm4gIW5hbWUgPyBzZWxmIDogbmFtZTsKIH0KIAogLSAoTlNTdHJpbmcgKilfd2Vi
a2l0X2RlY29kZUhvc3ROYW1lCiB7Ci0gICAgcmV0dXJuIGRlY29kZUhvc3ROYW1lKHNlbGYpOwor
ICAgIHJldHVybiBXVEY6OmRlY29kZUhvc3ROYW1lKHNlbGYpOwogfQogCiAtIChOU1N0cmluZyAq
KV93ZWJraXRfZW5jb2RlSG9zdE5hbWUKIHsKLSAgICByZXR1cm4gZW5jb2RlSG9zdE5hbWUoc2Vs
Zik7CisgICAgcmV0dXJuIFdURjo6ZW5jb2RlSG9zdE5hbWUoc2VsZik7CiB9CiAKIC0oTlNSYW5n
ZSlfd2Via2l0X3JhbmdlT2ZVUkxTY2hlbWUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442741</attachid>
            <date>2021-10-28 14:10:24 -0700</date>
            <delta_ts>2021-10-28 14:55:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232220-20211028141023.patch</filename>
            <type>text/plain</type>
            <size>64265</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNmNzlmMzQ2YzE0YzBhM2VlNzdiNDk4
M2RkNzU0NGU4NzQwMjE5OTYuLmM4ZDM2NDgzMDlmY2E5ZmYwOGU5Yjg5YmUxYzA2ZDljMThmYzY5
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjEtMTAtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRl
ZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1VSTC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1
ZGVzLiBVc2UgZGVmYXVsdCBpbnN0ZWFkIG9mIHsgfQorICAgICAgICBmb3IgZW1wdHkgZGVzdHJ1
Y3Rvci4gQWRkZWQgZW1wdHlDRlVSTCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9jZi9DRlVS
TEV4dHJhcy5jcHA6CisgICAgICAgIChXVEY6OmJ5dGVzQXNDRkRhdGEpOiBBZGRlZC4gUmVwbGFj
ZXMgb3JpZ2luYWxVUkxEYXRhIGZyb20gTlNVUkxFeHRyYXMubW0sCisgICAgICAgIGJ1dCB3aXRo
IGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhbmQgbW9yZSBlcnJvciBjaGVja2luZy4gSGVyZSBp
dCdzIGFsc28KKyAgICAgICAgYWxvbmdzaWRlIHRoZSBvdGhlciBuZWFybHkgaWRlbnRpY2FsIGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1N0cmluZyk6IEFkZGVkLiBSZXBsYWNlcyBn
ZXRVUkxCeXRlcyBmb3IgY2FsbGVycyB0aGF0IGFyZQorICAgICAgICBnb2luZyB0byB0dXJuIHRo
ZSBieXRlcyBpbnRvIGEgV1RGOjpTdHJpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY2FsbGVy
cworICAgICAgICB3ZXJlIGNvbnZlcnRpbmcgZnJvbSBDRlVSTFJlZiB0byBXVEY6OkNTdHJpbmcg
YW5kIHRoZW4gdG8gV1RGOjpTdHJpbmcsIHNvCisgICAgICAgIHRoaXMgZWxpbWluYXRlcyB0aGUg
bWFsbG9jL2ZyZWUgcGFpciBmb3IgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1ZlY3Rv
cik6IEFkZGVkLiBSZXBsYWNlcyBnZXRVUkxCeXRlcyB1c2luZyBhIHJldHVybiB2YWx1ZQorICAg
ICAgICBpbnN0ZWFkIG9mIGFuIG91dCBhcmd1bWVudC4gQWRkcyB0aGUgb3B0aW1pemF0aW9uIG9m
IGZpbGxpbmcgdGhlIGJ1ZmZlciBpZgorICAgICAgICB0aGUgaW5saW5lIGNhcGFjaXR5IGlzIHN1
ZmZpY2llbnQsIHdoaWNoIHdhcyBpbiBvcmlnaW5hbFVSTERhdGEsIGJ1dCBub3QKKyAgICAgICAg
aGVyZSBpbiBnZXRVUkxCeXRlcyBiZWZvcmUuCisgICAgICAgIChXVEY6OmlzU2FtZU9yaWdpbik6
IFJlbmFtZWQgZnJvbSBpc0NGVVJMU2FtZU9yaWdpbiBhbmQgcmV3cm90ZSB0aGlzIHRvCisgICAg
ICAgIGhhdmUgZmV3ZXIgdHlwZSBjYXN0cyBhbmQgbW9yZSBwYXJhbGxlbCBzdHJ1Y3R1cmUgc28g
aXQncyBlYXNpZXIgdG8gcmVhZCwKKyAgICAgICAgd2hpbGUgYWRhcHRpbmcgaXQgdG8gdXNlIGJ5
dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiB3dGYvY2YvQ0ZVUkxFeHRyYXMuaDogUmVwbGFjZWQg
VVJMQ2hhckJ1ZmZlciwgZ2V0VVJMQnl0ZXMsIGFuZAorICAgICAgICBpc0NGVVJMU2FtZU9yaWdp
biB3aXRoIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHksIGJ5dGVzQXNDRkRhdGEsCisgICAg
ICAgIGJ5dGVzQXNTdHJpbmcsIGJ5dGVzQXNWZWN0b3IsIGFuZCBpc1NhbWVPcmlnaW4uIEdvdCBy
aWQgb2YgdW5uZWVkZWQKKyAgICAgICAgaW5jbHVkZXMuCisKKyAgICAgICAgKiB3dGYvY2YvVVJM
Q0YuY3BwOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IFVzZSBieXRlc0FzU3RyaW5nIHRvIHN0
cmVhbWxpbmUgaW1wbGVtZW50YXRpb24gYW5kCisgICAgICAgIHJlbW92ZSBhbGxvY2F0aW9uL2Rl
YWxsY2F0aW9uIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6VVJMOjplbXB0eUNGVVJMKTog
QWRkZWQuIFVzZWQgdG8gcmVmYWN0b3IgY3JlYXRlQ0ZVUkwgc28gd2UgY2FuCisgICAgICAgIHNo
YXJlIGl0IGFjcm9zcyBGb3VuZGF0aW9uIGFuZCBub24tRm91bmRhdGlvbiB2ZXJzaW9ucy4KKyAg
ICAgICAgKFdURjo6VVJMOjpjcmVhdGVDRlVSTCBjb25zdCk6IEFkZGVkIHRoZSBsb2dpYyB0aGF0
IHdhcyBpbiB0aGUgdmVyc2lvbgorICAgICAgICBpbiBVUkxDb2NvYS5tbSBzbyB3ZSBjYW4gc2hh
cmUgdGhpcyBzaW5nbGUgdmVyc2lvbiwgYW5kIHJlbW92ZWQgdGhlICNpZgorICAgICAgICBzdXJy
b3VuZGluZyB0aGlzLgorICAgICAgICAoV1RGOjpVUkw6OmZpbGVTeXN0ZW1QYXRoIGNvbnN0KTog
VXNlIGF1dG8uCisKKyAgICAgICAgKiB3dGYvY29jb2EvTlNVUkxFeHRyYXMuaDogQ2hhbmdlZCBV
UkxXaXRoVXNlclR5cGVkU3RyaW5nIHRvIGlnbm9yZQorICAgICAgICB0aGUgYmFzZVVSTCBhcmd1
bWVudC4gSXQncyBub3QgdXNlZCwgYnV0IHRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCBhbmQKKyAg
ICAgICAgY3VycmVudGx5IHVzZWQgaW4gU2FmYXJpIHNvdXJjZSBjb2RlLCB3aGljaCwgbGlrZSBh
bGwgY2FsbGVycyBwYXNzZXMKKyAgICAgICAgYSBuaWwgZm9yIGJhc2VVUkwuIHNvLCBmb3Igbm93
IGxlZnQgdGhlIGFyZ3VtZW50LiBSZW1vdmVkIHRoZSBiYXNlVVJMCisgICAgICAgIGFyZ3VtZW50
IGZyb20gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQuIFJlbW92ZWQgdW51c2VkIGZ1
bmN0aW9ucworICAgICAgICByYW5nZU9mVVJMU2NoZW1lIGFuZCBsb29rc0xpa2VBYnNvbHV0ZVVS
TC4KKworICAgICAgICAqIHd0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbTogUmVtb3ZlZCAidXNpbmcg
bmFtZXNwYWNlIFVSTEhlbHBlcnMiLgorICAgICAgICAoV1RGOjpyZWFkSUROQWxsb3dlZFNjcmlw
dExpc3RGaWxlKTogVXNlIFVSTEhlbHBlcnMgZXhwbGljaXRseS4KKyAgICAgICAgKFdURjo6ZGVj
b2RlSG9zdE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6ZW5jb2RlSG9zdE5hbWUpOiBEaXR0
by4KKyAgICAgICAgKFdURjo6VVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9u
ZW50KTogU2ltcGxpZmllZCBieSB1c2luZworICAgICAgICB0aGUgYnl0ZXNBc1ZlY3RvciBmdW5j
dGlvbi4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ1Jlc291cmNlU3BlY2lmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VVJMV2l0aERhdGEpOiBDYWxsIFVSTEJ5VHJ1bmNhdGluZ09u
ZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudAorICAgICAgICBkaXJlY3RseS4KKyAgICAgICAgKFdU
Rjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZyk6IFJlbW92ZWQgdGhlIHVubmVlZGVkIHN1cHBvcnQg
Zm9yIGEKKyAgICAgICAgYmFzZSBVUkwuIFVzZSBVUkxIZWxwZXJzIGV4cGxpY2l0bHkuCisgICAg
ICAgIChXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6Omhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmluZyk6IFVzZSBicmlkZ2VfY2Fz
dC4KKyAgICAgICAgKFdURjo6ZGF0YUZvclVSTENvbXBvbmVudFR5cGUpOiBSZWFycmFuZ2VkIHRv
IHNpbXBsaWZ5IGEgYml0LCByZW1vdmUgc3VwcG9ydAorICAgICAgICBmb3Igc3BlY2lhbCB2YWx1
ZSBmb3IgQ0ZVUkxDb21wb25lbnRUeXBlIHRoYXQgbWVhbnMgdGhlIGNvbXBsZXRlIFVSTCwgc2lu
Y2UKKyAgICAgICAgbm8gY2FsbGVycyB3ZXJlIHVzaW5nIHRoYXQsIGFuZCB1c2UgYnl0ZXNBc1Zl
Y3Rvci4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRD
aGFyYWN0ZXIpOiBVc2UgYnJpZGdlX2Nhc3QgYW5kCisgICAgICAgIGJ5dGVzQXNWZWN0b3IuCisg
ICAgICAgIChXVEY6Om9yaWdpbmFsVVJMRGF0YSk6IFVzZSBicmlkZ2VfY2FzdCBhbmQgYnl0ZXNB
c0NGRGF0YS4KKyAgICAgICAgKFdURjo6dXNlclZpc2libGVTdHJpbmcpOiBVc2UgVVJMSGVscGVy
cyBleHBsaWNpdGx5LgorICAgICAgICAoV1RGOjppc1VzZXJWaXNpYmxlVVJMKTogUmV3cm90ZSBm
b3Igc2ltcGxpY2l0eSBhbmQgY29kaW5nIHN0eWxlOyBzaW5jZQorICAgICAgICB0aGUgbG9jYWwg
Y2hhcmFjdGVycyBhcmUgYSBudWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmcsIHdlIGRvbid0IG5lZWQK
KyAgICAgICAgbGVuZ3RoIGNoZWNrcyBhcyBsb25nIGFzIHdlIHZhbGlkYXRlIGNoYXJhY3RlcnMg
Zmlyc3QsIHNpbmNlIGEgJ1wwJworICAgICAgICBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgYW5kIHdp
bGwgbm90IGJlIHZhbGlkLgorICAgICAgICAoV1RGOjpyYW5nZU9mVVJMU2NoZW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6bG9va3NMaWtlQWJzb2x1dGVVUkwpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL2NvY29hL1VSTENvY29hLm1tOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IENo
YW5nZWQgdG8ganVzdCBjYWxsIHRoZSBDRlVSTFJlZiBjb25zdHJ1Y3RvciBzbyB3ZQorICAgICAg
ICBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGluZ3MgdHdpY2UuCisgICAgICAgIChXVEY6OlVSTDo6
ZW1wdHlDRlVSTCk6IEFkZGVkLiBUaGlzIGlzIHRoZSBvbmUgcGFydCBvZiB0aGUgY3JlYXRlQ0ZV
UkwKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBkZXBlbmRzIG9uIE9iamVjdGl2ZS1DLgorICAgICAg
ICAoV1RGOjpVUkw6OmNyZWF0ZUNGVVJMIGNvbnN0KTogTWVyZ2VkIGludG8gdGhlIGZ1bmN0aW9u
IGluIFVSTENGLmNwcC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJy
aWRnZV9jYXN0IGluc3RlYWQgb2YgdGhlIHRyaWNraWVyCisgICAgICAgIGlkaW9tIHdpdGggZXhw
bGljaXQgY2FsbHMgdG8gbGVha1JlZiBhbmQgX19icmlkZ2VfdHJhbnNmZXIuCisKKyAgICAgICAg
KiB3dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW06OnNl
dE1ldGFkYXRhVVJMKTogVXBkYXRlZCBzaW5jZSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nCisgICAg
ICAgIG5vIGxvbmdlciByZXF1aXJlcyBhIGJhc2VVUkwgb2YgbmlsIHRvIGJlIHBhc3NlZC4gQWxz
byByZW1vdmVkIGV4cGxpY2l0CisgICAgICAgIFdURiBuYW1lc3BhY2Ugc2luY2UgdGhpcyBjb2Rl
IGl0c2VsZiBpcyBpbiB0aGUgV1RGIG5hbWVzcGFjZS4KKworICAgICAgICAqIHd0Zi90ZXh0L2Nv
Y29hL1N0cmluZ0NvY29hLm1tOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6IFVzZSBi
cmlkZ2VfY2FzdC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJyaWRn
ZV9jYXN0LgorCiAyMDIxLTEwLTI4ICBOaWtvbGFvcyBNb3VjaHRhcmlzICA8bm1vdWNodGFyaXNA
YXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBsYXp5IGltYWdlIGxvYWRpbmcgYnkgZGVmYXVs
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBjZTFlNDE0ZGVjZjQwYjBhYjk0MjBkNDQ3YjJhMTdhNzkwMjE3YjJiLi5h
OGU3OGUyOTgxZDY5YWY2ZGM3YWFjNmJlNzQwNTNlMWIxMmVjODdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ5IEBACisyMDIxLTEwLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbQ0ZdIFJlZHVjZSBkdXBsaWNhdGlvbiBhbmQgdW5uZWVkZWQgYnVmZmVyIGFsbG9j
YXRpb25zIGFuZCBjb3B5aW5nIGluIFVSTCBjb2RlLCBhbHNvIHJlbW92ZSB1bnVzZWQgbWV0aG9k
cyBhbmQgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzIyMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9BUEkvYy9jZi9XS1VSTENGLm1tOgorICAgICAgICAoV0tVUkxDcmVh
dGVXaXRoQ0ZVUkwpOiBVc2UgYnl0ZXNBc1N0cmluZywgc2F2aW5nIGNyZWF0aW9uIGFuZCBkZXN0
cnVjdGlvbgorICAgICAgICBvZiBhIENTdHJpbmcgZWFjaCB0aW1lIHRoaXMgaXMgY2FsbGVkLgor
CisgICAgICAgICogU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW06CisgICAgICAg
ICgtW1dLU2VjdXJlQ29kaW5nVVJMV3JhcHBlciBlbmNvZGVXaXRoQ29kZXI6XSk6IFVzZSBieXRl
c0FzVmVjdG9yLgorCisgICAgICAgICogU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMuaDogUmVt
b3ZlZCB1bnVzZWQgbWV0aG9kcworICAgICAgICArW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmlu
ZzpyZWxhdGl2ZVRvVVJMOl0gYW5kCisgICAgICAgIC1bTlNVUkwgX3dlYl9vcmlnaW5hbERhdGFB
c1dURlN0cmluZ10uCisKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5tbToK
KyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnJlbGF0aXZlVG9VUkw6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmdd
KTogRGVsZXRlZC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbToK
KyAgICAgICAgKC1bV0tOU1VSTFJlcXVlc3QgVVJMXSk6IFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0
byArW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpdCisgICAgICAgIGJlY2F1c2UgdGhpcyBj
b2RlIGlzIGNvbnZlcnRpbmcgYSBXVEY6OlVSTCB0byBhbiBOU1VSTCwgd2hpY2ggY2FuIHVzZSB0
aGUgY29udmVyc2lvbgorICAgICAgICBvcGVyYXRvciBpbiB0aGUgV1RGOjpVUkwgY2xhc3MuCisK
KyAgICAgICAgKiBTaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHA6CisgICAgICAgIChJUEM6
OkFyZ3VtZW50Q29kZXI8Q0ZVUkxSZWY+OjplbmNvZGUpOiBVc2UgYnl0ZXNBc1ZlY3Rvci4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
Lm1tOgorICAgICAgICAoLVtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgbG9hZEZpbGVVUkw6
cmVzdHJpY3RUb0ZpbGVzV2l0aGluOnVzZXJEYXRhOl0pOgorICAgICAgICBVc2UgYnl0ZXNBc1N0
cmluZyBhbmQgYnJpZGdlX2Nhc3QuCisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlciBsb2FkSFRNTFN0cmluZzpiYXNlVVJMOnVzZXJEYXRhOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGxvYWREYXRhOk1JTUVUeXBlOnRleHRFbmNv
ZGluZ05hbWU6YmFzZVVSTDp1c2VyRGF0YTpdKTogRGl0dG8uCisgICAgICAgIChzZXRVcFBhZ2VQ
b2xpY3lDbGllbnQpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gK1tOU1VSTCBfd2ViX1VSTFdp
dGhXVEZTdHJpbmc6XQorICAgICAgICBiZWNhdXNlIHRoaXMgY29kZSBpcyBjb252ZXJ0aW5nIGEg
V1RGOjpVUkwgdG8gYW4gTlNVUkwsIHdoaWNoIGNhbiB1c2UgdGhlIGNvbnZlcnNpb24KKyAgICAg
ICAgb3BlcmF0b3IgaW4gdGhlIFdURjo6VVJMIGNsYXNzLgorCisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL0xlZ2FjeURvd25sb2FkQ2xpZW50Lm1tOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lE
b3dubG9hZENsaWVudDo6d2lsbFNlbmRSZXF1ZXN0KTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRv
CisgICAgICAgICtbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl0gYmVjYXVzZSB0aGlzIGNv
ZGUgaXMgY29udmVydGluZyBhIFdURjo6VVJMIHRvIGFuIE5TVVJMLAorICAgICAgICB3aGljaCBj
YW4gdXNlIHRoZSBjb252ZXJzaW9uIG9wZXJhdG9yIGluIHRoZSBXVEY6OlVSTCBjbGFzcy4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQ
bHVnSW5GcmFtZS5tbToKKyAgICAgICAgKC1bV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUgVVJMXSk6
IERpdHRvLgorCiAyMDIxLTEwLTI4ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AZ25v
bWUub3JnPgogCiAgICAgICAgIFtXUEVdW0dUS10gQWRkIHdhcm5pbmcgY29tbWVudHMgcmVnYXJk
aW5nIHVzZSBvZiBjaGlsZCBzZXR1cCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCAwNWRlMzc0ZDZmOTA3NjUxOWRlNzg1OGExMTlmZTc4MmFlMTRmMmY2Li44YTFjMzY2
NjYzOGQzNDMyOWRmN2ZjZDk1NzQyYTZlYjIwOWRhYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjEtMTAtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRl
ZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJOU1VSTEV4dHJhcy5oOiBUd2Vha2VkIGNv
bW1lbnRzIGEgYml0LiBObyBuZWVkIHRvIHNheSBtZXRob2RzIGFyZSAibmV3Iiwgc2luY2UKKyAg
ICAgICAgdGhhdCB3b24ndCBiZSB0cnVlIGluIHRoZSBmdXR1cmUuIFJlbW92ZWQgdW51c2VkIG1l
dGhvZHMKKyAgICAgICAgK1tOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6cmVsYXRp
dmVUb1VSTDpdLAorICAgICAgICArW05TVVJMIF93ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZzpyZWxhdGl2ZVRvVVJMOl0sCisgICAgICAgICtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YTpdLCAr
W05TVVJMIF93ZWJfVVJMV2l0aERhdGE6cmVsYXR2ZVRvVVJMOl0uCisgICAgICAgIFdhbnRlZCB0
byByZW1vdmUgZXZlbiBtb3JlIG5lYXJseSB1bnVzZWQgbWV0aG9kczogbWFueSB3ZXJlIHVzZWQg
b25seQorICAgICAgICBpbnNpZGUgdGhlIFdlYktpdCBwcm9qZWN0LCBpbiBsZWdhY3kgcGx1Zy1p
biBjb2RlLCBhbmQgc29tZSBzZWVtZWQgdW51c2VkLAorICAgICAgICBidXQgaXQgd2Fzbid0IGVh
c3kgZm9yIG1lIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuCisKKyAgICAgICAgKiBNaXNjL1dlYk5T
VVJMRXh0cmFzLm1tOiBSZW1vdmVkICJ1c2luZyBuYW1lc3BhY2UgV2ViQ29yZSIgYW5kCisgICAg
ICAgICJ1c2luZyBuYW1lc3BhY2UgV1RGIi4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxXaXRo
VXNlclR5cGVkU3RyaW5nOnJlbGF0aXZlVG9VUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgrW05T
VVJMIF93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzpdKTogVXNlIFdURiBwcmVmaXggZXhwbGlj
aXRseS4KKyAgICAgICAgKCtbTlNVUkwgX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOnJl
bGF0aXZlVG9VUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgrW05TVVJMIF93ZWJraXRfVVJMV2l0
aFVzZXJUeXBlZFN0cmluZzpdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAg
KCtbTlNVUkwgX3dlYl9VUkxXaXRoRGF0YUFzU3RyaW5nOl0pOiBSZW1vdmVkIHNwZWNpYWwgY2Fz
ZSBmb3IgbmlsIHNpbmNlIHRoZSBjb2RlCisgICAgICAgIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5n
IHdpdGggbmlsIHdpdGhvdXQgYW4gZXhwbGljaXQgY2hlY2suCisgICAgICAgICgrW05TVVJMIF93
ZWJfVVJMV2l0aERhdGFBc1N0cmluZzpyZWxhdGl2ZVRvVVJMXSk6IERpdHRvLiBBbHNvIGZvcm1h
dHRlZCB0aGUgY29kZQorICAgICAgICBhcyBhIG9uZS1saW5lci4KKyAgICAgICAgKCtbTlNVUkwg
X3dlYl9VUkxXaXRoRGF0YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKCtbTlNVUkwgX3dlYl9VUkxX
aXRoRGF0YTpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtOU1VSTCBfd2Vi
X29yaWdpbmFsRGF0YV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtO
U1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtOU1VS
TCBfd2ViX2lzRW1wdHldKTogVXNlIGJyaWRnZV9jYXN0IGFuZCBtYWtlIGNvZGUgc3R5bGUgY2hl
Y2tlciBoYXBweSBieSB1c2luZworICAgICAgICAiISIgaW5zdGVhZCBvZiAiPT0gMCIuCisgICAg
ICAgICgtW05TVVJMIF93ZWJfVVJMQ1N0cmluZ10pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5
LgorICAgICAgICAoLVtOU1VSTCBfd2Via2l0X2Nhbm9uaWNhbGl6ZV0pOiBVc2UgV2ViQ29yZSBw
cmVmaXggZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNVUkwgX3dlYmtpdF9VUkxCeVJlbW92aW5n
RnJhZ21lbnRdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNVUkwg
X3dlYl9zY2hlbWVTZXBhcmF0b3JXaXRob3V0Q29sb25dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
TlNVUkwgX3dlYl9kYXRhRm9yVVJMQ29tcG9uZW50VHlwZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bTlNVUkwgX3dlYl9ob3N0RGF0YV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LiBSZWFy
cmFuZ2VkIGZvciBjbGFyaXR5IGFuZAorICAgICAgICBzbGlnaHRseSBpbXByb3ZlZCBlZmZpY2ll
bmN5IGFzIHdlbGwuCisgICAgICAgICgtW05TU3RyaW5nIF93ZWJfaXNVc2VyVmlzaWJsZVVSTF0p
OiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtOU1N0cmluZyBfd2Via2l0
X3N0cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNjYXBlc10pOiBVc2UgV2ViQ29yZSBwcmVm
aXgKKyAgICAgICAgZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYl9kZWNvZGVI
b3N0TmFtZV0pOiBVc2UgV1RGIHByZWZpeCBleHBsaWNpdGx5LgorICAgICAgICAoLVtOU1N0cmlu
ZyBfd2ViX2VuY29kZUhvc3ROYW1lXSk6IERpdHRvLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Vi
a2l0X2RlY29kZUhvc3ROYW1lXSk6IERpdHRvLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Via2l0
X2VuY29kZUhvc3ROYW1lXSk6IERpdHRvLgorCiAyMDIxLTEwLTI4ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbIE1hYyB3azEgXSAyIG1lZGlhLWNhcGFiaWxp
dGllcy93ZWJydGMgdGVzdHMgYXJlIGZsYWt5IGZhaWx1cmVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9VUkwuaCBiL1NvdXJjZS9XVEYvd3RmL1VSTC5oCmluZGV4IGU1ODY5MDI2ZWNhMjEw
MmIwYjc5M2QyZTA1MzI2NDNlYTRjZjI5MzcuLmNlYTRiN2E3NTQyYmQ2MWRmN2JkNTg1NzcwMDgz
MGM4MTkxZjlhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VSTC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1VSTC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgVVNFKEdMSUIpICYmIEhBVkUoR1VSSSkK
QEAgLTUwLDcgKzQ4LDcgQEAgY2xhc3MgVVJMVGV4dEVuY29kaW5nIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVGb3JVUkxQYXJzaW5nKFN0cmluZ1ZpZXcpIGNv
bnN0ID0gMDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5VUkxUZXh0RW5jb2RpbmcoKSB7IH0K
KyAgICB2aXJ0dWFsIH5VUkxUZXh0RW5jb2RpbmcoKSA9IGRlZmF1bHQ7CiB9OwogCiBjbGFzcyBV
UkwgewpAQCAtODIsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKLSAgICAvLyBTaW5jZSB3ZSBvdmVybG9hZCBv
cGVyYXRvciBOU1VSTCogd2UgaGF2ZSB0aGlzIHRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IHVzaW5n
IHRoYXQgb3BlcmF0b3IKKyAgICAvLyBTaW5jZSB3ZSBvdmVybG9hZCBvcGVyYXRvciBOU1VSTCAq
IHdlIGhhdmUgdGhpcyB0byBwcmV2ZW50IGFjY2lkZW50YWxseSB1c2luZyB0aGF0IG9wZXJhdG9y
CiAgICAgLy8gd2hlbiBwbGFjaW5nIGEgVVJMIGluIGFuIGlmIHN0YXRtZW50LgogICAgIG9wZXJh
dG9yIGJvb2woKSBjb25zdCA9IGRlbGV0ZTsKIApAQCAtMTk1LDcgKzE5Myw4IEBAIHB1YmxpYzoK
ICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBwcmludCgpIGNvbnN0OwogI2VuZGlmCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJO
IGJvb2wgZGVjb2RlKERlY29kZXImLCBVUkwmKTsKQEAgLTIxNCw2ICsyMTMsMTAgQEAgcHJpdmF0
ZToKIAogICAgIGZyaWVuZCBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwoY29uc3QgVVJMJiwgY29uc3QgVVJMJik7CiAKKyNpZiBVU0UoQ0YpCisgICAg
c3RhdGljIFJldGFpblB0cjxDRlVSTFJlZj4gZW1wdHlDRlVSTCgpOworI2VuZGlmCisKICAgICBT
dHJpbmcgbV9zdHJpbmc7CiAKICAgICB1bnNpZ25lZCBtX2lzVmFsaWQgOiAxOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuY3BwIGIvU291cmNlL1dURi93dGYvY2Yv
Q0ZVUkxFeHRyYXMuY3BwCmluZGV4IGM4YmUwNjc0YTRlYWJjNTkwOTBiNzMzZTdjNTIxYjM4MmY0
OTA2YjkuLmVmYTljZjgyMjQ3YWU2NmFmZmYxOTk2MWE5ZWU1ZDhmNGQ0MmRhNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9jZi9DRlVSTEV4dHJhcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDMgKzI3LDYzIEBACiAjaW5jbHVkZSA8d3RmL2NmL0NG
VVJMRXh0cmFzLmg+CiAKICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBnZXRVUkxCeXRlcyhDRlVSTFJl
ZiB1cmwsIFVSTENoYXJCdWZmZXImIHJlc3VsdCkKK1JldGFpblB0cjxDRkRhdGFSZWY+IGJ5dGVz
QXNDRkRhdGEoQ0ZVUkxSZWYgdXJsKQogewotICAgIENGSW5kZXggYnl0ZXNMZW5ndGggPSBDRlVS
TEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0gICAgcmVzdWx0LnJlc2l6ZShieXRlc0xlbmd0
aCk7Ci0gICAgQ0ZJbmRleCBmaW5hbExlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCByZWludGVy
cHJldF9jYXN0PFVJbnQ4Kj4ocmVzdWx0LmRhdGEoKSksIGJ5dGVzTGVuZ3RoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGZpbmFsTGVuZ3RoLCBmaW5hbExlbmd0aCA9PSBieXRlc0xlbmd0aCk7CisgICAg
YXV0byBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0ZXModXJsLCBudWxscHRyLCAwKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCAhPSAtMSk7CisgICAgYXV0byBidWZmZXIgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obWFsbG9jKGJ5dGVzTGVuZ3RoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoYnVmZmVyKTsKKyAgICBDRlVSTEdldEJ5dGVzKHVybCwgYnVmZmVyLCBieXRlc0xlbmd0aCk7
CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KG51bGxwdHIs
IGJ1ZmZlciwgYnl0ZXNMZW5ndGgsIGtDRkFsbG9jYXRvck1hbGxvYykpOwogfQogCi12b2lkIGdl
dFVSTEJ5dGVzKENGVVJMUmVmIHVybCwgQ1N0cmluZyYgcmVzdWx0KQorU3RyaW5nIGJ5dGVzQXNT
dHJpbmcoQ0ZVUkxSZWYgdXJsKQogewotICAgIENGSW5kZXggYnl0ZXNMZW5ndGggPSBDRlVSTEdl
dEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0gICAgY2hhciogYnl0ZXM7Ci0gICAgcmVzdWx0ID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChieXRlc0xlbmd0aCwgYnl0ZXMpOwotICAgIENGSW5k
ZXggZmluYWxMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgcmVpbnRlcnByZXRfY2FzdDxVSW50
OCo+KGJ5dGVzKSwgYnl0ZXNMZW5ndGgpOwotICAgIEFTU0VSVF9VTlVTRUQoZmluYWxMZW5ndGgs
IGZpbmFsTGVuZ3RoID09IGJ5dGVzTGVuZ3RoKTsKKyAgICBhdXRvIGJ5dGVzTGVuZ3RoID0gQ0ZV
UkxHZXRCeXRlcyh1cmwsIG51bGxwdHIsIDApOworICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVu
Z3RoICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCA8PSBzdGF0aWNfY2Fz
dDxDRkluZGV4PihTdHJpbmc6Ok1heExlbmd0aCkpOworICAgIExDaGFyKiBidWZmZXI7CisgICAg
YXV0byByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnl0ZXNMZW5ndGgsIGJ1
ZmZlcik7CisgICAgQ0ZVUkxHZXRCeXRlcyh1cmwsIGJ1ZmZlciwgYnl0ZXNMZW5ndGgpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgaXNDRlVSTFNhbWVPcmlnaW4oQ0ZVUkxSZWYgY2ZV
UkwsIGNvbnN0IFVSTCYgdXJsKQorVmVjdG9yPHVpbnQ4X3QsIFVSTEJ5dGVzVmVjdG9ySW5saW5l
Q2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3IoQ0ZVUkxSZWYgdXJsKQogewotICAgIEFTU0VSVCh1cmwu
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKTsKKyAgICBWZWN0b3I8dWludDhfdCwgVVJMQnl0ZXNW
ZWN0b3JJbmxpbmVDYXBhY2l0eT4gcmVzdWx0KFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHkp
OworICAgIGF1dG8gYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgcmVzdWx0LmRhdGEo
KSwgVVJMQnl0ZXNWZWN0b3JJbmxpbmVDYXBhY2l0eSk7CisgICAgaWYgKGJ5dGVzTGVuZ3RoICE9
IC0xKQorICAgICAgICByZXN1bHQuc2hyaW5rKGJ5dGVzTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVuZ3RoICE9IC0xKTsKKyAgICAgICAgcmVzdWx0Lmdy
b3coYnl0ZXNMZW5ndGgpOworICAgICAgICBDRlVSTEdldEJ5dGVzKHVybCwgcmVzdWx0LmRhdGEo
KSwgYnl0ZXNMZW5ndGgpOworICAgIH0KIAotICAgIGlmICh1cmwuaGFzQ3JlZGVudGlhbHMoKSkK
LSAgICAgICAgcmV0dXJuIHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCh1cmwsIFVSTCB7IGNm
VVJMIH0pOworICAgIC8vIFRoaXMgbWF5IGxvb2sgbGlrZSBpdCBjb3BpZXMgdGhlIGJ5dGVzIGlu
IHRoZSB2ZWN0b3IsIGJ1dCBkdWUgdG8gdGhlIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRpb24gaXQg
ZG9lcyBub3QuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBpc1NhbWVPcmlnaW4oQ0ZV
UkxSZWYgYSwgY29uc3QgVVJMJiBiKQoreworICAgIEFTU0VSVChiLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSk7CisKKyAgICBpZiAoYi5oYXNDcmVkZW50aWFscygpKQorICAgICAgICByZXR1cm4g
cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGEsIGIpOwogCi0gICAgVVJMQ2hhckJ1ZmZlciBi
eXRlczsKLSAgICBnZXRVUkxCeXRlcyhjZlVSTCwgYnl0ZXMpOwotICAgIFN0cmluZ1ZpZXcgY2ZV
UkxTdHJpbmcgeyByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnl0ZXMuZGF0YSgpKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ5dGVzLnNpemUoKSkgfTsKKyAgICBhdXRvIGFCeXRlcyA9
IGJ5dGVzQXNWZWN0b3IoYSk7CisgICAgU3RyaW5nVmlldyBhU3RyaW5nIHsgYUJ5dGVzLmRhdGEo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFCeXRlcy5zaXplKCkpIH07CisgICAgU3RyaW5nVmll
dyBiU3RyaW5nIHsgYi5zdHJpbmcoKSB9OwogCi0gICAgaWYgKCF1cmwuaGFzUGF0aCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nVmlldyB7IHVybC5zdHJpbmcoKSB9ID09IGNmVVJMU3RyaW5nOwor
ICAgIGlmICghYi5oYXNQYXRoKCkpCisgICAgICAgIHJldHVybiBhU3RyaW5nID09IGJTdHJpbmc7
CiAKLSAgICBhdXRvIHVybFdpdGhvdXRQYXRoID0gU3RyaW5nVmlldyB7IHVybC5zdHJpbmcoKSB9
LnN1YnN0cmluZygwLCB1cmwucGF0aFN0YXJ0KCkgKyAxKTsKLSAgICByZXR1cm4gY2ZVUkxTdHJp
bmcuc3RhcnRzV2l0aCh1cmxXaXRob3V0UGF0aCk7CisgICAgdW5zaWduZWQgYWZ0ZXJQYXRoU2Vw
YXJhdG9yID0gYi5wYXRoU3RhcnQoKSArIDE7CisgICAgcmV0dXJuIGFTdHJpbmcubGVmdChhZnRl
clBhdGhTZXBhcmF0b3IpID09IGJTdHJpbmcubGVmdChhZnRlclBhdGhTZXBhcmF0b3IpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5oIGIvU291cmNl
L1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuaAppbmRleCBmMWI0NzkzYTFmZWFlZjhjYTE5MDMyZDBj
YTUxODFkYjM0NzQ1OTA3Li44NDQ3N2I1ZTM2YTE4NzNiOTExNDFiNDJkZjRjZTc1MmQ0MjNlYzli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcgKzI2LDIyIEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEq
IENGRGF0YVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkwqIENGVVJMUmVmOwogCiBu
YW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgVVJMOwotdHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEyPiBV
UkxDaGFyQnVmZmVyOworY29uc3RleHByIHNpemVfdCBVUkxCeXRlc1ZlY3RvcklubGluZUNhcGFj
aXR5ID0gMjA0ODsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2V0VVJMQnl0ZXMoQ0ZVUkxS
ZWYsIFVSTENoYXJCdWZmZXImKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGdldFVSTEJ5dGVz
KENGVVJMUmVmLCBDU3RyaW5nJik7CitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBieXRlc0FzQ0ZEYXRh
KENGVVJMUmVmKTsKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYnl0ZXNBc1N0cmluZyhDRlVS
TFJlZik7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVjdG9yPHVpbnQ4X3QsIFVSTEJ5dGVzVmVjdG9y
SW5saW5lQ2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3IoQ0ZVUkxSZWYpOwogCi1ib29sIGlzQ0ZVUkxT
YW1lT3JpZ2luKENGVVJMUmVmLCBjb25zdCBVUkwmKTsKK2Jvb2wgaXNTYW1lT3JpZ2luKENGVVJM
UmVmLCBjb25zdCBVUkwmKTsKIAogfQorCit1c2luZyBXVEY6OmJ5dGVzQXNDRkRhdGE7Cit1c2lu
ZyBXVEY6OmJ5dGVzQXNTdHJpbmc7Cit1c2luZyBXVEY6OmJ5dGVzQXNWZWN0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9VUkxDRi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9VUkxD
Ri5jcHAKaW5kZXggZWQ1MTVjMDgwODk5MDBmZjhjNTJkZWI3OGUwZTczZGVlNDg3ZmEzZi4uNDlj
YjcwN2YyYWIwM2M0MmEzYTBiMzc4OTU4MzBhZGFlZmU3N2JiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvY2YvVVJMQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL1VSTENGLmNwcApA
QCAtMzUsMzkgKzM1LDQ3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBVUkw6OlVSTChDRlVSTFJlZiB1
cmwpCiB7Ci0gICAgaWYgKCF1cmwpIHsKKyAgICAvLyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGln
bm9yZSB0aGUgYmFzZSBVUkwgaW4gdGhlIENGVVJMIGhlcmU/CisgICAgaWYgKCF1cmwpCiAgICAg
ICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIGJhc2UgVVJMIGhlcmU/Ci0gICAgQ1N0cmluZyB1cmxC
eXRlczsKLSAgICBnZXRVUkxCeXRlcyh1cmwsIHVybEJ5dGVzKTsKLSAgICBVUkxQYXJzZXIgcGFy
c2VyKHVybEJ5dGVzLmRhdGEoKSk7Ci0gICAgKnRoaXMgPSBwYXJzZXIucmVzdWx0KCk7CisgICAg
ZWxzZQorICAgICAgICAqdGhpcyA9IFVSTFBhcnNlcihieXRlc0FzU3RyaW5nKHVybCkpLnJlc3Vs
dCgpOwogfQogCiAjaWYgIVVTRShGT1VOREFUSU9OKQorCitSZXRhaW5QdHI8Q0ZVUkxSZWY+IFVS
TDo6ZW1wdHlDRlVSTCgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZgorCiBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRlQ0ZVUkwoKSBjb25zdAogewotICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gY2ZVUkw7CisgICAgaWYgKGlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUNGVVJM
KCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHJlc3VsdDsKICAgICBpZiAoTElLRUxZKG1f
c3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5nLmlzQWxsQVNDSUkoKSkpCi0gICAgICAgIGNmVVJM
ID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1fc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VU
RjgsIG51bGxwdHIsIHRydWUpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0
ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1f
c3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQ1N0cmluZyB1dGY4ID0gbV9zdHJpbmcudXRmOCgpOwotICAg
ICAgICBjZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxs
cHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29k
aW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOworICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJM
Q3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVsbHB0ciwgdXRmOC5kYXRhQXNVSW50OFB0cigp
LCB1dGY4Lmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsK
ICAgICB9CiAKLSAgICBpZiAocHJvdG9jb2xJc0luSFRUUEZhbWlseSgpICYmICFpc0NGVVJMU2Ft
ZU9yaWdpbihjZlVSTC5nZXQoKSwgKnRoaXMpKQorICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkgJiYgIWlzU2FtZU9yaWdpbihyZXN1bHQuZ2V0KCksICp0aGlzKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY2ZVUkw7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
LSNlbmRpZgogCiBTdHJpbmcgVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0CiB7Ci0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGNyZWF0ZUNGVVJMKCk7CisgICAgYXV0byBjZlVSTCA9
IGNyZWF0ZUNGVVJMKCk7CiAgICAgaWYgKCFjZlVSTCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oIGIvU291
cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMuaAppbmRleCBiYjZkY2MyMzI1MWI0ODhhYTE3
NmNkNjMyNTAwOWU1MzI2MWY5NTIyLi40MTU1ZTAyNmEyYmFmNjZjZTE5OThlZWI0MzNjZjY3MDU3
ZjY3Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDEyLCAyMDE0IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogV1RGX0VYUE9SVF9QUklWQVRFIE5T
U3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqKTsKLVdURl9FWFBPUlRfUFJJVkFURSBO
U1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqLCBOU1VSTCAqYmFzZVVSTCk7
IC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVhbnMgZXJyb3IuCitXVEZfRVhQT1JUX1BSSVZBVEUg
TlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKiwgTlNVUkwgKmlnbm9yZWQg
PSBuaWwpOyAvLyBSZXR1cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yLgogV1RGX0VYUE9SVF9Q
UklWQVRFIE5TVVJMICpVUkxCeVJlbW92aW5nVXNlckluZm8oTlNVUkwgKik7CiBXVEZfRVhQT1JU
X1BSSVZBVEUgTlNTdHJpbmcgKmRlY29kZUhvc3ROYW1lKE5TU3RyaW5nICopOyAvLyBSZXR1cm4g
dmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yLgogV1RGX0VYUE9SVF9QUklWQVRFIE5TU3RyaW5nICpl
bmNvZGVIb3N0TmFtZShOU1N0cmluZyAqKTsgLy8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFucyBl
cnJvci4KQEAgLTQxLDEwICs0MSw4IEBAIFdURl9FWFBPUlRfUFJJVkFURSBOU1VSTCAqVVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KE5TVVJMICosIENGCiBXVEZfRVhQ
T1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqLCBOU1VSTCAqYmFzZVVSTCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpvcmlnaW5hbFVSTERhdGEoTlNVUkwgKik7CiBX
VEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShOU1VSTCAq
LCBDRlVSTENvbXBvbmVudFR5cGUpOwotV1RGX0VYUE9SVF9QUklWQVRFIE5TVVJMICpVUkxXaXRo
VXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0cmluZyAqLCBOU1VSTCAqYmFzZVVSTCk7CitX
VEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVk
KE5TU3RyaW5nICopOwogCi1OU1JhbmdlIHJhbmdlT2ZVUkxTY2hlbWUoTlNTdHJpbmcgKik7CiBX
VEZfRVhQT1JUX1BSSVZBVEUgQk9PTCBpc1VzZXJWaXNpYmxlVVJMKE5TU3RyaW5nICopOwotV1RG
X0VYUE9SVF9QUklWQVRFIEJPT0wgbG9va3NMaWtlQWJzb2x1dGVVUkwoTlNTdHJpbmcgKik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvTlNV
UkxFeHRyYXMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbQppbmRleCAw
ZDk2ZTlkNDgwOWEzODlhYWVhNDE3ZGVjMjRkZWE5YWIyZjg3ODAzLi4yMDg3NDQwYjBmNmZkYzRk
NWIwM2MyOTJjN2UzNjI4ZWYyMzhkYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2Nv
YS9OU1VSTEV4dHJhcy5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5t
bQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiwxNyArMzIsMTQgQEAKICNpbXBvcnQgPG11dGV4PgogI2ltcG9ydCA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYv
VVJMLmg+CiAjaW1wb3J0IDx3dGYvVVJMSGVscGVycy5oPgotI2ltcG9ydCA8d3RmL1VSTFBhcnNl
ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXVzaW5nIG5hbWVzcGFjZSBVUkxIZWxwZXJzOwotCi1jb25zdGV4cHIgdW5zaWduZWQg
dXJsQnl0ZXNCdWZmZXJMZW5ndGggPSAyMDQ4OwotCiBzdGF0aWMgQk9PTCByZWFkSUROQWxsb3dl
ZFNjcmlwdExpc3RGaWxlKE5TU3RyaW5nICpmaWxlbmFtZSkKIHsKICAgICBpZiAoIWZpbGVuYW1l
KQpAQCAtNjcsNyArNjQsNyBAQCBzdGF0aWMgQk9PTCByZWFkSUROQWxsb3dlZFNjcmlwdExpc3RG
aWxlKE5TU3RyaW5nICpmaWxlbmFtZSkKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQgPT0g
MSkgewogICAgICAgICAgICAgLy8gR290IGEgd29yZCwgbWFwIHRvIHNjcmlwdCBjb2RlIGFuZCBw
dXQgaXQgaW50byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBhZGRTY3JpcHRUb0lETkFsbG93ZWRT
Y3JpcHRMaXN0KHdvcmQpOworICAgICAgICAgICAgVVJMSGVscGVyczo6YWRkU2NyaXB0VG9JRE5B
bGxvd2VkU2NyaXB0TGlzdCh3b3JkKTsKICAgICAgICAgfQogICAgIH0KICAgICBmY2xvc2UoZmls
ZSk7CkBAIC0xMDAsNyArOTcsNyBAQCBzdGF0aWMgU3RyaW5nIGRlY29kZVBlcmNlbnRFc2NhcGVz
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogCiBOU1N0cmluZyAqZGVjb2RlSG9zdE5hbWUoTlNTdHJp
bmcgKnN0cmluZykKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaG9zdCA9IG1hcEhvc3RO
YW1lKHN0cmluZywgbnVsbHB0cik7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGhvc3QgPSBV
UkxIZWxwZXJzOjptYXBIb3N0TmFtZShzdHJpbmcsIG51bGxwdHIpOwogICAgIGlmICghaG9zdCkK
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gISpob3N0ID8gc3RyaW5nIDogKE5TU3Ry
aW5nICopKmhvc3Q7CkBAIC0xMDgsNyArMTA1LDcgQEAgTlNTdHJpbmcgKmRlY29kZUhvc3ROYW1l
KE5TU3RyaW5nICpzdHJpbmcpCiAKIE5TU3RyaW5nICplbmNvZGVIb3N0TmFtZShOU1N0cmluZyAq
c3RyaW5nKQogewotICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBob3N0ID0gbWFwSG9zdE5hbWUo
c3RyaW5nLCBkZWNvZGVQZXJjZW50RXNjYXBlcyk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IGhvc3QgPSBVUkxIZWxwZXJzOjptYXBIb3N0TmFtZShzdHJpbmcsIGRlY29kZVBlcmNlbnRFc2Nh
cGVzKTsKICAgICBpZiAoIWhvc3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuICEq
aG9zdCA/IHN0cmluZyA6IChOU1N0cmluZyAqKSpob3N0OwpAQCAtMTI2LDI4ICsxMjMsMTcgQEAg
TlNVUkwgKlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudChOU1VSTCAq
VVJMLCBDRlVSTENvbXBvbmVudFR5cGUKICAgICBpZiAoIVVSTCkKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAKLSAgICBDRlJhbmdlIGZyYWdSZyA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9u
ZW50KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGNvbXBvbmVudCwgbnVsbHB0cik7Ci0gICAgaWYg
KGZyYWdSZy5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKKyAgICBDRlJhbmdlIHJhbmdlID0gQ0ZV
UkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoYnJpZGdlX2Nhc3QoVVJMKSwgY29tcG9uZW50LCBu
dWxscHRyKTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCiAgICAgICAg
IHJldHVybiBVUkw7CiAKLSAgICBWZWN0b3I8VUludDgsIHVybEJ5dGVzQnVmZmVyTGVuZ3RoPiB1
cmxCeXRlcyh1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9IENG
VVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgdXJsQnl0ZXMuZGF0YSgpLCB1cmxC
eXRlcy5zaXplKCkpOwotICAgIGlmIChudW1CeXRlcyA9PSAtMSkgewotICAgICAgICBudW1CeXRl
cyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgbnVsbHB0ciwgMCk7Ci0g
ICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChf
X2JyaWRnZSBDRlVSTFJlZilVUkwsIHVybEJ5dGVzLmRhdGEoKSwgbnVtQnl0ZXMpOwotICAgIH0K
KyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2VfY2FzdChVUkwpKTsKIAotICAg
IGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxC
eXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAtIDEsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwg
bnVsbHB0cikpOworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRl
cyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJhbmdlLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5j
b2RpbmdVVEY4LCBudWxscHRyKSk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9
IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMobnVsbHB0ciwgdXJsQnl0ZXMuZGF0YSgpLCBm
cmFnUmcubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgbnVsbHB0cikp
OwotICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LmJyaWRnaW5nQXV0b3JlbGVh
c2UoKSA6IFVSTDsKLX0KKyAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhC
eXRlcyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJhbmdlLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5n
RW5jb2RpbmdJU09MYXRpbjEsIG51bGxwdHIpKTsKIAotc3RhdGljIE5TVVJMICpVUkxCeVJlbW92
aW5nUmVzb3VyY2VTcGVjaWZpZXIoTlNVUkwgKlVSTCkKLXsKLSAgICByZXR1cm4gVVJMQnlUcnVu
Y2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KFVSTCwga0NGVVJMQ29tcG9uZW50UmVz
b3VyY2VTcGVjaWZpZXIpOworICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdBdXRv
cmVsZWFzZSgpIDogVVJMOwogfQogCiBOU1VSTCAqVVJMV2l0aERhdGEoTlNEYXRhICpkYXRhLCBO
U1VSTCAqYmFzZVVSTCkKQEAgLTE1NywxNSArMTQzLDE1IEBAIE5TVVJMICpVUkxXaXRoRGF0YShO
U0RhdGEgKmRhdGEsIE5TVVJMICpiYXNlVVJMKQogICAgIAogICAgIHNpemVfdCBsZW5ndGggPSBb
ZGF0YSBsZW5ndGhdOwogICAgIGlmIChsZW5ndGggPiAwKSB7Ci0gICAgICAgIC8vIHdvcmsgYXJv
dW5kIDxyZGFyOi8vNDQ3MDc3MT46IENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMoLi4s
IFRSVUUpIGRvZXNuJ3QgcmVtb3ZlIG5vbi1wYXRoIGNvbXBvbmVudHMuCi0gICAgICAgIGJhc2VV
UkwgPSBVUkxCeVJlbW92aW5nUmVzb3VyY2VTcGVjaWZpZXIoYmFzZVVSTCk7Ci0gICAgICAgIAor
ICAgICAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovLzQ0NzA3NzE+OiBDRlVSTENyZWF0ZUFic29s
dXRlVVJMV2l0aEJ5dGVzKC4uLCBUUlVFKSBkb2Vzbid0IHJlbW92ZSBub24tcGF0aCBjb21wb25l
bnRzLgorICAgICAgICBiYXNlVVJMID0gVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3Jl
Q29tcG9uZW50KGJhc2VVUkwsIGtDRlVSTENvbXBvbmVudFJlc291cmNlU3BlY2lmaWVyKTsKKwog
ICAgICAgICBjb25zdCBVSW50OCAqYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBVSW50OCo+KFtk
YXRhIGJ5dGVzXSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENGVVJMQ3JlYXRlQWJzb2x1dGVV
UkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4gdG8gY29uc29sZSBpZiB3ZSBwYXNzZWQgYSBwYXRo
IHRvIGl0LgogICAgICAgICBpZiAoYnl0ZXNbMF0gPT0gJy8nICYmICFiYXNlVVJMKQogICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCisKICAgICAgICAgLy8gTk9URTogV2UgdXNlIFVU
Ri04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBpcyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0cmlu
Z3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVudHMKICAgICAgICAgLy8gKGUuZyBjYWxscyB0
byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gaXMgbm90IHRvbGVyYW50IG9m
IGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGljaAogICAgICAgICAvLyBjb3VsZCBlaXRoZXIg
YmUgYSBtYWxmb3JtZWQgc3RyaW5nIG9yIGJ5dGVzIGluIGEgZGlmZmVyZW50IGVuY29kaW5nLCBs
aWtlIHNoaWZ0LWppcywgc28gd2UgZmFsbCBiYWNrCkBAIC0xNzcsNiArMTYzLDcgQEAgTlNVUkwg
KlVSTFdpdGhEYXRhKE5TRGF0YSAqZGF0YSwgTlNVUkwgKmJhc2VVUkwpCiAgICAgfQogICAgIHJl
dHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIiJdOwogfQorCiBzdGF0aWMgTlNEYXRhICpkYXRh
V2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAqc3RyaW5nKQogewogICAgIE5TRGF0YSAqdXNl
clR5cGVkRGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddOwpAQCAtMjExLDE3ICsxOTgsMTcgQEAgc3RhdGljIE5TRGF0YSAqZGF0YVdpdGhVc2VyVHlw
ZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZykKICAgICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aEJ5
dGVzTm9Db3B5Om91dEJ5dGVzIGxlbmd0aDpvdXRMZW5ndGhdOyAvLyBhZG9wdHMgb3V0Qnl0ZXMK
IH0KIAotTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNV
UkwgKm5zVVJMKQorTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmlu
ZywgTlNVUkwgKikKIHsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIGF1dG8gbWFwcGVkU3RyaW5nID0gbWFwSG9zdE5hbWVzKHN0cmluZ0J5VHJpbW1pbmdXaGl0
ZXNwYWNlKHN0cmluZykuZ2V0KCksIGRlY29kZVBlcmNlbnRFc2NhcGVzKTsKKyAgICBhdXRvIG1h
cHBlZFN0cmluZyA9IFVSTEhlbHBlcnM6Om1hcEhvc3ROYW1lcyhzdHJpbmdCeVRyaW1taW5nV2hp
dGVzcGFjZShzdHJpbmcpLmdldCgpLCBkZWNvZGVQZXJjZW50RXNjYXBlcyk7CiAgICAgaWYgKCFt
YXBwZWRTdHJpbmcpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBMZXQncyBjaGVjayB3
aGV0aGVyIHRoZSBVUkwgaXMgYm9ndXMuCi0gICAgVVJMIHVybCB7IFVSTCB7IG5zVVJMIH0sIG1h
cHBlZFN0cmluZyB9OworICAgIFVSTCB1cmwgeyBVUkwgeyB9LCBtYXBwZWRTdHJpbmcgfTsKICAg
ICBpZiAoIXVybC5jcmVhdGVDRlVSTCgpKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0yMzEs
MTEzICsyMTgsODYgQEAgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0
cmluZywgTlNVUkwgKm5zVVJMKQogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIFtOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiIl07CiAKLSAgICByZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwgbnNV
UkwpOworICAgIHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBuaWwpOwogfQogCi1OU1VSTCAqVVJM
V2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoTlNTdHJpbmcgKnN0cmluZywgTlNVUkwgKlVS
TCkKK05TVVJMICpVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0cmluZyAqc3Ry
aW5nKQogewogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgTlNV
UkwgKnJlc3VsdCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nLCBVUkwpOworICAgIE5T
VVJMICpyZXN1bHQgPSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nKHN0cmluZyk7CiAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgTlNEYXRhICpyZXN1bHREYXRhID0gZGF0YVdpdGhVc2VyVHlwZWRT
dHJpbmcoc3RyaW5nKTsKICAgICAgICAgaWYgKCFyZXN1bHREYXRhKQogICAgICAgICAgICAgcmV0
dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07Ci0gICAgICAgIHJlc3VsdCA9IFVSTFdpdGhE
YXRhKHJlc3VsdERhdGEsIFVSTCk7CisgICAgICAgIHJlc3VsdCA9IFVSTFdpdGhEYXRhKHJlc3Vs
dERhdGEsIG5pbCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEJP
T0wgaGFzUXVlc3Rpb25NYXJrT25seVF1ZXJ5U3RyaW5nKE5TVVJMICpVUkwpCitzdGF0aWMgYm9v
bCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJpbmcoTlNVUkwgKlVSTCkKIHsKICAgICBDRlJh
bmdlIHJhbmdlV2l0aFNlcGFyYXRvcnM7Ci0gICAgQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25l
bnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwga0NGVVJMQ29tcG9uZW50UXVlcnksICZyYW5nZVdp
dGhTZXBhcmF0b3JzKTsKLSAgICBpZiAocmFuZ2VXaXRoU2VwYXJhdG9ycy5sb2NhdGlvbiAhPSBr
Q0ZOb3RGb3VuZCAmJiByYW5nZVdpdGhTZXBhcmF0b3JzLmxlbmd0aCA9PSAxKQotICAgICAgICBy
ZXR1cm4gWUVTOwotCi0gICAgcmV0dXJuIE5POworICAgIENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29t
cG9uZW50KGJyaWRnZV9jYXN0KFVSTCksIGtDRlVSTENvbXBvbmVudFF1ZXJ5LCAmcmFuZ2VXaXRo
U2VwYXJhdG9ycyk7CisgICAgcmV0dXJuIHJhbmdlV2l0aFNlcGFyYXRvcnMubG9jYXRpb24gIT0g
a0NGTm90Rm91bmQgJiYgcmFuZ2VXaXRoU2VwYXJhdG9ycy5sZW5ndGggPT0gMTsKIH0KIAogTlNE
YXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5
cGUgY29tcG9uZW50VHlwZSkKIHsKLSAgICBWZWN0b3I8VUludDgsIHVybEJ5dGVzQnVmZmVyTGVu
Z3RoPiBhbGxCeXRlc0J1ZmZlcih1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBi
eXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYWxsQnl0
ZXNCdWZmZXIuZGF0YSgpLCBhbGxCeXRlc0J1ZmZlci5zaXplKCkpOwotICAgIGlmIChieXRlc0Zp
bGxlZCA9PSAtMSkgewotICAgICAgICBDRkluZGV4IGJ5dGVzVG9BbGxvY2F0ZSA9IENGVVJMR2V0
Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgIGFsbEJ5
dGVzQnVmZmVyLmdyb3coYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICAgICAgYnl0ZXNGaWxsZWQgPSBD
RlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGFsbEJ5dGVzQnVmZmVyLmRhdGEo
KSwgYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgQ0ZVUkxDb21wb25l
bnRUeXBlIGNvbXBsZXRlVVJMID0gKENGVVJMQ29tcG9uZW50VHlwZSktMTsKLSAgICBDRlJhbmdl
IHJhbmdlOwotICAgIGlmIChjb21wb25lbnRUeXBlICE9IGNvbXBsZXRlVVJMKSB7Ci0gICAgICAg
IHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKF9fYnJpZGdlIENGVVJMUmVm
KVVSTCwgY29tcG9uZW50VHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChyYW5nZS5sb2NhdGlv
biA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcmFuZ2UubG9jYXRpb24gPSAwOwotICAgICAgICByYW5nZS5sZW5ndGggPSBieXRl
c0ZpbGxlZDsKLSAgICB9Ci0gICAgCi0gICAgTlNEYXRhICpjb21wb25lbnREYXRhID0gW05TRGF0
YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVyLmRhdGEoKSArIHJhbmdlLmxvY2F0aW9uIGxl
bmd0aDpyYW5nZS5sZW5ndGhdOyAKLSAgICAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oW2NvbXBvbmVudERhdGEgYnl0
ZXNdKTsKLSAgICBOU011dGFibGVEYXRhICpyZXN1bHREYXRhID0gW05TTXV0YWJsZURhdGEgZGF0
YV07Ci0gICAgLy8gTk9URTogYWRkIGxlYWRpbmcgJz8nIHRvIHF1ZXJ5IHN0cmluZ3Mgbm9uLXpl
cm8gbGVuZ3RoIHF1ZXJ5IHN0cmluZ3MuCi0gICAgLy8gTk9URTogcmV0YWluIHF1ZXN0aW9uLW1h
cmsgb25seSBxdWVyeSBzdHJpbmdzLgorICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlVSTEdldEJ5dGVS
YW5nZUZvckNvbXBvbmVudChicmlkZ2VfY2FzdChVUkwpLCBjb21wb25lbnRUeXBlLCBudWxscHRy
KTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0ga0NGTm90Rm91bmQpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBhdXRvIGJ5dGVzQnVmZmVyID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2VfY2Fz
dChVUkwpKTsKKyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNCdWZmZXIuZGF0YSgpICsgcmFuZ2UubG9j
YXRpb247CisKKyAgICBOU011dGFibGVEYXRhICpyZXN1bHQgPSBbTlNNdXRhYmxlRGF0YSBkYXRh
XTsKKworICAgIC8vIFdlIGFkZCBsZWFkaW5nICc/JyB0byBub24temVybyBsZW5ndGggcXVlcnkg
c3RyaW5ncyBpbmNsdWRpbmcgcXVlc3Rpb24tbWFyayBvbmx5IHF1ZXJ5IHN0cmluZ3MuCiAgICAg
aWYgKGNvbXBvbmVudFR5cGUgPT0ga0NGVVJMQ29tcG9uZW50UXVlcnkpIHsKLSAgICAgICAgaWYg
KHJhbmdlLmxlbmd0aCA+IDAgfHwgaGFzUXVlc3Rpb25NYXJrT25seVF1ZXJ5U3RyaW5nKFVSTCkp
Ci0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBlbmRCeXRlczoiPyIgbGVuZ3RoOjFdOyAgICAK
KyAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCB8fCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJp
bmcoVVJMKSkKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQnl0ZXM6Ij8iIGxlbmd0aDoxXTsK
ICAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZS5sZW5ndGg7IGkrKykgeworCisg
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspIHsKICAgICAgICAg
dW5zaWduZWQgY2hhciBjID0gYnl0ZXNbaV07Ci0gICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA+
PSAweDdmKSB7Ci0gICAgICAgICAgICBjaGFyIGVzY2FwZWRbM107Ci0gICAgICAgICAgICBlc2Nh
cGVkWzBdID0gJyUnOwotICAgICAgICAgICAgZXNjYXBlZFsxXSA9IHVwcGVyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KGMpOwotICAgICAgICAgICAgZXNjYXBlZFsyXSA9IGxvd2VyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KGMpOwotICAgICAgICAgICAgW3Jlc3VsdERhdGEgYXBwZW5kQnl0ZXM6ZXNjYXBl
ZCBsZW5ndGg6M107ICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hhciBiWzFd
OwotICAgICAgICAgICAgYlswXSA9IGM7Ci0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBlbmRC
eXRlczpiIGxlbmd0aDoxXTsgICAgCi0gICAgICAgIH0gICAgICAgICAgICAgICAKKyAgICAgICAg
aWYgKGMgPiAweDIwICYmIGMgPCAweDdGKQorICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRCeXRl
czomYnl0ZXNbaV0gbGVuZ3RoOjFdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIg
ZXNjYXBlZFszXSA9IHsgJyUnLCB1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjKSwgbG93ZXJO
aWJibGVUb0FTQ0lJSGV4RGlnaXQoYykgfTsKKyAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQnl0
ZXM6ZXNjYXBlZCBsZW5ndGg6M107CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHJlc3VsdERhdGE7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgTlNVUkwgKlVS
TEJ5UmVtb3ZpbmdDb21wb25lbnRBbmRTdWJzZXF1ZW50Q2hhcmFjdGVyKE5TVVJMICpVUkwsIENG
VVJMQ29tcG9uZW50VHlwZSBjb21wb25lbnQpCiB7Ci0gICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJM
R2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGNvbXBvbmVu
dCwgMCk7CisgICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50
KGJyaWRnZV9jYXN0KFVSTCksIGNvbXBvbmVudCwgMCk7CiAgICAgaWYgKHJhbmdlLmxvY2F0aW9u
ID09IGtDRk5vdEZvdW5kKQogICAgICAgICByZXR1cm4gVVJMOwotICAgIAorCiAgICAgLy8gUmVt
b3ZlIG9uZSBzdWJzZXF1ZW50IGNoYXJhY3Rlci4KICAgICByYW5nZS5sZW5ndGgrKzsKIAotICAg
IFZlY3RvcjxVSW50OCwgdXJsQnl0ZXNCdWZmZXJMZW5ndGg+IGJ1ZmZlcih1cmxCeXRlc0J1ZmZl
ckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdl
IENGVVJMUmVmKVVSTCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAgaWYgKG51
bUJ5dGVzID09IC0xKSB7Ci0gICAgICAgIG51bUJ5dGVzID0gQ0ZVUkxHZXRCeXRlcygoX19icmlk
Z2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAgICAgICAgYnVmZmVyLmdyb3cobnVtQnl0
ZXMpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGJ1ZmZl
ci5kYXRhKCksIG51bUJ5dGVzKTsKLSAgICB9Ci0gICAgVUludDgqIHVybEJ5dGVzID0gYnVmZmVy
LmRhdGEoKTsKLSAgICAgICAgCisgICAgYXV0byBieXRlcyA9IGJ5dGVzQXNWZWN0b3IoYnJpZGdl
X2Nhc3QoVVJMKSk7CisgICAgYXV0byB1cmxCeXRlcyA9IGJ5dGVzLmRhdGEoKTsKKyAgICBDRklu
ZGV4IG51bUJ5dGVzID0gYnl0ZXMuc2l6ZSgpOworCiAgICAgaWYgKG51bUJ5dGVzIDwgcmFuZ2Uu
bG9jYXRpb24pCiAgICAgICAgIHJldHVybiBVUkw7CiAgICAgaWYgKG51bUJ5dGVzIDwgcmFuZ2Uu
bG9jYXRpb24gKyByYW5nZS5sZW5ndGgpCiAgICAgICAgIHJhbmdlLmxlbmd0aCA9IG51bUJ5dGVz
IC0gcmFuZ2UubG9jYXRpb247Ci0gICAgICAgIAorCiAgICAgbWVtbW92ZSh1cmxCeXRlcyArIHJh
bmdlLmxvY2F0aW9uLCB1cmxCeXRlcyArIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoLCBu
dW1CeXRlcyAtIHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAKKwogICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxCeXRl
cywgbnVtQnl0ZXMgLSByYW5nZS5sZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0
cikpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3Jl
YXRlV2l0aEJ5dGVzKG51bGxwdHIsIHVybEJ5dGVzLCBudW1CeXRlcyAtIHJhbmdlLmxlbmd0aCwg
a0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIG51bGxwdHIpKTsKLSAgICAgICAgICAgICAgICAK
KwogICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdBdXRvcmVsZWFzZSgpIDogVVJM
OwogfQogCkBAIC0zNDgsOTcgKzMwOCw0MiBAQCBOU1VSTCAqVVJMQnlSZW1vdmluZ1VzZXJJbmZv
KE5TVVJMICpVUkwpCiAKIE5TRGF0YSAqb3JpZ2luYWxVUkxEYXRhKE5TVVJMICpVUkwpCiB7Ci0g
ICAgVUludDggKmJ1ZmZlciA9IChVSW50OCAqKW1hbGxvYyh1cmxCeXRlc0J1ZmZlckxlbmd0aCk7
Ci0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJM
UmVmKVVSTCwgYnVmZmVyLCB1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKGJ5dGVzRmls
bGVkID09IC0xKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxHZXRC
eXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsKLSAgICAgICAgYnVmZmVy
ID0gKFVJbnQ4ICopcmVhbGxvYyhidWZmZXIsIGJ5dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAgIGJ5
dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBidWZmZXIs
IGJ5dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAgIEFTU0VSVChieXRlc0ZpbGxlZCA9PSBieXRlc1Rv
QWxsb2NhdGUpOwotICAgIH0KLSAgICAKLSAgICAvLyBidWZmZXIgaXMgYWRvcHRlZCBieSB0aGUg
TlNEYXRhCi0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzTm9Db3B5OmJ1
ZmZlciBsZW5ndGg6Ynl0ZXNGaWxsZWQgZnJlZVdoZW5Eb25lOllFU107Ci0gICAgCi0gICAgTlNV
UkwgKmJhc2VVUkwgPSAoX19icmlkZ2UgTlNVUkwgKilDRlVSTEdldEJhc2VVUkwoKF9fYnJpZGdl
IENGVVJMUmVmKVVSTCk7Ci0gICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIHJldHVybiBvcmlnaW5h
bFVSTERhdGEoVVJMV2l0aERhdGEoZGF0YSwgYmFzZVVSTCkpOwotICAgIHJldHVybiBkYXRhOwor
ICAgIGF1dG8gZGF0YSA9IGJyaWRnZV9jYXN0KGJ5dGVzQXNDRkRhdGEoYnJpZGdlX2Nhc3QoVVJM
KSkpOworICAgIGlmIChhdXRvIGJhc2VVUkwgPSBicmlkZ2VfY2FzdChDRlVSTEdldEJhc2VVUkwo
YnJpZGdlX2Nhc3QoVVJMKSkpKQorICAgICAgICByZXR1cm4gb3JpZ2luYWxVUkxEYXRhKFVSTFdp
dGhEYXRhKGRhdGEuZ2V0KCksIGJhc2VVUkwpKTsKKyAgICByZXR1cm4gZGF0YS5hdXRvcmVsZWFz
ZSgpOwogfQogCiBOU1N0cmluZyAqdXNlclZpc2libGVTdHJpbmcoTlNVUkwgKlVSTCkKIHsKICAg
ICBOU0RhdGEgKmRhdGEgPSBvcmlnaW5hbFVSTERhdGEoVVJMKTsKLSAgICBDU3RyaW5nIHN0cmlu
ZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7
Ci0gICAgcmV0dXJuIHVzZXJWaXNpYmxlVVJMKHN0cmluZyk7CisgICAgcmV0dXJuIFVSTEhlbHBl
cnM6OnVzZXJWaXNpYmxlVVJMKENTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFtkYXRh
IGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pKTsKIH0KIAogQk9PTCBpc1VzZXJWaXNpYmxlVVJMKE5T
U3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgQk9PTCB2YWxpZCA9IFlFUzsKLSAgICAvLyBnZXQgYnVm
ZmVyCi0gICAgCi0gICAgY2hhciBzdGF0aWNfYnVmZmVyWzEwMjRdOwotICAgIGNvbnN0IGNoYXIg
KnA7Ci0gICAgQk9PTCBzdWNjZXNzID0gQ0ZTdHJpbmdHZXRDU3RyaW5nKChfX2JyaWRnZSBDRlN0
cmluZ1JlZilzdHJpbmcsIHN0YXRpY19idWZmZXIsIDEwMjMsIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCk7Ci0gICAgcCA9IHN1Y2Nlc3MgPyBzdGF0aWNfYnVmZmVyIDogW3N0cmluZyBVVEY4U3RyaW5n
XTsKLSAgICAKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHApOwotICAgIAotICAgIC8vIGNoZWNr
IGZvciBjaGFyYWN0ZXJzIDw9IDB4MjAgb3IgPj0weDdmLCAlLWVzY2FwZSBzZXF1ZW5jZXMgb2Yg
JTdmLCBhbmQgeG4tLSwgdGhlc2UKLSAgICAvLyBhcmUgdGhlIHRoaW5ncyB0aGF0IHdpbGwgbGVh
ZCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIHRvIGFjdHVhbGx5IGNoYW5nZSB0aGluZ3MuCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFy
IGMgPSBwW2ldOwotICAgICAgICAvLyBlc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzLCBzcGFjZSwg
YW5kIGRlbGV0ZQotICAgICAgICBpZiAoYyA8PSAweDIwIHx8IGMgPT0gMHg3ZikgewotICAgICAg
ICAgICAgdmFsaWQgPSBOTzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYg
KGMgPT0gJyUnICYmIChpICsgMSA8IGxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQocFtpICsgMV0p
KSAmJiBpICsgMiA8IGxlbmd0aCAmJiBpc0FTQ0lJSGV4RGlnaXQocFtpICsgMl0pKSB7Ci0gICAg
ICAgICAgICBhdXRvIHUgPSB0b0FTQ0lJSGV4VmFsdWUocFtpICsgMV0sIHBbaSArIDJdKTsKLSAg
ICAgICAgICAgIGlmICh1ID4gMHg3ZikgewotICAgICAgICAgICAgICAgIHZhbGlkID0gTk87Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBmb3IgInhuLS0iIGluIGFu
IGVmZmljaWVudCwgbm9uLWNhc2Utc2Vuc2l0aXZlLCB3YXkuCi0gICAgICAgICAgICBpZiAoYyA9
PSAnLScgJiYgaSA+PSAzICYmIChwW2kgLSAzXSB8IDB4MjApID09ICd4JyAmJiAocFtpIC0gMl0g
fCAweDIwKSA9PSAnbicgJiYgcFtpIC0gMV0gPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgdmFs
aWQgPSBOTzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSB1c2VyVmlzaWJsZVN0cmluZyBmdW5jdGlvbiBp
cyBndWFyYW50ZWVkIHRvIG5vdCBjaGFuZ2UgdGhlIHBhc3NlZC1pbiBVUkwuCisgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wdGltaXplIGFsbCB0aGUgbW9zdCBjb21tb24gY2FzZXMg
d2hlcmUgd2UgZG9uJ3QgbmVlZCB0aGUgdXNlclZpc2libGVTdHJpbmcgYWxnb3JpdGhtLgorCisg
ICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgYXV0byBzdWNjZXNzID0gQ0ZTdHJpbmdHZXRDU3Ry
aW5nKGJyaWRnZV9jYXN0KHN0cmluZyksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciks
IHNpemVvZihidWZmZXIpIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KTsKKyAgICBhdXRvIGNo
YXJhY3RlcnMgPSBzdWNjZXNzID8gYnVmZmVyIDogW3N0cmluZyBVVEY4U3RyaW5nXTsKKworICAg
IC8vIENoZWNrIGZvciBjb250cm9sIGNoYXJhY3RlcnMsICUtZXNjYXBlIHNlcXVlbmNlcyB0aGF0
IGFyZSBub24tQVNDSUksIGFuZCB4bi0tOiB0aGVzZQorICAgIC8vIGFyZSB0aGUgdGhpbmdzIHRo
YXQgbWlnaHQgbGVhZCB0aGUgdXNlclZpc2libGVTdHJpbmcgZnVuY3Rpb24gdG8gYWN0dWFsbHkg
Y2hhbmdlIHRoZSBzdHJpbmcuCisgICAgd2hpbGUgKGF1dG8gY2hhcmFjdGVyID0gKmNoYXJhY3Rl
cnMrKykgeworICAgICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBzcGFjZSwg
d2lsbCBiZSBlc2NhcGVkIGJ5IHVzZXJWaXNpYmxlU3RyaW5nLgorICAgICAgICBpZiAoY2hhcmFj
dGVyIDw9IDB4MjAgfHwgY2hhcmFjdGVyID09IDB4N0YpCisgICAgICAgICAgICByZXR1cm4gTk87
CisgICAgICAgIC8vIEVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBleHBhbmQgdG8gbm9uLUFTQ0lJIGNo
YXJhY3RlcnMgbWF5IGJlIGNvbnZlcnRlZCB0byBub24tZXNjYXBlZCBVVEYtOCBzZXF1ZW5jZXMu
CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0
ZXJzWzBdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyc1sxXSkgJiYgIWlzQVNDSUkodG9B
U0NJSUhleFZhbHVlKGNoYXJhY3RlcnNbMF0sIGNoYXJhY3RlcnNbMV0pKSkKKyAgICAgICAgICAg
IHJldHVybiBOTzsKKyAgICAgICAgLy8gSWYgInhuLS0iIGFwcGVhcnMsIHRoZW4gd2UgbWlnaHQg
bmVlZCB0byBydW4gdGhlIElETiBhbGdvcml0aG0gaWYgaXQncyBhIGhvc3QgbmFtZS4KKyAgICAg
ICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyLCAneCcpICYmIGlzQVND
SUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVyc1swXSwgJ24nKSAmJiBjaGFyYWN0ZXJzWzFd
ID09ICctJyAmJiBjaGFyYWN0ZXJzWzJdID09ICctJykKKyAgICAgICAgICAgIHJldHVybiBOTzsK
ICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHZhbGlkOwotfQogCi1OU1JhbmdlIHJhbmdlT2ZVUkxT
Y2hlbWUoTlNTdHJpbmcgKnN0cmluZykKLXsKLSAgICBOU1JhbmdlIGNvbG9uID0gW3N0cmluZyBy
YW5nZU9mU3RyaW5nOkAiOiJdOwotICAgIGlmIChjb2xvbi5sb2NhdGlvbiAhPSBOU05vdEZvdW5k
ICYmIGNvbG9uLmxvY2F0aW9uID4gMCkgewotICAgICAgICBOU1JhbmdlIHNjaGVtZSA9IHswLCBj
b2xvbi5sb2NhdGlvbn07Ci0gICAgICAgIC8qCi0gICAgICAgICBUaGlzIHN0dWZmIGlzIHZlcnkg
ZXhwZW5zaXZlLiAgMTAtMTUgbXNlYyBvbiBhIDJ4MS4yR0h6LiAgSWYgbm90IGNhY2hlZCBpdCBz
d2FtcHMKLSAgICAgICAgIGV2ZXJ5dGhpbmcgZWxzZSB3aGVuIGFkZGluZyBpdGVtcyB0byB0aGUg
YXV0b2NvbXBsZXRlIERCLiAgTWFrZXMgbWUgd29uZGVyIGlmIHdlCi0gICAgICAgICBldmVuIG5l
ZWQgdG8gZW5mb3JjZSB0aGUgY2hhcmFjdGVyIHNldCBoZXJlLgotICAgICAgICAgKi8KLSAgICAg
ICAgTlNTdHJpbmcgKmFjY2VwdGFibGVDaGFyYWN0ZXJzID0gQCJBQkNERUZHSElKS0xNTk9QUVJT
VFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsuLSI7Ci0gICAgICAg
IHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TQ2hhcmFjdGVyU2V0Pj4gaW52
ZXJzZVNjaGVtZUNoYXJhY3RlclNldDsKLSAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VLZXk7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFsmXSB7Ci0gICAgICAgICAg
ICBpbnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0LmNvbnN0cnVjdChbW05TQ2hhcmFjdGVyU2V0IGNo
YXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJpbmc6YWNjZXB0YWJsZUNoYXJhY3RlcnNdIGlu
dmVydGVkU2V0XSk7Ci0gICAgICAgIH0pOwotICAgICAgICBOU1JhbmdlIGlsbGVnYWxzID0gW3N0
cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDppbnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0Lmdl
dCgpLmdldCgpIG9wdGlvbnM6MCByYW5nZTpzY2hlbWVdOwotICAgICAgICBpZiAoaWxsZWdhbHMu
bG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBzY2hlbWU7Ci0gICAg
fQotICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gWUVT
OwogfQogCi1CT09MIGxvb2tzTGlrZUFic29sdXRlVVJMKE5TU3RyaW5nICpzdHJpbmcpCi17Ci0g
ICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGJlY2F1c2UgX3dlYl9VUkxXaXRoU3RyaW5nIGFsbG93cyB3
aGl0ZXNwYWNlLgotICAgIHJldHVybiByYW5nZU9mVVJMU2NoZW1lKHN0cmluZ0J5VHJpbW1pbmdX
aGl0ZXNwYWNlKHN0cmluZykuZ2V0KCkpLmxvY2F0aW9uICE9IE5TTm90Rm91bmQ7CiB9Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1VS
TENvY29hLm1tIGIvU291cmNlL1dURi93dGYvY29jb2EvVVJMQ29jb2EubW0KaW5kZXggMjdkN2Rj
MzY2MmZhZjU0NmQwMDFhOGUyMmNiNzA3ZDkwYjZmY2IwZi4uNWQ5ZTE1NjU3NzQ1MmEyMjczZWYy
ZGY2N2E2ZDhlNDdkN2EzNWEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvVVJM
Q29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvVVJMQ29jb2EubW0KQEAgLTM5LDE3
ICszOSw4IEBAIEBlbmQKIG5hbWVzcGFjZSBXVEYgewogCiBVUkw6OlVSTChOU1VSTCAqY29jb2FV
UkwpCisgICAgOiBVUkwoYnJpZGdlX2Nhc3QoY29jb2FVUkwpKQogewotICAgIGlmICghY29jb2FV
UkwpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBpZ25vcmUgYmFzZSBVUkwgaGVyZT8KLSAgICBD
U3RyaW5nIGJ5dGVzOwotICAgIFdURjo6Z2V0VVJMQnl0ZXMoYnJpZGdlX2Nhc3QoY29jb2FVUkwp
LCBieXRlcyk7Ci0gICAgVVJMUGFyc2VyIHBhcnNlcihieXRlcy5kYXRhKCkpOwotICAgICp0aGlz
ID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiBVUkw6Om9wZXJhdG9yIE5TVVJMICooKSBjb25zdApA
QCAtNTksMjggKzUwLDExIEBAIFVSTDo6b3BlcmF0b3IgTlNVUkwgKigpIGNvbnN0CiAgICAgcmV0
dXJuIGNyZWF0ZUNGVVJMKCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgpOwogfQogCi1SZXRhaW5QdHI8
Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRlQ0ZVUkwoKSBjb25zdAorUmV0YWluUHRyPENGVVJMUmVmPiBV
Ukw6OmVtcHR5Q0ZVUkwoKQogewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdlIHVzZSB0aGUgdG9s
bC1mcmVlIGJyaWRnZSBiZXR3ZWVuIE5TVVJMIGFuZCBDRlVSTCB0byBjcmVhdGUgYSBDRlVSTFJl
ZiBzdXBwb3J0aW5nIGJvdGggZW1wdHkgYW5kIG51bGwgdmFsdWVzLgotICAgICAgICByZXR1cm4g
YnJpZGdlX2Nhc3QoYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKSk7
Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTDsKLSAgICBpZiAoTElLRUxZ
KG1fc3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5nLmlzQWxsQVNDSUkoKSkpCi0gICAgICAgIGNm
VVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1f
c3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGlu
Z1VURjgsIG51bGxwdHIsIHRydWUpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ1N0cmluZyB1dGY4
ID0gbV9zdHJpbmcudXRmOCgpOwotICAgICAgICBjZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVB
YnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxscHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0Zjgu
bGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgIH0K
LQotICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIVdURjo6aXNDRlVSTFNhbWVP
cmlnaW4oY2ZVUkwuZ2V0KCksICp0aGlzKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gY2ZVUkw7CisgICAgLy8gV2UgdXNlIHRoZSB0b2xsLWZyZWUgYnJpZGdlIHRvIGNy
ZWF0ZSBhbiBlbXB0eSB2YWx1ZSB0aGF0IGlzIGRpc3RpbmN0IGZyb20gbnVsbCB0aGF0IG5vIENG
VVJMIGZ1bmN0aW9uIGNhbiBjcmVhdGUuCisgICAgLy8gRklYTUU6IFdoZW4gd2Ugb3JpZ2luYWxs
eSB3cm90ZSB0aGlzLCB3ZSB0aG91Z2h0IHRoYXQgY3JlYXRpbmcgZW1wdHkgQ0YgVVJMcyB3YXMg
dmFsdWFibGU7IGNhbiB3ZSBkbyB3aXRob3V0IGl0IG5vdz8KKyAgICByZXR1cm4gYnJpZGdlX2Nh
c3QoYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKSk7CiB9CiAKIGJv
b2wgVVJMOjpob3N0SXNJUEFkZHJlc3MoU3RyaW5nVmlldyBob3N0KQpAQCAtOTAsNyArNjQsNyBA
QCBib29sIFVSTDo6aG9zdElzSVBBZGRyZXNzKFN0cmluZ1ZpZXcgaG9zdCkKIAogUmV0YWluUHRy
PGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgVVJMJiB2ZWN0b3JFbGVtZW50KQogewotICAg
IHJldHVybiBhZG9wdE5TKChfX2JyaWRnZV90cmFuc2ZlciBpZCl2ZWN0b3JFbGVtZW50LmNyZWF0
ZUNGVVJMKCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gYnJpZGdlX2Nhc3QodmVjdG9yRWxlbWVu
dC5jcmVhdGVDRlVSTCgpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxVUkw+IG1ha2VWZWN0b3JFbGVt
ZW50KGNvbnN0IFVSTCosIGlkIGFycmF5RWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL21hYy9GaWxlU3lzdGVtTWFjLm1tIGIvU291cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1N
YWMubW0KaW5kZXggNWUxOTMwMDU2OWI2MjFjYjRiOWNmOWMwZTdkNjIzNDUxNzczY2FiYS4uMmFk
OTE1Y2FmNjc4OTc0ZTlkNGMwZmZlZmQ5OTAxZTI0ZWE4YjFkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dURi93dGYvbWFjL0Zp
bGVTeXN0ZW1NYWMubW0KQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIFdURiB7CiB2b2lkIEZp
bGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBtZXRhZGF0YVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKIHsKICAgICBTdHJp
bmcgdXJsU3RyaW5nOwotICAgIGlmIChOU1VSTCAqdXJsID0gVVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZyhtZXRhZGF0YVVSTFN0cmluZywgbmlsKSkKLSAgICAgICAgdXJsU3RyaW5nID0gV1RGOjp1c2Vy
VmlzaWJsZVN0cmluZyhXVEY6OlVSTEJ5UmVtb3ZpbmdVc2VySW5mbyh1cmwpKTsKKyAgICBpZiAo
TlNVUkwgKnVybCA9IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcobWV0YWRhdGFVUkxTdHJpbmcpKQor
ICAgICAgICB1cmxTdHJpbmcgPSB1c2VyVmlzaWJsZVN0cmluZyhVUkxCeVJlbW92aW5nVXNlcklu
Zm8odXJsKSk7CiAgICAgZWxzZQogICAgICAgICB1cmxTdHJpbmcgPSBtZXRhZGF0YVVSTFN0cmlu
ZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5t
bSBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvU3RyaW5nQ29jb2EubW0KaW5kZXggNDYxODVj
NmFlNjY1MjhkMTc4MGU3ZmU2MDcxZThhYjgyZTMyZmFlYi4uYmYzYzY2NDhmMjdhMzY1MzQ5OWNk
ZWU4NmUzZDA2YjEzYzg2NDdkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9jb2Nv
YS9TdHJpbmdDb2NvYS5tbQorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0Nv
Y29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsMTcgKzIyLDIwIEBACiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2ltcG9y
dCA8Q29yZUZvdW5kYXRpb24vQ0ZTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2Fz
dHNDb2NvYS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIAogI2lmIEhBVkUoU0FGQVJJX0ZPUl9XRUJL
SVRfREVWRUxPUE1FTlRfUkVRVUlSSU5HX0VYVFJBX1NZTUJPTFMpCiBTdHJpbmc6OlN0cmluZyhO
U1N0cmluZyAqc3RyaW5nKQotICAgIDogU3RyaW5nKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJp
bmcpIHsgfQorICAgIDogU3RyaW5nKGJyaWRnZV9jYXN0KHN0cmluZykpCit7Cit9CiAjZW5kaWYK
IAogUmV0YWluUHRyPGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgU3RyaW5nJiB2ZWN0b3JF
bGVtZW50KQogewotICAgIHJldHVybiBhZG9wdE5TKChfX2JyaWRnZV90cmFuc2ZlciBpZCl2ZWN0
b3JFbGVtZW50LmNyZWF0ZUNGU3RyaW5nKCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gYnJpZGdl
X2Nhc3QodmVjdG9yRWxlbWVudC5jcmVhdGVDRlN0cmluZygpKTsKIH0KIAogc3RkOjpvcHRpb25h
bDxTdHJpbmc+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFN0cmluZyosIGlkIGFycmF5RWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0g
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9jZi9XS1VSTENGLm1tCmluZGV4IGFjNmQwODYz
ZjUzMDVjMDQ4Mzc3MjZmNGQ2MDBkNzFjZDE5MTE2NGEuLmNjZTgyNzY1YWQ5YjE2OTVkOTNhYjg3
YTU5MzliZTM1OTYxNzA3N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9j
L2NmL1dLVVJMQ0YubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvY2YvV0tVUkxD
Ri5tbQpAQCAtMzAsNyArMzAsNiBAQAogI2ltcG9ydCAiV0tOU1VSTC5oIgogI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNpbXBvcnQgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogc3RhdGljIGlubGluZSBDbGFzcyB3a05TVVJMQ2xhc3MoKQog
ewpAQCAtNDUsMTYgKzQ0LDE0IEBAIHN0YXRpYyBpbmxpbmUgQ2xhc3Mgd2tOU1VSTENsYXNzKCkK
IFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aENGVVJMKENGVVJMUmVmIGNmVVJMKQogewogICAgIGlm
ICghY2ZVUkwpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIC8vIFNpbmNlIFdLTlNVUkwgaXMgYW4gaW50ZXJuYWwgY2xhc3Mgd2l0aCBubyBzdWJjbGFz
c2VzLCB3ZSBjYW4gZG8gYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2suCiAgICAgaWYgKG9iamVjdF9n
ZXRDbGFzcygoX19icmlkZ2UgTlNVUkwgKiljZlVSTCkgPT0gd2tOU1VSTENsYXNzKCkpCiAgICAg
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHN0YXRpY19jYXN0PEFQSTo6VVJMKj4oJlsoV0tOU1VS
TCAqKShfX2JyaWRnZSBOU1VSTCAqKUNGUmV0YWluKGNmVVJMKSBfYXBpT2JqZWN0XSkpOwogCi0g
ICAgQ1N0cmluZyB1cmxCeXRlczsKLSAgICBXVEY6OmdldFVSTEJ5dGVzKGNmVVJMLCB1cmxCeXRl
cyk7Ci0KLSAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVSTEFQSSh1cmxCeXRlcy5kYXRhKCkp
OworICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIHRoZSBiYXNlIFVSTCBpbiB0
aGUgQ0ZVUkwgaGVyZT8KKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVSTEFQSShieXRlc0Fz
U3RyaW5nKGNmVVJMKSk7CiB9CiAKIENGVVJMUmVmIFdLVVJMQ29weUNGVVJMKENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvclJlZiwgV0tVUkxSZWYgVVJMUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggZDkxZDIwYTBlMzViMGZl
ZWZiMDY2Y2IyYzBlYjY4YmJlM2Y2ZmE2MS4uNjEyODRiMDRkMTE2Y2ZiODdhMjNkMzA2OGE4YzJj
MmI1MDlkNjYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1l
bnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVu
dENvZGVyc0NvY29hLm1tCkBAIC0xMDQsOSArMTA0LDggQEAgLSAodm9pZCllbmNvZGVXaXRoQ29k
ZXI6KE5TQ29kZXIgKiljb2RlcgogICAgIGlmIChoYXNCYXNlVVJMKQogICAgICAgICBbY29kZXIg
ZW5jb2RlT2JqZWN0OmJhc2VVUkwgZm9yS2V5OmJhc2VVUkxLZXldOwogCi0gICAgV1RGOjpVUkxD
aGFyQnVmZmVyIHVybEJ5dGVzOwotICAgIFdURjo6Z2V0VVJMQnl0ZXMoYnJpZGdlX2Nhc3QobV93
cmFwcGVkVVJMLmdldCgpKSwgdXJsQnl0ZXMpOwotICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxC
eXRlcy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNpemUoKV07CisgICAgYXV0byBieXRlcyA9IGJ5
dGVzQXNWZWN0b3IoYnJpZGdlX2Nhc3QobV93cmFwcGVkVVJMLmdldCgpKSk7CisgICAgW2NvZGVy
IGVuY29kZUJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6Ynl0ZXMuc2l6ZSgpXTsKIH0KIAogLSAo
X051bGxhYmxlIGluc3RhbmNldHlwZSlpbml0V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMuaAppbmRleCAyMGRkY2IwOTNm
YjliOTdlMjY0OTQ5YmVkODI2ZTBiYmUwOWJiNGY3Li41N2EzY2QyYjI0ZjFkZDFmMWE1NjY2YjMw
OGVjZGViMzliYjZlZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9X
S05TVVJMRXh0cmFzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4
dHJhcy5oCkBAIC0yOCw4ICsyOCw1IEBACiBAaW50ZXJmYWNlIE5TVVJMIChXS0V4dHJhcykKIAog
KyAoaW5zdGFuY2V0eXBlKV93ZWJfVVJMV2l0aFdURlN0cmluZzooY29uc3QgU3RyaW5nJilzdHJp
bmc7Ci0rIChpbnN0YW5jZXR5cGUpX3dlYl9VUkxXaXRoV1RGU3RyaW5nOihjb25zdCBTdHJpbmcm
KXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkw7Ci0KLS0gKFN0cmluZylfd2Vi
X29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nOwogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvV0tOU1VSTEV4dHJhcy5tbQppbmRleCAyNjAyNzFhMGIzY2Q1NzVkNjU0ZjgwZjEwNmYz
ZGU4NWUzNDViODdkLi4xODFiODNhODdiOTZlZWE3NWU1Y2Q5NTQ2NzgxMDQ5N2FiZmM5NmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxFeHRyYXMubW0KQEAgLTI3LDkg
KzI3LDYgQEAKICNpbXBvcnQgIldLTlNVUkxFeHRyYXMuaCIKIAogI2ltcG9ydCA8d3RmL1VSTC5o
PgotI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogQGltcGxlbWVudGF0aW9u
IE5TVVJMIChXS0V4dHJhcykKIApAQCAtMzksMTggKzM2LDQgQEAgKyAoaW5zdGFuY2V0eXBlKV93
ZWJfVVJMV2l0aFdURlN0cmluZzooY29uc3QgU3RyaW5nJilzdHJpbmcKICAgICByZXR1cm4gKE5T
VVJMICopdXJsOwogfQogCi0rIChpbnN0YW5jZXR5cGUpX3dlYl9VUkxXaXRoV1RGU3RyaW5nOihj
b25zdCBTdHJpbmcmKXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkwKLXsKLSAg
ICBVUkwgdXJsIHsgVVJMIHsgYmFzZVVSTCB9LCBzdHJpbmcgfTsKLSAgICByZXR1cm4gKE5TVVJM
ICopdXJsOwotfQotCi0tIChTdHJpbmcpX3dlYl9vcmlnaW5hbERhdGFBc1dURlN0cmluZwotewot
ICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIGJhc2UgVVJMIGhlcmU/Ci0gICAg
Q1N0cmluZyBvcmlnaW5hbERhdGE7Ci0gICAgV1RGOjpnZXRVUkxCeXRlcygoX19icmlkZ2UgQ0ZV
UkxSZWYpc2VsZiwgb3JpZ2luYWxEYXRhKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChv
cmlnaW5hbERhdGEpOwotfQotCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dL
TlNVUkxSZXF1ZXN0Lm1tCmluZGV4IGQwYzkxZjdkZTI5MzkwNTkxN2NkNTY5ZDZkMDU3N2YxMGY2
ZTgyMzkuLjRmMjFhYTkwMzAyYWI2OGNiZjYxOWFhY2VlNjAzOTY1Y2FkM2JlMGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxSZXF1ZXN0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxSZXF1ZXN0Lm1tCkBAIC0zNyw3ICszNyw3
IEBAIC0gKE5TT2JqZWN0ICopX3dlYl9jcmVhdGVUYXJnZXQKIAogLSAoTlNVUkwgKilVUkwKIHsK
LSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpzdGF0aWNfY2FzdDxBUEk6
OlVSTFJlcXVlc3QqPigmc2VsZi5fYXBpT2JqZWN0KS0+cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCldOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUEk6OlVSTFJlcXVlc3QqPigmc2Vs
Zi5fYXBpT2JqZWN0KS0+cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CiB9CiAKICNwcmFnbWEgbWFy
ayBOU0NvcHlpbmcgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHAKaW5kZXggMjY3NzZkZjVmZDM2ZDYxNTE4NDQ2ZjA5
YmFjYjEwZDZhNzA3ZWMxOS4uNDYyZTg1OTQyYmY1ZDQxYWIwOTc0ZjQ0Yjk0ZDQ3YjYzMWFkYWQw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHAKQEAg
LTY0Myw5ICs2NDMsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8Q0ZVUkxSZWY+OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgQ0ZVUkxSZWYgdXJsKQogICAgIGlmIChiYXNlVVJMKQogICAgICAgICBl
bmNvZGVyIDw8IGJhc2VVUkw7CiAKLSAgICBXVEY6OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7Ci0g
ICAgV1RGOjpnZXRVUkxCeXRlcyh1cmwsIHVybEJ5dGVzKTsKLSAgICBlbmNvZGVyIDw8IElQQzo6
RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1cmxCeXRlcy5k
YXRhKCkpLCB1cmxCeXRlcy5zaXplKCkpOworICAgIGVuY29kZXIgPDwgSVBDOjpEYXRhUmVmZXJl
bmNlKGJ5dGVzQXNWZWN0b3IodXJsKSk7CiB9CiAKIHRlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2Rl
cjxDRlVSTFJlZj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgQ0ZVUkxSZWYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIubW0KaW5kZXggZTA3MTI2YWJiZDk0MTFhZmRjMTJiMmFiZmQw
OGE0ZDEwNzI0MjE5My4uNmRjNWQwMzNkYzY5MzFkMWJiNDc0MDc2NTJiYmY1N2ZkMmEwNmM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCkBAIC02MCw2ICs2MCw3IEBACiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4K
IAogTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbklzTWFpbkZyYW1lS2V5ID0gQCJXS0FjdGlvbklz
TWFpbkZyYW1lS2V5IjsKIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtl
eSA9IEAiV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleSI7CkBAIC0xNTcsNyArMTU4LDcgQEAgLSAo
dm9pZClsb2FkRmlsZVVSTDooTlNVUkwgKilVUkwgcmVzdHJpY3RUb0ZpbGVzV2l0aGluOihOU1VS
TCAqKWFsbG93ZWREaXJlY3RvcnkKICAgICBpZiAodXNlckRhdGEpCiAgICAgICAgIHdrVXNlckRh
dGEgPSBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKIAotICAgIF9w
YWdlLT5sb2FkRmlsZShbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLCBbYWxsb3dl
ZERpcmVjdG9yeSBfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSwgd2tVc2VyRGF0YS5nZXQo
KSk7CisgICAgX3BhZ2UtPmxvYWRGaWxlKGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3QoVVJMKSks
IGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3QoYWxsb3dlZERpcmVjdG9yeSkpLCB3a1VzZXJEYXRh
LmdldCgpKTsKIH0KIAogLSAodm9pZClsb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3Ry
aW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTApAQCAtMTcyLDcgKzE3Myw3IEBAIC0gKHZvaWQp
bG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJh
c2VVUkwgdXNlckRhdGE6CiAgICAgICAgIHdrVXNlckRhdGEgPSBXZWJLaXQ6Ok9iakNPYmplY3RH
cmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKIAogICAgIE5TRGF0YSAqZGF0YSA9IFtIVE1MU3RyaW5n
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKLSAgICBfcGFnZS0+bG9h
ZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVu
Z3RoIH0sICJ0ZXh0L2h0bWwiX3MsICJVVEYtOCJfcywgW2Jhc2VVUkwgX3dlYl9vcmlnaW5hbERh
dGFBc1dURlN0cmluZ10sIHdrVXNlckRhdGEuZ2V0KCkpOworICAgIF9wYWdlLT5sb2FkRGF0YSh7
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwg
InRleHQvaHRtbCJfcywgIlVURi04Il9zLCBieXRlc0FzU3RyaW5nKGJyaWRnZV9jYXN0KGJhc2VV
UkwpKSwgd2tVc2VyRGF0YS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpbG9hZEFsdGVybmF0ZUhUTUxT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJl
YWNoYWJsZVVSTDooTlNVUkwgKil1bnJlYWNoYWJsZVVSTApAQCAtMTkyLDcgKzE5Myw3IEBAIC0g
KHZvaWQpbG9hZERhdGE6KE5TRGF0YSAqKWRhdGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5
cGUgdGV4dEVuY29kaW5nTmFtZTooCiAgICAgaWYgKHVzZXJEYXRhKQogICAgICAgICB3a1VzZXJE
YXRhID0gV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CiAKLSAgICBf
cGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyks
IGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBlbmNvZGluZ05hbWUsIFtiYXNlVVJMIF93ZWJfb3Jp
Z2luYWxEYXRhQXNXVEZTdHJpbmddLCB3a1VzZXJEYXRhLmdldCgpKTsKKyAgICBfcGFnZS0+bG9h
ZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVu
Z3RoIH0sIE1JTUVUeXBlLCBlbmNvZGluZ05hbWUsIGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3Qo
YmFzZVVSTCkpLCB3a1VzZXJEYXRhLmdldCgpKTsKIH0KIAogLSAodm9pZClzdG9wTG9hZGluZwpA
QCAtNTA4LDcgKzUwOSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAg
ICAgICAgICAgICBpZiAob3JpZ2luYXRpbmdGcmFtZSkgewogICAgICAgICAgICAgICAgIGFjdGlv
bkRpY3Rpb25hcnkgPSBhZG9wdE5TKFthY3Rpb25EaWN0aW9uYXJ5IG11dGFibGVDb3B5XSk7Ci0g
ICAgICAgICAgICAgICAgWyhOU011dGFibGVEaWN0aW9uYXJ5ICopYWN0aW9uRGljdGlvbmFyeS5n
ZXQoKSBzZXRPYmplY3Q6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpXZWJLaXQ6OnRvSW1w
bChvcmlnaW5hdGluZ0ZyYW1lKS0+dXJsKCkuc3RyaW5nKCldIGZvcktleTpXS0FjdGlvbk9yaWdp
bmF0aW5nRnJhbWVVUkxLZXldOworICAgICAgICAgICAgICAgIFsoTlNNdXRhYmxlRGljdGlvbmFy
eSAqKWFjdGlvbkRpY3Rpb25hcnkuZ2V0KCkgc2V0T2JqZWN0OihOU1VSTCAqKVdlYktpdDo6dG9J
bXBsKG9yaWdpbmF0aW5nRnJhbWUpLT51cmwoKSBmb3JLZXk6V0tBY3Rpb25PcmlnaW5hdGluZ0Zy
YW1lVVJMS2V5XTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgW3Bv
bGljeURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246YWN0aW9uRGljdGlvbmFyeS5nZXQoKSBkZWNp
c2lvbkhhbmRsZXI6bWFrZVBvbGljeURlY2lzaW9uQmxvY2sobGlzdGVuZXIpLmdldCgpXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0xlZ2FjeURvd25sb2FkQ2xp
ZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5RG93bmxvYWRDbGll
bnQubW0KaW5kZXggMGZiN2U4YWQ5OWJhNDcxZjg5ZGYxYWU5MTA5ODMzMjE2ODBlYmIxYy4uNjU1
ZDg5YjhkODBjZmZjNDBkOTUzMjc4MTEwZTcwZDNlNmEwZTlkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5RG93bmxvYWRDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5RG93bmxvYWRDbGllbnQubW0KQEAgLTI3
Miw3ICsyNzIsNyBAQCB2b2lkIExlZ2FjeURvd25sb2FkQ2xpZW50OjpsZWdhY3lEaWRDYW5jZWwo
RG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIHZvaWQgTGVnYWN5RG93bmxvYWRDbGllbnQ6
OndpbGxTZW5kUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5LCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLmRvd25sb2Fk
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0VG9VUkwpCi0gICAgICAgIFttX2RlbGVnYXRlIF9kb3du
bG9hZDpbX1dLRG93bmxvYWQgZG93bmxvYWRXaXRoRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZFBy
b3h5KV0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0VG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdU
RlN0cmluZzpyZXF1ZXN0LnVybCgpLnN0cmluZygpXV07CisgICAgICAgIFttX2RlbGVnYXRlIF9k
b3dubG9hZDpbX1dLRG93bmxvYWQgZG93bmxvYWRXaXRoRG93bmxvYWQ6d3JhcHBlcihkb3dubG9h
ZFByb3h5KV0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0VG9VUkw6cmVxdWVzdC51cmwoKV07CiAK
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQ
cm9jZXNzUGx1Z0luRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCmluZGV4IGZkYWQxMzBl
MDJiYzNjNTY4YWE0OTk0NzNlMmIxZDc4MDg0YWUyNGUuLmM4MTFlYWQ4Mjk3ODgwMGZkZTAwZGFm
ZjVjMmNjNGM3OTQ2YThiYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlBy
b2Nlc3NQbHVnSW5GcmFtZS5tbQpAQCAtMTEwLDcgKzExMCw3IEBAIC0gKFdLV2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2VyQ29udGV4dENvbnRyb2xsZXIK
IAogLSAoTlNVUkwgKilVUkwKIHsKLSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0
cmluZzpfZnJhbWUtPnVybCgpLnN0cmluZygpXTsKKyAgICByZXR1cm4gX2ZyYW1lLT51cmwoKTsK
IH0KIAogLSAoTlNBcnJheSAqKWNoaWxkRnJhbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgKaW5kZXggZWM3MGVhMzQ1YzRlNDUyODY3ZDc1YWQ0MmVk
YWQ3NmU1NTA3YzU2Zi4uZWM3NDg2MjE0YzZjNGU3ZmIzYTViYWQ5MGRkMWNkYWIyMDUxMGZlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDMwICsyOCwyMyBAQAogCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KIAotLy8gRklYTUU6IENoYW5nZSBtZXRob2QgbmFtZXMgYmFjayB0byBfd2ViXyBmcm9tIF93
ZWJraXRfIHdoZW4gaWRlbnRpY2FsbHktbmFtZWQKLS8vIG1ldGhvZHMgYXJlIG5vIGxvbmdlciBw
cmVzZW50IGluIEZvdW5kYXRpb24uCisvLyBGSVhNRTogQ29uc2lkZXIgcmVuYW1pbmcgdG8gX3dl
Yl8gZnJvbSBfd2Via2l0XyBvbmNlIGlkZW50aWNhbGx5LW5hbWVkIG1ldGhvZHMgYXJlIG5vIGxv
bmdlciBwcmVzZW50IGluIEZvdW5kYXRpb24uCiAKIEBpbnRlcmZhY2UgTlNVUkwgKFdlYk5TVVJM
RXh0cmFzKQogCi0vLyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3Iu
Ci0vLyBQbGVhc2UgdXNlIHRoZSBfd2Via2l0XyBjb3VudGVycGFydHMuCisvLyBEZXByZWNhdGVk
LCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJzaW5nIGVycm9ycy4KKy8vIFBsZWFzZSB1c2UgdGhlIF93
ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmluZyBpbnN0ZWFkLgogKyAoTlNVUkwgKilfd2ViX1VS
TFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotKyAoTlNVUkwgKilfd2Vi
X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6
KE5TVVJMICopVVJMOwogCi0vLyBOZXcgU1BJLgogLy8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFu
cyBlcnJvciBpbiBVUkwgcGFyc2luZy4KICsgKE5TVVJMICopX3dlYmtpdF9VUkxXaXRoVXNlclR5
cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKLSsgKE5TVVJMICopX3dlYmtpdF9VUkxXaXRo
VXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAq
KVVSTDsKIAogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nOwogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTDsKIAotKyAoTlNVUkwgKilfd2Vi
X1VSTFdpdGhEYXRhOihOU0RhdGEgKilkYXRhOwotKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRh
OihOU0RhdGEgKilkYXRhIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopYmFzZVVSTDsKLQogLSAoTlNE
YXRhICopX3dlYl9vcmlnaW5hbERhdGE7CiAtIChOU1N0cmluZyAqKV93ZWJfb3JpZ2luYWxEYXRh
QXNTdHJpbmc7Ci0tIChjb25zdCBjaGFyICopX3dlYl9VUkxDU3RyaW5nOworLSAoY29uc3QgY2hh
ciopX3dlYl9VUkxDU3RyaW5nOwogCiAtIChOU1N0cmluZyAqKV93ZWJfaG9zdFN0cmluZzsKIApA
QCAtNzgsMTQgKzcxLDE2IEBACiAKIC0gKEJPT0wpX3dlYl9pc1VzZXJWaXNpYmxlVVJMOwogCi0v
LyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3IuCi0vLyBQbGVhc2Ug
dXNlIHRoZSBfd2Via2l0XyBjb3VudGVycGFydHMuCi0vLyB0dXJucyBmdW5ueS1sb29raW5nIEFT
Q0lJIGZvcm0gaW50byBVbmljb2RlLCByZXR1cm5zIHNlbGYgaWYgbm8gZGVjb2RpbmcgbmVlZGVk
LCBjb252ZW5pZW50IGNvdmVyCisvLyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNp
bmcgZXJyb3JzLgorLy8gUGxlYXNlIHVzZSBfd2Via2l0X2RlY29kZUhvc3ROYW1lIGluc3RlYWQu
CisvLyBUdXJucyBmdW5ueS1sb29raW5nIEFTQ0lJIGZvcm0gaW50byBVbmljb2RlLCByZXR1cm5z
IHNlbGYgaWYgbm8gZGVjb2RpbmcgbmVlZGVkLgogLSAoTlNTdHJpbmcgKilfd2ViX2RlY29kZUhv
c3ROYW1lOwotLy8gdHVybnMgVW5pY29kZSBpbnRvIGZ1bm55LWxvb2tpbmcgQVNDSUkgZm9ybSwg
cmV0dXJucyBzZWxmIGlmIG5vIGRlY29kaW5nIG5lZWRlZCwgY29udmVuaWVudCBjb3ZlcgorCisv
LyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3JzLgorLy8gUGxlYXNl
IHVzZSB0aGUgX3dlYmtpdF9lbmNvZGVIb3N0TmFtZSBpbnN0ZWFkLgorLy8gVHVybnMgVW5pY29k
ZSBpbnRvIGZ1bm55LWxvb2tpbmcgQVNDSUkgZm9ybSwgcmV0dXJucyBzZWxmIGlmIG5vIGVuY29k
aW5nIG5lZWRlZC4KIC0gKE5TU3RyaW5nICopX3dlYl9lbmNvZGVIb3N0TmFtZTsKIAotLy8gTmV3
IFNQSS4KIC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVhbnMgZXJyb3IgaW4gVVJMIHBhcnNpbmcu
CiAtIChOU1N0cmluZyAqKV93ZWJraXRfZGVjb2RlSG9zdE5hbWU7CiAtIChOU1N0cmluZyAqKV93
ZWJraXRfZW5jb2RlSG9zdE5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJOU1VSTEV4dHJhcy5tbQppbmRleCAxZWMwNGVhYWY1YjQ2NDc2ZDg5OWRmZTg1NWVlZjI2Y2My
OTM1ODJjLi40NDhmMjJmOWEzMTZkMGE3YWYyYzM3YWVkYTJjOTBmNWI2NmM0Zjc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNVUkxFeHRyYXMubW0KQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw3
MCArNDEsMzggQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvVVJM
Lmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvTlNVUkxFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi0jZGVmaW5lIFVSTF9CWVRFU19CVUZG
RVJfTEVOR1RIIDIwNDgKKyNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgogCiBA
aW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYk5TVVJMRXh0cmFzKQogCi0rIChOU1VSTCAqKV93ZWJf
VVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDoo
TlNVUkwgKilVUkwKLXsKLSAgICByZXR1cm4gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0
ZWQoc3RyaW5nLCBVUkwpOwotfQotCiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSAgICByZXR1cm4gVVJMV2l0aFVzZXJUeXBlZFN0
cmluZ0RlcHJlY2F0ZWQoc3RyaW5nLCBuaWwpOwotfQotCi0rIChOU1VSTCAqKV93ZWJraXRfVVJM
V2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNV
UkwgKilVUkwKLXsKLSAgICByZXR1cm4gVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhzdHJpbmcsIFVS
TCk7CisgICAgcmV0dXJuIFdURjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoc3Ry
aW5nKTsKIH0KIAogKyAoTlNVUkwgKilfd2Via2l0X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCiB7Ci0gICAgcmV0dXJuIFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3Ry
aW5nLCBuaWwpOworICAgIHJldHVybiBXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5n
KTsKIH0KIAogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nCiB7Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICB9CiAgICAgcmV0dXJuIFtzZWxmIF93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzpzdHJpbmcg
cmVsYXRpdmVUb1VSTDpuaWxdOwogfQogCiArIChOU1VSTCAqKV93ZWJfVVJMV2l0aERhdGFBc1N0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKiliYXNlVVJMCiB7
Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0g
ICAgc3RyaW5nID0gW3N0cmluZyBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlXTsK
LSAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4x
U3RyaW5nRW5jb2RpbmddOwotICAgIHJldHVybiBVUkxXaXRoRGF0YShkYXRhLCBiYXNlVVJMKTsK
LX0KLQotKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAg
cmV0dXJuIFVSTFdpdGhEYXRhKGRhdGEsIG5pbCk7Ci19ICAgICAgCi0KLSsgKE5TVVJMICopX3dl
Yl9VUkxXaXRoRGF0YTooTlNEYXRhICopZGF0YSByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VV
UkwKLXsKLSAgICByZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwgYmFzZVVSTCk7CisgICAgcmV0dXJu
IFdURjo6VVJMV2l0aERhdGEoW1tzdHJpbmcgX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVz
cGFjZV0gZGF0YVVzaW5nRW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNvZGluZ10sIGJhc2VV
UkwpOwogfQogCiAtIChOU0RhdGEgKilfd2ViX29yaWdpbmFsRGF0YQogewotICAgIHJldHVybiBv
cmlnaW5hbFVSTERhdGEoc2VsZik7CisgICAgcmV0dXJuIFdURjo6b3JpZ2luYWxVUkxEYXRhKHNl
bGYpOwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmcKIHsKLSAg
ICByZXR1cm4gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6b3JpZ2luYWxV
UkxEYXRhKHNlbGYpIGVuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddKS5hdXRvcmVs
ZWFzZSgpOworICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0
YTpXVEY6Om9yaWdpbmFsVVJMRGF0YShzZWxmKSBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0Vu
Y29kaW5nXSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNTdHJpbmcgKilfd2ViX3VzZXJWaXNp
YmxlU3RyaW5nCkBAIC0xMTQsMjIgKzgyLDIyIEBAIC0gKE5TU3RyaW5nICopX3dlYl91c2VyVmlz
aWJsZVN0cmluZwogCiAtIChCT09MKV93ZWJfaXNFbXB0eQogewotICAgIGlmICghQ0ZVUkxHZXRC
YXNlVVJMKChDRlVSTFJlZilzZWxmKSkKLSAgICAgICAgcmV0dXJuIENGVVJMR2V0Qnl0ZXMoKENG
VVJMUmVmKXNlbGYsIE5VTEwsIDApID09IDA7Ci0gICAgcmV0dXJuIFtvcmlnaW5hbFVSTERhdGEo
c2VsZikgbGVuZ3RoXSA9PSAwOworICAgIGlmICghQ0ZVUkxHZXRCYXNlVVJMKGJyaWRnZV9jYXN0
KHNlbGYpKSkKKyAgICAgICAgcmV0dXJuICFDRlVSTEdldEJ5dGVzKGJyaWRnZV9jYXN0KHNlbGYp
LCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gIVtXVEY6Om9yaWdpbmFsVVJMRGF0YShzZWxmKSBs
ZW5ndGhdOwogfQogCi0tIChjb25zdCBjaGFyICopX3dlYl9VUkxDU3RyaW5nCistIChjb25zdCBj
aGFyKilfd2ViX1VSTENTdHJpbmcKIHsKICAgICBOU011dGFibGVEYXRhICpkYXRhID0gW05TTXV0
YWJsZURhdGEgZGF0YV07Ci0gICAgW2RhdGEgYXBwZW5kRGF0YTpvcmlnaW5hbFVSTERhdGEoc2Vs
ZildOworICAgIFtkYXRhIGFwcGVuZERhdGE6V1RGOjpvcmlnaW5hbFVSTERhdGEoc2VsZildOwog
ICAgIFtkYXRhIGFwcGVuZEJ5dGVzOiJcMCIgbGVuZ3RoOjFdOwotICAgIHJldHVybiAoY29uc3Qg
Y2hhciAqKVtkYXRhIGJ5dGVzXTsKKyAgICByZXR1cm4gKGNvbnN0IGNoYXIqKVtkYXRhIGJ5dGVz
XTsKICB9CiAKIC0gKE5TVVJMICopX3dlYmtpdF9jYW5vbmljYWxpemUKIHsKLSAgICByZXR1cm4g
VVJMQnlDYW5vbmljYWxpemluZ1VSTChzZWxmKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6VVJMQnlD
YW5vbmljYWxpemluZ1VSTChzZWxmKTsKIH0KIAogLSAoTlNVUkwgKilfd2Via2l0X2Nhbm9uaWNh
bGl6ZV93aXRoX3d0ZgpAQCAtMTQwLDcgKzEwOCw3IEBAIC0gKE5TVVJMICopX3dlYmtpdF9jYW5v
bmljYWxpemVfd2l0aF93dGYKIAogLSAoTlNVUkwgKilfd2Via2l0X1VSTEJ5UmVtb3ZpbmdGcmFn
bWVudCAKIHsKLSAgICByZXR1cm4gVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29t
cG9uZW50KHNlbGYsIGtDRlVSTENvbXBvbmVudEZyYWdtZW50KTsKKyAgICByZXR1cm4gV1RGOjpV
UkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZvcmVDb21wb25lbnQoc2VsZiwga0NGVVJMQ29t
cG9uZW50RnJhZ21lbnQpOwogfQogCiAtIChOU1VSTCAqKV93ZWJfVVJMQnlSZW1vdmluZ1VzZXJJ
bmZvCkBAIC0xNjMsMjcgKzEzMSw2IEBAIC0gKEJPT0wpX3dlYmtpdF9pc0ZpbGVVUkwKICAgICBy
ZXR1cm4gW1tzZWxmIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddIF93ZWJraXRfaXNGaWxlVVJM
XTsKIH0KIAotLShOU0RhdGEgKilfd2ViX3NjaGVtZVNlcGFyYXRvcldpdGhvdXRDb2xvbgotewot
ICAgIE5TRGF0YSAqcmVzdWx0ID0gbmlsOwotICAgIENGUmFuZ2UgcmFuZ2VXaXRoU2VwYXJhdG9y
czsKLSAgICBDRlJhbmdlIHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKENG
VVJMUmVmKXNlbGYsIGtDRlVSTENvbXBvbmVudFNjaGVtZSwgJnJhbmdlV2l0aFNlcGFyYXRvcnMp
OwotICAgIGlmIChyYW5nZVdpdGhTZXBhcmF0b3JzLmxvY2F0aW9uICE9IGtDRk5vdEZvdW5kKSB7
Ci0gICAgICAgIE5TU3RyaW5nICphYnNvbHV0ZVN0cmluZyA9IFtzZWxmIGFic29sdXRlU3RyaW5n
XTsKLSAgICAgICAgTlNSYW5nZSBzZXBhcmF0b3JzUmFuZ2UgPSBOU01ha2VSYW5nZShyYW5nZS5s
b2NhdGlvbiArIHJhbmdlLmxlbmd0aCArIDEsIHJhbmdlV2l0aFNlcGFyYXRvcnMubGVuZ3RoIC0g
cmFuZ2UubGVuZ3RoIC0gMSk7Ci0gICAgICAgIGlmIChzZXBhcmF0b3JzUmFuZ2UubG9jYXRpb24g
KyBzZXBhcmF0b3JzUmFuZ2UubGVuZ3RoIDw9IFthYnNvbHV0ZVN0cmluZyBsZW5ndGhdKSB7Ci0g
ICAgICAgICAgICBOU1N0cmluZyAqc2xhc2hlcyA9IFthYnNvbHV0ZVN0cmluZyBzdWJzdHJpbmdX
aXRoUmFuZ2U6c2VwYXJhdG9yc1JhbmdlXTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFtzbGFzaGVz
IGRhdGFVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0oTlNEYXRhICopX3dlYl9kYXRhRm9y
VVJMQ29tcG9uZW50VHlwZTooQ0ZVUkxDb21wb25lbnRUeXBlKWNvbXBvbmVudFR5cGUKLXsKLSAg
ICByZXR1cm4gV1RGOjpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShzZWxmLCBjb21wb25lbnRUeXBl
KTsKLX0KLQogLShOU0RhdGEgKilfd2ViX3NjaGVtZURhdGEKIHsKICAgICByZXR1cm4gV1RGOjpk
YXRhRm9yVVJMQ29tcG9uZW50VHlwZShzZWxmLCBrQ0ZVUkxDb21wb25lbnRTY2hlbWUpOwpAQCAt
MTkyLDExICsxMzksMTEgQEAgLShOU0RhdGEgKilfd2ViX3NjaGVtZURhdGEKIC0oTlNEYXRhICop
X3dlYl9ob3N0RGF0YQogewogICAgIE5TRGF0YSAqcmVzdWx0ID0gV1RGOjpkYXRhRm9yVVJMQ29t
cG9uZW50VHlwZShzZWxmLCBrQ0ZVUkxDb21wb25lbnRIb3N0KTsKLSAgICBOU0RhdGEgKnNjaGVt
ZSA9IFtzZWxmIF93ZWJfc2NoZW1lRGF0YV07Ci0gICAgLy8gVGFrZSBvZmYgbG9jYWxob3N0IGZv
ciBmaWxlCi0gICAgaWYgKFtzY2hlbWUgX3dlYl9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9DU3Ry
aW5nOiJmaWxlIl0pIHsKLSAgICAgICAgcmV0dXJuIChbcmVzdWx0IF93ZWJfaXNDYXNlSW5zZW5z
aXRpdmVFcXVhbFRvQ1N0cmluZzoibG9jYWxob3N0Il0pID8gbmlsIDogcmVzdWx0OwotICAgIH0K
KworICAgIC8vIFRha2Ugb2ZmIGxvY2FsaG9zdCBmb3IgZmlsZS4KKyAgICBpZiAoW3Jlc3VsdCBf
d2ViX2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb0NTdHJpbmc6ImxvY2FsaG9zdCJdICYmIFtbc2Vs
ZiBfd2ViX3NjaGVtZURhdGFdIF93ZWJfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvQ1N0cmluZzoi
ZmlsZSJdKQorICAgICAgICByZXR1cm4gbmlsOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMjIzLDcgKzE3MCw3IEBAIEBpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViTlNVUkxFeHRy
YXMpCiAKIC0gKEJPT0wpX3dlYl9pc1VzZXJWaXNpYmxlVVJMCiB7Ci0gICAgcmV0dXJuIGlzVXNl
clZpc2libGVVUkwoc2VsZik7CisgICAgcmV0dXJuIFdURjo6aXNVc2VyVmlzaWJsZVVSTChzZWxm
KTsKIH0KIAogLSAoQk9PTClfd2Via2l0X2lzSmF2YVNjcmlwdFVSTApAQCAtMjM4LDcgKzE4NSw3
IEBAIC0gKEJPT0wpX3dlYmtpdF9pc0ZpbGVVUkwKIAogLSAoTlNTdHJpbmcgKilfd2Via2l0X3N0
cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNjYXBlcwogewotICAgIHJldHVybiBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKHNlbGYpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhzZWxmKSk7CiB9CiAKIC0gKE5TU3RyaW5nICop
X3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkwKQEAgLTI1MSwyNCArMTk4LDI0IEBAIC0gKE5T
U3RyaW5nICopX3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkwKIAogLSAoTlNTdHJpbmcgKilf
d2ViX2RlY29kZUhvc3ROYW1lCiB7Ci0gICAgTlNTdHJpbmcgKm5hbWUgPSBkZWNvZGVIb3N0TmFt
ZShzZWxmKTsKKyAgICBOU1N0cmluZyAqbmFtZSA9IFdURjo6ZGVjb2RlSG9zdE5hbWUoc2VsZik7
CiAgICAgcmV0dXJuICFuYW1lID8gc2VsZiA6IG5hbWU7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dl
Yl9lbmNvZGVIb3N0TmFtZQogewotICAgIE5TU3RyaW5nICpuYW1lID0gZW5jb2RlSG9zdE5hbWUo
c2VsZik7CisgICAgTlNTdHJpbmcgKm5hbWUgPSBXVEY6OmVuY29kZUhvc3ROYW1lKHNlbGYpOwog
ICAgIHJldHVybiAhbmFtZSA/IHNlbGYgOiBuYW1lOwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJr
aXRfZGVjb2RlSG9zdE5hbWUKIHsKLSAgICByZXR1cm4gZGVjb2RlSG9zdE5hbWUoc2VsZik7Cisg
ICAgcmV0dXJuIFdURjo6ZGVjb2RlSG9zdE5hbWUoc2VsZik7CiB9CiAKIC0gKE5TU3RyaW5nICop
X3dlYmtpdF9lbmNvZGVIb3N0TmFtZQogewotICAgIHJldHVybiBlbmNvZGVIb3N0TmFtZShzZWxm
KTsKKyAgICByZXR1cm4gV1RGOjplbmNvZGVIb3N0TmFtZShzZWxmKTsKIH0KIAogLShOU1Jhbmdl
KV93ZWJraXRfcmFuZ2VPZlVSTFNjaGVtZQo=
</data>
<flag name="commit-queue"
          id="467313"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442745</attachid>
            <date>2021-10-28 14:46:50 -0700</date>
            <delta_ts>2021-11-09 13:46:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232220-20211028144650.patch</filename>
            <type>text/plain</type>
            <size>65758</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZhOTAxZjkxMDVjZjhiN2E0Y2RhNzk2
YzYxM2E4MzE1NDk4ODVmNzIuLjIzZTVjZTQ2ZDljNzZlYjM1OWI5NDBiMGE5NjFjMWE1YzUzYjUw
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjEtMTAtMjggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRl
ZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3Zl
IHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1VSTC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1
ZGVzLiBVc2UgZGVmYXVsdCBpbnN0ZWFkIG9mIHsgfQorICAgICAgICBmb3IgZW1wdHkgZGVzdHJ1
Y3Rvci4gQWRkZWQgZW1wdHlDRlVSTCBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi9jZi9DRlVS
TEV4dHJhcy5jcHA6CisgICAgICAgIChXVEY6OmJ5dGVzQXNDRkRhdGEpOiBBZGRlZC4gUmVwbGFj
ZXMgb3JpZ2luYWxVUkxEYXRhIGZyb20gTlNVUkxFeHRyYXMubW0sCisgICAgICAgIGJ1dCB3aXRo
IGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiBhbmQgbW9yZSBlcnJvciBjaGVja2luZy4gSGVyZSBp
dCdzIGFsc28KKyAgICAgICAgYWxvbmdzaWRlIHRoZSBvdGhlciBuZWFybHkgaWRlbnRpY2FsIGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1N0cmluZyk6IEFkZGVkLiBSZXBsYWNlcyBn
ZXRVUkxCeXRlcyBmb3IgY2FsbGVycyB0aGF0IGFyZQorICAgICAgICBnb2luZyB0byB0dXJuIHRo
ZSBieXRlcyBpbnRvIGEgV1RGOjpTdHJpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY2FsbGVy
cworICAgICAgICB3ZXJlIGNvbnZlcnRpbmcgZnJvbSBDRlVSTFJlZiB0byBXVEY6OkNTdHJpbmcg
YW5kIHRoZW4gdG8gV1RGOjpTdHJpbmcsIHNvCisgICAgICAgIHRoaXMgZWxpbWluYXRlcyB0aGUg
bWFsbG9jL2ZyZWUgcGFpciBmb3IgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6Ynl0ZXNBc1ZlY3Rv
cik6IEFkZGVkLiBSZXBsYWNlcyBnZXRVUkxCeXRlcyB1c2luZyBhIHJldHVybiB2YWx1ZQorICAg
ICAgICBpbnN0ZWFkIG9mIGFuIG91dCBhcmd1bWVudC4gQWRkcyB0aGUgb3B0aW1pemF0aW9uIG9m
IGZpbGxpbmcgdGhlIGJ1ZmZlciBpZgorICAgICAgICB0aGUgaW5saW5lIGNhcGFjaXR5IGlzIHN1
ZmZpY2llbnQsIHdoaWNoIHdhcyBpbiBvcmlnaW5hbFVSTERhdGEsIGJ1dCBub3QKKyAgICAgICAg
aGVyZSBpbiBnZXRVUkxCeXRlcyBiZWZvcmUuCisgICAgICAgIChXVEY6OmlzU2FtZU9yaWdpbik6
IFJlbmFtZWQgZnJvbSBpc0NGVVJMU2FtZU9yaWdpbiBhbmQgcmV3cm90ZSB0aGlzIHRvCisgICAg
ICAgIGhhdmUgZmV3ZXIgdHlwZSBjYXN0cyBhbmQgbW9yZSBwYXJhbGxlbCBzdHJ1Y3R1cmUgc28g
aXQncyBlYXNpZXIgdG8gcmVhZCwKKyAgICAgICAgd2hpbGUgYWRhcHRpbmcgaXQgdG8gdXNlIGJ5
dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiB3dGYvY2YvQ0ZVUkxFeHRyYXMuaDogUmVwbGFjZWQg
VVJMQ2hhckJ1ZmZlciwgZ2V0VVJMQnl0ZXMsIGFuZAorICAgICAgICBpc0NGVVJMU2FtZU9yaWdp
biB3aXRoIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHksIGJ5dGVzQXNDRkRhdGEsCisgICAg
ICAgIGJ5dGVzQXNTdHJpbmcsIGJ5dGVzQXNWZWN0b3IsIGFuZCBpc1NhbWVPcmlnaW4uIEdvdCBy
aWQgb2YgdW5uZWVkZWQKKyAgICAgICAgaW5jbHVkZXMuCisKKyAgICAgICAgKiB3dGYvY2YvVVJM
Q0YuY3BwOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IFVzZSBieXRlc0FzU3RyaW5nIHRvIHN0
cmVhbWxpbmUgaW1wbGVtZW50YXRpb24gYW5kCisgICAgICAgIHJlbW92ZSBhbGxvY2F0aW9uL2Rl
YWxsY2F0aW9uIG9mIGEgQ1N0cmluZy4KKyAgICAgICAgKFdURjo6VVJMOjplbXB0eUNGVVJMKTog
QWRkZWQuIFVzZWQgdG8gcmVmYWN0b3IgY3JlYXRlQ0ZVUkwgc28gd2UgY2FuCisgICAgICAgIHNo
YXJlIGl0IGFjcm9zcyBGb3VuZGF0aW9uIGFuZCBub24tRm91bmRhdGlvbiB2ZXJzaW9ucy4KKyAg
ICAgICAgKFdURjo6VVJMOjpjcmVhdGVDRlVSTCBjb25zdCk6IEFkZGVkIHRoZSBsb2dpYyB0aGF0
IHdhcyBpbiB0aGUgdmVyc2lvbgorICAgICAgICBpbiBVUkxDb2NvYS5tbSBzbyB3ZSBjYW4gc2hh
cmUgdGhpcyBzaW5nbGUgdmVyc2lvbiwgYW5kIHJlbW92ZWQgdGhlICNpZgorICAgICAgICBzdXJy
b3VuZGluZyB0aGlzLgorICAgICAgICAoV1RGOjpVUkw6OmZpbGVTeXN0ZW1QYXRoIGNvbnN0KTog
VXNlIGF1dG8uCisKKyAgICAgICAgKiB3dGYvY29jb2EvTlNVUkxFeHRyYXMuaDogQ2hhbmdlZCBV
UkxXaXRoVXNlclR5cGVkU3RyaW5nIHRvIGlnbm9yZQorICAgICAgICB0aGUgYmFzZVVSTCBhcmd1
bWVudC4gSXQncyBub3QgdXNlZCwgYnV0IHRoZSBmdW5jdGlvbiBpcyBleHBvcnRlZCBhbmQKKyAg
ICAgICAgY3VycmVudGx5IHVzZWQgaW4gU2FmYXJpIHNvdXJjZSBjb2RlLCB3aGljaCwgbGlrZSBh
bGwgY2FsbGVycyBwYXNzZXMKKyAgICAgICAgYSBuaWwgZm9yIGJhc2VVUkwuIHNvLCBmb3Igbm93
IGxlZnQgdGhlIGFyZ3VtZW50LiBSZW1vdmVkIHRoZSBiYXNlVVJMCisgICAgICAgIGFyZ3VtZW50
IGZyb20gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQuIFJlbW92ZWQgdW51c2VkIGZ1
bmN0aW9ucworICAgICAgICByYW5nZU9mVVJMU2NoZW1lIGFuZCBsb29rc0xpa2VBYnNvbHV0ZVVS
TC4KKworICAgICAgICAqIHd0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbTogUmVtb3ZlZCAidXNpbmcg
bmFtZXNwYWNlIFVSTEhlbHBlcnMiLgorICAgICAgICAoV1RGOjpyZWFkSUROQWxsb3dlZFNjcmlw
dExpc3RGaWxlKTogVXNlIFVSTEhlbHBlcnMgZXhwbGljaXRseS4KKyAgICAgICAgKFdURjo6ZGVj
b2RlSG9zdE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdURjo6ZW5jb2RlSG9zdE5hbWUpOiBEaXR0
by4KKyAgICAgICAgKFdURjo6VVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9u
ZW50KTogU2ltcGxpZmllZCBieSB1c2luZworICAgICAgICB0aGUgYnl0ZXNBc1ZlY3RvciBmdW5j
dGlvbi4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ1Jlc291cmNlU3BlY2lmaWVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VVJMV2l0aERhdGEpOiBDYWxsIFVSTEJ5VHJ1bmNhdGluZ09u
ZUNoYXJhY3RlckJlZm9yZUNvbXBvbmVudAorICAgICAgICBkaXJlY3RseS4KKyAgICAgICAgKFdU
Rjo6VVJMV2l0aFVzZXJUeXBlZFN0cmluZyk6IFJlbW92ZWQgdGhlIHVubmVlZGVkIHN1cHBvcnQg
Zm9yIGEKKyAgICAgICAgYmFzZSBVUkwuIFVzZSBVUkxIZWxwZXJzIGV4cGxpY2l0bHkuCisgICAg
ICAgIChXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKTogRGl0dG8uCisgICAg
ICAgIChXVEY6Omhhc1F1ZXN0aW9uTWFya09ubHlRdWVyeVN0cmluZyk6IFVzZSBicmlkZ2VfY2Fz
dC4KKyAgICAgICAgKFdURjo6ZGF0YUZvclVSTENvbXBvbmVudFR5cGUpOiBSZWFycmFuZ2VkIHRv
IHNpbXBsaWZ5IGEgYml0LCByZW1vdmUgc3VwcG9ydAorICAgICAgICBmb3Igc3BlY2lhbCB2YWx1
ZSBmb3IgQ0ZVUkxDb21wb25lbnRUeXBlIHRoYXQgbWVhbnMgdGhlIGNvbXBsZXRlIFVSTCwgc2lu
Y2UKKyAgICAgICAgbm8gY2FsbGVycyB3ZXJlIHVzaW5nIHRoYXQsIGFuZCB1c2UgYnl0ZXNBc1Zl
Y3Rvci4KKyAgICAgICAgKFdURjo6VVJMQnlSZW1vdmluZ0NvbXBvbmVudEFuZFN1YnNlcXVlbnRD
aGFyYWN0ZXIpOiBVc2UgYnJpZGdlX2Nhc3QgYW5kCisgICAgICAgIGJ5dGVzQXNWZWN0b3IuCisg
ICAgICAgIChXVEY6Om9yaWdpbmFsVVJMRGF0YSk6IFVzZSBicmlkZ2VfY2FzdCBhbmQgYnl0ZXNB
c0NGRGF0YS4KKyAgICAgICAgKFdURjo6dXNlclZpc2libGVTdHJpbmcpOiBVc2UgVVJMSGVscGVy
cyBleHBsaWNpdGx5LgorICAgICAgICAoV1RGOjppc1VzZXJWaXNpYmxlVVJMKTogUmV3cm90ZSBm
b3Igc2ltcGxpY2l0eSBhbmQgY29kaW5nIHN0eWxlOyBzaW5jZQorICAgICAgICB0aGUgbG9jYWwg
Y2hhcmFjdGVycyBhcmUgYSBudWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmcsIHdlIGRvbid0IG5lZWQK
KyAgICAgICAgbGVuZ3RoIGNoZWNrcyBhcyBsb25nIGFzIHdlIHZhbGlkYXRlIGNoYXJhY3RlcnMg
Zmlyc3QsIHNpbmNlIGEgJ1wwJworICAgICAgICBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQgYW5kIHdp
bGwgbm90IGJlIHZhbGlkLgorICAgICAgICAoV1RGOjpyYW5nZU9mVVJMU2NoZW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6bG9va3NMaWtlQWJzb2x1dGVVUkwpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL2NvY29hL1VSTENvY29hLm1tOgorICAgICAgICAoV1RGOjpVUkw6OlVSTCk6IENo
YW5nZWQgdG8ganVzdCBjYWxsIHRoZSBDRlVSTFJlZiBjb25zdHJ1Y3RvciBzbyB3ZQorICAgICAg
ICBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGluZ3MgdHdpY2UuCisgICAgICAgIChXVEY6OlVSTDo6
ZW1wdHlDRlVSTCk6IEFkZGVkLiBUaGlzIGlzIHRoZSBvbmUgcGFydCBvZiB0aGUgY3JlYXRlQ0ZV
UkwKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBkZXBlbmRzIG9uIE9iamVjdGl2ZS1DLgorICAgICAg
ICAoV1RGOjpVUkw6OmNyZWF0ZUNGVVJMIGNvbnN0KTogTWVyZ2VkIGludG8gdGhlIGZ1bmN0aW9u
IGluIFVSTENGLmNwcC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJy
aWRnZV9jYXN0IGluc3RlYWQgb2YgdGhlIHRyaWNraWVyCisgICAgICAgIGlkaW9tIHdpdGggZXhw
bGljaXQgY2FsbHMgdG8gbGVha1JlZiBhbmQgX19icmlkZ2VfdHJhbnNmZXIuCisKKyAgICAgICAg
KiB3dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXVEY6OkZpbGVTeXN0ZW06OnNl
dE1ldGFkYXRhVVJMKTogVXBkYXRlZCBzaW5jZSBVUkxXaXRoVXNlclR5cGVkU3RyaW5nCisgICAg
ICAgIG5vIGxvbmdlciByZXF1aXJlcyBhIGJhc2VVUkwgb2YgbmlsIHRvIGJlIHBhc3NlZC4gQWxz
byByZW1vdmVkIGV4cGxpY2l0CisgICAgICAgIFdURiBuYW1lc3BhY2Ugc2luY2UgdGhpcyBjb2Rl
IGl0c2VsZiBpcyBpbiB0aGUgV1RGIG5hbWVzcGFjZS4KKworICAgICAgICAqIHd0Zi90ZXh0L2Nv
Y29hL1N0cmluZ0NvY29hLm1tOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6IFVzZSBi
cmlkZ2VfY2FzdC4KKyAgICAgICAgKFdURjo6bWFrZU5TQXJyYXlFbGVtZW50KTogVXNlIGJyaWRn
ZV9jYXN0LgorCiAyMDIxLTEwLTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRGlzYWJsZSBORVRTQ0FQRV9QTFVHSU5fQVBJIGF0IGJ1aWxk
IHRpbWUgb24gbWFjT1MgYW5kIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDY2YTQ0NzdjMDlmODJjOWE4
MWM0NmU0MWRmNmIxOTNjNDdhNmJjNy4uYjZmMjU3YzFhNjU1N2U2MzIxZmE1MzBmOWRjNmJiM2Fh
ZGRjMzExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAyMS0xMC0yOCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NGXSBSZWR1Y2UgZHVwbGljYXRpb24g
YW5kIHVubmVlZGVkIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weWluZyBpbiBVUkwgY29kZSwg
YWxzbyByZW1vdmUgdW51c2VkIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvY2YvV0tVUkxD
Ri5tbToKKyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aENGVVJMKTogVXNlIGJ5dGVzQXNTdHJpbmcs
IHNhdmluZyBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24KKyAgICAgICAgb2YgYSBDU3RyaW5nIGVh
Y2ggdGltZSB0aGlzIGlzIGNhbGxlZC4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9Bcmd1bWVu
dENvZGVyc0NvY29hLm1tOgorICAgICAgICAoLVtXS1NlY3VyZUNvZGluZ1VSTFdyYXBwZXIgZW5j
b2RlV2l0aENvZGVyOl0pOiBVc2UgYnl0ZXNBc1ZlY3Rvci4KKworICAgICAgICAqIFNoYXJlZC9D
b2NvYS9XS05TVVJMRXh0cmFzLmg6IFJlbW92ZWQgdW51c2VkIG1ldGhvZHMKKyAgICAgICAgK1tO
U1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6cmVsYXRpdmVUb1VSTDpdIGFuZAorICAgICAgICAt
W05TVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLgorCisgICAgICAgICogU2hhcmVk
L0NvY29hL1dLTlNVUkxFeHRyYXMubW06CisgICAgICAgICgrW05TVVJMIF93ZWJfVVJMV2l0aFdU
RlN0cmluZzpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtOU1VSTCBfd2Vi
X29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nXSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBTaGFyZWQv
Q29jb2EvV0tOU1VSTFJlcXVlc3QubW06CisgICAgICAgICgtW1dLTlNVUkxSZXF1ZXN0IFVSTF0p
OiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gK1tOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6
XQorICAgICAgICBiZWNhdXNlIHRoaXMgY29kZSBpcyBjb252ZXJ0aW5nIGEgV1RGOjpVUkwgdG8g
YW4gTlNVUkwsIHdoaWNoIGNhbiB1c2UgdGhlIGNvbnZlcnNpb24KKyAgICAgICAgb3BlcmF0b3Ig
aW4gdGhlIFdURjo6VVJMIGNsYXNzLgorCisgICAgICAgICogU2hhcmVkL2NmL0FyZ3VtZW50Q29k
ZXJzQ0YuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENGVVJMUmVmPjo6ZW5jb2Rl
KTogVXNlIGJ5dGVzQXNWZWN0b3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyIGxvYWRGaWxlVVJMOnJlc3RyaWN0VG9GaWxlc1dpdGhpbjp1c2VyRGF0YTpd
KToKKyAgICAgICAgVXNlIGJ5dGVzQXNTdHJpbmcgYW5kIGJyaWRnZV9jYXN0LgorICAgICAgICAo
LVtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgbG9hZEhUTUxTdHJpbmc6YmFzZVVSTDp1c2Vy
RGF0YTpdKTogRGl0dG8uCisgICAgICAgICgtW1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBs
b2FkRGF0YTpNSU1FVHlwZTp0ZXh0RW5jb2RpbmdOYW1lOmJhc2VVUkw6dXNlckRhdGE6XSk6IERp
dHRvLgorICAgICAgICAoc2V0VXBQYWdlUG9saWN5Q2xpZW50KTogUmVtb3ZlZCB1bm5lZWRlZCBj
YWxsIHRvICtbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl0KKyAgICAgICAgYmVjYXVzZSB0
aGlzIGNvZGUgaXMgY29udmVydGluZyBhIFdURjo6VVJMIHRvIGFuIE5TVVJMLCB3aGljaCBjYW4g
dXNlIHRoZSBjb252ZXJzaW9uCisgICAgICAgIG9wZXJhdG9yIGluIHRoZSBXVEY6OlVSTCBjbGFz
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9MZWdhY3lEb3dubG9hZENsaWVudC5tbToK
KyAgICAgICAgKFdlYktpdDo6TGVnYWN5RG93bmxvYWRDbGllbnQ6OndpbGxTZW5kUmVxdWVzdCk6
IFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0bworICAgICAgICArW05TVVJMIF93ZWJfVVJMV2l0aFdU
RlN0cmluZzpdIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGNvbnZlcnRpbmcgYSBXVEY6OlVSTCB0byBh
biBOU1VSTCwKKyAgICAgICAgd2hpY2ggY2FuIHVzZSB0aGUgY29udmVyc2lvbiBvcGVyYXRvciBp
biB0aGUgV1RGOjpVUkwgY2xhc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW06CisgICAgICAgICgtW1dLV2Vi
UHJvY2Vzc1BsdWdJbkZyYW1lIFVSTF0pOiBEaXR0by4KKwogMjAyMS0xMC0yOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIERpc2FibGUgTkVU
U0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1hY09TIGFuZCBXaW5kb3dzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMjFlYTEzMDY5MDQ2MTNiNDRhYTU4M2JkYzRlNTIy
YTM2NGEzYzI0NC4uMDNkN2EyZjBmZDg3NzJiNGFkM2I3NjJjNzc3MjY2NzNlZjEzYmRmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTEwLTI4ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ0ZdIFJlZHVjZSBkdXBs
aWNhdGlvbiBhbmQgdW5uZWVkZWQgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5aW5nIGluIFVS
TCBjb2RlLCBhbHNvIHJlbW92ZSB1bnVzZWQgbWV0aG9kcyBhbmQgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIyMjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViTlNVUkxF
eHRyYXMuaDogVHdlYWtlZCBjb21tZW50cyBhIGJpdC4gTm8gbmVlZCB0byBzYXkgbWV0aG9kcyBh
cmUgIm5ldyIsIHNpbmNlCisgICAgICAgIHRoYXQgd29uJ3QgYmUgdHJ1ZSBpbiB0aGUgZnV0dXJl
LiBSZW1vdmVkIHVudXNlZCBtZXRob2RzCisgICAgICAgICtbTlNVUkwgX3dlYl9VUkxXaXRoVXNl
clR5cGVkU3RyaW5nOnJlbGF0aXZlVG9VUkw6XSwKKyAgICAgICAgK1tOU1VSTCBfd2Via2l0X1VS
TFdpdGhVc2VyVHlwZWRTdHJpbmc6cmVsYXRpdmVUb1VSTDpdLAorICAgICAgICArW05TVVJMIF93
ZWJfVVJMV2l0aERhdGE6XSwgK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRhOnJlbGF0dmVUb1VSTDpd
LgorICAgICAgICBXYW50ZWQgdG8gcmVtb3ZlIGV2ZW4gbW9yZSBuZWFybHkgdW51c2VkIG1ldGhv
ZHM6IG1hbnkgd2VyZSB1c2VkIG9ubHkKKyAgICAgICAgaW5zaWRlIHRoZSBXZWJLaXQgcHJvamVj
dCwgaW4gbGVnYWN5IHBsdWctaW4gY29kZSwgYW5kIHNvbWUgc2VlbWVkIHVudXNlZCwKKyAgICAg
ICAgYnV0IGl0IHdhc24ndCBlYXN5IGZvciBtZSB0byBxdWlja2x5IHZlcmlmeSB0aGF0LgorCisg
ICAgICAgICogTWlzYy9XZWJOU1VSTEV4dHJhcy5tbTogUmVtb3ZlZCAidXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmUiIGFuZAorICAgICAgICAidXNpbmcgbmFtZXNwYWNlIFdURiIuCisgICAgICAgICgr
W05TVVJMIF93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxl
dGVkLgorICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6XSk6IFVz
ZSBXVEYgcHJlZml4IGV4cGxpY2l0bHkuCisgICAgICAgICgrW05TVVJMIF93ZWJraXRfVVJMV2l0
aFVzZXJUeXBlZFN0cmluZzpyZWxhdGl2ZVRvVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoK1tO
U1VSTCBfd2Via2l0X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6XSk6IFVzZSBXVEYgcHJlZml4IGV4
cGxpY2l0bHkuCisgICAgICAgICgrW05TVVJMIF93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzpdKTog
UmVtb3ZlZCBzcGVjaWFsIGNhc2UgZm9yIG5pbCBzaW5jZSB0aGUgY29kZQorICAgICAgICB3aWxs
IGRvIHRoZSByaWdodCB0aGluZyB3aXRoIG5pbCB3aXRob3V0IGFuIGV4cGxpY2l0IGNoZWNrLgor
ICAgICAgICAoK1tOU1VSTCBfd2ViX1VSTFdpdGhEYXRhQXNTdHJpbmc6cmVsYXRpdmVUb1VSTF0p
OiBEaXR0by4gQWxzbyBmb3JtYXR0ZWQgdGhlIGNvZGUKKyAgICAgICAgYXMgYSBvbmUtbGluZXIu
CisgICAgICAgICgrW05TVVJMIF93ZWJfVVJMV2l0aERhdGE6XSk6IERlbGV0ZWQuCisgICAgICAg
ICgrW05TVVJMIF93ZWJfVVJMV2l0aERhdGE6cmVsYXRpdmVUb1VSTDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bTlNVUkwgX3dlYl9vcmlnaW5hbERhdGFdKTogVXNlIFdURiBwcmVmaXggZXhwbGlj
aXRseS4KKyAgICAgICAgKC1bTlNVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10pOiBEaXR0
by4KKyAgICAgICAgKC1bTlNVUkwgX3dlYl9pc0VtcHR5XSk6IFVzZSBicmlkZ2VfY2FzdCBhbmQg
bWFrZSBjb2RlIHN0eWxlIGNoZWNrZXIgaGFwcHkgYnkgdXNpbmcKKyAgICAgICAgIiEiIGluc3Rl
YWQgb2YgIj09IDAiLgorICAgICAgICAoLVtOU1VSTCBfd2ViX1VSTENTdHJpbmddKTogVXNlIFdU
RiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAgKC1bTlNVUkwgX3dlYmtpdF9jYW5vbmljYWxp
emVdKTogVXNlIFdlYkNvcmUgcHJlZml4IGV4cGxpY2l0bHkuCisgICAgICAgICgtW05TVVJMIF93
ZWJraXRfVVJMQnlSZW1vdmluZ0ZyYWdtZW50XSk6IFVzZSBXVEYgcHJlZml4IGV4cGxpY2l0bHku
CisgICAgICAgICgtW05TVVJMIF93ZWJfc2NoZW1lU2VwYXJhdG9yV2l0aG91dENvbG9uXSk6IERl
bGV0ZWQuCisgICAgICAgICgtW05TVVJMIF93ZWJfZGF0YUZvclVSTENvbXBvbmVudFR5cGU6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW05TVVJMIF93ZWJfaG9zdERhdGFdKTogVXNlIFdURiBwcmVm
aXggZXhwbGljaXRseS4gUmVhcnJhbmdlZCBmb3IgY2xhcml0eSBhbmQKKyAgICAgICAgc2xpZ2h0
bHkgaW1wcm92ZWQgZWZmaWNpZW5jeSBhcyB3ZWxsLgorICAgICAgICAoLVtOU1N0cmluZyBfd2Vi
X2lzVXNlclZpc2libGVVUkxdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4KKyAgICAgICAg
KC1bTlNTdHJpbmcgX3dlYmtpdF9zdHJpbmdCeVJlcGxhY2luZ1ZhbGlkUGVyY2VudEVzY2FwZXNd
KTogVXNlIFdlYkNvcmUgcHJlZml4CisgICAgICAgIGV4cGxpY2l0bHkuCisgICAgICAgICgtW05T
U3RyaW5nIF93ZWJfZGVjb2RlSG9zdE5hbWVdKTogVXNlIFdURiBwcmVmaXggZXhwbGljaXRseS4K
KyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYl9lbmNvZGVIb3N0TmFtZV0pOiBEaXR0by4KKyAgICAg
ICAgKC1bTlNTdHJpbmcgX3dlYmtpdF9kZWNvZGVIb3N0TmFtZV0pOiBEaXR0by4KKyAgICAgICAg
KC1bTlNTdHJpbmcgX3dlYmtpdF9lbmNvZGVIb3N0TmFtZV0pOiBEaXR0by4KKwogMjAyMS0xMC0y
OCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IERpc2FibGUgTkVUU0NBUEVfUExVR0lOX0FQSSBhdCBidWlsZCB0aW1lIG9uIG1hY09TIGFuZCBX
aW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VUkwuaCBiL1NvdXJjZS9XVEYvd3Rm
L1VSTC5oCmluZGV4IGU1ODY5MDI2ZWNhMjEwMmIwYjc5M2QyZTA1MzI2NDNlYTRjZjI5MzcuLmNl
YTRiN2E3NTQyYmQ2MWRmN2JkNTg1NzcwMDgzMGM4MTkxZjlhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1VSTC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VSTC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsOCArMjUs
NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWYgVVNFKEdMSUIpICYmIEhBVkUoR1VSSSkKQEAgLTUwLDcgKzQ4LDcgQEAgY2xhc3MgVVJMVGV4
dEVuY29kaW5nIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVG
b3JVUkxQYXJzaW5nKFN0cmluZ1ZpZXcpIGNvbnN0ID0gMDsKIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5VUkxUZXh0RW5jb2RpbmcoKSB7IH0KKyAgICB2aXJ0dWFsIH5VUkxUZXh0RW5jb2Rpbmco
KSA9IGRlZmF1bHQ7CiB9OwogCiBjbGFzcyBVUkwgewpAQCAtODIsNyArODAsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAK
LSAgICAvLyBTaW5jZSB3ZSBvdmVybG9hZCBvcGVyYXRvciBOU1VSTCogd2UgaGF2ZSB0aGlzIHRv
IHByZXZlbnQgYWNjaWRlbnRhbGx5IHVzaW5nIHRoYXQgb3BlcmF0b3IKKyAgICAvLyBTaW5jZSB3
ZSBvdmVybG9hZCBvcGVyYXRvciBOU1VSTCAqIHdlIGhhdmUgdGhpcyB0byBwcmV2ZW50IGFjY2lk
ZW50YWxseSB1c2luZyB0aGF0IG9wZXJhdG9yCiAgICAgLy8gd2hlbiBwbGFjaW5nIGEgVVJMIGlu
IGFuIGlmIHN0YXRtZW50LgogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCA9IGRlbGV0ZTsKIApA
QCAtMTk1LDcgKzE5Myw4IEBAIHB1YmxpYzoKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBwcmlu
dCgpIGNvbnN0OwogI2VuZGlmCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBVUkwmKTsK
QEAgLTIxNCw2ICsyMTMsMTAgQEAgcHJpdmF0ZToKIAogICAgIGZyaWVuZCBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoY29uc3QgVVJMJiwgY29uc3Qg
VVJMJik7CiAKKyNpZiBVU0UoQ0YpCisgICAgc3RhdGljIFJldGFpblB0cjxDRlVSTFJlZj4gZW1w
dHlDRlVSTCgpOworI2VuZGlmCisKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAKICAgICB1bnNpZ25l
ZCBtX2lzVmFsaWQgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRy
YXMuY3BwIGIvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuY3BwCmluZGV4IGM4YmUwNjc0
YTRlYWJjNTkwOTBiNzMzZTdjNTIxYjM4MmY0OTA2YjkuLmVmYTljZjgyMjQ3YWU2NmFmZmYxOTk2
MWE5ZWU1ZDhmNGQ0MmRhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0
cmFzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9DRlVSTEV4dHJhcy5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDMgKzI3
LDYzIEBACiAjaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+CiAKICNpbmNsdWRlIDx3dGYv
VVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAotdm9pZCBnZXRVUkxCeXRlcyhDRlVSTFJlZiB1cmwsIFVSTENoYXJCdWZmZXImIHJlc3VsdCkK
K1JldGFpblB0cjxDRkRhdGFSZWY+IGJ5dGVzQXNDRkRhdGEoQ0ZVUkxSZWYgdXJsKQogewotICAg
IENGSW5kZXggYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0g
ICAgcmVzdWx0LnJlc2l6ZShieXRlc0xlbmd0aCk7Ci0gICAgQ0ZJbmRleCBmaW5hbExlbmd0aCA9
IENGVVJMR2V0Qnl0ZXModXJsLCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4ocmVzdWx0LmRhdGEo
KSksIGJ5dGVzTGVuZ3RoKTsKLSAgICBBU1NFUlRfVU5VU0VEKGZpbmFsTGVuZ3RoLCBmaW5hbExl
bmd0aCA9PSBieXRlc0xlbmd0aCk7CisgICAgYXV0byBieXRlc0xlbmd0aCA9IENGVVJMR2V0Qnl0
ZXModXJsLCBudWxscHRyLCAwKTsKKyAgICBSRUxFQVNFX0FTU0VSVChieXRlc0xlbmd0aCAhPSAt
MSk7CisgICAgYXV0byBidWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFsbG9jKGJ5dGVz
TGVuZ3RoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyKTsKKyAgICBDRlVSTEdldEJ5dGVz
KHVybCwgYnVmZmVyLCBieXRlc0xlbmd0aCk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlV2l0aEJ5dGVzTm9Db3B5KG51bGxwdHIsIGJ1ZmZlciwgYnl0ZXNMZW5ndGgsIGtDRkFsbG9j
YXRvck1hbGxvYykpOwogfQogCi12b2lkIGdldFVSTEJ5dGVzKENGVVJMUmVmIHVybCwgQ1N0cmlu
ZyYgcmVzdWx0KQorU3RyaW5nIGJ5dGVzQXNTdHJpbmcoQ0ZVUkxSZWYgdXJsKQogewotICAgIENG
SW5kZXggYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5dGVzKHVybCwgbnVsbHB0ciwgMCk7Ci0gICAg
Y2hhciogYnl0ZXM7Ci0gICAgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChieXRl
c0xlbmd0aCwgYnl0ZXMpOwotICAgIENGSW5kZXggZmluYWxMZW5ndGggPSBDRlVSTEdldEJ5dGVz
KHVybCwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KGJ5dGVzKSwgYnl0ZXNMZW5ndGgpOwotICAg
IEFTU0VSVF9VTlVTRUQoZmluYWxMZW5ndGgsIGZpbmFsTGVuZ3RoID09IGJ5dGVzTGVuZ3RoKTsK
KyAgICBhdXRvIGJ5dGVzTGVuZ3RoID0gQ0ZVUkxHZXRCeXRlcyh1cmwsIG51bGxwdHIsIDApOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVuZ3RoICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChieXRlc0xlbmd0aCA8PSBzdGF0aWNfY2FzdDxDRkluZGV4PihTdHJpbmc6Ok1heExlbmd0aCkp
OworICAgIExDaGFyKiBidWZmZXI7CisgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYnl0ZXNMZW5ndGgsIGJ1ZmZlcik7CisgICAgQ0ZVUkxHZXRCeXRlcyh1cmws
IGJ1ZmZlciwgYnl0ZXNMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgaXND
RlVSTFNhbWVPcmlnaW4oQ0ZVUkxSZWYgY2ZVUkwsIGNvbnN0IFVSTCYgdXJsKQorVmVjdG9yPHVp
bnQ4X3QsIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3IoQ0ZVUkxS
ZWYgdXJsKQogewotICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKTsKKyAg
ICBWZWN0b3I8dWludDhfdCwgVVJMQnl0ZXNWZWN0b3JJbmxpbmVDYXBhY2l0eT4gcmVzdWx0KFVS
TEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHkpOworICAgIGF1dG8gYnl0ZXNMZW5ndGggPSBDRlVS
TEdldEJ5dGVzKHVybCwgcmVzdWx0LmRhdGEoKSwgVVJMQnl0ZXNWZWN0b3JJbmxpbmVDYXBhY2l0
eSk7CisgICAgaWYgKGJ5dGVzTGVuZ3RoICE9IC0xKQorICAgICAgICByZXN1bHQuc2hyaW5rKGJ5
dGVzTGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYnl0ZXNMZW5ndGggPSBDRlVSTEdldEJ5
dGVzKHVybCwgbnVsbHB0ciwgMCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVzTGVuZ3Ro
ICE9IC0xKTsKKyAgICAgICAgcmVzdWx0Lmdyb3coYnl0ZXNMZW5ndGgpOworICAgICAgICBDRlVS
TEdldEJ5dGVzKHVybCwgcmVzdWx0LmRhdGEoKSwgYnl0ZXNMZW5ndGgpOworICAgIH0KIAotICAg
IGlmICh1cmwuaGFzQ3JlZGVudGlhbHMoKSkKLSAgICAgICAgcmV0dXJuIHByb3RvY29sSG9zdEFu
ZFBvcnRBcmVFcXVhbCh1cmwsIFVSTCB7IGNmVVJMIH0pOworICAgIC8vIFRoaXMgbWF5IGxvb2sg
bGlrZSBpdCBjb3BpZXMgdGhlIGJ5dGVzIGluIHRoZSB2ZWN0b3IsIGJ1dCBkdWUgdG8gdGhlIHJl
dHVybiB2YWx1ZSBvcHRpbWl6YXRpb24gaXQgZG9lcyBub3QuCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworYm9vbCBpc1NhbWVPcmlnaW4oQ0ZVUkxSZWYgYSwgY29uc3QgVVJMJiBiKQoreworICAg
IEFTU0VSVChiLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSk7CisKKyAgICBpZiAoYi5oYXNDcmVk
ZW50aWFscygpKQorICAgICAgICByZXR1cm4gcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGEs
IGIpOwogCi0gICAgVVJMQ2hhckJ1ZmZlciBieXRlczsKLSAgICBnZXRVUkxCeXRlcyhjZlVSTCwg
Ynl0ZXMpOwotICAgIFN0cmluZ1ZpZXcgY2ZVUkxTdHJpbmcgeyByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oYnl0ZXMuZGF0YSgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ5dGVzLnNp
emUoKSkgfTsKKyAgICBhdXRvIGFCeXRlcyA9IGJ5dGVzQXNWZWN0b3IoYSk7CisgICAgU3RyaW5n
VmlldyBhU3RyaW5nIHsgYUJ5dGVzLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFCeXRl
cy5zaXplKCkpIH07CisgICAgU3RyaW5nVmlldyBiU3RyaW5nIHsgYi5zdHJpbmcoKSB9OwogCi0g
ICAgaWYgKCF1cmwuaGFzUGF0aCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyB7IHVybC5z
dHJpbmcoKSB9ID09IGNmVVJMU3RyaW5nOworICAgIGlmICghYi5oYXNQYXRoKCkpCisgICAgICAg
IHJldHVybiBhU3RyaW5nID09IGJTdHJpbmc7CiAKLSAgICBhdXRvIHVybFdpdGhvdXRQYXRoID0g
U3RyaW5nVmlldyB7IHVybC5zdHJpbmcoKSB9LnN1YnN0cmluZygwLCB1cmwucGF0aFN0YXJ0KCkg
KyAxKTsKLSAgICByZXR1cm4gY2ZVUkxTdHJpbmcuc3RhcnRzV2l0aCh1cmxXaXRob3V0UGF0aCk7
CisgICAgdW5zaWduZWQgYWZ0ZXJQYXRoU2VwYXJhdG9yID0gYi5wYXRoU3RhcnQoKSArIDE7Cisg
ICAgcmV0dXJuIGFTdHJpbmcubGVmdChhZnRlclBhdGhTZXBhcmF0b3IpID09IGJTdHJpbmcubGVm
dChhZnRlclBhdGhTZXBhcmF0b3IpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9jZi9DRlVSTEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvY2YvQ0ZVUkxFeHRyYXMuaAppbmRl
eCBmMWI0NzkzYTFmZWFlZjhjYTE5MDMyZDBjYTUxODFkYjM0NzQ1OTA3Li44NDQ3N2I1ZTM2YTE4
NzNiOTExNDFiNDJkZjRjZTc1MmQ0MjNlYzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9j
Zi9DRlVSTEV4dHJhcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL0NGVVJMRXh0cmFzLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
MTcgKzI2LDIyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRhdGEqIENGRGF0YVJlZjsKK3R5cGVkZWYgY29uc3Qgc3Ry
dWN0IF9fQ0ZVUkwqIENGVVJMUmVmOwogCiBuYW1lc3BhY2UgV1RGIHsKIAotY2xhc3MgVVJMOwot
dHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEyPiBVUkxDaGFyQnVmZmVyOworY29uc3RleHByIHNpemVf
dCBVUkxCeXRlc1ZlY3RvcklubGluZUNhcGFjaXR5ID0gMjA0ODsKIAotV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZ2V0VVJMQnl0ZXMoQ0ZVUkxSZWYsIFVSTENoYXJCdWZmZXImKTsKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGdldFVSTEJ5dGVzKENGVVJMUmVmLCBDU3RyaW5nJik7CitSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBieXRlc0FzQ0ZEYXRhKENGVVJMUmVmKTsKK1dURl9FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgYnl0ZXNBc1N0cmluZyhDRlVSTFJlZik7CitXVEZfRVhQT1JUX1BSSVZBVEUgVmVj
dG9yPHVpbnQ4X3QsIFVSTEJ5dGVzVmVjdG9ySW5saW5lQ2FwYWNpdHk+IGJ5dGVzQXNWZWN0b3Io
Q0ZVUkxSZWYpOwogCi1ib29sIGlzQ0ZVUkxTYW1lT3JpZ2luKENGVVJMUmVmLCBjb25zdCBVUkwm
KTsKK2Jvb2wgaXNTYW1lT3JpZ2luKENGVVJMUmVmLCBjb25zdCBVUkwmKTsKIAogfQorCit1c2lu
ZyBXVEY6OmJ5dGVzQXNDRkRhdGE7Cit1c2luZyBXVEY6OmJ5dGVzQXNTdHJpbmc7Cit1c2luZyBX
VEY6OmJ5dGVzQXNWZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9VUkxDRi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9VUkxDRi5jcHAKaW5kZXggZWQ1MTVjMDgwODk5MDBmZjhj
NTJkZWI3OGUwZTczZGVlNDg3ZmEzZi4uNDljYjcwN2YyYWIwM2M0MmEzYTBiMzc4OTU4MzBhZGFl
ZmU3N2JiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2YvVVJMQ0YuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL2NmL1VSTENGLmNwcApAQCAtMzUsMzkgKzM1LDQ3IEBAIG5hbWVzcGFjZSBX
VEYgewogCiBVUkw6OlVSTChDRlVSTFJlZiB1cmwpCiB7Ci0gICAgaWYgKCF1cmwpIHsKKyAgICAv
LyBGSVhNRTogV2h5IGlzIGl0IE9LIHRvIGlnbm9yZSB0aGUgYmFzZSBVUkwgaW4gdGhlIENGVVJM
IGhlcmU/CisgICAgaWYgKCF1cmwpCiAgICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8gaWdub3JlIGJhc2Ug
VVJMIGhlcmU/Ci0gICAgQ1N0cmluZyB1cmxCeXRlczsKLSAgICBnZXRVUkxCeXRlcyh1cmwsIHVy
bEJ5dGVzKTsKLSAgICBVUkxQYXJzZXIgcGFyc2VyKHVybEJ5dGVzLmRhdGEoKSk7Ci0gICAgKnRo
aXMgPSBwYXJzZXIucmVzdWx0KCk7CisgICAgZWxzZQorICAgICAgICAqdGhpcyA9IFVSTFBhcnNl
cihieXRlc0FzU3RyaW5nKHVybCkpLnJlc3VsdCgpOwogfQogCiAjaWYgIVVTRShGT1VOREFUSU9O
KQorCitSZXRhaW5QdHI8Q0ZVUkxSZWY+IFVSTDo6ZW1wdHlDRlVSTCgpCit7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKKyNlbmRpZgorCiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRl
Q0ZVUkwoKSBjb25zdAogewotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkw7CisgICAgaWYg
KGlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChpc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBlbXB0eUNGVVJMKCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IHJlc3VsdDsKICAgICBpZiAoTElLRUxZKG1fc3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5nLmlz
QWxsQVNDSUkoKSkpCi0gICAgICAgIGNmVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRl
VVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxl
bmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsKKyAgICAgICAg
cmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIs
IG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5nLmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsKICAgICBlbHNlIHsKICAgICAgICAgQ1N0cmluZyB1
dGY4ID0gbV9zdHJpbmcudXRmOCgpOwotICAgICAgICBjZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVh
dGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxscHRyLCB1dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0
ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0ciwgdHJ1ZSkpOworICAg
ICAgICByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMobnVs
bHB0ciwgdXRmOC5kYXRhQXNVSW50OFB0cigpLCB1dGY4Lmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNv
ZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsKICAgICB9CiAKLSAgICBpZiAocHJvdG9jb2xJc0lu
SFRUUEZhbWlseSgpICYmICFpc0NGVVJMU2FtZU9yaWdpbihjZlVSTC5nZXQoKSwgKnRoaXMpKQor
ICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgJiYgIWlzU2FtZU9yaWdpbihyZXN1bHQu
Z2V0KCksICp0aGlzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY2ZV
Ukw7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZgogCiBTdHJpbmcgVVJMOjpmaWxlU3lz
dGVtUGF0aCgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGNyZWF0
ZUNGVVJMKCk7CisgICAgYXV0byBjZlVSTCA9IGNyZWF0ZUNGVVJMKCk7CiAgICAgaWYgKCFjZlVS
TCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9jb2NvYS9OU1VSTEV4dHJhcy5oIGIvU291cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMu
aAppbmRleCBiYjZkY2MyMzI1MWI0ODhhYTE3NmNkNjMyNTAwOWU1MzI2MWY5NTIyLi40MTU1ZTAy
NmEyYmFmNjZjZTE5OThlZWI0MzNjZjY3MDU3ZjY3Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJM
RXh0cmFzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3
LCAyMDEyLCAyMDE0IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV1RG
IHsKIAogV1RGX0VYUE9SVF9QUklWQVRFIE5TU3RyaW5nICp1c2VyVmlzaWJsZVN0cmluZyhOU1VS
TCAqKTsKLVdURl9FWFBPUlRfUFJJVkFURSBOU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhO
U1N0cmluZyAqLCBOU1VSTCAqYmFzZVVSTCk7IC8vIFJldHVybiB2YWx1ZSBvZiBuaWwgbWVhbnMg
ZXJyb3IuCitXVEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRTdHJpbmco
TlNTdHJpbmcgKiwgTlNVUkwgKmlnbm9yZWQgPSBuaWwpOyAvLyBSZXR1cm4gdmFsdWUgb2Ygbmls
IG1lYW5zIGVycm9yLgogV1RGX0VYUE9SVF9QUklWQVRFIE5TVVJMICpVUkxCeVJlbW92aW5nVXNl
ckluZm8oTlNVUkwgKik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNTdHJpbmcgKmRlY29kZUhvc3RO
YW1lKE5TU3RyaW5nICopOyAvLyBSZXR1cm4gdmFsdWUgb2YgbmlsIG1lYW5zIGVycm9yLgogV1RG
X0VYUE9SVF9QUklWQVRFIE5TU3RyaW5nICplbmNvZGVIb3N0TmFtZShOU1N0cmluZyAqKTsgLy8g
UmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFucyBlcnJvci4KQEAgLTQxLDEwICs0MSw4IEBAIFdURl9F
WFBPUlRfUFJJVkFURSBOU1VSTCAqVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29t
cG9uZW50KE5TVVJMICosIENGCiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdpdGhEYXRh
KE5TRGF0YSAqLCBOU1VSTCAqYmFzZVVSTCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpv
cmlnaW5hbFVSTERhdGEoTlNVUkwgKik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgTlNEYXRhICpkYXRh
Rm9yVVJMQ29tcG9uZW50VHlwZShOU1VSTCAqLCBDRlVSTENvbXBvbmVudFR5cGUpOwotV1RGX0VY
UE9SVF9QUklWQVRFIE5TVVJMICpVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChOU1N0
cmluZyAqLCBOU1VSTCAqYmFzZVVSTCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgTlNVUkwgKlVSTFdp
dGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKE5TU3RyaW5nICopOwogCi1OU1JhbmdlIHJhbmdl
T2ZVUkxTY2hlbWUoTlNTdHJpbmcgKik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgQk9PTCBpc1VzZXJW
aXNpYmxlVVJMKE5TU3RyaW5nICopOwotV1RGX0VYUE9SVF9QUklWQVRFIEJPT0wgbG9va3NMaWtl
QWJzb2x1dGVVUkwoTlNTdHJpbmcgKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMubW0gYi9Tb3VyY2UvV1RGL3d0Zi9j
b2NvYS9OU1VSTEV4dHJhcy5tbQppbmRleCAwZDk2ZTlkNDgwOWEzODlhYWVhNDE3ZGVjMjRkZWE5
YWIyZjg3ODAzLi4yMDg3NDQwYjBmNmZkYzRkNWIwM2MyOTJjN2UzNjI4ZWYyMzhkYjQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbQorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9jb2NvYS9OU1VSTEV4dHJhcy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNyArMzIsMTQgQEAK
ICNpbXBvcnQgPG11dGV4PgogI2ltcG9ydCA8d3RmL0Z1bmN0aW9uLmg+CiAjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvVVJMSGVscGVy
cy5oPgotI2ltcG9ydCA8d3RmL1VSTFBhcnNlci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgog
I2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNh
c3RzQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLXVzaW5nIG5hbWVzcGFjZSBVUkxIZWxw
ZXJzOwotCi1jb25zdGV4cHIgdW5zaWduZWQgdXJsQnl0ZXNCdWZmZXJMZW5ndGggPSAyMDQ4Owot
CiBzdGF0aWMgQk9PTCByZWFkSUROQWxsb3dlZFNjcmlwdExpc3RGaWxlKE5TU3RyaW5nICpmaWxl
bmFtZSkKIHsKICAgICBpZiAoIWZpbGVuYW1lKQpAQCAtNjcsNyArNjQsNyBAQCBzdGF0aWMgQk9P
TCByZWFkSUROQWxsb3dlZFNjcmlwdExpc3RGaWxlKE5TU3RyaW5nICpmaWxlbmFtZSkKICAgICAg
ICAgCiAgICAgICAgIGlmIChyZXN1bHQgPT0gMSkgewogICAgICAgICAgICAgLy8gR290IGEgd29y
ZCwgbWFwIHRvIHNjcmlwdCBjb2RlIGFuZCBwdXQgaXQgaW50byB0aGUgYXJyYXkuCi0gICAgICAg
ICAgICBhZGRTY3JpcHRUb0lETkFsbG93ZWRTY3JpcHRMaXN0KHdvcmQpOworICAgICAgICAgICAg
VVJMSGVscGVyczo6YWRkU2NyaXB0VG9JRE5BbGxvd2VkU2NyaXB0TGlzdCh3b3JkKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBmY2xvc2UoZmlsZSk7CkBAIC0xMDAsNyArOTcsNyBAQCBzdGF0aWMg
U3RyaW5nIGRlY29kZVBlcmNlbnRFc2NhcGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogCiBOU1N0
cmluZyAqZGVjb2RlSG9zdE5hbWUoTlNTdHJpbmcgKnN0cmluZykKIHsKLSAgICBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gaG9zdCA9IG1hcEhvc3ROYW1lKHN0cmluZywgbnVsbHB0cik7CisgICAgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IGhvc3QgPSBVUkxIZWxwZXJzOjptYXBIb3N0TmFtZShzdHJpbmcs
IG51bGxwdHIpOwogICAgIGlmICghaG9zdCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1
cm4gISpob3N0ID8gc3RyaW5nIDogKE5TU3RyaW5nICopKmhvc3Q7CkBAIC0xMDgsNyArMTA1LDcg
QEAgTlNTdHJpbmcgKmRlY29kZUhvc3ROYW1lKE5TU3RyaW5nICpzdHJpbmcpCiAKIE5TU3RyaW5n
ICplbmNvZGVIb3N0TmFtZShOU1N0cmluZyAqc3RyaW5nKQogewotICAgIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBob3N0ID0gbWFwSG9zdE5hbWUoc3RyaW5nLCBkZWNvZGVQZXJjZW50RXNjYXBlcyk7
CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGhvc3QgPSBVUkxIZWxwZXJzOjptYXBIb3N0TmFt
ZShzdHJpbmcsIGRlY29kZVBlcmNlbnRFc2NhcGVzKTsKICAgICBpZiAoIWhvc3QpCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgcmV0dXJuICEqaG9zdCA/IHN0cmluZyA6IChOU1N0cmluZyAqKSpo
b3N0OwpAQCAtMTI2LDI4ICsxMjMsMTcgQEAgTlNVUkwgKlVSTEJ5VHJ1bmNhdGluZ09uZUNoYXJh
Y3RlckJlZm9yZUNvbXBvbmVudChOU1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUKICAgICBp
ZiAoIVVSTCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBDRlJhbmdlIGZyYWdSZyA9
IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIGNv
bXBvbmVudCwgbnVsbHB0cik7Ci0gICAgaWYgKGZyYWdSZy5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3Vu
ZCkKKyAgICBDRlJhbmdlIHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoYnJp
ZGdlX2Nhc3QoVVJMKSwgY29tcG9uZW50LCBudWxscHRyKTsKKyAgICBpZiAocmFuZ2UubG9jYXRp
b24gPT0ga0NGTm90Rm91bmQpCiAgICAgICAgIHJldHVybiBVUkw7CiAKLSAgICBWZWN0b3I8VUlu
dDgsIHVybEJ5dGVzQnVmZmVyTGVuZ3RoPiB1cmxCeXRlcyh1cmxCeXRlc0J1ZmZlckxlbmd0aCk7
Ci0gICAgQ0ZJbmRleCBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVm
KVVSTCwgdXJsQnl0ZXMuZGF0YSgpLCB1cmxCeXRlcy5zaXplKCkpOwotICAgIGlmIChudW1CeXRl
cyA9PSAtMSkgewotICAgICAgICBudW1CeXRlcyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENG
VVJMUmVmKVVSTCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgIHVybEJ5dGVzLmdyb3cobnVtQnl0ZXMp
OwotICAgICAgICBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJlZilVUkwsIHVybEJ5dGVz
LmRhdGEoKSwgbnVtQnl0ZXMpOwotICAgIH0KKyAgICBhdXRvIGJ5dGVzID0gYnl0ZXNBc1ZlY3Rv
cihicmlkZ2VfY2FzdChVUkwpKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENy
ZWF0ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxCeXRlcy5kYXRhKCksIGZyYWdSZy5sb2NhdGlvbiAt
IDEsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0cikpOworICAgIGF1dG8gcmVzdWx0ID0g
YWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJhbmdl
LmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBudWxscHRyKSk7CiAgICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoQnl0ZXMo
bnVsbHB0ciwgdXJsQnl0ZXMuZGF0YSgpLCBmcmFnUmcubG9jYXRpb24gLSAxLCBrQ0ZTdHJpbmdF
bmNvZGluZ0lTT0xhdGluMSwgbnVsbHB0cikpOwotICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0
ID8gcmVzdWx0LmJyaWRnaW5nQXV0b3JlbGVhc2UoKSA6IFVSTDsKLX0KKyAgICAgICAgcmVzdWx0
ID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhCeXRlcyhudWxscHRyLCBieXRlcy5kYXRhKCksIHJh
bmdlLmxvY2F0aW9uIC0gMSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIG51bGxwdHIpKTsK
IAotc3RhdGljIE5TVVJMICpVUkxCeVJlbW92aW5nUmVzb3VyY2VTcGVjaWZpZXIoTlNVUkwgKlVS
TCkKLXsKLSAgICByZXR1cm4gVVJMQnlUcnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9u
ZW50KFVSTCwga0NGVVJMQ29tcG9uZW50UmVzb3VyY2VTcGVjaWZpZXIpOworICAgIHJldHVybiBy
ZXN1bHQgPyByZXN1bHQuYnJpZGdpbmdBdXRvcmVsZWFzZSgpIDogVVJMOwogfQogCiBOU1VSTCAq
VVJMV2l0aERhdGEoTlNEYXRhICpkYXRhLCBOU1VSTCAqYmFzZVVSTCkKQEAgLTE1NywxNSArMTQz
LDE1IEBAIE5TVVJMICpVUkxXaXRoRGF0YShOU0RhdGEgKmRhdGEsIE5TVVJMICpiYXNlVVJMKQog
ICAgIAogICAgIHNpemVfdCBsZW5ndGggPSBbZGF0YSBsZW5ndGhdOwogICAgIGlmIChsZW5ndGgg
PiAwKSB7Ci0gICAgICAgIC8vIHdvcmsgYXJvdW5kIDxyZGFyOi8vNDQ3MDc3MT46IENGVVJMQ3Jl
YXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMoLi4sIFRSVUUpIGRvZXNuJ3QgcmVtb3ZlIG5vbi1wYXRo
IGNvbXBvbmVudHMuCi0gICAgICAgIGJhc2VVUkwgPSBVUkxCeVJlbW92aW5nUmVzb3VyY2VTcGVj
aWZpZXIoYmFzZVVSTCk7Ci0gICAgICAgIAorICAgICAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjov
LzQ0NzA3NzE+OiBDRlVSTENyZWF0ZUFic29sdXRlVVJMV2l0aEJ5dGVzKC4uLCBUUlVFKSBkb2Vz
bid0IHJlbW92ZSBub24tcGF0aCBjb21wb25lbnRzLgorICAgICAgICBiYXNlVVJMID0gVVJMQnlU
cnVuY2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KGJhc2VVUkwsIGtDRlVSTENvbXBv
bmVudFJlc291cmNlU3BlY2lmaWVyKTsKKwogICAgICAgICBjb25zdCBVSW50OCAqYnl0ZXMgPSBz
dGF0aWNfY2FzdDxjb25zdCBVSW50OCo+KFtkYXRhIGJ5dGVzXSk7Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIENGVVJMQ3JlYXRlQWJzb2x1dGVVUkxXaXRoQnl0ZXMgd291bGQgY29tcGxhaW4gdG8g
Y29uc29sZSBpZiB3ZSBwYXNzZWQgYSBwYXRoIHRvIGl0LgogICAgICAgICBpZiAoYnl0ZXNbMF0g
PT0gJy8nICYmICFiYXNlVVJMKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCisK
ICAgICAgICAgLy8gTk9URTogV2UgdXNlIFVURi04IGhlcmUgc2luY2UgdGhpcyBlbmNvZGluZyBp
cyB1c2VkIHdoZW4gY29tcHV0aW5nIHN0cmluZ3Mgd2hlbiByZXR1cm5pbmcgVVJMIGNvbXBvbmVu
dHMKICAgICAgICAgLy8gKGUuZyBjYWxscyB0byBOU1VSTCAtcGF0aCkuIEhvd2V2ZXIsIHRoaXMg
ZnVuY3Rpb24gaXMgbm90IHRvbGVyYW50IG9mIGlsbGVnYWwgVVRGLTggc2VxdWVuY2VzLCB3aGlj
aAogICAgICAgICAvLyBjb3VsZCBlaXRoZXIgYmUgYSBtYWxmb3JtZWQgc3RyaW5nIG9yIGJ5dGVz
IGluIGEgZGlmZmVyZW50IGVuY29kaW5nLCBsaWtlIHNoaWZ0LWppcywgc28gd2UgZmFsbCBiYWNr
CkBAIC0xNzcsNiArMTYzLDcgQEAgTlNVUkwgKlVSTFdpdGhEYXRhKE5TRGF0YSAqZGF0YSwgTlNV
UkwgKmJhc2VVUkwpCiAgICAgfQogICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIiJd
OwogfQorCiBzdGF0aWMgTlNEYXRhICpkYXRhV2l0aFVzZXJUeXBlZFN0cmluZyhOU1N0cmluZyAq
c3RyaW5nKQogewogICAgIE5TRGF0YSAqdXNlclR5cGVkRGF0YSA9IFtzdHJpbmcgZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwpAQCAtMjExLDE3ICsxOTgsMTcgQEAgc3Rh
dGljIE5TRGF0YSAqZGF0YVdpdGhVc2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZykKICAg
ICByZXR1cm4gW05TRGF0YSBkYXRhV2l0aEJ5dGVzTm9Db3B5Om91dEJ5dGVzIGxlbmd0aDpvdXRM
ZW5ndGhdOyAvLyBhZG9wdHMgb3V0Qnl0ZXMKIH0KIAotTlNVUkwgKlVSTFdpdGhVc2VyVHlwZWRT
dHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNVUkwgKm5zVVJMKQorTlNVUkwgKlVSTFdpdGhVc2Vy
VHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNVUkwgKikKIHsKICAgICBpZiAoIXN0cmlu
ZykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGF1dG8gbWFwcGVkU3RyaW5nID0gbWFwSG9z
dE5hbWVzKHN0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlKHN0cmluZykuZ2V0KCksIGRlY29kZVBl
cmNlbnRFc2NhcGVzKTsKKyAgICBhdXRvIG1hcHBlZFN0cmluZyA9IFVSTEhlbHBlcnM6Om1hcEhv
c3ROYW1lcyhzdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZShzdHJpbmcpLmdldCgpLCBkZWNvZGVQ
ZXJjZW50RXNjYXBlcyk7CiAgICAgaWYgKCFtYXBwZWRTdHJpbmcpCiAgICAgICAgIHJldHVybiBu
aWw7CiAKICAgICAvLyBMZXQncyBjaGVjayB3aGV0aGVyIHRoZSBVUkwgaXMgYm9ndXMuCi0gICAg
VVJMIHVybCB7IFVSTCB7IG5zVVJMIH0sIG1hcHBlZFN0cmluZyB9OworICAgIFVSTCB1cmwgeyBV
UkwgeyB9LCBtYXBwZWRTdHJpbmcgfTsKICAgICBpZiAoIXVybC5jcmVhdGVDRlVSTCgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCkBAIC0yMzEsMTEzICsyMTgsODYgQEAgTlNVUkwgKlVSTFdpdGhV
c2VyVHlwZWRTdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNVUkwgKm5zVVJMKQogICAgIGlmICgh
ZGF0YSkKICAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07CiAKLSAgICBy
ZXR1cm4gVVJMV2l0aERhdGEoZGF0YSwgbnNVUkwpOworICAgIHJldHVybiBVUkxXaXRoRGF0YShk
YXRhLCBuaWwpOwogfQogCi1OU1VSTCAqVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQo
TlNTdHJpbmcgKnN0cmluZywgTlNVUkwgKlVSTCkKK05TVVJMICpVUkxXaXRoVXNlclR5cGVkU3Ry
aW5nRGVwcmVjYXRlZChOU1N0cmluZyAqc3RyaW5nKQogewogICAgIGlmICghc3RyaW5nKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgTlNVUkwgKnJlc3VsdCA9IFVSTFdpdGhVc2VyVHlwZWRT
dHJpbmcoc3RyaW5nLCBVUkwpOworICAgIE5TVVJMICpyZXN1bHQgPSBVUkxXaXRoVXNlclR5cGVk
U3RyaW5nKHN0cmluZyk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgTlNEYXRhICpyZXN1
bHREYXRhID0gZGF0YVdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgaWYgKCFy
ZXN1bHREYXRhKQogICAgICAgICAgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiIl07
Ci0gICAgICAgIHJlc3VsdCA9IFVSTFdpdGhEYXRhKHJlc3VsdERhdGEsIFVSTCk7CisgICAgICAg
IHJlc3VsdCA9IFVSTFdpdGhEYXRhKHJlc3VsdERhdGEsIG5pbCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEJPT0wgaGFzUXVlc3Rpb25NYXJrT25seVF1ZXJ5U3Ry
aW5nKE5TVVJMICpVUkwpCitzdGF0aWMgYm9vbCBoYXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJp
bmcoTlNVUkwgKlVSTCkKIHsKICAgICBDRlJhbmdlIHJhbmdlV2l0aFNlcGFyYXRvcnM7Ci0gICAg
Q0ZVUkxHZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwga0NG
VVJMQ29tcG9uZW50UXVlcnksICZyYW5nZVdpdGhTZXBhcmF0b3JzKTsKLSAgICBpZiAocmFuZ2VX
aXRoU2VwYXJhdG9ycy5sb2NhdGlvbiAhPSBrQ0ZOb3RGb3VuZCAmJiByYW5nZVdpdGhTZXBhcmF0
b3JzLmxlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgcmV0dXJuIE5POwor
ICAgIENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KGJyaWRnZV9jYXN0KFVSTCksIGtDRlVS
TENvbXBvbmVudFF1ZXJ5LCAmcmFuZ2VXaXRoU2VwYXJhdG9ycyk7CisgICAgcmV0dXJuIHJhbmdl
V2l0aFNlcGFyYXRvcnMubG9jYXRpb24gIT0ga0NGTm90Rm91bmQgJiYgcmFuZ2VXaXRoU2VwYXJh
dG9ycy5sZW5ndGggPT0gMTsKIH0KIAogTlNEYXRhICpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShO
U1VSTCAqVVJMLCBDRlVSTENvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKIHsKLSAgICBWZWN0
b3I8VUludDgsIHVybEJ5dGVzQnVmZmVyTGVuZ3RoPiBhbGxCeXRlc0J1ZmZlcih1cmxCeXRlc0J1
ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENGVVJMR2V0Qnl0ZXMoKF9f
YnJpZGdlIENGVVJMUmVmKVVSTCwgYWxsQnl0ZXNCdWZmZXIuZGF0YSgpLCBhbGxCeXRlc0J1ZmZl
ci5zaXplKCkpOwotICAgIGlmIChieXRlc0ZpbGxlZCA9PSAtMSkgewotICAgICAgICBDRkluZGV4
IGJ5dGVzVG9BbGxvY2F0ZSA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwg
bnVsbHB0ciwgMCk7Ci0gICAgICAgIGFsbEJ5dGVzQnVmZmVyLmdyb3coYnl0ZXNUb0FsbG9jYXRl
KTsKLSAgICAgICAgYnl0ZXNGaWxsZWQgPSBDRlVSTEdldEJ5dGVzKChfX2JyaWRnZSBDRlVSTFJl
ZilVUkwsIGFsbEJ5dGVzQnVmZmVyLmRhdGEoKSwgYnl0ZXNUb0FsbG9jYXRlKTsKLSAgICB9Ci0g
ICAgCi0gICAgY29uc3QgQ0ZVUkxDb21wb25lbnRUeXBlIGNvbXBsZXRlVVJMID0gKENGVVJMQ29t
cG9uZW50VHlwZSktMTsKLSAgICBDRlJhbmdlIHJhbmdlOwotICAgIGlmIChjb21wb25lbnRUeXBl
ICE9IGNvbXBsZXRlVVJMKSB7Ci0gICAgICAgIHJhbmdlID0gQ0ZVUkxHZXRCeXRlUmFuZ2VGb3JD
b21wb25lbnQoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgY29tcG9uZW50VHlwZSwgbnVsbHB0cik7
Ci0gICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmFuZ2UubG9jYXRpb24gPSAwOwot
ICAgICAgICByYW5nZS5sZW5ndGggPSBieXRlc0ZpbGxlZDsKLSAgICB9Ci0gICAgCi0gICAgTlNE
YXRhICpjb21wb25lbnREYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmFsbEJ5dGVzQnVmZmVy
LmRhdGEoKSArIHJhbmdlLmxvY2F0aW9uIGxlbmd0aDpyYW5nZS5sZW5ndGhdOyAKLSAgICAKLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIgKj4oW2NvbXBvbmVudERhdGEgYnl0ZXNdKTsKLSAgICBOU011dGFibGVEYXRhICpyZXN1
bHREYXRhID0gW05TTXV0YWJsZURhdGEgZGF0YV07Ci0gICAgLy8gTk9URTogYWRkIGxlYWRpbmcg
Jz8nIHRvIHF1ZXJ5IHN0cmluZ3Mgbm9uLXplcm8gbGVuZ3RoIHF1ZXJ5IHN0cmluZ3MuCi0gICAg
Ly8gTk9URTogcmV0YWluIHF1ZXN0aW9uLW1hcmsgb25seSBxdWVyeSBzdHJpbmdzLgorICAgIENG
UmFuZ2UgcmFuZ2UgPSBDRlVSTEdldEJ5dGVSYW5nZUZvckNvbXBvbmVudChicmlkZ2VfY2FzdChV
UkwpLCBjb21wb25lbnRUeXBlLCBudWxscHRyKTsKKyAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0g
a0NGTm90Rm91bmQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGJ5dGVzQnVmZmVy
ID0gYnl0ZXNBc1ZlY3RvcihicmlkZ2VfY2FzdChVUkwpKTsKKyAgICBhdXRvIGJ5dGVzID0gYnl0
ZXNCdWZmZXIuZGF0YSgpICsgcmFuZ2UubG9jYXRpb247CisKKyAgICBOU011dGFibGVEYXRhICpy
ZXN1bHQgPSBbTlNNdXRhYmxlRGF0YSBkYXRhXTsKKworICAgIC8vIFdlIGFkZCBsZWFkaW5nICc/
JyB0byBub24temVybyBsZW5ndGggcXVlcnkgc3RyaW5ncyBpbmNsdWRpbmcgcXVlc3Rpb24tbWFy
ayBvbmx5IHF1ZXJ5IHN0cmluZ3MuCiAgICAgaWYgKGNvbXBvbmVudFR5cGUgPT0ga0NGVVJMQ29t
cG9uZW50UXVlcnkpIHsKLSAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA+IDAgfHwgaGFzUXVlc3Rp
b25NYXJrT25seVF1ZXJ5U3RyaW5nKFVSTCkpCi0gICAgICAgICAgICBbcmVzdWx0RGF0YSBhcHBl
bmRCeXRlczoiPyIgbGVuZ3RoOjFdOyAgICAKKyAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCB8fCBo
YXNRdWVzdGlvbk1hcmtPbmx5UXVlcnlTdHJpbmcoVVJMKSkKKyAgICAgICAgICAgIFtyZXN1bHQg
YXBwZW5kQnl0ZXM6Ij8iIGxlbmd0aDoxXTsKICAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByYW5nZS5sZW5ndGg7IGkrKykgeworCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFu
Z2UubGVuZ3RoOyBpKyspIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gYnl0ZXNbaV07Ci0g
ICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA+PSAweDdmKSB7Ci0gICAgICAgICAgICBjaGFyIGVz
Y2FwZWRbM107Ci0gICAgICAgICAgICBlc2NhcGVkWzBdID0gJyUnOwotICAgICAgICAgICAgZXNj
YXBlZFsxXSA9IHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGMpOwotICAgICAgICAgICAgZXNj
YXBlZFsyXSA9IGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGMpOwotICAgICAgICAgICAgW3Jl
c3VsdERhdGEgYXBwZW5kQnl0ZXM6ZXNjYXBlZCBsZW5ndGg6M107ICAgIAotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgY2hhciBiWzFdOwotICAgICAgICAgICAgYlswXSA9IGM7Ci0gICAg
ICAgICAgICBbcmVzdWx0RGF0YSBhcHBlbmRCeXRlczpiIGxlbmd0aDoxXTsgICAgCi0gICAgICAg
IH0gICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKGMgPiAweDIwICYmIGMgPCAweDdGKQorICAg
ICAgICAgICAgW3Jlc3VsdCBhcHBlbmRCeXRlczomYnl0ZXNbaV0gbGVuZ3RoOjFdOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgZXNjYXBlZFszXSA9IHsgJyUnLCB1cHBlck5pYmJs
ZVRvQVNDSUlIZXhEaWdpdChjKSwgbG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYykgfTsKKyAg
ICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQnl0ZXM6ZXNjYXBlZCBsZW5ndGg6M107CisgICAgICAg
IH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdERhdGE7CisKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBzdGF0aWMgTlNVUkwgKlVSTEJ5UmVtb3ZpbmdDb21wb25lbnRBbmRTdWJzZXF1
ZW50Q2hhcmFjdGVyKE5TVVJMICpVUkwsIENGVVJMQ29tcG9uZW50VHlwZSBjb21wb25lbnQpCiB7
Ci0gICAgQ0ZSYW5nZSByYW5nZSA9IENGVVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KChfX2Jy
aWRnZSBDRlVSTFJlZilVUkwsIGNvbXBvbmVudCwgMCk7CisgICAgQ0ZSYW5nZSByYW5nZSA9IENG
VVJMR2V0Qnl0ZVJhbmdlRm9yQ29tcG9uZW50KGJyaWRnZV9jYXN0KFVSTCksIGNvbXBvbmVudCwg
MCk7CiAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IGtDRk5vdEZvdW5kKQogICAgICAgICByZXR1
cm4gVVJMOwotICAgIAorCiAgICAgLy8gUmVtb3ZlIG9uZSBzdWJzZXF1ZW50IGNoYXJhY3Rlci4K
ICAgICByYW5nZS5sZW5ndGgrKzsKIAotICAgIFZlY3RvcjxVSW50OCwgdXJsQnl0ZXNCdWZmZXJM
ZW5ndGg+IGJ1ZmZlcih1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBudW1CeXRl
cyA9IENGVVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSk7Ci0gICAgaWYgKG51bUJ5dGVzID09IC0xKSB7Ci0gICAgICAgIG51bUJ5
dGVzID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBudWxscHRyLCAwKTsK
LSAgICAgICAgYnVmZmVyLmdyb3cobnVtQnl0ZXMpOwotICAgICAgICBDRlVSTEdldEJ5dGVzKChf
X2JyaWRnZSBDRlVSTFJlZilVUkwsIGJ1ZmZlci5kYXRhKCksIG51bUJ5dGVzKTsKLSAgICB9Ci0g
ICAgVUludDgqIHVybEJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgCisgICAgYXV0byBi
eXRlcyA9IGJ5dGVzQXNWZWN0b3IoYnJpZGdlX2Nhc3QoVVJMKSk7CisgICAgYXV0byB1cmxCeXRl
cyA9IGJ5dGVzLmRhdGEoKTsKKyAgICBDRkluZGV4IG51bUJ5dGVzID0gYnl0ZXMuc2l6ZSgpOwor
CiAgICAgaWYgKG51bUJ5dGVzIDwgcmFuZ2UubG9jYXRpb24pCiAgICAgICAgIHJldHVybiBVUkw7
CiAgICAgaWYgKG51bUJ5dGVzIDwgcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgpCiAgICAg
ICAgIHJhbmdlLmxlbmd0aCA9IG51bUJ5dGVzIC0gcmFuZ2UubG9jYXRpb247Ci0gICAgICAgIAor
CiAgICAgbWVtbW92ZSh1cmxCeXRlcyArIHJhbmdlLmxvY2F0aW9uLCB1cmxCeXRlcyArIHJhbmdl
LmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoLCBudW1CeXRlcyAtIHJhbmdlLmxvY2F0aW9uICsgcmFu
Z2UubGVuZ3RoKTsKLSAgICAKKwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDRlVSTENyZWF0
ZVdpdGhCeXRlcyhudWxscHRyLCB1cmxCeXRlcywgbnVtQnl0ZXMgLSByYW5nZS5sZW5ndGgsIGtD
RlN0cmluZ0VuY29kaW5nVVRGOCwgbnVsbHB0cikpOwogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXN1bHQgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEJ5dGVzKG51bGxwdHIsIHVybEJ5dGVz
LCBudW1CeXRlcyAtIHJhbmdlLmxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIG51
bGxwdHIpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQu
YnJpZGdpbmdBdXRvcmVsZWFzZSgpIDogVVJMOwogfQogCkBAIC0zNDgsOTcgKzMwOCw0MiBAQCBO
U1VSTCAqVVJMQnlSZW1vdmluZ1VzZXJJbmZvKE5TVVJMICpVUkwpCiAKIE5TRGF0YSAqb3JpZ2lu
YWxVUkxEYXRhKE5TVVJMICpVUkwpCiB7Ci0gICAgVUludDggKmJ1ZmZlciA9IChVSW50OCAqKW1h
bGxvYyh1cmxCeXRlc0J1ZmZlckxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBieXRlc0ZpbGxlZCA9IENG
VVJMR2V0Qnl0ZXMoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCwgYnVmZmVyLCB1cmxCeXRlc0J1ZmZl
ckxlbmd0aCk7Ci0gICAgaWYgKGJ5dGVzRmlsbGVkID09IC0xKSB7Ci0gICAgICAgIENGSW5kZXgg
Ynl0ZXNUb0FsbG9jYXRlID0gQ0ZVUkxHZXRCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpVVJMLCBu
dWxscHRyLCAwKTsKLSAgICAgICAgYnVmZmVyID0gKFVJbnQ4ICopcmVhbGxvYyhidWZmZXIsIGJ5
dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAgIGJ5dGVzRmlsbGVkID0gQ0ZVUkxHZXRCeXRlcygoX19i
cmlkZ2UgQ0ZVUkxSZWYpVVJMLCBidWZmZXIsIGJ5dGVzVG9BbGxvY2F0ZSk7Ci0gICAgICAgIEFT
U0VSVChieXRlc0ZpbGxlZCA9PSBieXRlc1RvQWxsb2NhdGUpOwotICAgIH0KLSAgICAKLSAgICAv
LyBidWZmZXIgaXMgYWRvcHRlZCBieSB0aGUgTlNEYXRhCi0gICAgTlNEYXRhICpkYXRhID0gW05T
RGF0YSBkYXRhV2l0aEJ5dGVzTm9Db3B5OmJ1ZmZlciBsZW5ndGg6Ynl0ZXNGaWxsZWQgZnJlZVdo
ZW5Eb25lOllFU107Ci0gICAgCi0gICAgTlNVUkwgKmJhc2VVUkwgPSAoX19icmlkZ2UgTlNVUkwg
KilDRlVSTEdldEJhc2VVUkwoKF9fYnJpZGdlIENGVVJMUmVmKVVSTCk7Ci0gICAgaWYgKGJhc2VV
UkwpCi0gICAgICAgIHJldHVybiBvcmlnaW5hbFVSTERhdGEoVVJMV2l0aERhdGEoZGF0YSwgYmFz
ZVVSTCkpOwotICAgIHJldHVybiBkYXRhOworICAgIGF1dG8gZGF0YSA9IGJyaWRnZV9jYXN0KGJ5
dGVzQXNDRkRhdGEoYnJpZGdlX2Nhc3QoVVJMKSkpOworICAgIGlmIChhdXRvIGJhc2VVUkwgPSBi
cmlkZ2VfY2FzdChDRlVSTEdldEJhc2VVUkwoYnJpZGdlX2Nhc3QoVVJMKSkpKQorICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxVUkxEYXRhKFVSTFdpdGhEYXRhKGRhdGEuZ2V0KCksIGJhc2VVUkwpKTsK
KyAgICByZXR1cm4gZGF0YS5hdXRvcmVsZWFzZSgpOwogfQogCiBOU1N0cmluZyAqdXNlclZpc2li
bGVTdHJpbmcoTlNVUkwgKlVSTCkKIHsKICAgICBOU0RhdGEgKmRhdGEgPSBvcmlnaW5hbFVSTERh
dGEoVVJMKTsKLSAgICBDU3RyaW5nIHN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oW2Rh
dGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Ci0gICAgcmV0dXJuIHVzZXJWaXNpYmxlVVJMKHN0
cmluZyk7CisgICAgcmV0dXJuIFVSTEhlbHBlcnM6OnVzZXJWaXNpYmxlVVJMKENTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pKTsKIH0K
IAogQk9PTCBpc1VzZXJWaXNpYmxlVVJMKE5TU3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgQk9PTCB2
YWxpZCA9IFlFUzsKLSAgICAvLyBnZXQgYnVmZmVyCi0gICAgCi0gICAgY2hhciBzdGF0aWNfYnVm
ZmVyWzEwMjRdOwotICAgIGNvbnN0IGNoYXIgKnA7Ci0gICAgQk9PTCBzdWNjZXNzID0gQ0ZTdHJp
bmdHZXRDU3RyaW5nKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcsIHN0YXRpY19idWZmZXIs
IDEwMjMsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7Ci0gICAgcCA9IHN1Y2Nlc3MgPyBzdGF0aWNf
YnVmZmVyIDogW3N0cmluZyBVVEY4U3RyaW5nXTsKLSAgICAKLSAgICBpbnQgbGVuZ3RoID0gc3Ry
bGVuKHApOwotICAgIAotICAgIC8vIGNoZWNrIGZvciBjaGFyYWN0ZXJzIDw9IDB4MjAgb3IgPj0w
eDdmLCAlLWVzY2FwZSBzZXF1ZW5jZXMgb2YgJTdmLCBhbmQgeG4tLSwgdGhlc2UKLSAgICAvLyBh
cmUgdGhlIHRoaW5ncyB0aGF0IHdpbGwgbGVhZCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIHRvIGFj
dHVhbGx5IGNoYW5nZSB0aGluZ3MuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBwW2ldOwotICAgICAgICAvLyBlc2NhcGUg
Y29udHJvbCBjaGFyYWN0ZXJzLCBzcGFjZSwgYW5kIGRlbGV0ZQotICAgICAgICBpZiAoYyA8PSAw
eDIwIHx8IGMgPT0gMHg3ZikgewotICAgICAgICAgICAgdmFsaWQgPSBOTzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJyUnICYmIChpICsgMSA8IGxlbmd0aCAm
JiBpc0FTQ0lJSGV4RGlnaXQocFtpICsgMV0pKSAmJiBpICsgMiA8IGxlbmd0aCAmJiBpc0FTQ0lJ
SGV4RGlnaXQocFtpICsgMl0pKSB7Ci0gICAgICAgICAgICBhdXRvIHUgPSB0b0FTQ0lJSGV4VmFs
dWUocFtpICsgMV0sIHBbaSArIDJdKTsKLSAgICAgICAgICAgIGlmICh1ID4gMHg3ZikgewotICAg
ICAgICAgICAgICAgIHZhbGlkID0gTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBDaGVjayBmb3IgInhuLS0iIGluIGFuIGVmZmljaWVudCwgbm9uLWNhc2Utc2Vuc2l0aXZl
LCB3YXkuCi0gICAgICAgICAgICBpZiAoYyA9PSAnLScgJiYgaSA+PSAzICYmIChwW2kgLSAzXSB8
IDB4MjApID09ICd4JyAmJiAocFtpIC0gMl0gfCAweDIwKSA9PSAnbicgJiYgcFtpIC0gMV0gPT0g
Jy0nKSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBOTzsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSB1
c2VyVmlzaWJsZVN0cmluZyBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIG5vdCBjaGFuZ2UgdGhl
IHBhc3NlZC1pbiBVUkwuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wdGltaXpl
IGFsbCB0aGUgbW9zdCBjb21tb24gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0aGUgdXNlclZp
c2libGVTdHJpbmcgYWxnb3JpdGhtLgorCisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgYXV0
byBzdWNjZXNzID0gQ0ZTdHJpbmdHZXRDU3RyaW5nKGJyaWRnZV9jYXN0KHN0cmluZyksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHNpemVvZihidWZmZXIpIC0gMSwga0NGU3RyaW5n
RW5jb2RpbmdVVEY4KTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBzdWNjZXNzID8gYnVmZmVyIDog
W3N0cmluZyBVVEY4U3RyaW5nXTsKKworICAgIC8vIENoZWNrIGZvciBjb250cm9sIGNoYXJhY3Rl
cnMsICUtZXNjYXBlIHNlcXVlbmNlcyB0aGF0IGFyZSBub24tQVNDSUksIGFuZCB4bi0tOiB0aGVz
ZQorICAgIC8vIGFyZSB0aGUgdGhpbmdzIHRoYXQgbWlnaHQgbGVhZCB0aGUgdXNlclZpc2libGVT
dHJpbmcgZnVuY3Rpb24gdG8gYWN0dWFsbHkgY2hhbmdlIHRoZSBzdHJpbmcuCisgICAgd2hpbGUg
KGF1dG8gY2hhcmFjdGVyID0gKmNoYXJhY3RlcnMrKykgeworICAgICAgICAvLyBDb250cm9sIGNo
YXJhY3RlcnMsIGluY2x1ZGluZyBzcGFjZSwgd2lsbCBiZSBlc2NhcGVkIGJ5IHVzZXJWaXNpYmxl
U3RyaW5nLgorICAgICAgICBpZiAoY2hhcmFjdGVyIDw9IDB4MjAgfHwgY2hhcmFjdGVyID09IDB4
N0YpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIC8vIEVzY2FwZSBzZXF1ZW5jZXMg
dGhhdCBleHBhbmQgdG8gbm9uLUFTQ0lJIGNoYXJhY3RlcnMgbWF5IGJlIGNvbnZlcnRlZCB0byBu
b24tZXNjYXBlZCBVVEYtOCBzZXF1ZW5jZXMuCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyUn
ICYmIGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0ZXJzWzBdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY2hh
cmFjdGVyc1sxXSkgJiYgIWlzQVNDSUkodG9BU0NJSUhleFZhbHVlKGNoYXJhY3RlcnNbMF0sIGNo
YXJhY3RlcnNbMV0pKSkKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgLy8gSWYgInhu
LS0iIGFwcGVhcnMsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byBydW4gdGhlIElETiBhbGdvcml0aG0g
aWYgaXQncyBhIGhvc3QgbmFtZS4KKyAgICAgICAgaWYgKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1
YWwoY2hhcmFjdGVyLCAneCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoY2hhcmFjdGVy
c1swXSwgJ24nKSAmJiBjaGFyYWN0ZXJzWzFdID09ICctJyAmJiBjaGFyYWN0ZXJzWzJdID09ICct
JykKKyAgICAgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHZhbGlk
OwotfQogCi1OU1JhbmdlIHJhbmdlT2ZVUkxTY2hlbWUoTlNTdHJpbmcgKnN0cmluZykKLXsKLSAg
ICBOU1JhbmdlIGNvbG9uID0gW3N0cmluZyByYW5nZU9mU3RyaW5nOkAiOiJdOwotICAgIGlmIChj
b2xvbi5sb2NhdGlvbiAhPSBOU05vdEZvdW5kICYmIGNvbG9uLmxvY2F0aW9uID4gMCkgewotICAg
ICAgICBOU1JhbmdlIHNjaGVtZSA9IHswLCBjb2xvbi5sb2NhdGlvbn07Ci0gICAgICAgIC8qCi0g
ICAgICAgICBUaGlzIHN0dWZmIGlzIHZlcnkgZXhwZW5zaXZlLiAgMTAtMTUgbXNlYyBvbiBhIDJ4
MS4yR0h6LiAgSWYgbm90IGNhY2hlZCBpdCBzd2FtcHMKLSAgICAgICAgIGV2ZXJ5dGhpbmcgZWxz
ZSB3aGVuIGFkZGluZyBpdGVtcyB0byB0aGUgYXV0b2NvbXBsZXRlIERCLiAgTWFrZXMgbWUgd29u
ZGVyIGlmIHdlCi0gICAgICAgICBldmVuIG5lZWQgdG8gZW5mb3JjZSB0aGUgY2hhcmFjdGVyIHNl
dCBoZXJlLgotICAgICAgICAgKi8KLSAgICAgICAgTlNTdHJpbmcgKmFjY2VwdGFibGVDaGFyYWN0
ZXJzID0gQCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6MDEyMzQ1Njc4OSsuLSI7Ci0gICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UmV0
YWluUHRyPE5TQ2hhcmFjdGVyU2V0Pj4gaW52ZXJzZVNjaGVtZUNoYXJhY3RlclNldDsKLSAgICAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFsmXSB7Ci0gICAgICAgICAgICBpbnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0LmNv
bnN0cnVjdChbW05TQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0ZXJzSW5TdHJp
bmc6YWNjZXB0YWJsZUNoYXJhY3RlcnNdIGludmVydGVkU2V0XSk7Ci0gICAgICAgIH0pOwotICAg
ICAgICBOU1JhbmdlIGlsbGVnYWxzID0gW3N0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpp
bnZlcnNlU2NoZW1lQ2hhcmFjdGVyU2V0LmdldCgpLmdldCgpIG9wdGlvbnM6MCByYW5nZTpzY2hl
bWVdOwotICAgICAgICBpZiAoaWxsZWdhbHMubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAg
ICAgICAgIHJldHVybiBzY2hlbWU7Ci0gICAgfQotICAgIHJldHVybiBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKKyAgICByZXR1cm4gWUVTOwogfQogCi1CT09MIGxvb2tzTGlrZUFic29sdXRl
VVJMKE5TU3RyaW5nICpzdHJpbmcpCi17Ci0gICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGJlY2F1c2Ug
X3dlYl9VUkxXaXRoU3RyaW5nIGFsbG93cyB3aGl0ZXNwYWNlLgotICAgIHJldHVybiByYW5nZU9m
VVJMU2NoZW1lKHN0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlKHN0cmluZykuZ2V0KCkpLmxvY2F0
aW9uICE9IE5TTm90Rm91bmQ7CiB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1VSTENvY29hLm1tIGIvU291cmNlL1dURi93dGYvY29j
b2EvVVJMQ29jb2EubW0KaW5kZXggMjdkN2RjMzY2MmZhZjU0NmQwMDFhOGUyMmNiNzA3ZDkwYjZm
Y2IwZi4uNWQ5ZTE1NjU3NzQ1MmEyMjczZWYyZGY2N2E2ZDhlNDdkN2EzNWEwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvY29jb2EvVVJMQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYv
Y29jb2EvVVJMQ29jb2EubW0KQEAgLTM5LDE3ICszOSw4IEBAIEBlbmQKIG5hbWVzcGFjZSBXVEYg
ewogCiBVUkw6OlVSTChOU1VSTCAqY29jb2FVUkwpCisgICAgOiBVUkwoYnJpZGdlX2Nhc3QoY29j
b2FVUkwpKQogewotICAgIGlmICghY29jb2FVUkwpIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdoeSBpcyBpdCBPSyB0byBp
Z25vcmUgYmFzZSBVUkwgaGVyZT8KLSAgICBDU3RyaW5nIGJ5dGVzOwotICAgIFdURjo6Z2V0VVJM
Qnl0ZXMoYnJpZGdlX2Nhc3QoY29jb2FVUkwpLCBieXRlcyk7Ci0gICAgVVJMUGFyc2VyIHBhcnNl
cihieXRlcy5kYXRhKCkpOwotICAgICp0aGlzID0gcGFyc2VyLnJlc3VsdCgpOwogfQogCiBVUkw6
Om9wZXJhdG9yIE5TVVJMICooKSBjb25zdApAQCAtNTksMjggKzUwLDExIEBAIFVSTDo6b3BlcmF0
b3IgTlNVUkwgKigpIGNvbnN0CiAgICAgcmV0dXJuIGNyZWF0ZUNGVVJMKCkuYnJpZGdpbmdBdXRv
cmVsZWFzZSgpOwogfQogCi1SZXRhaW5QdHI8Q0ZVUkxSZWY+IFVSTDo6Y3JlYXRlQ0ZVUkwoKSBj
b25zdAorUmV0YWluUHRyPENGVVJMUmVmPiBVUkw6OmVtcHR5Q0ZVUkwoKQogewotICAgIGlmIChp
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIFdlIHVzZSB0aGUgdG9sbC1mcmVlIGJyaWRnZSBiZXR3ZWVuIE5TVVJMIGFu
ZCBDRlVSTCB0byBjcmVhdGUgYSBDRlVSTFJlZiBzdXBwb3J0aW5nIGJvdGggZW1wdHkgYW5kIG51
bGwgdmFsdWVzLgotICAgICAgICByZXR1cm4gYnJpZGdlX2Nhc3QoYWRvcHROUyhbW05TVVJMIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKSk7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENGVVJM
UmVmPiBjZlVSTDsKLSAgICBpZiAoTElLRUxZKG1fc3RyaW5nLmlzOEJpdCgpICYmIG1fc3RyaW5n
LmlzQWxsQVNDSUkoKSkpCi0gICAgICAgIGNmVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZUFic29s
dXRlVVJMV2l0aEJ5dGVzKG51bGxwdHIsIG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG1fc3RyaW5n
Lmxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgsIG51bGxwdHIsIHRydWUpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ1N0cmluZyB1dGY4ID0gbV9zdHJpbmcudXRmOCgpOwotICAgICAgICBj
ZlVSTCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVBYnNvbHV0ZVVSTFdpdGhCeXRlcyhudWxscHRyLCB1
dGY4LmRhdGFBc1VJbnQ4UHRyKCksIHV0ZjgubGVuZ3RoKCksIGtDRlN0cmluZ0VuY29kaW5nVVRG
OCwgbnVsbHB0ciwgdHJ1ZSkpOwotICAgIH0KLQotICAgIGlmIChwcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkgJiYgIVdURjo6aXNDRlVSTFNhbWVPcmlnaW4oY2ZVUkwuZ2V0KCksICp0aGlzKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY2ZVUkw7CisgICAgLy8gV2UgdXNl
IHRoZSB0b2xsLWZyZWUgYnJpZGdlIHRvIGNyZWF0ZSBhbiBlbXB0eSB2YWx1ZSB0aGF0IGlzIGRp
c3RpbmN0IGZyb20gbnVsbCB0aGF0IG5vIENGVVJMIGZ1bmN0aW9uIGNhbiBjcmVhdGUuCisgICAg
Ly8gRklYTUU6IFdoZW4gd2Ugb3JpZ2luYWxseSB3cm90ZSB0aGlzLCB3ZSB0aG91Z2h0IHRoYXQg
Y3JlYXRpbmcgZW1wdHkgQ0YgVVJMcyB3YXMgdmFsdWFibGU7IGNhbiB3ZSBkbyB3aXRob3V0IGl0
IG5vdz8KKyAgICByZXR1cm4gYnJpZGdlX2Nhc3QoYWRvcHROUyhbW05TVVJMIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpAIiJdKSk7CiB9CiAKIGJvb2wgVVJMOjpob3N0SXNJUEFkZHJlc3MoU3RyaW5n
VmlldyBob3N0KQpAQCAtOTAsNyArNjQsNyBAQCBib29sIFVSTDo6aG9zdElzSVBBZGRyZXNzKFN0
cmluZ1ZpZXcgaG9zdCkKIAogUmV0YWluUHRyPGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3Qg
VVJMJiB2ZWN0b3JFbGVtZW50KQogewotICAgIHJldHVybiBhZG9wdE5TKChfX2JyaWRnZV90cmFu
c2ZlciBpZCl2ZWN0b3JFbGVtZW50LmNyZWF0ZUNGVVJMKCkubGVha1JlZigpKTsKKyAgICByZXR1
cm4gYnJpZGdlX2Nhc3QodmVjdG9yRWxlbWVudC5jcmVhdGVDRlVSTCgpKTsKIH0KIAogc3RkOjpv
cHRpb25hbDxVUkw+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFVSTCosIGlkIGFycmF5RWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9GaWxlU3lzdGVtTWFjLm1tIGIvU291
cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0KaW5kZXggNWUxOTMwMDU2OWI2MjFjYjRi
OWNmOWMwZTdkNjIzNDUxNzczY2FiYS4uMmFkOTE1Y2FmNjc4OTc0ZTlkNGMwZmZlZmQ5OTAxZTI0
ZWE4YjFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0K
KysrIGIvU291cmNlL1dURi93dGYvbWFjL0ZpbGVTeXN0ZW1NYWMubW0KQEAgLTM3LDggKzM3LDgg
QEAgbmFtZXNwYWNlIFdURiB7CiB2b2lkIEZpbGVTeXN0ZW06OnNldE1ldGFkYXRhVVJMKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBtZXRhZGF0YVVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZWZlcnJlcikKIHsKICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIGlmIChOU1VSTCAq
dXJsID0gVVJMV2l0aFVzZXJUeXBlZFN0cmluZyhtZXRhZGF0YVVSTFN0cmluZywgbmlsKSkKLSAg
ICAgICAgdXJsU3RyaW5nID0gV1RGOjp1c2VyVmlzaWJsZVN0cmluZyhXVEY6OlVSTEJ5UmVtb3Zp
bmdVc2VySW5mbyh1cmwpKTsKKyAgICBpZiAoTlNVUkwgKnVybCA9IFVSTFdpdGhVc2VyVHlwZWRT
dHJpbmcobWV0YWRhdGFVUkxTdHJpbmcpKQorICAgICAgICB1cmxTdHJpbmcgPSB1c2VyVmlzaWJs
ZVN0cmluZyhVUkxCeVJlbW92aW5nVXNlckluZm8odXJsKSk7CiAgICAgZWxzZQogICAgICAgICB1
cmxTdHJpbmcgPSBtZXRhZGF0YVVSTFN0cmluZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5tbSBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2Ev
U3RyaW5nQ29jb2EubW0KaW5kZXggNDYxODVjNmFlNjY1MjhkMTc4MGU3ZmU2MDcxZThhYjgyZTMy
ZmFlYi4uYmYzYzY2NDhmMjdhMzY1MzQ5OWNkZWU4NmUzZDA2YjEzYzg2NDdkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0NvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTcgKzIyLDIwIEBACiAjaW1wb3J0IDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZTdHJpbmcuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IAogI2lmIEhBVkUoU0FGQVJJX0ZPUl9XRUJLSVRfREVWRUxPUE1FTlRfUkVRVUlSSU5HX0VYVFJB
X1NZTUJPTFMpCiBTdHJpbmc6OlN0cmluZyhOU1N0cmluZyAqc3RyaW5nKQotICAgIDogU3RyaW5n
KChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcpIHsgfQorICAgIDogU3RyaW5nKGJyaWRnZV9j
YXN0KHN0cmluZykpCit7Cit9CiAjZW5kaWYKIAogUmV0YWluUHRyPGlkPiBtYWtlTlNBcnJheUVs
ZW1lbnQoY29uc3QgU3RyaW5nJiB2ZWN0b3JFbGVtZW50KQogewotICAgIHJldHVybiBhZG9wdE5T
KChfX2JyaWRnZV90cmFuc2ZlciBpZCl2ZWN0b3JFbGVtZW50LmNyZWF0ZUNGU3RyaW5nKCkubGVh
a1JlZigpKTsKKyAgICByZXR1cm4gYnJpZGdlX2Nhc3QodmVjdG9yRWxlbWVudC5jcmVhdGVDRlN0
cmluZygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1ha2VWZWN0b3JFbGVtZW50KGNv
bnN0IFN0cmluZyosIGlkIGFycmF5RWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9j
Zi9XS1VSTENGLm1tCmluZGV4IGFjNmQwODYzZjUzMDVjMDQ4Mzc3MjZmNGQ2MDBkNzFjZDE5MTE2
NGEuLmNjZTgyNzY1YWQ5YjE2OTVkOTNhYjg3YTU5MzliZTM1OTYxNzA3N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2NmL1dLVVJMQ0YubW0KKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL2MvY2YvV0tVUkxDRi5tbQpAQCAtMzAsNyArMzAsNiBAQAogI2ltcG9y
dCAiV0tOU1VSTC5oIgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvY2Yv
Q0ZVUkxFeHRyYXMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogc3RhdGljIGlu
bGluZSBDbGFzcyB3a05TVVJMQ2xhc3MoKQogewpAQCAtNDUsMTYgKzQ0LDE0IEBAIHN0YXRpYyBp
bmxpbmUgQ2xhc3Mgd2tOU1VSTENsYXNzKCkKIFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aENGVVJM
KENGVVJMUmVmIGNmVVJMKQogewogICAgIGlmICghY2ZVUkwpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFNpbmNlIFdLTlNVUkwgaXMgYW4gaW50
ZXJuYWwgY2xhc3Mgd2l0aCBubyBzdWJjbGFzc2VzLCB3ZSBjYW4gZG8gYSBzaW1wbGUgZXF1YWxp
dHkgY2hlY2suCiAgICAgaWYgKG9iamVjdF9nZXRDbGFzcygoX19icmlkZ2UgTlNVUkwgKiljZlVS
TCkgPT0gd2tOU1VSTENsYXNzKCkpCiAgICAgICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHN0YXRp
Y19jYXN0PEFQSTo6VVJMKj4oJlsoV0tOU1VSTCAqKShfX2JyaWRnZSBOU1VSTCAqKUNGUmV0YWlu
KGNmVVJMKSBfYXBpT2JqZWN0XSkpOwogCi0gICAgQ1N0cmluZyB1cmxCeXRlczsKLSAgICBXVEY6
OmdldFVSTEJ5dGVzKGNmVVJMLCB1cmxCeXRlcyk7Ci0KLSAgICByZXR1cm4gV2ViS2l0Ojp0b0Nv
cGllZFVSTEFQSSh1cmxCeXRlcy5kYXRhKCkpOworICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sg
dG8gaWdub3JlIHRoZSBiYXNlIFVSTCBpbiB0aGUgQ0ZVUkwgaGVyZT8KKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0NvcGllZFVSTEFQSShieXRlc0FzU3RyaW5nKGNmVVJMKSk7CiB9CiAKIENGVVJMUmVm
IFdLVVJMQ29weUNGVVJMKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvclJlZiwgV0tVUkxSZWYgVVJM
UmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2Rl
cnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL0FyZ3VtZW50Q29kZXJzQ29j
b2EubW0KaW5kZXggZDkxZDIwYTBlMzViMGZlZWZiMDY2Y2IyYzBlYjY4YmJlM2Y2ZmE2MS4uNjEy
ODRiMDRkMTE2Y2ZiODdhMjNkMzA2OGE4YzJjMmI1MDlkNjYxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29jb2EvQXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Db2NvYS9Bcmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC0xMDQsOSArMTA0
LDggQEAgLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogICAgIGlmICho
YXNCYXNlVVJMKQogICAgICAgICBbY29kZXIgZW5jb2RlT2JqZWN0OmJhc2VVUkwgZm9yS2V5OmJh
c2VVUkxLZXldOwogCi0gICAgV1RGOjpVUkxDaGFyQnVmZmVyIHVybEJ5dGVzOwotICAgIFdURjo6
Z2V0VVJMQnl0ZXMoYnJpZGdlX2Nhc3QobV93cmFwcGVkVVJMLmdldCgpKSwgdXJsQnl0ZXMpOwot
ICAgIFtjb2RlciBlbmNvZGVCeXRlczp1cmxCeXRlcy5kYXRhKCkgbGVuZ3RoOnVybEJ5dGVzLnNp
emUoKV07CisgICAgYXV0byBieXRlcyA9IGJ5dGVzQXNWZWN0b3IoYnJpZGdlX2Nhc3QobV93cmFw
cGVkVVJMLmdldCgpKSk7CisgICAgW2NvZGVyIGVuY29kZUJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5n
dGg6Ynl0ZXMuc2l6ZSgpXTsKIH0KIAogLSAoX051bGxhYmxlIGluc3RhbmNldHlwZSlpbml0V2l0
aENvZGVyOihOU0NvZGVyICopY29kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0NvY29hL1dLTlNVUkxFeHRyYXMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNV
UkxFeHRyYXMuaAppbmRleCAyMGRkY2IwOTNmYjliOTdlMjY0OTQ5YmVkODI2ZTBiYmUwOWJiNGY3
Li41N2EzY2QyYjI0ZjFkZDFmMWE1NjY2YjMwOGVjZGViMzliYjZlZGU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFzLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5oCkBAIC0yOCw4ICsyOCw1IEBACiBAaW50
ZXJmYWNlIE5TVVJMIChXS0V4dHJhcykKIAogKyAoaW5zdGFuY2V0eXBlKV93ZWJfVVJMV2l0aFdU
RlN0cmluZzooY29uc3QgU3RyaW5nJilzdHJpbmc7Ci0rIChpbnN0YW5jZXR5cGUpX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOihjb25zdCBTdHJpbmcmKXN0cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAq
KWJhc2VVUkw7Ci0KLS0gKFN0cmluZylfd2ViX29yaWdpbmFsRGF0YUFzV1RGU3RyaW5nOwogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMRXh0cmFz
Lm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV0tOU1VSTEV4dHJhcy5tbQppbmRleCAy
NjAyNzFhMGIzY2Q1NzVkNjU0ZjgwZjEwNmYzZGU4NWUzNDViODdkLi4xODFiODNhODdiOTZlZWE3
NWU1Y2Q5NTQ2NzgxMDQ5N2FiZmM5NmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XS05TVVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dLTlNVUkxFeHRyYXMubW0KQEAgLTI3LDkgKzI3LDYgQEAKICNpbXBvcnQgIldLTlNVUkxFeHRy
YXMuaCIKIAogI2ltcG9ydCA8d3RmL1VSTC5oPgotI2ltcG9ydCA8d3RmL2NmL0NGVVJMRXh0cmFz
Lmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogQGltcGxlbWVudGF0aW9uIE5TVVJMIChXS0V4dHJhcykKIApAQCAtMzksMTgg
KzM2LDQgQEAgKyAoaW5zdGFuY2V0eXBlKV93ZWJfVVJMV2l0aFdURlN0cmluZzooY29uc3QgU3Ry
aW5nJilzdHJpbmcKICAgICByZXR1cm4gKE5TVVJMICopdXJsOwogfQogCi0rIChpbnN0YW5jZXR5
cGUpX3dlYl9VUkxXaXRoV1RGU3RyaW5nOihjb25zdCBTdHJpbmcmKXN0cmluZyByZWxhdGl2ZVRv
VVJMOihOU1VSTCAqKWJhc2VVUkwKLXsKLSAgICBVUkwgdXJsIHsgVVJMIHsgYmFzZVVSTCB9LCBz
dHJpbmcgfTsKLSAgICByZXR1cm4gKE5TVVJMICopdXJsOwotfQotCi0tIChTdHJpbmcpX3dlYl9v
cmlnaW5hbERhdGFBc1dURlN0cmluZwotewotICAgIC8vIEZJWE1FOiBXaHkgaXMgaXQgT0sgdG8g
aWdub3JlIGJhc2UgVVJMIGhlcmU/Ci0gICAgQ1N0cmluZyBvcmlnaW5hbERhdGE7Ci0gICAgV1RG
OjpnZXRVUkxCeXRlcygoX19icmlkZ2UgQ0ZVUkxSZWYpc2VsZiwgb3JpZ2luYWxEYXRhKTsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChvcmlnaW5hbERhdGEpOwotfQotCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XS05TVVJMUmVxdWVzdC5tbSBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNVUkxSZXF1ZXN0Lm1tCmluZGV4IGQwYzkxZjdk
ZTI5MzkwNTkxN2NkNTY5ZDZkMDU3N2YxMGY2ZTgyMzkuLjRmMjFhYTkwMzAyYWI2OGNiZjYxOWFh
Y2VlNjAzOTY1Y2FkM2JlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29h
L1dLTlNVUkxSZXF1ZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dLTlNV
UkxSZXF1ZXN0Lm1tCkBAIC0zNyw3ICszNyw3IEBAIC0gKE5TT2JqZWN0ICopX3dlYl9jcmVhdGVU
YXJnZXQKIAogLSAoTlNVUkwgKilVUkwKIHsKLSAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0
aFdURlN0cmluZzpzdGF0aWNfY2FzdDxBUEk6OlVSTFJlcXVlc3QqPigmc2VsZi5fYXBpT2JqZWN0
KS0+cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCldOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBUEk6OlVSTFJlcXVlc3QqPigmc2VsZi5fYXBpT2JqZWN0KS0+cmVzb3VyY2VSZXF1ZXN0
KCkudXJsKCk7CiB9CiAKICNwcmFnbWEgbWFyayBOU0NvcHlpbmcgcHJvdG9jb2wgaW1wbGVtZW50
YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJz
Q0YuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHAKaW5k
ZXggMjY3NzZkZjVmZDM2ZDYxNTE4NDQ2ZjA5YmFjYjEwZDZhNzA3ZWMxOS4uNDYyZTg1OTQyYmY1
ZDQxYWIwOTc0ZjQ0Yjk0ZDQ3YjYzMWFkYWQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvY2YvQXJndW1lbnRDb2RlcnNDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Y2YvQXJndW1lbnRDb2RlcnNDRi5jcHAKQEAgLTY0Myw5ICs2NDMsNyBAQCB2b2lkIEFyZ3VtZW50
Q29kZXI8Q0ZVUkxSZWY+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgQ0ZVUkxSZWYgdXJsKQog
ICAgIGlmIChiYXNlVVJMKQogICAgICAgICBlbmNvZGVyIDw8IGJhc2VVUkw7CiAKLSAgICBXVEY6
OlVSTENoYXJCdWZmZXIgdXJsQnl0ZXM7Ci0gICAgV1RGOjpnZXRVUkxCeXRlcyh1cmwsIHVybEJ5
dGVzKTsKLSAgICBlbmNvZGVyIDw8IElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih1cmxCeXRlcy5kYXRhKCkpLCB1cmxCeXRlcy5zaXplKCkpOworICAg
IGVuY29kZXIgPDwgSVBDOjpEYXRhUmVmZXJlbmNlKGJ5dGVzQXNWZWN0b3IodXJsKSk7CiB9CiAK
IHRlbXBsYXRlIHZvaWQgQXJndW1lbnRDb2RlcjxDRlVSTFJlZj46OmVuY29kZTxFbmNvZGVyPihF
bmNvZGVyJiwgQ0ZVUkxSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0KaW5kZXgg
ZTA3MTI2YWJiZDk0MTFhZmRjMTJiMmFiZmQwOGE0ZDEwNzI0MjE5My4uNmRjNWQwMzNkYzY5MzFk
MWJiNDc0MDc2NTJiYmY1N2ZkMmEwNmM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
Lm1tCkBAIC02MCw2ICs2MCw3IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1w
b3J0IDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KIAogTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbklz
TWFpbkZyYW1lS2V5ID0gQCJXS0FjdGlvbklzTWFpbkZyYW1lS2V5IjsKIE5TU3RyaW5nICogY29u
c3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleSA9IEAiV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtl
eSI7CkBAIC0xNTcsNyArMTU4LDcgQEAgLSAodm9pZClsb2FkRmlsZVVSTDooTlNVUkwgKilVUkwg
cmVzdHJpY3RUb0ZpbGVzV2l0aGluOihOU1VSTCAqKWFsbG93ZWREaXJlY3RvcnkKICAgICBpZiAo
dXNlckRhdGEpCiAgICAgICAgIHdrVXNlckRhdGEgPSBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6
Y3JlYXRlKHVzZXJEYXRhKTsKIAotICAgIF9wYWdlLT5sb2FkRmlsZShbVVJMIF93ZWJfb3JpZ2lu
YWxEYXRhQXNXVEZTdHJpbmddLCBbYWxsb3dlZERpcmVjdG9yeSBfd2ViX29yaWdpbmFsRGF0YUFz
V1RGU3RyaW5nXSwgd2tVc2VyRGF0YS5nZXQoKSk7CisgICAgX3BhZ2UtPmxvYWRGaWxlKGJ5dGVz
QXNTdHJpbmcoYnJpZGdlX2Nhc3QoVVJMKSksIGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3QoYWxs
b3dlZERpcmVjdG9yeSkpLCB3a1VzZXJEYXRhLmdldCgpKTsKIH0KIAogLSAodm9pZClsb2FkSFRN
TFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTApA
QCAtMTcyLDcgKzE3Myw3IEBAIC0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRN
TFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgdXNlckRhdGE6CiAgICAgICAgIHdrVXNl
ckRhdGEgPSBXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKIAogICAg
IE5TRGF0YSAqZGF0YSA9IFtIVE1MU3RyaW5nIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXTsKLSAgICBfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sICJ0ZXh0L2h0bWwiX3MsICJVVEYtOCJf
cywgW2Jhc2VVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1dURlN0cmluZ10sIHdrVXNlckRhdGEuZ2V0
KCkpOworICAgIF9wYWdlLT5sb2FkRGF0YSh7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihk
YXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfSwgInRleHQvaHRtbCJfcywgIlVURi04Il9zLCBieXRl
c0FzU3RyaW5nKGJyaWRnZV9jYXN0KGJhc2VVUkwpKSwgd2tVc2VyRGF0YS5nZXQoKSk7CiB9CiAK
IC0gKHZvaWQpbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGJhc2VV
Ukw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJlYWNoYWJsZVVSTDooTlNVUkwgKil1bnJlYWNoYWJs
ZVVSTApAQCAtMTkyLDcgKzE5Myw3IEBAIC0gKHZvaWQpbG9hZERhdGE6KE5TRGF0YSAqKWRhdGEg
TUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTooCiAgICAgaWYg
KHVzZXJEYXRhKQogICAgICAgICB3a1VzZXJEYXRhID0gV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6
OmNyZWF0ZSh1c2VyRGF0YSk7CiAKLSAgICBfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBlbmNv
ZGluZ05hbWUsIFtiYXNlVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNXVEZTdHJpbmddLCB3a1VzZXJE
YXRhLmdldCgpKTsKKyAgICBfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBlbmNvZGluZ05hbWUs
IGJ5dGVzQXNTdHJpbmcoYnJpZGdlX2Nhc3QoYmFzZVVSTCkpLCB3a1VzZXJEYXRhLmdldCgpKTsK
IH0KIAogLSAodm9pZClzdG9wTG9hZGluZwpAQCAtNTA4LDcgKzUwOSw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAgICAgICAgICBpZiAob3JpZ2luYXRpbmdGcmFt
ZSkgewogICAgICAgICAgICAgICAgIGFjdGlvbkRpY3Rpb25hcnkgPSBhZG9wdE5TKFthY3Rpb25E
aWN0aW9uYXJ5IG11dGFibGVDb3B5XSk7Ci0gICAgICAgICAgICAgICAgWyhOU011dGFibGVEaWN0
aW9uYXJ5ICopYWN0aW9uRGljdGlvbmFyeS5nZXQoKSBzZXRPYmplY3Q6W05TVVJMIF93ZWJfVVJM
V2l0aFdURlN0cmluZzpXZWJLaXQ6OnRvSW1wbChvcmlnaW5hdGluZ0ZyYW1lKS0+dXJsKCkuc3Ry
aW5nKCldIGZvcktleTpXS0FjdGlvbk9yaWdpbmF0aW5nRnJhbWVVUkxLZXldOworICAgICAgICAg
ICAgICAgIFsoTlNNdXRhYmxlRGljdGlvbmFyeSAqKWFjdGlvbkRpY3Rpb25hcnkuZ2V0KCkgc2V0
T2JqZWN0OihOU1VSTCAqKVdlYktpdDo6dG9JbXBsKG9yaWdpbmF0aW5nRnJhbWUpLT51cmwoKSBm
b3JLZXk6V0tBY3Rpb25PcmlnaW5hdGluZ0ZyYW1lVVJMS2V5XTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgW3BvbGljeURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
YWN0aW9uRGljdGlvbmFyeS5nZXQoKSBkZWNpc2lvbkhhbmRsZXI6bWFrZVBvbGljeURlY2lzaW9u
QmxvY2sobGlzdGVuZXIpLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL0xlZ2FjeURvd25sb2FkQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTGVnYWN5RG93bmxvYWRDbGllbnQubW0KaW5kZXggMGZiN2U4YWQ5OWJhNDcxZjg5
ZGYxYWU5MTA5ODMzMjE2ODBlYmIxYy4uNjU1ZDg5YjhkODBjZmZjNDBkOTUzMjc4MTEwZTcwZDNl
NmEwZTlkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVnYWN5
RG93bmxvYWRDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTGVn
YWN5RG93bmxvYWRDbGllbnQubW0KQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIExlZ2FjeURvd25s
b2FkQ2xpZW50OjpsZWdhY3lEaWRDYW5jZWwoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkK
IHZvaWQgTGVnYWN5RG93bmxvYWRDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChEb3dubG9hZFByb3h5
JiBkb3dubG9hZFByb3h5LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYg
KG1fZGVsZWdhdGVNZXRob2RzLmRvd25sb2FkRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0VG9VUkwp
Ci0gICAgICAgIFttX2RlbGVnYXRlIF9kb3dubG9hZDpbX1dLRG93bmxvYWQgZG93bmxvYWRXaXRo
RG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZFByb3h5KV0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
VG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpyZXF1ZXN0LnVybCgpLnN0cmluZygp
XV07CisgICAgICAgIFttX2RlbGVnYXRlIF9kb3dubG9hZDpbX1dLRG93bmxvYWQgZG93bmxvYWRX
aXRoRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZFByb3h5KV0gZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0VG9VUkw6cmVxdWVzdC51cmwoKV07CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHJlcXVlc3QpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1Bs
dWdJbkZyYW1lLm1tCmluZGV4IGZkYWQxMzBlMDJiYzNjNTY4YWE0OTk0NzNlMmIxZDc4MDg0YWUy
NGUuLmM4MTFlYWQ4Mjk3ODgwMGZkZTAwZGFmZjVjMmNjNGM3OTQ2YThiYzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQ
cm9jZXNzUGx1Z0luRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQpAQCAtMTEwLDcg
KzExMCw3IEBAIC0gKFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlciAq
KV9icm93c2VyQ29udGV4dENvbnRyb2xsZXIKIAogLSAoTlNVUkwgKilVUkwKIHsKLSAgICByZXR1
cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpfZnJhbWUtPnVybCgpLnN0cmluZygpXTsK
KyAgICByZXR1cm4gX2ZyYW1lLT51cmwoKTsKIH0KIAogLSAoTlNBcnJheSAqKWNoaWxkRnJhbWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFz
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLmgKaW5kZXgg
ZWM3MGVhMzQ1YzRlNDUyODY3ZDc1YWQ0MmVkYWQ3NmU1NTA3YzU2Zi4uZWM3NDg2MjE0YzZjNGU3
ZmIzYTViYWQ5MGRkMWNkYWIyMDUxMGZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViTlNVUkxFeHRyYXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUtMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDMwICsyOCwyMyBAQAogCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KIAotLy8gRklYTUU6IENoYW5nZSBtZXRob2Qg
bmFtZXMgYmFjayB0byBfd2ViXyBmcm9tIF93ZWJraXRfIHdoZW4gaWRlbnRpY2FsbHktbmFtZWQK
LS8vIG1ldGhvZHMgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIEZvdW5kYXRpb24uCisvLyBGSVhN
RTogQ29uc2lkZXIgcmVuYW1pbmcgdG8gX3dlYl8gZnJvbSBfd2Via2l0XyBvbmNlIGlkZW50aWNh
bGx5LW5hbWVkIG1ldGhvZHMgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIEZvdW5kYXRpb24uCiAK
IEBpbnRlcmZhY2UgTlNVUkwgKFdlYk5TVVJMRXh0cmFzKQogCi0vLyBEZXByZWNhdGVkIGFzIGl0
IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3IuCi0vLyBQbGVhc2UgdXNlIHRoZSBfd2Via2l0XyBj
b3VudGVycGFydHMuCisvLyBEZXByZWNhdGVkLCBhcyBpdCBpZ25vcmVzIFVSTCBwYXJzaW5nIGVy
cm9ycy4KKy8vIFBsZWFzZSB1c2UgdGhlIF93ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmluZyBp
bnN0ZWFkLgogKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5n
ICopc3RyaW5nOwotKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICopVVJMOwogCi0vLyBOZXcgU1BJLgog
Ly8gUmV0dXJuIHZhbHVlIG9mIG5pbCBtZWFucyBlcnJvciBpbiBVUkwgcGFyc2luZy4KICsgKE5T
VVJMICopX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsK
LSsgKE5TVVJMICopX3dlYmtpdF9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZyByZWxhdGl2ZVRvVVJMOihOU1VSTCAqKVVSTDsKIAogKyAoTlNVUkwgKilfd2ViX1VSTFdp
dGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwogKyAoTlNVUkwgKilfd2ViX1VSTFdp
dGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG9VUkw6KE5TVVJMICop
YmFzZVVSTDsKIAotKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhOihOU0RhdGEgKilkYXRhOwot
KyAoTlNVUkwgKilfd2ViX1VSTFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIHJlbGF0aXZlVG9VUkw6
KE5TVVJMICopYmFzZVVSTDsKLQogLSAoTlNEYXRhICopX3dlYl9vcmlnaW5hbERhdGE7CiAtIChO
U1N0cmluZyAqKV93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmc7Ci0tIChjb25zdCBjaGFyICopX3dl
Yl9VUkxDU3RyaW5nOworLSAoY29uc3QgY2hhciopX3dlYl9VUkxDU3RyaW5nOwogCiAtIChOU1N0
cmluZyAqKV93ZWJfaG9zdFN0cmluZzsKIApAQCAtNzgsMTQgKzcxLDE2IEBACiAKIC0gKEJPT0wp
X3dlYl9pc1VzZXJWaXNpYmxlVVJMOwogCi0vLyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJM
IHBhcnNpbmcgZXJyb3IuCi0vLyBQbGVhc2UgdXNlIHRoZSBfd2Via2l0XyBjb3VudGVycGFydHMu
Ci0vLyB0dXJucyBmdW5ueS1sb29raW5nIEFTQ0lJIGZvcm0gaW50byBVbmljb2RlLCByZXR1cm5z
IHNlbGYgaWYgbm8gZGVjb2RpbmcgbmVlZGVkLCBjb252ZW5pZW50IGNvdmVyCisvLyBEZXByZWNh
dGVkIGFzIGl0IGlnbm9yZXMgVVJMIHBhcnNpbmcgZXJyb3JzLgorLy8gUGxlYXNlIHVzZSBfd2Vi
a2l0X2RlY29kZUhvc3ROYW1lIGluc3RlYWQuCisvLyBUdXJucyBmdW5ueS1sb29raW5nIEFTQ0lJ
IGZvcm0gaW50byBVbmljb2RlLCByZXR1cm5zIHNlbGYgaWYgbm8gZGVjb2RpbmcgbmVlZGVkLgog
LSAoTlNTdHJpbmcgKilfd2ViX2RlY29kZUhvc3ROYW1lOwotLy8gdHVybnMgVW5pY29kZSBpbnRv
IGZ1bm55LWxvb2tpbmcgQVNDSUkgZm9ybSwgcmV0dXJucyBzZWxmIGlmIG5vIGRlY29kaW5nIG5l
ZWRlZCwgY29udmVuaWVudCBjb3ZlcgorCisvLyBEZXByZWNhdGVkIGFzIGl0IGlnbm9yZXMgVVJM
IHBhcnNpbmcgZXJyb3JzLgorLy8gUGxlYXNlIHVzZSB0aGUgX3dlYmtpdF9lbmNvZGVIb3N0TmFt
ZSBpbnN0ZWFkLgorLy8gVHVybnMgVW5pY29kZSBpbnRvIGZ1bm55LWxvb2tpbmcgQVNDSUkgZm9y
bSwgcmV0dXJucyBzZWxmIGlmIG5vIGVuY29kaW5nIG5lZWRlZC4KIC0gKE5TU3RyaW5nICopX3dl
Yl9lbmNvZGVIb3N0TmFtZTsKIAotLy8gTmV3IFNQSS4KIC8vIFJldHVybiB2YWx1ZSBvZiBuaWwg
bWVhbnMgZXJyb3IgaW4gVVJMIHBhcnNpbmcuCiAtIChOU1N0cmluZyAqKV93ZWJraXRfZGVjb2Rl
SG9zdE5hbWU7CiAtIChOU1N0cmluZyAqKV93ZWJraXRfZW5jb2RlSG9zdE5hbWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TVVJMRXh0cmFzLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1VSTEV4dHJhcy5tbQppbmRleCAxZWMwNGVh
YWY1YjQ2NDc2ZDg5OWRmZTg1NWVlZjI2Y2MyOTM1ODJjLi40NDhmMjJmOWEzMTZkMGE3YWYyYzM3
YWVkYTJjOTBmNWI2NmM0Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9N
aXNjL1dlYk5TVVJMRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViTlNVUkxFeHRyYXMubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20p
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC00MSw3MCArNDEsMzggQEAKICNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvTlNVUkxF
eHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV1RG
OwotCi0jZGVmaW5lIFVSTF9CWVRFU19CVUZGRVJfTEVOR1RIIDIwNDgKKyNpbXBvcnQgPHd0Zi9j
b2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgogCiBAaW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYk5TVVJM
RXh0cmFzKQogCi0rIChOU1VSTCAqKV93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKilVUkwKLXsKLSAgICByZXR1cm4gVVJM
V2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoc3RyaW5nLCBVUkwpOwotfQotCiArIChOU1VS
TCAqKV93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSAg
ICByZXR1cm4gVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoc3RyaW5nLCBuaWwpOwot
fQotCi0rIChOU1VSTCAqKV93ZWJraXRfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgcmVsYXRpdmVUb1VSTDooTlNVUkwgKilVUkwKLXsKLSAgICByZXR1cm4gVVJMV2l0
aFVzZXJUeXBlZFN0cmluZyhzdHJpbmcsIFVSTCk7CisgICAgcmV0dXJuIFdURjo6VVJMV2l0aFVz
ZXJUeXBlZFN0cmluZ0RlcHJlY2F0ZWQoc3RyaW5nKTsKIH0KIAogKyAoTlNVUkwgKilfd2Via2l0
X1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgcmV0dXJu
IFVSTFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nLCBuaWwpOworICAgIHJldHVybiBXVEY6OlVS
TFdpdGhVc2VyVHlwZWRTdHJpbmcoc3RyaW5nKTsKIH0KIAogKyAoTlNVUkwgKilfd2ViX1VSTFdp
dGhEYXRhQXNTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgaWYgKHN0cmluZyA9PSBu
aWwpIHsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9CiAgICAgcmV0dXJuIFtzZWxmIF93ZWJf
VVJMV2l0aERhdGFBc1N0cmluZzpzdHJpbmcgcmVsYXRpdmVUb1VSTDpuaWxdOwogfQogCiArIChO
U1VSTCAqKV93ZWJfVVJMV2l0aERhdGFBc1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRp
dmVUb1VSTDooTlNVUkwgKiliYXNlVVJMCiB7Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpIHsKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgc3RyaW5nID0gW3N0cmluZyBfd2Via2l0X3N0
cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNlXTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5nIGRh
dGFVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4xU3RyaW5nRW5jb2RpbmddOwotICAgIHJldHVybiBV
UkxXaXRoRGF0YShkYXRhLCBiYXNlVVJMKTsKLX0KLQotKyAoTlNVUkwgKilfd2ViX1VSTFdpdGhE
YXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgcmV0dXJuIFVSTFdpdGhEYXRhKGRhdGEsIG5pbCk7
Ci19ICAgICAgCi0KLSsgKE5TVVJMICopX3dlYl9VUkxXaXRoRGF0YTooTlNEYXRhICopZGF0YSBy
ZWxhdGl2ZVRvVVJMOihOU1VSTCAqKWJhc2VVUkwKLXsKLSAgICByZXR1cm4gVVJMV2l0aERhdGEo
ZGF0YSwgYmFzZVVSTCk7CisgICAgcmV0dXJuIFdURjo6VVJMV2l0aERhdGEoW1tzdHJpbmcgX3dl
YmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV0gZGF0YVVzaW5nRW5jb2Rpbmc6TlNJU09M
YXRpbjFTdHJpbmdFbmNvZGluZ10sIGJhc2VVUkwpOwogfQogCiAtIChOU0RhdGEgKilfd2ViX29y
aWdpbmFsRGF0YQogewotICAgIHJldHVybiBvcmlnaW5hbFVSTERhdGEoc2VsZik7CisgICAgcmV0
dXJuIFdURjo6b3JpZ2luYWxVUkxEYXRhKHNlbGYpOwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJf
b3JpZ2luYWxEYXRhQXNTdHJpbmcKIHsKLSAgICByZXR1cm4gYWRvcHROUyhbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aERhdGE6b3JpZ2luYWxVUkxEYXRhKHNlbGYpIGVuY29kaW5nOk5TSVNPTGF0
aW4xU3RyaW5nRW5jb2RpbmddKS5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdE5TKFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpXVEY6Om9yaWdpbmFsVVJMRGF0YShzZWxmKSBl
bmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSkuYXV0b3JlbGVhc2UoKTsKIH0KIAog
LSAoTlNTdHJpbmcgKilfd2ViX3VzZXJWaXNpYmxlU3RyaW5nCkBAIC0xMTQsMjIgKzgyLDIyIEBA
IC0gKE5TU3RyaW5nICopX3dlYl91c2VyVmlzaWJsZVN0cmluZwogCiAtIChCT09MKV93ZWJfaXNF
bXB0eQogewotICAgIGlmICghQ0ZVUkxHZXRCYXNlVVJMKChDRlVSTFJlZilzZWxmKSkKLSAgICAg
ICAgcmV0dXJuIENGVVJMR2V0Qnl0ZXMoKENGVVJMUmVmKXNlbGYsIE5VTEwsIDApID09IDA7Ci0g
ICAgcmV0dXJuIFtvcmlnaW5hbFVSTERhdGEoc2VsZikgbGVuZ3RoXSA9PSAwOworICAgIGlmICgh
Q0ZVUkxHZXRCYXNlVVJMKGJyaWRnZV9jYXN0KHNlbGYpKSkKKyAgICAgICAgcmV0dXJuICFDRlVS
TEdldEJ5dGVzKGJyaWRnZV9jYXN0KHNlbGYpLCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gIVtX
VEY6Om9yaWdpbmFsVVJMRGF0YShzZWxmKSBsZW5ndGhdOwogfQogCi0tIChjb25zdCBjaGFyICop
X3dlYl9VUkxDU3RyaW5nCistIChjb25zdCBjaGFyKilfd2ViX1VSTENTdHJpbmcKIHsKICAgICBO
U011dGFibGVEYXRhICpkYXRhID0gW05TTXV0YWJsZURhdGEgZGF0YV07Ci0gICAgW2RhdGEgYXBw
ZW5kRGF0YTpvcmlnaW5hbFVSTERhdGEoc2VsZildOworICAgIFtkYXRhIGFwcGVuZERhdGE6V1RG
OjpvcmlnaW5hbFVSTERhdGEoc2VsZildOwogICAgIFtkYXRhIGFwcGVuZEJ5dGVzOiJcMCIgbGVu
Z3RoOjFdOwotICAgIHJldHVybiAoY29uc3QgY2hhciAqKVtkYXRhIGJ5dGVzXTsKKyAgICByZXR1
cm4gKGNvbnN0IGNoYXIqKVtkYXRhIGJ5dGVzXTsKICB9CiAKIC0gKE5TVVJMICopX3dlYmtpdF9j
YW5vbmljYWxpemUKIHsKLSAgICByZXR1cm4gVVJMQnlDYW5vbmljYWxpemluZ1VSTChzZWxmKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6VVJMQnlDYW5vbmljYWxpemluZ1VSTChzZWxmKTsKIH0KIAog
LSAoTlNVUkwgKilfd2Via2l0X2Nhbm9uaWNhbGl6ZV93aXRoX3d0ZgpAQCAtMTQwLDcgKzEwOCw3
IEBAIC0gKE5TVVJMICopX3dlYmtpdF9jYW5vbmljYWxpemVfd2l0aF93dGYKIAogLSAoTlNVUkwg
Kilfd2Via2l0X1VSTEJ5UmVtb3ZpbmdGcmFnbWVudCAKIHsKLSAgICByZXR1cm4gVVJMQnlUcnVu
Y2F0aW5nT25lQ2hhcmFjdGVyQmVmb3JlQ29tcG9uZW50KHNlbGYsIGtDRlVSTENvbXBvbmVudEZy
YWdtZW50KTsKKyAgICByZXR1cm4gV1RGOjpVUkxCeVRydW5jYXRpbmdPbmVDaGFyYWN0ZXJCZWZv
cmVDb21wb25lbnQoc2VsZiwga0NGVVJMQ29tcG9uZW50RnJhZ21lbnQpOwogfQogCiAtIChOU1VS
TCAqKV93ZWJfVVJMQnlSZW1vdmluZ1VzZXJJbmZvCkBAIC0xNjMsMjcgKzEzMSw2IEBAIC0gKEJP
T0wpX3dlYmtpdF9pc0ZpbGVVUkwKICAgICByZXR1cm4gW1tzZWxmIF93ZWJfb3JpZ2luYWxEYXRh
QXNTdHJpbmddIF93ZWJraXRfaXNGaWxlVVJMXTsKIH0KIAotLShOU0RhdGEgKilfd2ViX3NjaGVt
ZVNlcGFyYXRvcldpdGhvdXRDb2xvbgotewotICAgIE5TRGF0YSAqcmVzdWx0ID0gbmlsOwotICAg
IENGUmFuZ2UgcmFuZ2VXaXRoU2VwYXJhdG9yczsKLSAgICBDRlJhbmdlIHJhbmdlID0gQ0ZVUkxH
ZXRCeXRlUmFuZ2VGb3JDb21wb25lbnQoKENGVVJMUmVmKXNlbGYsIGtDRlVSTENvbXBvbmVudFNj
aGVtZSwgJnJhbmdlV2l0aFNlcGFyYXRvcnMpOwotICAgIGlmIChyYW5nZVdpdGhTZXBhcmF0b3Jz
LmxvY2F0aW9uICE9IGtDRk5vdEZvdW5kKSB7Ci0gICAgICAgIE5TU3RyaW5nICphYnNvbHV0ZVN0
cmluZyA9IFtzZWxmIGFic29sdXRlU3RyaW5nXTsKLSAgICAgICAgTlNSYW5nZSBzZXBhcmF0b3Jz
UmFuZ2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCArIDEsIHJh
bmdlV2l0aFNlcGFyYXRvcnMubGVuZ3RoIC0gcmFuZ2UubGVuZ3RoIC0gMSk7Ci0gICAgICAgIGlm
IChzZXBhcmF0b3JzUmFuZ2UubG9jYXRpb24gKyBzZXBhcmF0b3JzUmFuZ2UubGVuZ3RoIDw9IFth
YnNvbHV0ZVN0cmluZyBsZW5ndGhdKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqc2xhc2hlcyA9
IFthYnNvbHV0ZVN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6c2VwYXJhdG9yc1JhbmdlXTsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IFtzbGFzaGVzIGRhdGFVc2luZ0VuY29kaW5nOk5TSVNPTGF0aW4x
U3RyaW5nRW5jb2RpbmddOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS0oTlNEYXRhICopX3dlYl9kYXRhRm9yVVJMQ29tcG9uZW50VHlwZTooQ0ZVUkxDb21wb25l
bnRUeXBlKWNvbXBvbmVudFR5cGUKLXsKLSAgICByZXR1cm4gV1RGOjpkYXRhRm9yVVJMQ29tcG9u
ZW50VHlwZShzZWxmLCBjb21wb25lbnRUeXBlKTsKLX0KLQogLShOU0RhdGEgKilfd2ViX3NjaGVt
ZURhdGEKIHsKICAgICByZXR1cm4gV1RGOjpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShzZWxmLCBr
Q0ZVUkxDb21wb25lbnRTY2hlbWUpOwpAQCAtMTkyLDExICsxMzksMTEgQEAgLShOU0RhdGEgKilf
d2ViX3NjaGVtZURhdGEKIC0oTlNEYXRhICopX3dlYl9ob3N0RGF0YQogewogICAgIE5TRGF0YSAq
cmVzdWx0ID0gV1RGOjpkYXRhRm9yVVJMQ29tcG9uZW50VHlwZShzZWxmLCBrQ0ZVUkxDb21wb25l
bnRIb3N0KTsKLSAgICBOU0RhdGEgKnNjaGVtZSA9IFtzZWxmIF93ZWJfc2NoZW1lRGF0YV07Ci0g
ICAgLy8gVGFrZSBvZmYgbG9jYWxob3N0IGZvciBmaWxlCi0gICAgaWYgKFtzY2hlbWUgX3dlYl9p
c0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9DU3RyaW5nOiJmaWxlIl0pIHsKLSAgICAgICAgcmV0dXJu
IChbcmVzdWx0IF93ZWJfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvQ1N0cmluZzoibG9jYWxob3N0
Il0pID8gbmlsIDogcmVzdWx0OwotICAgIH0KKworICAgIC8vIFRha2Ugb2ZmIGxvY2FsaG9zdCBm
b3IgZmlsZS4KKyAgICBpZiAoW3Jlc3VsdCBfd2ViX2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb0NT
dHJpbmc6ImxvY2FsaG9zdCJdICYmIFtbc2VsZiBfd2ViX3NjaGVtZURhdGFdIF93ZWJfaXNDYXNl
SW5zZW5zaXRpdmVFcXVhbFRvQ1N0cmluZzoiZmlsZSJdKQorICAgICAgICByZXR1cm4gbmlsOwor
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjIzLDcgKzE3MCw3IEBAIEBpbXBsZW1lbnRh
dGlvbiBOU1N0cmluZyAoV2ViTlNVUkxFeHRyYXMpCiAKIC0gKEJPT0wpX3dlYl9pc1VzZXJWaXNp
YmxlVVJMCiB7Ci0gICAgcmV0dXJuIGlzVXNlclZpc2libGVVUkwoc2VsZik7CisgICAgcmV0dXJu
IFdURjo6aXNVc2VyVmlzaWJsZVVSTChzZWxmKTsKIH0KIAogLSAoQk9PTClfd2Via2l0X2lzSmF2
YVNjcmlwdFVSTApAQCAtMjM4LDcgKzE4NSw3IEBAIC0gKEJPT0wpX3dlYmtpdF9pc0ZpbGVVUkwK
IAogLSAoTlNTdHJpbmcgKilfd2Via2l0X3N0cmluZ0J5UmVwbGFjaW5nVmFsaWRQZXJjZW50RXNj
YXBlcwogewotICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5nKHNlbGYp
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKFN0cmluZyhz
ZWxmKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dlYmtpdF9zY3JpcHRJZkphdmFTY3JpcHRVUkwK
QEAgLTI1MSwyNCArMTk4LDI0IEBAIC0gKE5TU3RyaW5nICopX3dlYmtpdF9zY3JpcHRJZkphdmFT
Y3JpcHRVUkwKIAogLSAoTlNTdHJpbmcgKilfd2ViX2RlY29kZUhvc3ROYW1lCiB7Ci0gICAgTlNT
dHJpbmcgKm5hbWUgPSBkZWNvZGVIb3N0TmFtZShzZWxmKTsKKyAgICBOU1N0cmluZyAqbmFtZSA9
IFdURjo6ZGVjb2RlSG9zdE5hbWUoc2VsZik7CiAgICAgcmV0dXJuICFuYW1lID8gc2VsZiA6IG5h
bWU7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dlYl9lbmNvZGVIb3N0TmFtZQogewotICAgIE5TU3Ry
aW5nICpuYW1lID0gZW5jb2RlSG9zdE5hbWUoc2VsZik7CisgICAgTlNTdHJpbmcgKm5hbWUgPSBX
VEY6OmVuY29kZUhvc3ROYW1lKHNlbGYpOwogICAgIHJldHVybiAhbmFtZSA/IHNlbGYgOiBuYW1l
OwogfQogCiAtIChOU1N0cmluZyAqKV93ZWJraXRfZGVjb2RlSG9zdE5hbWUKIHsKLSAgICByZXR1
cm4gZGVjb2RlSG9zdE5hbWUoc2VsZik7CisgICAgcmV0dXJuIFdURjo6ZGVjb2RlSG9zdE5hbWUo
c2VsZik7CiB9CiAKIC0gKE5TU3RyaW5nICopX3dlYmtpdF9lbmNvZGVIb3N0TmFtZQogewotICAg
IHJldHVybiBlbmNvZGVIb3N0TmFtZShzZWxmKTsKKyAgICByZXR1cm4gV1RGOjplbmNvZGVIb3N0
TmFtZShzZWxmKTsKIH0KIAogLShOU1JhbmdlKV93ZWJraXRfcmFuZ2VPZlVSTFNjaGVtZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE5MGFkMmU1
Yzk2ZjRhNGY1M2YwYmYzNjEzYjdkOTZmNGNiMDdmZWUuLmRjMDA1ZDhkYWVmNjZkYTIyZGQwYmIx
M2MyYmI1OThhZGJhOWY1NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0xMC0yOCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NGXSBSZWR1Y2UgZHVwbGljYXRpb24gYW5kIHVu
bmVlZGVkIGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgY29weWluZyBpbiBVUkwgY29kZSwgYWxzbyBy
ZW1vdmUgdW51c2VkIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyMjIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9jb2Nv
YS9VUkxFeHRyYXMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogUmVtb3ZlZCBl
eHRyYSBhcmd1bWVudCB0byBVUkxXaXRoVXNlclR5cGVkU3RyaW5nL0RlcHJlY2F0ZWQuCisKIDIw
MjEtMTAtMjggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IFt3ZWJraXRzY21weV0gRml4IGNvbW1pdHMgc2V0IG9uIGJyYW5jaApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvY29jb2EvVVJMRXh0cmFzLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvY29jb2EvVVJMRXh0cmFzLm1tCmluZGV4IDBkYjQ5NjYwMGMw
YzZmNGJjZWYxODg3NTQ2NjFjNzA1N2VjMzQ0OTIuLmE3MDE5ODg4NWE4ZWQ2MDRlNDI2M2IwYTg1
ZGU5ZTRkNjQ5ZjgzM2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L2NvY29hL1VSTEV4dHJhcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9j
b2NvYS9VUkxFeHRyYXMubW0KQEAgLTI0OSwxMCArMjQ5LDEwIEBAIFRFU1QoV1RGX1VSTEV4dHJh
cywgVVJMRXh0cmFzX1BhcnNpbmdFcnJvcikKIAogVEVTVChXVEZfVVJMRXh0cmFzLCBVUkxFeHRy
YXNfTmlsKQogewotICAgIE5TVVJMICp1cmwxID0gV1RGOjpVUkxXaXRoVXNlclR5cGVkU3RyaW5n
KG5pbCwgbmlsKTsKKyAgICBOU1VSTCAqdXJsMSA9IFdURjo6VVJMV2l0aFVzZXJUeXBlZFN0cmlu
ZyhuaWwpOwogICAgIEVYUEVDVF9UUlVFKHVybDEgPT0gbmlsKTsKIAotICAgIE5TVVJMICp1cmwy
ID0gV1RGOjpVUkxXaXRoVXNlclR5cGVkU3RyaW5nRGVwcmVjYXRlZChuaWwsIG5pbCk7CisgICAg
TlNVUkwgKnVybDIgPSBXVEY6OlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdEZXByZWNhdGVkKG5pbCk7
CiAgICAgRVhQRUNUX1RSVUUodXJsMiA9PSBuaWwpOwogfQogCg==
</data>
<flag name="review"
          id="467311"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>