<?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>163939</bug_id>
          
          <creation_ts>2016-10-25 05:53:36 -0700</creation_ts>
          <short_desc>NetworkSession: Add NetworkDataTask implementation for blobs</short_desc>
          <delta_ts>2016-11-05 18:31:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=164458</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Carlos Garcia Campos">cgarcia</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>krollin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244175</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-25 05:53:36 -0700</bug_when>
    <thetext>And get rid of ResourceHandle in NetworkProcess when NetworkSession is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244177</commentid>
    <comment_count>1</comment_count>
      <attachid>292747</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-25 05:56:59 -0700</bug_when>
    <thetext>Created attachment 292747
WIP patch

This is a WIP patch, it just needs to update XCode file to add the new files, and deal with iOS build failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245026</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-26 22:31:33 -0700</bug_when>
    <thetext>Could you guys help me with the xcode changes so that I can continue working on this, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245356</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-27 17:09:35 -0700</bug_when>
    <thetext>I&apos;ll work on it later tonight. I&apos;ll try to have something by 9:00 your time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245461</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-27 22:49:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;ll work on it later tonight. I&apos;ll try to have something by 9:00 your time.

Thanks! note that I&apos;m not asking you to make it build, just to include the files, I&apos;ll fight with EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245467</commentid>
    <comment_count>5</comment_count>
      <attachid>293118</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-27 23:07:41 -0700</bug_when>
    <thetext>Created attachment 293118
Builds macOS and iOS, passes fast layout tests, loads various pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246006</commentid>
    <comment_count>6</comment_count>
      <attachid>293287</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-29 02:23:35 -0700</bug_when>
    <thetext>Created attachment 293287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246007</commentid>
    <comment_count>7</comment_count>
      <attachid>293287</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-10-29 03:50:56 -0700</bug_when>
    <thetext>Comment on attachment 293287
Patch

Attachment 293287 did not pass ios-sim-ews (ios-simulator-wk2):
Output: http://webkit-queues.webkit.org/results/2398618

New failing tests:
imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm
http/tests/xmlhttprequest/access-control-and-redirects.html
http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect.html
imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm
imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246008</commentid>
    <comment_count>8</comment_count>
      <attachid>293288</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-10-29 03:51:00 -0700</bug_when>
    <thetext>Created attachment 293288
Archive of layout-test-results from ews126 for ios-simulator-wk2

The attached test failures were seen while running run-webkit-tests on the ios-sim-ews.
Bot: ews126  Port: ios-simulator-wk2  Platform: Mac OS X 10.11.6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246170</commentid>
    <comment_count>9</comment_count>
      <attachid>293336</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-30 00:10:30 -0700</bug_when>
    <thetext>Created attachment 293336
Try to fix mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246177</commentid>
    <comment_count>10</comment_count>
      <attachid>293337</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-30 01:11:38 -0700</bug_when>
    <thetext>Created attachment 293337
Try to fix failing tests

I messed it up in the NetworkLoad refactoring, confused because we were using ResourceHandle API (with null handle) in network session code branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246433</commentid>
    <comment_count>11</comment_count>
      <attachid>293337</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-31 08:41:25 -0700</bug_when>
    <thetext>Comment on attachment 293337
Try to fix failing tests

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

!
I&apos;ll have to review this from my Sierra machine and make sure things like the new blob downloads still work

&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:77
&gt; +    , m_blobData(static_cast&lt;BlobRegistryImpl&amp;&gt;(blobRegistry()).getBlobDataFromURL(request.url()))

We should move away from using a global blob registry, but not in this patch.

&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:206
&gt; +    // If the size is -1, it means the file has been moved or changed. Fail now.
&gt; +    if (size == -1) {

It would be nice if we could use Optional instead of having magic negative numbers.  I know the blob code does things like this a lot, though.  We need to clean that up.

&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.h:48
&gt; +class NetworkDataTaskBlob final : public NetworkDataTask, public WebCore::FileStreamClient {

I think we should call this BlobDataTask, except it is used by a NetworkLoad.  Blobs are weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246452</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-31 09:24:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 293337 [details]
&gt; Try to fix failing tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293337&amp;action=review
&gt; 
&gt; !
&gt; I&apos;ll have to review this from my Sierra machine and make sure things like
&gt; the new blob downloads still work

Great, thanks! I ran the anchor download tests that use blobs and they passed.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:77
&gt; &gt; +    , m_blobData(static_cast&lt;BlobRegistryImpl&amp;&gt;(blobRegistry()).getBlobDataFromURL(request.url()))
&gt; 
&gt; We should move away from using a global blob registry, but not in this patch.

I don&apos;t even know how that works, TBH.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:206
&gt; &gt; +    // If the size is -1, it means the file has been moved or changed. Fail now.
&gt; &gt; +    if (size == -1) {
&gt; 
&gt; It would be nice if we could use Optional instead of having magic negative
&gt; numbers.  I know the blob code does things like this a lot, though.  We need
&gt; to clean that up.

That code is indeed copy-pasted from the ResourceHandle implementation, I tried to not change the existing code too much to avoid regressions, but I agree we can take advantage to do some small low risk cleanups.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.h:48
&gt; &gt; +class NetworkDataTaskBlob final : public NetworkDataTask, public WebCore::FileStreamClient {
&gt; 
&gt; I think we should call this BlobDataTask, except it is used by a
&gt; NetworkLoad.  Blobs are weird.

I read this is as the NetworkDataTask implementation for Blobs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246533</commentid>
    <comment_count>13</comment_count>
      <attachid>293337</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-31 12:14:38 -0700</bug_when>
    <thetext>Comment on attachment 293337
Try to fix failing tests

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

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:77
&gt;&gt;&gt; +    , m_blobData(static_cast&lt;BlobRegistryImpl&amp;&gt;(blobRegistry()).getBlobDataFromURL(request.url()))
&gt;&gt; 
&gt;&gt; We should move away from using a global blob registry, but not in this patch.
&gt; 
&gt; I don&apos;t even know how that works, TBH.

Right now, blobRegistry() returns the global BlobRegistry, which is returned through PlatformStrategies.  We need to remove PlatformStrategies::blobRegistry() and instead access the BlobRegistry through the NetworkSession, because it should be a member variable of the NetworkSession.  Unfortunately, we need to keep the ResourceHandle code alive for another few years, and this development involves changing how the ResourceHandle registers a BlobResourceHandle constructor, adding SessionIDs in many places, and making some kind of map of SessionID to BlobRegistry just for ResourceHandles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246539</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-31 12:27:42 -0700</bug_when>
    <thetext>This makes http/tests/security/anchor-download-allow-blob.html fail on Sierra as-is.  Probably a minor modification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246618</commentid>
    <comment_count>15</comment_count>
      <attachid>293337</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-31 15:08:37 -0700</bug_when>
    <thetext>Comment on attachment 293337
Try to fix failing tests

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

I&apos;m sure this is about 95% correct, but blobs and downloads don&apos;t work on Sierra and I&apos;m not sure what&apos;s wrong.  Chris wrote our blob download code.

&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:258
&gt; +void NetworkDataTaskBlob::didReceiveResponse(Error errorCode)

Please add LOG(NetworkSession, ...) to each of these callbacks so they can actually be debugged.

&gt; Source/WebKit2/NetworkProcess/NetworkSession.h:64
&gt; +    HashSet&lt;NetworkDataTask*&gt; m_dataTaskSet;

This is strange to have NetworkDataTaskBlobs kept in a set here on cocoa but not with Network-NetworkDataTasks.  That might be the right thing to do, but I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246623</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-31 15:09:27 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; This makes http/tests/security/anchor-download-allow-blob.html fail on
&gt; Sierra as-is.  Probably a minor modification.
It&apos;s not even creating a NetworkDataTaskBlob in this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246871</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-01 03:35:30 -0700</bug_when>
    <thetext>What failure are you getting? could you share the diff? It passes here:

$ wktr http://127.0.0.1:8000/security/anchor-download-allow-blob.html
Content-Type: text/plain
Download started.
Downloading URL with suggested filename &quot;foo.pdf&quot;
Download completed.
Tests that a suggested filename on a download attribute is allowed if the link is a blob URL.

The suggested filename at the top should be foo.pdf.

PASS successfullyParsed is true

TEST COMPLETE

#EOF
#EOF
#EOF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246872</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-01 03:42:54 -0700</bug_when>
    <thetext>(In reply to comment #12) 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:206
&gt; &gt; &gt; +    // If the size is -1, it means the file has been moved or changed. Fail now.
&gt; &gt; &gt; +    if (size == -1) {
&gt; &gt; 
&gt; &gt; It would be nice if we could use Optional instead of having magic negative
&gt; &gt; numbers.  I know the blob code does things like this a lot, though.  We need
&gt; &gt; to clean that up.
&gt; 
&gt; That code is indeed copy-pasted from the ResourceHandle implementation, I
&gt; tried to not change the existing code too much to avoid regressions, but I
&gt; agree we can take advantage to do some small low risk cleanups.

hmm, that -1 comes from FileStream::getSize(), I don&apos;t think we want to change that API in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246873</commentid>
    <comment_count>19</comment_count>
      <attachid>293547</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-01 04:05:09 -0700</bug_when>
    <thetext>Created attachment 293547
Updated patch including logs

Added some log messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247094</commentid>
    <comment_count>20</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 15:55:12 -0700</bug_when>
    <thetext>Here&apos;s the diff.  In this case, -999 is kCFURLErrorCancelled, which makes me think we are making a NetworkDataTask where we shouldn&apos;t be:

--- /Users/alexchristensen/code/OpenSource/WebKitBuild/Debug/layout-test-results/http/tests/security/anchor-download-allow-blob-expected.txt
+++ /Users/alexchristensen/code/OpenSource/WebKitBuild/Debug/layout-test-results/http/tests/security/anchor-download-allow-blob-actual.txt
@@ -1,6 +1,7 @@
 Download started.
 Downloading URL with suggested filename &quot;foo.pdf&quot;
-Download completed.
+Download failed.
+Failed: NSURLErrorDomain, code=-999, description=cancelled
 Tests that a suggested filename on a download attribute is allowed if the link is a blob URL.
 
 The suggested filename at the top should be foo.pdf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247097</commentid>
    <comment_count>21</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 15:58:53 -0700</bug_when>
    <thetext>And here are the logs:

Created NetworkSession with cookieAcceptPolicy 2
1 Creating NetworkDataTask with URL http://127.0.0.1:8000/security/anchor-download-allow-blob.html
1 didReceiveResponse
1 didReceiveResponse completionHandler (cancel)
1 didCompleteWithError
2 Creating NetworkDataTask with URL http://127.0.0.1:8000/resources/js-test-pre.js
3 Creating NetworkDataTask with URL http://127.0.0.1:8000/resources/js-test-post.js
2 didReceiveResponse
2 didReceiveResponse completionHandler (cancel)
2 didCompleteWithError
3 didReceiveResponse
3 didReceiveResponse completionHandler (cancel)
3 didCompleteWithError
0x10ebf8840 - Created NetworkDataTaskBlob for blob:http://127.0.0.1:8000/dc810a1b-32ab-494a-a7c6-bdd08c15e3d9
0x10ebf8840 - NetworkDataTaskBlob::didReceiveResponse(0)
0x10ebf8840 - NetworkDataTaskBlob::didReceiveResponse completionHandler (1)
0x10ebf8840 - NetworkDataTaskBlob::download to /var/folders/d_/755k76r526315y2mt8ffpc3m0000gn/T/WebKitTestRunner-GrEfEg/foo.pdf
0x10ebf8840 - NetworkDataTaskBlob::didFailDownload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247103</commentid>
    <comment_count>22</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 16:06:08 -0700</bug_when>
    <thetext>I had to add #include &quot;Logging.h&quot; to NetworkDataTaskBlob.cpp to get it to compile on Sierra, btw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247136</commentid>
    <comment_count>23</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 16:55:39 -0700</bug_when>
    <thetext>errno is 1
#define	EPERM		1		/* Operation not permitted */</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247166</commentid>
    <comment_count>24</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 17:16:04 -0700</bug_when>
    <thetext>Aha!  We&apos;re not using the SandboxExtension::Handle given to setPendingDownloadLocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247170</commentid>
    <comment_count>25</comment_count>
      <attachid>293623</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 17:21:53 -0700</bug_when>
    <thetext>Created attachment 293623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247171</commentid>
    <comment_count>26</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-01 17:23:19 -0700</bug_when>
    <thetext>Added sandbox extension handling, r=me, please two more reviewers look at this because it touches the disk with openFile, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247246</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-02 00:27:43 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Aha!  We&apos;re not using the SandboxExtension::Handle given to
&gt; setPendingDownloadLocation

Ah, right :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247247</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-02 00:28:38 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 293337 [details]
&gt; Try to fix failing tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293337&amp;action=review
&gt; 
&gt; I&apos;m sure this is about 95% correct, but blobs and downloads don&apos;t work on
&gt; Sierra and I&apos;m not sure what&apos;s wrong.  Chris wrote our blob download code.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:258
&gt; &gt; +void NetworkDataTaskBlob::didReceiveResponse(Error errorCode)
&gt; 
&gt; Please add LOG(NetworkSession, ...) to each of these callbacks so they can
&gt; actually be debugged.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkSession.h:64
&gt; &gt; +    HashSet&lt;NetworkDataTask*&gt; m_dataTaskSet;
&gt; 
&gt; This is strange to have NetworkDataTaskBlobs kept in a set here on cocoa but
&gt; not with Network-NetworkDataTasks.  That might be the right thing to do, but
&gt; I&apos;m not sure.

Actually, NetworkSessionCocoa::invalidateAndCancel() should call NetworkSession::invalidateAndCancel() to invalidate the blobs. I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247268</commentid>
    <comment_count>29</comment_count>
      <attachid>293650</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-02 02:59:06 -0700</bug_when>
    <thetext>Created attachment 293650
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247347</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-02 09:37:27 -0700</bug_when>
    <thetext>Alex, I didn&apos;t ask for r? because you already said r=me and the patch already has the Reviewed by lines filled. So, other reviewers could just comment or even set cq+/-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247450</commentid>
    <comment_count>31</comment_count>
      <attachid>293650</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-02 13:43:32 -0700</bug_when>
    <thetext>Comment on attachment 293650
Patch for landing

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

https://trac.webkit.org/changeset/208298

&gt; Source/WebKit2/NetworkProcess/Downloads/Download.cpp:173
&gt;  String Download::decideDestinationWithSuggestedFilename(const String&amp; filename, bool&amp; allowOverwrite)

We&apos;re trying to get rid of this in favor of the async version, but that can be done in a followup.

&gt; Source/WebKit2/NetworkProcess/NetworkDataTaskBlob.cpp:566
&gt; +    ASSERT(!m_sandboxExtension);

I had to move this assertion to after the check for downloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247677</commentid>
    <comment_count>32</comment_count>
      <attachid>293650</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-03 02:04:36 -0700</bug_when>
    <thetext>Comment on attachment 293650
Patch for landing

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

&gt;&gt; Source/WebKit2/NetworkProcess/Downloads/Download.cpp:173
&gt;&gt;  String Download::decideDestinationWithSuggestedFilename(const String&amp; filename, bool&amp; allowOverwrite)
&gt; 
&gt; We&apos;re trying to get rid of this in favor of the async version, but that can be done in a followup.

This is still not used when NETWORK_SESSION is enabled, I just moved the ifdefs to include more things that are now only built when NETWORK_SESSION si disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247852</commentid>
    <comment_count>33</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-03 14:11:21 -0700</bug_when>
    <thetext>Rolled out in http://trac.webkit.org/changeset/208344
This caused guardmalloc and asan crashes.  Something about the change to NetworkLoad::continueWillSendRequest
Tests like http/tests/xmlhttprequest/redirect-cross-origin-sync.html were crashing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248088</commentid>
    <comment_count>34</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-04 03:03:31 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; Rolled out in http://trac.webkit.org/changeset/208344
&gt; This caused guardmalloc and asan crashes.  Something about the change to
&gt; NetworkLoad::continueWillSendRequest
&gt; Tests like http/tests/xmlhttprequest/redirect-cross-origin-sync.html were
&gt; crashing

Yes, I screwed it up trying to make it easier to read. So, the thing is that when the new request is null we call didCompleteWithError, that notifies the NetworkResourceLoader that cleans it up deleting the network load. Before the patch we called the completion handler with { }, but with the patch we pass m_currentRequest because it was already null anyway, but at this point it has been freed. So, I&apos;ll bring back the previous approach duplicating the call to the complation handler to only use m_currentRequest when it&apos;s not null, and ensuring we return after didCompleteWithError because we will be freed at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248089</commentid>
    <comment_count>35</comment_count>
      <attachid>293876</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-11-04 03:06:02 -0700</bug_when>
    <thetext>Created attachment 293876
Updated patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248172</commentid>
    <comment_count>36</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-04 11:11:30 -0700</bug_when>
    <thetext>Asan agrees!
http://trac.webkit.org/changeset/208388</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292747</attachid>
            <date>2016-10-25 05:56:59 -0700</date>
            <delta_ts>2016-10-29 02:23:35 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk2-network-session-blobs.diff</filename>
            <type>text/plain</type>
            <size>63413</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNmJkYTNiMC4uNDJkZGNkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4Myw2ICsxODMsNyBAQCBlbmRpZiAoKQogc2V0KE5ldHdvcmtQcm9jZXNzX0NP
TU1PTl9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAorICAgIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCiAg
ICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRv
d25sb2FkQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9CbG9iRG93bmxvYWRDbGllbnQuY3BwCmluZGV4IDcyMWI2NGIuLmMzMDQzNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9C
bG9iRG93bmxvYWRDbGllbnQuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQmxvYkRvd25sb2FkQ2xpZW50LmgiCiAKKyNpZiAhVVNFKE5FVFdPUktf
U0VTU0lPTikKKwogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJEb3dubG9h
ZC5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgpAQCAtOTcsMyArOTksNSBAQCB2b2lkIEJsb2JE
b3dubG9hZENsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogfQogCiB9CisKKyNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93
bmxvYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9C
bG9iRG93bmxvYWRDbGllbnQuaAppbmRleCBkY2I4ODlkLi40YTNlNjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3du
bG9hZENsaWVudC5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgIVVT
RShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtNTUsMyArNTcsNSBAQCBwcml2YXRlOgogfTsKIAogfQorCisjZW5kaWYgLy8g
IVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAppbmRleCA2NDk0OGUyLi4wMjM3NzI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5jcHAKQEAgLTQ1LDEwICs0NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLURvd25sb2FkOjpEb3du
bG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9h
ZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiBkb3dubG9hZCwgY29uc3QgV2ViQ29yZTo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkKK0Rvd25sb2Fk
OjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBk
b3dubG9hZElELCBOZXR3b3JrRGF0YVRhc2smIGRvd25sb2FkLCBjb25zdCBTZXNzaW9uSUQmIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogICAgIDogbV9kb3dubG9hZE1h
bmFnZXIoZG93bmxvYWRNYW5hZ2VyKQogICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQpCi0g
ICAgLCBtX2Rvd25sb2FkKGRvd25sb2FkKQorICAgICwgbV9kb3dubG9hZCgmZG93bmxvYWQpCiAg
ICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX3N1Z2dlc3RlZE5hbWUoc3VnZ2Vz
dGVkTmFtZSkKIHsKQEAgLTU2LDggKzU2LDIwIEBAIERvd25sb2FkOjpEb3dubG9hZChEb3dubG9h
ZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElELCBQbGF0CiAK
ICAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWRDcmVhdGVEb3dubG9hZCgpOwogfQotI2VuZGlmCisj
aWYgUExBVEZPUk0oQ09DT0EpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBk
b3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrKiBkb3dubG9hZCwgY29uc3QgU2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKKyAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdl
cikKKyAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQorICAgICwgbV9kb3dubG9hZFRhc2so
ZG93bmxvYWQpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCisgICAgLCBtX3N1Z2dlc3Rl
ZE5hbWUoc3VnZ2VzdGVkTmFtZSkKK3sKKyAgICBBU1NFUlQobV9kb3dubG9hZElELmRvd25sb2Fk
SUQoKSk7CiAKKyAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWRDcmVhdGVEb3dubG9hZCgpOworfQor
I2VuZGlmCisjZWxzZQogRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxv
YWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogICAgIDogbV9kb3dubG9hZE1h
bmFnZXIoZG93bmxvYWRNYW5hZ2VyKQogICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQpCkBA
IC02OCw5ICs4MCwxMSBAQCBEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3du
bG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29ucwogCiAgICAgbV9kb3dubG9h
ZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19T
RVNTSU9OKQogCiBEb3dubG9hZDo6fkRvd25sb2FkKCkKIHsKKyNpZiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKICAgICBpZiAobV9yZXNvdXJjZUhhbmRsZSkgewogICAgICAgICBtX3Jlc291cmNlSGFu
ZGxlLT5jbGVhckNsaWVudCgpOwogICAgICAgICBtX3Jlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsK
QEAgLTc5LDEwICs5MywxMiBAQCBEb3dubG9hZDo6fkRvd25sb2FkKCkKICAgICBtX2Rvd25sb2Fk
Q2xpZW50ID0gbnVsbHB0cjsKIAogICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworI2VuZGlmCiAK
ICAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWREZXN0cm95RG93bmxvYWQoKTsKIH0KIAorI2lmICFV
U0UoTkVUV09SS19TRVNTSU9OKQogdm9pZCBEb3dubG9hZDo6c3RhcnQoKQogewogICAgIGlmICht
X3JlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkgewpAQCAtOTIsMTEgKzEwOCw3IEBAIHZv
aWQgRG93bmxvYWQ6OnN0YXJ0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxzZQogICAgIHN0
YXJ0TmV0d29ya0xvYWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIERvd25sb2FkOjpzdGFydFdpdGhI
YW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCkBAIC0xMDgsMzcgKzEyMCwzOSBAQCB2b2lkIERvd25sb2FkOjpzdGFydFdpdGhIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKLSAgICBVTlVTRURfUEFSQU0ocmVzcG9uc2UpOwotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkV2l0aEhhbmRsZSho
YW5kbGUsIHJlc3BvbnNlKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgRG93bmxvYWQ6OmNh
bmNlbCgpCiB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBpZiAobV9kb3dubG9hZCkg
eworICAgICAgICBtX2Rvd25sb2FkLT5jYW5jZWwoKTsKKyAgICAgICAgZGlkQ2FuY2VsKHsgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQogICAgIGlmIChtX3JlcXVlc3QudXJsKCku
cHJvdG9jb2xJc0Jsb2IoKSkgewogICAgICAgICBhdXRvIHJlc291cmNlSGFuZGxlID0gV1RGTW92
ZShtX3Jlc291cmNlSGFuZGxlKTsKICAgICAgICAgcmVzb3VyY2VIYW5kbGUtPmNhbmNlbCgpOwog
ICAgICAgICBzdGF0aWNfY2FzdDxCbG9iRG93bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50
LmdldCgpKS0+ZGlkQ2FuY2VsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FuY2Vs
TmV0d29ya0xvYWQoKTsKKyNlbmRpZgorICAgIHBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKTsK
IH0KIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogdm9pZCBEb3dubG9hZDo6ZGlkU3RhcnQo
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFN0YXJ0KG1fcmVxdWVz
dCwgbV9zdWdnZXN0ZWROYW1lKSk7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZv
aWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CiAgICAgbV9k
b3dubG9hZE1hbmFnZXIuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7
CiB9Ci0jZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewpAQCAtMTQ3LDE2ICsxNjEsNiBAQCB2b2lkIERv
d25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZVJlc3BvbnNl
KHJlc3BvbnNlKSk7CiB9CiAKLXZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1faGFzUmVjZWl2ZWREYXRhKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoImRpZFJlY2VpdmVEYXRhOiBTdGFydGVkIHJlY2VpdmluZyBkYXRh
IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwotICAgICAg
ICBtX2hhc1JlY2VpdmVkRGF0YSA9IHRydWU7Ci0gICAgfQotCi0gICAgc2VuZChNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7Ci19Ci0KIGJvb2wgRG93bmxv
YWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCiB7CiAgICAgYm9vbCByZXN1bHQ7CkBAIC0xNjYsOCArMTcwLDYgQEAgYm9vbCBEb3dubG9h
ZDo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0K
IFN0cmluZyBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpCiB7CiAgICAgU3Ry
aW5nIGRlc3RpbmF0aW9uOwpAQCAtMTgyLDggKzE4NCw2IEBAIFN0cmluZyBEb3dubG9hZDo6ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwKICAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CiAKLSNlbmRpZgotCiB2b2lkIERvd25sb2Fk
OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6RGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhkb3dubG9hZElE
KCksIHN1Z2dlc3RlZEZpbGVuYW1lKSk7CkBAIC0yMDksMTcgKzIwOSwzMCBAQCB2b2lkIERvd25s
b2FkOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAgICAgbV9yZXNvdXJjZUhhbmRs
ZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KKyNlbmRpZgogCiB2b2lkIERvd25s
b2FkOjpkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkQ3JlYXRlRGVzdGluYXRpb24ocGF0aCkpOwog
fQogCit2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCit7Cisg
ICAgaWYgKCFtX2hhc1JlY2VpdmVkRGF0YSkgeworICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExP
V0VEKCJkaWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1
NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKKyAgICAgICAgbV9oYXNSZWNlaXZl
ZERhdGEgPSB0cnVlOworICAgIH0KKworICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6
OkRpZFJlY2VpdmVEYXRhKGxlbmd0aCkpOworfQorCiB2b2lkIERvd25sb2FkOjpkaWRGaW5pc2go
KQogewogICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImRpZEZpbmlzaDogKGlkID0gJSIgUFJJ
dTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CiAKKyNpZiAhVVNFKE5FVFdPUktf
U0VTU0lPTikKICAgICBwbGF0Zm9ybURpZEZpbmlzaCgpOworI2VuZGlmCiAKICAgICBzZW5kKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRGaW5pc2goKSk7CiAKQEAgLTI3Nyw0ICsyOTAsMTAg
QEAgYm9vbCBEb3dubG9hZDo6aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCkgY29uc3QKICNlbmRp
ZgogfQogCisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5j
ZWxOZXR3b3JrTG9hZCgpCit7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5o
CmluZGV4IGMzZmJmMDkuLjI1Y2JiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCkBAIC00MCwxMiArNDAsNiBAQAogI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCiAjaWYgUExBVEZPUk0oQ09DT0EpCiBPQkpDX0NMQVNTIE5TVVJM
U2Vzc2lvbkRvd25sb2FkVGFzazsKLXR5cGVkZWYgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiBQ
bGF0Zm9ybURvd25sb2FkVGFza1JlZjsKLSNlbGlmIFVTRShTT1VQKQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBOZXR3b3JrRGF0YVRhc2s7Ci19Ci10eXBlZGVmIFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrKiBQbGF0Zm9ybURvd25sb2FkVGFza1JlZjsKICNlbmRpZgogI2Vsc2UgLy8gVVNFKE5F
VFdPUktfU0VTU0lPTikKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTczLDYgKzY3LDcgQEAgY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBEb3dubG9h
ZE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbjsK
IGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTgwLDM5ICs3NSw0MyBAQCBjbGFzcyBEb3dubG9hZCA6IHB1
YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25s
b2FkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3dubG9hZElELCBQbGF0
Zm9ybURvd25sb2FkVGFza1JlZiwgY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworICAgIERvd25sb2FkKERv
d25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIE5ldHdvcmtEYXRhVGFzayYsIGNvbnN0IFdlYkNv
cmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
ID0geyB9KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqLCBjb25zdCBXZWJDb3Jl
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHsgfSk7CiAjZW5kaWYKKyNlbHNlCiAgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93
bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjZW5kaWYKIAogICAgIH5Eb3dubG9hZCgpOwogCisj
aWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgdm9pZCBzdGFydCgpOwogICAgIHZvaWQgc3Rh
cnRXaXRoSGFuZGxlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOworI2VuZGlmCiAgICAgdm9pZCByZXN1bWUoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKICAgICBEb3dubG9hZElE
IGRvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2FkSUQ7IH0KICAgICBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3N1Z2dlc3RlZE5hbWU7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlcXVlc3Q7IH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgdm9pZCBz
ZXRTYW5kYm94RXh0ZW5zaW9uKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiYmIHNhbmRib3hFeHRl
bnNpb24pIHsgbV9zYW5kYm94RXh0ZW5zaW9uID0gV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uKTsg
fQogI2Vsc2UKKyAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0KICAgICB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwot
I2VuZGlmCiAgICAgdm9pZCBkaWRTdGFydCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IGxlbmd0aCk7CiAgICAgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKICAgICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpOwotI2VuZGlmCiAgICAg
dm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgZGlkRGVjaWRlRG93bmxvYWREZXN0aW5hdGlvbihjb25zdCBTdHJp
bmcmIGRlc3RpbmF0aW9uUGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9v
bCBhbGxvd092ZXJ3cml0ZSk7CiAgICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgp
OworICAgIHZvaWQgcGxhdGZvcm1EaWRGaW5pc2goKTsKKyNlbmRpZgogICAgIHZvaWQgZGlkQ3Jl
YXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IGxlbmd0aCk7CiAgICAgdm9pZCBkaWRGaW5pc2goKTsKLSAgICB2b2lkIHBs
YXRmb3JtRGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogICAgIHZv
aWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7CiAKQEAg
LTEyNCwzNyArMTIzLDM1IEBAIHByaXZhdGU6CiAjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgdm9pZCBzdGFydE5ldHdvcmtMb2FkKCk7CiAgICAgdm9pZCBzdGFydE5ldHdvcmtMb2FkV2l0
aEhhbmRsZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKTsKLSNlbmRpZgotICAgIHZvaWQgY2FuY2VsTmV0d29ya0xvYWQoKTsKLQogICAg
IHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisjZW5kaWYKKyAgICB2b2lkIHBsYXRmb3JtQ2Fu
Y2VsTmV0d29ya0xvYWQoKTsKIAogICAgIGJvb2wgaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCkg
Y29uc3Q7CiAKICAgICBEb3dubG9hZE1hbmFnZXImIG1fZG93bmxvYWRNYW5hZ2VyOwogICAgIERv
d25sb2FkSUQgbV9kb3dubG9hZElEOwotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3Jl
cXVlc3Q7CiAKICAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9u
OwogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rvd25sb2FkOwotI2VsaWYgVVNF
KFNPVVApCiAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gbV9kb3dubG9hZDsKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rv
d25sb2FkVGFzazsKICNlbmRpZgogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsK
ICNlbHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IG1fcmVxdWVzdDsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNVUkxE
b3dubG9hZD4gbV9uc1VSTERvd25sb2FkOwogICAgIFJldGFpblB0cjxXS0Rvd25sb2FkQXNEZWxl
Z2F0ZT4gbV9kZWxlZ2F0ZTsKICNlbmRpZgotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04p
CiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKICAgICBSZXRhaW5QdHI8Q0ZVUkxEb3dubG9hZFJl
Zj4gbV9kb3dubG9hZDsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBSZWZQdHI8V2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWROYW1lOwogICAgIGJvb2wgbV9oYXNSZWNl
aXZlZERhdGEgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKaW5kZXggYjJmZGZh
YS4uYjQwNmRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKQEAgLTQ3LDIzICs0NywyMSBAQCBE
b3dubG9hZE1hbmFnZXI6OkRvd25sb2FkTWFuYWdlcihDbGllbnQmIGNsaWVudCkKIHZvaWQgRG93
bmxvYWRNYW5hZ2VyOjpzdGFydERvd25sb2FkKFNlc3Npb25JRCBzZXNzaW9uSUQsIERvd25sb2Fk
SUQgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZE5hbWUpCiB7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAo
IXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkgewotICAgICAgICBhdXRvKiBuZXR3b3Jr
U2Vzc2lvbiA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOwotICAg
ICAgICBpZiAoIW5ldHdvcmtTZXNzaW9uKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICAgICAgcGFyYW1ldGVycy5zZXNz
aW9uSUQgPSBzZXNzaW9uSUQ7Ci0gICAgICAgIHBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7
Ci0gICAgICAgIHBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9IENsaWVudENyZWRl
bnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRlbnRpYWxzOwotICAgICAgICBtX3BlbmRp
bmdEb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rvd25s
b2FkPihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24sIHN1
Z2dlc3RlZE5hbWUpKTsKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IFNlc3Npb25UcmFja2Vy
OjpuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOworICAgIGlmICghbmV0d29ya1Nlc3Npb24pCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKyAgICBOZXR3b3JrTG9hZFBhcmFtZXRlcnMg
cGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHNlc3Npb25JRDsKKyAgICBw
YXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OworICAgIHBhcmFtZXRlcnMuY2xpZW50Q3JlZGVu
dGlhbFBvbGljeSA9IENsaWVudENyZWRlbnRpYWxQb2xpY3k6Ok1heUFza0NsaWVudEZvckNyZWRl
bnRpYWxzOworICAgIG1fcGVuZGluZ0Rvd25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgc3RkOjptYWtl
X3VuaXF1ZTxQZW5kaW5nRG93bmxvYWQ+KFdURk1vdmUocGFyYW1ldGVycyksIGRvd25sb2FkSUQs
ICpuZXR3b3JrU2Vzc2lvbiwgc3VnZ2VzdGVkTmFtZSkpOworI2Vsc2UKICAgICBhdXRvIGRvd25s
b2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQsIHJlcXVl
c3QsIHN1Z2dlc3RlZE5hbWUpOwogICAgIGRvd25sb2FkLT5zdGFydCgpOwogCiAgICAgQVNTRVJU
KCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAgICAgbV9kb3dubG9hZHMuYWRk
KGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKKyNlbmRpZgogfQogCiAjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKQEAgLTk5LDggKzk3LDcgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6Ondp
bGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRhc2smIG5ldHcK
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZG93bmxvYWRzV2FpdGluZ0ZvckRlc3RpbmF0aW9uLnNl
dChkb3dubG9hZElELCBzdGQ6Om1ha2VfcGFpcjxSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiwgUmVz
cG9uc2VDb21wbGV0aW9uSGFuZGxlcj4oJm5ldHdvcmtEYXRhVGFzaywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOwogfQotI2VuZGlmCi0KKyNlbHNlCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29u
dmVydEhhbmRsZVRvRG93bmxvYWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5p
cXVlPERvd25sb2FkPigqdGhpcywgZG93bmxvYWRJRCwgcmVxdWVzdCk7CkBAIC0xMDksNiArMTA2
LDcgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25s
b2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW4KICAgICBBU1NFUlQoIW1fZG93bmxvYWRzLmNv
bnRhaW5zKGRvd25sb2FkSUQpKTsKICAgICBtX2Rvd25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgV1RG
TW92ZShkb3dubG9hZCkpOwogfQorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAKIHZv
aWQgRG93bmxvYWRNYW5hZ2VyOjpjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0
aW9uKERvd25sb2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dP
dmVyd3JpdGUpCiB7CkBAIC0xMzQsMTEgKzEzMiwxMSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6
Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRvd25s
bwogCiAgICAgICAgIEFTU0VSVCghbV9kb3dubG9hZHNBZnRlckRlc3RpbmF0aW9uRGVjaWRlZC5j
b250YWlucyhkb3dubG9hZElEKSk7CiAgICAgICAgIG1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlv
bkRlY2lkZWQuc2V0KGRvd25sb2FkSUQsIG5ldHdvcmtEYXRhVGFzayk7Ci0gICAgICAgIHJldHVy
bjsKICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKGF1dG8qIHdhaXRpbmdEb3dubG9hZCA9
IGRvd25sb2FkKGRvd25sb2FkSUQpKQogICAgICAgICB3YWl0aW5nRG93bmxvYWQtPmRpZERlY2lk
ZURvd25sb2FkRGVzdGluYXRpb24oZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IGFsbG93T3ZlcndyaXRlKTsKKyNlbmRpZgogfQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6cmVz
dW1lRG93bmxvYWQoU2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmgKaW5kZXggMDcxZWE5ZS4uOTA2M2Y4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaApAQCAtODAs
OCArODAsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KERvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIHdp
bGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRhc2smLCBSZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyJiYpOwotI2VuZGlmCisjZWxzZQogICAgIHZvaWQgY29udmVy
dEhhbmRsZVRvRG93bmxvYWQoRG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJik7CisjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2Fk
RGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKIAogICAgIHZvaWQgcmVz
dW1lRG93bmxvYWQoV2ViQ29yZTo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCmluZGV4IGQz
MjA5YWQuLjg2OGUxMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tCkBAIC0zOCwxMCAr
MzgsMTAgQEAgdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
cmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAgICAgCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCit2b2lkIERvd25sb2Fk
OjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKIHsKLSAgICBBU1NFUlQobV9kb3dubG9hZCk7
Ci0gICAgW21fZG93bmxvYWQgY2FuY2VsQnlQcm9kdWNpbmdSZXN1bWVEYXRhOiBeKE5TRGF0YSAq
IF9OdWxsYWJsZSByZXN1bWVEYXRhKQorICAgIEFTU0VSVChtX2Rvd25sb2FkVGFzayk7CisgICAg
W21fZG93bmxvYWRUYXNrIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTogXihOU0RhdGEgKiBf
TnVsbGFibGUgcmVzdW1lRGF0YSkKICAgICB7CiAgICAgICAgIGlmIChyZXN1bWVEYXRhICYmIHJl
c3VtZURhdGEuYnl0ZXMgJiYgcmVzdW1lRGF0YS5sZW5ndGgpCiAgICAgICAgICAgICBkaWRDYW5j
ZWwoSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJl
c3VtZURhdGEuYnl0ZXMpLCByZXN1bWVEYXRhLmxlbmd0aCkpOwpAQCAtNTAsMTUgKzUwLDYgQEAg
dm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQogICAgIH1dOwogfQogCi12b2lkIERv
d25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLX0KLSAgICAKIH0KIAog
I2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlOGM1Yy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlICJEYXRh
UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNlbE5l
dHdvcmtMb2FkKCkKLXsKLSAgICBtX2Rvd25sb2FkLT5jYW5jZWwoKTsKLSAgICBkaWRDYW5jZWwo
eyB9KTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLX0KLQot
dm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA4MzRhZWNhLi4wZTYz
YzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yMDcsMTggKzIwNywxNiBA
QCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNl
TG9hZFRvRG93bmxvYWQoU2Vzc2lvbklECiAgICAgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkgewotICAgICAgICBs
b2FkZXItPm5ldHdvcmtMb2FkKCktPmNvbnZlcnRUYXNrVG9Eb3dubG9hZChkb3dubG9hZElELCBy
ZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIGxvYWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIGxvYWRlci0+bmV0d29ya0xv
YWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNl
KTsKKyAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZWxzZQogICAgIG5ldHdv
cmtQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKGRvd25s
b2FkSUQsIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNl
KTsKIAogICAgIC8vIFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4K
ICAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCktPmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOwogCiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9hZCgpOworI2VuZGlm
CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00o
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVy
bCwgU3RyaW5nJiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrLmNwcAppbmRleCA1NGRhNGZiLi5kYmIwNjVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3b3Jr
RGF0YVRhc2tCbG9iLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw2ICs0NSw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vz
c2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMs
IENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKIHsKKyAgICBpZiAocmVxdWVzdC51cmwo
KS5wcm90b2NvbElzQmxvYigpKQorICAgICAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrQmxvYjo6
Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmKTsKKwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y3Jl
YXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIHNob3VsZENv
bnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggNGRjMTI5MC4uNmRhNDFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZUFuZENhbmNlbCgpID0gMDsKIAogICAgIGVudW0gY2xhc3MgU3RhdGUgewogICAgICAg
ICBSdW5uaW5nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrQmxvYi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2tCbG9iLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
MjMyODhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
RGF0YVRhc2tCbG9iLmgiCisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAi
RGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkRvd25sb2FkLmgiCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkVy
cm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXN5bmNGaWxlU3RyZWFtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9CbG9iRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYlJlZ2lzdHJ5SW1wbC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN0cmVhbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRU
UEhlYWRlck5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUVycm9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IDUxMiAqIDEwMjQ7CisKK3N0YXRpYyBjb25zdCBp
bnQgaHR0cE9LID0gMjAwOworc3RhdGljIGNvbnN0IGludCBodHRwUGFydGlhbENvbnRlbnQgPSAy
MDY7CitzdGF0aWMgY29uc3QgaW50IGh0dHBOb3RBbGxvd2VkID0gNDAzOworc3RhdGljIGNvbnN0
IGludCBodHRwUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNjsKK3N0YXRpYyBjb25z
dCBpbnQgaHR0cEludGVybmFsRXJyb3IgPSA1MDA7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cE9L
VGV4dCA9ICJPSyI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cFBhcnRpYWxDb250ZW50VGV4dCA9
ICJQYXJ0aWFsIENvbnRlbnQiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBOb3RBbGxvd2VkVGV4
dCA9ICJOb3QgQWxsb3dlZCI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cFJlcXVlc3RlZFJhbmdl
Tm90U2F0aXNmaWFibGVUZXh0ID0gIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUiOwor
c3RhdGljIGNvbnN0IGNoYXIqIGh0dHBJbnRlcm5hbEVycm9yVGV4dCA9ICJJbnRlcm5hbCBTZXJ2
ZXIgRXJyb3IiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgd2ViS2l0QmxvYlJlc291cmNl
RG9tYWluID0gIldlYktpdEJsb2JSZXNvdXJjZSI7CisKK05ldHdvcmtEYXRhVGFza0Jsb2I6Ok5l
dHdvcmtEYXRhVGFza0Jsb2IoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFz
a0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENvbnRlbnRT
bmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgOiBOZXR3b3JrRGF0YVRhc2so
c2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGZh
bHNlKQorICAgICwgbV9ibG9iRGF0YShzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlJbXBsJj4oYmxv
YlJlZ2lzdHJ5KCkpLmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgpKSkKKyAgICAsIG1f
c3RyZWFtKHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNGaWxlU3RyZWFtPigqdGhpcykpCit7CisgICAg
bV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7Cit9CisKK05ldHdvcmtE
YXRhVGFza0Jsb2I6On5OZXR3b3JrRGF0YVRhc2tCbG9iKCkKK3sKKyAgICBjbGVhclN0cmVhbSgp
OworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y2xlYXJTdHJlYW0oKQoreworICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUg
PSBTdGF0ZTo6Q29tcGxldGVkOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICBt
X2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdHJlYW0tPmNsb3NlKCk7CisgICAgfQor
ICAgIG1fc3RyZWFtID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpy
ZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBs
ZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOwor
CisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAg
IEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkgeworICAgICAg
ICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9maXJzdFJlcXVlc3Qu
aHR0cE1ldGhvZCgpLCAiZ2V0IikpIHsKKyAgICAgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok1ldGhv
ZE5vdEFsbG93ZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhlIGJsb2IgZGF0YSBpcyBub3QgZm91bmQsIGZhaWwgbm93LgorICAgICAgICBpZiAo
IW1fYmxvYkRhdGEpIHsKKyAgICAgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3Ip
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgdGhl
ICJSYW5nZSIgaGVhZGVyIHdlIGNhcmUgYWJvdXQuCisgICAgICAgIFN0cmluZyByYW5nZSA9IG1f
Zmlyc3RSZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UmFuZ2UpOworICAg
ICAgICBpZiAoIXJhbmdlLmlzRW1wdHkoKSAmJiAhcGFyc2VSYW5nZShyYW5nZSwgbV9yYW5nZU9m
ZnNldCwgbV9yYW5nZUVuZCwgbV9yYW5nZVN1ZmZpeExlbmd0aCkpIHsKKyAgICAgICAgICAgIGRp
ZFJlY2VpdmVSZXNwb25zZShFcnJvcjo6UmFuZ2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBnZXRTaXplRm9yTmV4dCgpOworICAgIH0pOworfQorCit2
b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQoKQoreworICAgIC8vIEZJWE1FOiBjYW4g
dGhpcyBoYXBwZW4/Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y2FuY2VsKCkKK3sK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6
OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5j
ZWxpbmc7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1fZmlsZU9wZW5lZCA9
IGZhbHNlOworICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICBpZiAoaXNE
b3dubG9hZCgpKQorICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3
b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBjYW5jZWwoKTsK
KyAgICBjbGVhclN0cmVhbSgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmdldFNp
emVGb3JOZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRG8g
d2UgZmluaXNoIHZhbGlkYXRpbmcgYW5kIGNvdW50aW5nIHNpemUgZm9yIGFsbCBpdGVtcz8KKyAg
ICBpZiAobV9zaXplSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKSB7Cisg
ICAgICAgIHNlZWsoKTsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRh
LT5pdGVtcygpLmF0KG1fc2l6ZUl0ZW1Db3VudCk7CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkg
eworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpUeXBlOjpEYXRhOgorICAgICAgICBkaWRHZXRTaXpl
KGl0ZW0ubGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6
VHlwZTo6RmlsZToKKyAgICAgICAgLy8gRmlsZXMga25vdyB0aGVpciBzaXplcywgYnV0IGFza2lu
ZyB0aGUgc3RyZWFtIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIHdhc24ndCBtb2RpZmllZC4KKyAg
ICAgICAgbV9zdHJlYW0tPmdldFNpemUoaXRlbS5maWxlKCktPnBhdGgoKSwgaXRlbS5maWxlKCkt
PmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza0Jsb2I6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93bmxv
YWQoKSkpIHsKKyAgICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUgZmlsZSBoYXMgYmVlbiBt
b3ZlZCBvciBjaGFuZ2VkLiBGYWlsIG5vdy4KKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAg
ICBkaWRGYWlsKEVycm9yOjpOb3RGb3VuZEVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFRoZSBzaXplIHBhc3NlZCBiYWNrIGlzIHRoZSBzaXplIG9mIHRoZSB3aG9sZSBm
aWxlLiBJZiB0aGUgdW5kZXJseWluZyBpdGVtIGlzIGEgc2xpY2VkIGZpbGUsIHdlIG5lZWQgdG8g
dXNlIHRoZSBzbGljZSBsZW5ndGguCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9i
bG9iRGF0YS0+aXRlbXMoKS5hdChtX3NpemVJdGVtQ291bnQpOworICAgIHNpemUgPSBpdGVtLmxl
bmd0aCgpOworCisgICAgLy8gQ2FjaGUgdGhlIHNpemUuCisgICAgbV9pdGVtTGVuZ3RoTGlzdC5h
cHBlbmQoc2l6ZSk7CisKKyAgICAvLyBDb3VudCB0aGUgc2l6ZS4KKyAgICBtX3RvdGFsU2l6ZSAr
PSBzaXplOworICAgIG1fdG90YWxSZW1haW5pbmdTaXplICs9IHNpemU7CisgICAgbV9zaXplSXRl
bUNvdW50Kys7CisKKyAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uCisgICAgZ2V0
U2l6ZUZvck5leHQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpzZWVrKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gQ29udmVydCBmcm9tIHRoZSBz
dWZmaXggbGVuZ3RoIHRvIHRoZSByYW5nZS4KKyAgICBpZiAobV9yYW5nZVN1ZmZpeExlbmd0aCAh
PSBrUG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbV9yYW5nZU9mZnNldCA9IG1fdG90
YWxSZW1haW5pbmdTaXplIC0gbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICAgICAgbV9yYW5nZUVu
ZCA9IG1fcmFuZ2VPZmZzZXQgKyBtX3JhbmdlU3VmZml4TGVuZ3RoIC0gMTsKKyAgICB9CisKKyAg
ICAvLyBCYWlsIG91dCBpZiB0aGUgcmFuZ2UgaXMgbm90IHByb3ZpZGVkLgorICAgIGlmIChtX3Jh
bmdlT2Zmc2V0ID09IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBpdGVtcyB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlLgor
ICAgIGxvbmcgbG9uZyBvZmZzZXQgPSBtX3JhbmdlT2Zmc2V0OworICAgIGZvciAobV9yZWFkSXRl
bUNvdW50ID0gMDsgbV9yZWFkSXRlbUNvdW50IDwgbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkg
JiYgb2Zmc2V0ID49IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRlbUNvdW50XTsgKyttX3JlYWRJ
dGVtQ291bnQpCisgICAgICAgIG9mZnNldCAtPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1D
b3VudF07CisKKyAgICAvLyBTZXQgdGhlIG9mZnNldCB0aGF0IG5lZWQgdG8ganVtcCB0byBmb3Ig
dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHJhbmdlLgorICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9
IG9mZnNldDsKKworICAgIC8vIEFkanVzdCB0aGUgdG90YWwgcmVtYWluaW5nIHNpemUgaW4gb3Jk
ZXIgbm90IHRvIGdvIGJleW9uZCB0aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VFbmQgIT0ga1Bv
c2l0aW9uTm90U3BlY2lmaWVkKSB7CisgICAgICAgIGxvbmcgbG9uZyByYW5nZVNpemUgPSBtX3Jh
bmdlRW5kIC0gbV9yYW5nZU9mZnNldCArIDE7CisgICAgICAgIGlmIChtX3RvdGFsUmVtYWluaW5n
U2l6ZSA+IHJhbmdlU2l6ZSkKKyAgICAgICAgICAgIG1fdG90YWxSZW1haW5pbmdTaXplID0gcmFu
Z2VTaXplOworICAgIH0gZWxzZQorICAgICAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBtX3Jh
bmdlT2Zmc2V0OworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNw
b25zZShFcnJvciBlcnJvckNvZGUpCit7CisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UobV9maXJz
dFJlcXVlc3QudXJsKCksIGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvciA/ICJ0ZXh0L3BsYWlu
IiA6IG1fYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCksIGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJv
ciA/IDAgOiBtX3RvdGFsUmVtYWluaW5nU2l6ZSwgU3RyaW5nKCkpOworICAgIHN3aXRjaCAoZXJy
b3JDb2RlKSB7CisgICAgY2FzZSBFcnJvcjo6Tm9FcnJvcjogeworICAgICAgICBib29sIGlzUmFu
Z2VSZXF1ZXN0ID0gbV9yYW5nZU9mZnNldCAhPSBrUG9zaXRpb25Ob3RTcGVjaWZpZWQ7CisgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGlzUmFuZ2VSZXF1ZXN0ID8gaHR0cFBhcnRp
YWxDb250ZW50IDogaHR0cE9LKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQo
aXNSYW5nZVJlcXVlc3QgPyBodHRwUGFydGlhbENvbnRlbnRUZXh0IDogaHR0cE9LVGV4dCk7CisK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50VHlwZSwgbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSk7CisgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCwgU3RyaW5nOjpu
dW1iZXIobV90b3RhbFJlbWFpbmluZ1NpemUpKTsKKworICAgICAgICBpZiAoaXNSYW5nZVJlcXVl
c3QpCisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRSYW5nZSwgUGFyc2VkQ29udGVudFJhbmdlKG1fcmFuZ2VPZmZzZXQsIG1fcmFu
Z2VFbmQsIG1fdG90YWxTaXplKS5oZWFkZXJWYWx1ZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IElm
IGEgcmVzb3VyY2UgaWRlbnRpZmllZCB3aXRoIGEgYmxvYjogVVJMIGlzIGEgRmlsZSBvYmplY3Qs
IHVzZXIgYWdlbnRzIG11c3QgdXNlIHRoYXQgZmlsZSdzIG5hbWUgYXR0cmlidXRlLAorICAgICAg
ICAvLyBhcyBpZiB0aGUgcmVzcG9uc2UgaGFkIGEgQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIg
d2l0aCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyIHNldCB0byB0aGUgRmlsZSdzIG5hbWUgYXR0cmli
dXRlLgorICAgICAgICAvLyBOb3RhYmx5LCB0aGlzIHdpbGwgYWZmZWN0IGEgbmFtZSBzdWdnZXN0
ZWQgaW4gIkZpbGUgU2F2ZSBBcyIuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEVy
cm9yOjpSYW5nZUVycm9yOgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRw
UmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBT
dGF0dXNUZXh0KGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlVGV4dCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXJyb3I6OlNlY3VyaXR5RXJyb3I6CisgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBTdGF0dXNDb2RlKGh0dHBOb3RBbGxvd2VkKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0
SFRUUFN0YXR1c1RleHQoaHR0cE5vdEFsbG93ZWRUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cEludGVybmFs
RXJyb3IpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwSW50ZXJuYWxF
cnJvclRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZXJyb3JDb2RlXShQb2xpY3lBY3Rp
b24gcG9saWN5QWN0aW9uKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgICAgICBjbGVhclN0
cmVhbSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVy
cm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvcikgeworICAgICAgICAgICAgZGlkRmluaXNoKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHBvbGljeUFj
dGlvbikgeworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5VXNlOgorICAgICAgICAg
ICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgICAgICAgICAgcmVhZCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xpY3lJZ25vcmU6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeURv
d25sb2FkOgorICAgICAgICAgICAgZG93bmxvYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6cmVhZCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIG1v
cmUgcmVtYWluaW5nIGRhdGEgdG8gcmVhZCwgd2UgYXJlIGRvbmUuCisgICAgaWYgKCFtX3RvdGFs
UmVtYWluaW5nU2l6ZSB8fCBtX3JlYWRJdGVtQ291bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5z
aXplKCkpIHsKKyAgICAgICAgZGlkRmluaXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRhLT5pdGVtcygpLmF0KG1f
cmVhZEl0ZW1Db3VudCk7CisgICAgaWYgKGl0ZW0udHlwZSgpID09IEJsb2JEYXRhSXRlbTo6VHlw
ZTo6RGF0YSkKKyAgICAgICAgcmVhZERhdGEoaXRlbSk7CisgICAgZWxzZSBpZiAoaXRlbS50eXBl
KCkgPT0gQmxvYkRhdGFJdGVtOjpUeXBlOjpGaWxlKQorICAgICAgICByZWFkRmlsZShpdGVtKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza0Jsb2I6OnJlYWREYXRhKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAg
ICBBU1NFUlQoaXRlbS5kYXRhKCkuZGF0YSgpKTsKKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVh
ZCA9IGl0ZW0ubGVuZ3RoKCkgLSBtX2N1cnJlbnRJdGVtUmVhZFNpemU7CisgICAgaWYgKGJ5dGVz
VG9SZWFkID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAgIGJ5dGVzVG9SZWFkID0gbV90
b3RhbFJlbWFpbmluZ1NpemU7CisgICAgY29uc3VtZURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oaXRlbS5kYXRhKCkuZGF0YSgpLT5kYXRhKCkpICsgaXRlbS5vZmZzZXQoKSArIG1f
Y3VycmVudEl0ZW1SZWFkU2l6ZSwgc3RhdGljX2Nhc3Q8aW50PihieXRlc1RvUmVhZCkpOworICAg
IG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxv
Yjo6cmVhZEZpbGUoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQoreworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgQVNTRVJUKG1fc3RyZWFtKTsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsK
KyAgICAgICAgbV9zdHJlYW0tPnJlYWQobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9uZyBsb25nIGJ5dGVzVG9SZWFkID0g
bV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdIC0gbV9jdXJyZW50SXRlbVJlYWRTaXpl
OworICAgIGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBi
eXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PGludD4obV90b3RhbFJlbWFpbmluZ1NpemUpOworICAg
IG1fc3RyZWFtLT5vcGVuRm9yUmVhZChpdGVtLmZpbGUoKS0+cGF0aCgpLCBpdGVtLm9mZnNldCgp
ICsgbV9jdXJyZW50SXRlbVJlYWRTaXplLCBieXRlc1RvUmVhZCk7CisgICAgbV9maWxlT3BlbmVk
ID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza0Jsb2I6OmRpZE9wZW4oYm9vbCBzdWNjZXNzKQoreworICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICgh
bV9jbGllbnQgJiYgIWlzRG93bmxvYWQoKSkpIHsKKyAgICAgICAgY2xlYXJTdHJlYW0oKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBkaWRG
YWlsKEVycm9yOjpOb3RSZWFkYWJsZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBy
ZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkUmVhZChpbnQgYnl0ZXNS
ZWFkKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9
PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93bmxvYWQoKSkpIHsKKyAg
ICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChi
eXRlc1JlYWQgPCAwKSB7CisgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdFJlYWRhYmxlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGNvbnN1bWVEYXRhKG1fYnVmZmVyLmRhdGEoKSwg
Ynl0ZXNSZWFkKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YShj
b25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIG1fdG90YWxSZW1haW5pbmdT
aXplIC09IGJ5dGVzUmVhZDsKKworICAgIGlmIChieXRlc1JlYWQpIHsKKyAgICAgICAgaWYgKG1f
ZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgICAg
IGlmICghd3JpdGVEb3dubG9hZChkYXRhLCBieXRlc1JlYWQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NsaWVudCk7Cisg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSwgYnl0ZXNSZWFkKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9maWxlT3Bl
bmVkKSB7CisgICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgaXRlbSBpcyBhIGZpbGUgaXRlbSwg
dGhlIHJlYWRpbmcgaXMgY29tcGxldGVkIG9ubHkgaWYgYnl0ZXNSZWFkIGlzIDAuCisgICAgICAg
IGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgICAgICAvLyBDbG9zZSB0aGUgZmlsZS4KKyAgICAg
ICAgICAgIG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICAgICAgbV9zdHJlYW0tPmNsb3Nl
KCk7CisKKyAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAgICAg
IG1fcmVhZEl0ZW1Db3VudCsrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSByZWFkIHRoZSBjdXJyZW50IHRleHQgaXRlbSBhcyBhIHdob2xlIGFuZCBt
b3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAgIH0K
KworICAgIHJlYWQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpzZXRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpCit7CisgICAgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihm
aWxlbmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUpOworICAgIGlm
IChhbGxvd092ZXJ3cml0ZSAmJiBmaWxlRXhpc3RzKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
KQorICAgICAgICBkZWxldGVGaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworfQorCitT
dHJpbmcgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdAorewor
ICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBt
X3N1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidW5rbm93biIp
OworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRvd25sb2FkKCkKK3sKKyAgICBBU1NF
UlQoaXNEb3dubG9hZCgpKTsKKyAgICBBU1NFUlQobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7
CisKKyAgICBtX2Rvd25sb2FkRmlsZSA9IG9wZW5GaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24sIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKG1fZG93bmxvYWRGaWxlID09IGludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKGNhbmNlbGxlZEVycm9y
KG1fZmlyc3RSZXF1ZXN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBk
b3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5h
Z2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KGRv
d25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgKnRoaXMsIG1fc2Vzc2lvbi0+c2Vz
c2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIGF1dG8qIGRvd25sb2FkUHRyID0g
ZG93bmxvYWQuZ2V0KCk7CisgICAgZG93bmxvYWRNYW5hZ2VyLmRhdGFUYXNrQmVjYW1lRG93bmxv
YWRUYXNrKG1fcGVuZGluZ0Rvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKKyAgICBkb3du
bG9hZFB0ci0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7
CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRCZWNvbWVEb3dubG9h
ZCgpOworCisgICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgIHJlYWQoKTsKK30K
KworYm9vbCBOZXR3b3JrRGF0YVRhc2tCbG9iOjp3cml0ZURvd25sb2FkKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBieXRlc1JlYWQpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgaW50
IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKG1fZG93bmxvYWRGaWxlLCBkYXRhLCBieXRlc1Jl
YWQpOworICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsKKyAgICAgICAgZGlkRmFpbERvd25s
b2FkKGNhbmNlbGxlZEVycm9yKG1fZmlyc3RSZXF1ZXN0KSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBBU1NFUlQoYnl0ZXNXcml0dGVuID09IGJ5dGVzUmVhZCk7CisgICAg
YXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5h
Z2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2Fk
KTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmls
ZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRmlsZSAhPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFu
ZGxlKSB7CisgICAgICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAgICAgIG1fZG93
bmxvYWRGaWxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICB9CisgICAgZGVsZXRl
RmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tCbG9iOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgY2xlYXJTdHJlYW0oKTsKKyAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKKworICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7
CisgICAgICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVy
cm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UoKSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OmRpZEZpbmlzaERvd25sb2FkKCkKK3sKKyAgICBBU1NFUlQoaXNEb3dubG9hZCgp
KTsKKyAgICBjbG9zZUZpbGUobV9kb3dubG9hZEZpbGUpOworICAgIG1fZG93bmxvYWRGaWxlID0g
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKworICAgIGNsZWFyU3RyZWFtKCk7CisgICAgYXV0
byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsK
KyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxv
Yjo6ZGlkRmFpbChFcnJvciBlcnJvckNvZGUpCit7CisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Js
b2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAgICAg
ICAgZGlkRmFpbERvd25sb2FkKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWlu
LCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJp
bmcoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJTdHJlYW0oKTsKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihS
ZXNvdXJjZUVycm9yKHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50Pihl
cnJvckNvZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2goKQoreworICAgIGlmIChtX2Rvd25sb2FkRmls
ZSAhPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgIGRpZEZpbmlzaERvd25s
b2FkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjbGVhclN0cmVhbSgpOworICAg
IEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtEYXRhVGFza0Jsb2IuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFza0Jsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjU1MmJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrQmxvYi5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNp
bmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTdHJlYW1D
bGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQXN5bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBC
bG9iRGF0YUl0ZW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0
YVRhc2tCbG9iIGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6
OkZpbGVTdHJlYW1DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFU
YXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVu
dCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNv
cmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tCbG9iKHNlc3Npb24sIGNs
aWVudCwgcmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmKSk7CisgICAgfQorCisgICAgfk5ldHdv
cmtEYXRhVGFza0Jsb2IoKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tCbG9iKE5l
dHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5KTsKKworICAgIHZv
aWQgc3VzcGVuZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBv
dmVycmlkZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zdGF0ZTsgfQorCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29s
IC8qYWxsb3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVu
YW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMu
CisgICAgdm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZykgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRP
cGVuKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVhZChpbnQpIG92ZXJyaWRlOworCisg
ICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBOb3RG
b3VuZEVycm9yID0gMSwKKyAgICAgICAgU2VjdXJpdHlFcnJvciA9IDIsCisgICAgICAgIFJhbmdl
RXJyb3IgPSAzLAorICAgICAgICBOb3RSZWFkYWJsZUVycm9yID0gNCwKKyAgICAgICAgTWV0aG9k
Tm90QWxsb3dlZCA9IDUKKyAgICB9OworCisgICAgdm9pZCBjbGVhclN0cmVhbSgpOworICAgIHZv
aWQgZ2V0U2l6ZUZvck5leHQoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShFcnJvciA9
IEVycm9yOjpOb0Vycm9yKTsKKyAgICB2b2lkIHNlZWsoKTsKKyAgICB2b2lkIGNvbnN1bWVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOworICAgIHZvaWQgcmVhZCgpOworICAg
IHZvaWQgcmVhZERhdGEoY29uc3QgV2ViQ29yZTo6QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCBy
ZWFkRmlsZShjb25zdCBXZWJDb3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lkIGRvd25sb2Fk
KCk7CisgICAgYm9vbCB3cml0ZURvd25sb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1Jl
YWQpOworICAgIHZvaWQgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgdm9pZCBkaWRGYWlsRG93
bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkRmluaXNo
RG93bmxvYWQoKTsKKyAgICB2b2lkIGRpZEZhaWwoRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNo
KCk7CisKKyAgICBlbnVtIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkID0gLTEgfTsKKworICAgIFJl
ZlB0cjxXZWJDb3JlOjpCbG9iRGF0YT4gbV9ibG9iRGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIGFzeW5jaHJvbm91cyBs
b2FkaW5nLgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25n
PiBtX2l0ZW1MZW5ndGhMaXN0OworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVk
IH07CisgICAgbG9uZyBsb25nIG1fcmFuZ2VPZmZzZXQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQg
fTsKKyAgICBsb25nIGxvbmcgbV9yYW5nZUVuZCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9Owor
ICAgIGxvbmcgbG9uZyBtX3JhbmdlU3VmZml4TGVuZ3RoIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVk
IH07CisgICAgbG9uZyBsb25nIG1fdG90YWxTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX3Rv
dGFsUmVtYWluaW5nU2l6ZSB7IDAgfTsKKyAgICBsb25nIGxvbmcgbV9jdXJyZW50SXRlbVJlYWRT
aXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fc2l6ZUl0ZW1Db3VudCB7IDAgfTsKKyAgICB1bnNp
Z25lZCBtX3JlYWRJdGVtQ291bnQgeyAwIH07CisgICAgYm9vbCBtX2ZpbGVPcGVuZWQgeyBmYWxz
ZSB9OworICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2Rvd25sb2FkRmlsZSB7IFdl
YkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAppbmRleCA5MDMxNTYyLi41ODc1YmFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBA
IC02NywxMCArNjcsNiBAQCBOZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGll
bnQmIGNsaWVudCwgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiYgcGFyYQogICAgICwgbV9wYXJhbWV0
ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fcGFyYW1l
dGVycy5yZXF1ZXN0KQogewotICAgIGlmIChtX3BhcmFtZXRlcnMucmVxdWVzdC51cmwoKS5wcm90
b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShudWxscHRyLCBtX3BhcmFtZXRlcnMucmVxdWVzdCwgdGhpcywgbV9wYXJhbWV0ZXJzLmRlZmVy
c0xvYWRpbmcsIG1fcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250
ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBtX3Rhc2sgPSBOZXR3b3JrRGF0YVRh
c2s6OmNyZWF0ZShuZXR3b3JrU2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCBt
X3BhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRT
bmlmZmluZ1BvbGljeSwgbV9wYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QpOwogICAgIGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCiAgICAg
ICAgIG1fdGFzay0+cmVzdW1lKCk7CkBAIC0xMDEsMTIgKzk3LDE0IEBAIE5ldHdvcmtMb2FkOjp+
TmV0d29ya0xvYWQoKQogI2VuZGlmCiAgICAgaWYgKG1fdGFzaykKICAgICAgICAgbV90YXNrLT5j
bGVhckNsaWVudCgpOwotI2VsaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
KyNlbHNlCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICBpZiAo
bV9oYW5kbGUgJiYgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKQogICAgICAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKICNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkK
ICAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3
b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTExOCw5ICsxMTYsMTAg
QEAgdm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKICAgICB9Ci0jZW5kaWYKKyNl
bHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGlu
ZyhkZWZlcnMpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OmNhbmNlbCgpCkBAIC0x
MjgsOSArMTI3LDEwIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNhbmNlbCgpCiAjaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKICAgICBpZiAobV90YXNrKQogICAgICAgICBtX3Rhc2stPmNhbmNlbCgpOwot
I2VuZGlmCisjZWxzZQogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPmNhbmNl
bCgpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpCkBAIC0xNDMsMjcgKzE0
MywxOSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQogI2VuZGlmCiAKICNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQotICAgIGF1dG8gcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhj
aGFuZ2UobV9yZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsgICAgCisgICAgYXV0
byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29t
cGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25I
YW5kbGVyKTsKLSNlbmRpZgotICAgIAorICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKG1fY3VycmVudFJlcXVlc3QpOwor
I2Vsc2UKICAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051bGwoKSkgewogICAgICAgICBpZiAo
bV9oYW5kbGUpCiAgICAgICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgIGRpZEZh
aWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKLSNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICAgICBpZiAocmVkaXJlY3RDb21wbGV0aW9uSGFu
ZGxlcikKLSAgICAgICAgICAgIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSNlbmRp
ZgotICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIGlmIChtX2hhbmRsZSkgewogICAgICAgICBh
dXRvIGN1cnJlbnRSZXF1ZXN0Q29weSA9IG1fY3VycmVudFJlcXVlc3Q7CiAgICAgICAgIG1faGFu
ZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKGN1cnJlbnRSZXF1ZXN0Q29weSkp
OwogICAgIH0KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKHJlZGlyZWN0Q29t
cGxldGlvbkhhbmRsZXIpCi0gICAgICAgIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIobV9jdXJy
ZW50UmVxdWVzdCk7CiAjZW5kaWYKIH0KIApAQCAtMTcxLDEyICsxNjMsMTMgQEAgdm9pZCBOZXR3
b3JrTG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQogewogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAgICAgaWYgKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcikgewotICAgICAg
ICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5VXNlKTsKLSAgICAgICAgbV9yZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byByZXNwb25zZUNv
bXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXIsIG51bGxwdHIpOworICAgICAgICByZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKFBvbGljeVVz
ZSk7CiAgICAgfQotI2VuZGlmCisjZWxzZQogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9o
YW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisjZW5kaWYKIH0KIAogTmV0d29y
a0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIE5ldHdvcmtMb2Fk
OjpzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKQpA
QCAtMjg1LDYgKzI3OCwyMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb21wbGV0ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYgYwogICAgICAgICBOZXR3
b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1l
dGVycy53ZWJGcmFtZUlELCAqbV9jaGFsbGVuZ2UsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIE5l
dHdvcmtMb2FkOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
Ym9vbCByZXN1bHQpCit7CisgICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIp
OworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fY2hhbGxlbmdl
Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
IGlmIChtX3Rhc2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KCptX2NoYWxsZW5nZSkpCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2ZXJUcnVzdENy
ZWRlbnRpYWwoKm1fY2hhbGxlbmdlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFBy
b3RlY3Rpb25TcGFjZSwgeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbXBs
ZXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorI2VuZGlmCisKIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtT
ZXNzaW9uKFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CkBAIC0zNjIsOCArMzcyLDggQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y2Fubm90U2hvd1VSTCgpCiB7
CiAgICAgbV9jbGllbnQuZGlkRmFpbExvYWRpbmcoY2Fubm90U2hvd1VSTEVycm9yKG1fY3VycmVu
dFJlcXVlc3QpKTsKIH0KLSAgICAKLSNlbmRpZgorCisjZWxzZQogCiB2b2lkIE5ldHdvcmtMb2Fk
OjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVjZWl2ZWRSZXNwb25zZSkKIHsKQEAgLTQxOCwzMiArNDI4LDEzIEBAIHZv
aWQgTmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSogaGFuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiAhVVNF
KE5FVFdPUktfU0VTU0lPTikKICAgICBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgPSB0cnVlOwotI2VuZGlmCiAgICAgbV9jbGllbnQuY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKHByb3RlY3Rpb25TcGFjZSk7
CiB9Ci0jZW5kaWYKIAotI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiB2
b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UoYm9vbCByZXN1bHQpCiB7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFtX2hhbmRsZSwgIkJsb2JzIHNob3VsZCBuZXZlciBnaXZlIGF1dGhl
bnRpY2F0aW9uIGNoYWxsZW5nZXMiKTsKLSAgICBBU1NFUlQobV9jaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlcik7Ci0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9j
aGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7Ci0gICAgaWYgKCFyZXN1bHQpIHsK
LSAgICAgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZUZvckhvc3QoKm1fY2hhbGxlbmdlKSkKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIHNlcnZl
clRydXN0Q3JlZGVudGlhbCgqbV9jaGFsbGVuZ2UpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
UmVqZWN0UHJvdGVjdGlvblNwYWNlLCB7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0jZWxzZQogICAgIG1fd2FpdGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZSA9IGZhbHNlOwotI2VuZGlmCiAgICAgaWYgKG1faGFuZGxlKQog
ICAgICAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlKHJlc3VsdCk7CiB9CkBAIC01MTUsNSArNTA2LDYgQEAgdm9pZCBOZXR3b3JrTG9hZDo6
cmVjZWl2ZWRDYW5jZWxsYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVu
dGljYXQKICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CiAgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQo
KSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwogfQorI2VuZGlmIC8vIFVTRShO
RVRXT1JLX1NFU1NJT04pCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggMjdkNDMxNy4uM2Y2MTMwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBAIC00MCw5ICs0
MCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTmV0d29ya0xvYWQgZmluYWwg
OiBwcml2YXRlIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50CitjbGFzcyBOZXR3b3JrTG9h
ZCBmaW5hbCA6CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIHByaXZhdGUgTmV0d29y
a0RhdGFUYXNrQ2xpZW50CisgICAgcHJpdmF0ZSBOZXR3b3JrRGF0YVRhc2tDbGllbnQKKyNlbHNl
CisgICAgcHJpdmF0ZSBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudAogI2VuZGlmCiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSw3ICs3MSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0
UGVuZGluZ0Rvd25sb2FkKFBlbmRpbmdEb3dubG9hZCYpOwogICAgIERvd25sb2FkSUQgcGVuZGlu
Z0Rvd25sb2FkSUQoKSB7IHJldHVybiBtX3Rhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7IH0KLSNl
bmRpZgorI2Vsc2UKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KIAogI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FV
VEhfQ0FMTEJBQ0spCiAgICAgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0
aW9uU3BhY2UmKSBvdmVycmlkZTsKQEAgLTg1LDE3ICs4OCwxNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgTlNDYWNo
ZWRVUkxSZXNwb25zZSAqKSBvdmVycmlkZTsKICNlbmRpZgogI2VuZGlmCisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKIAogI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJB
Q0spCiAgICAgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoYm9vbCk7CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiBoYW5kbGUo
KSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQotCiBwcml2YXRlOgogICAgIE5ldHdv
cmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBzaGFyZWREaWRS
ZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmKTsKICAgICB2b2lkIHNo
YXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKICAgICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudAogICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0
QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UpIGZpbmFsOwog
ICAgIHZvaWQgZGlkU2VuZERhdGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KSBmaW5hbDsKQEAgLTExMSw4ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjZWl2ZWRD
YW5jZWxsYXRpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpIGZpbmFsOwogICAgIGJvb2wgdXNlc0FzeW5jQ2FsbGJhY2tz
KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgbG9hZGluZ1N5bmNocm9ub3VzWEhS
KCkgZmluYWwgeyByZXR1cm4gbV9jbGllbnQuaXNTeW5jaHJvbm91cygpOyB9Ci0KLSNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQorI2Vsc2UKICAgICAvLyBOZXR3b3JrRGF0YVRhc2tDbGllbnQKICAg
ICB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRs
ZXImJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJikg
ZmluYWw7CkBAIC0xNDYsOCArMTQ4LDggQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgYm9vbCBtX3dh
aXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgeyBm
YWxzZSB9OwogICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5n
Q29udGV4dDsKLSNlbmRpZgogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9o
YW5kbGU7CisjZW5kaWYKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRS
ZXF1ZXN0OyAvLyBVcGRhdGVkIG9uIHJlZGlyZWN0cy4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKaW5kZXggMWY4MTgxOS4uMWU1ZTAx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAorI2lu
Y2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtODEsNiArODIs
MTIgQEAgTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCiB7CiB9CiAKK3ZvaWQgTmV0
d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGZvciAoYXV0byogdGFz
ayA6IG1fZGF0YVRhc2tTZXQpCisgICAgICAgIHRhc2stPmludmFsaWRhdGVBbmRDYW5jZWwoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNT
SU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgK
aW5kZXggOTlkMDk4MS4uZDViMDE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKIAogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIApAQCAtMzgsNiArMzksNyBAQCBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworY2xhc3Mg
TmV0d29ya0RhdGFUYXNrOwogCiBjbGFzcyBOZXR3b3JrU2Vzc2lvbiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE5ldHdvcmtTZXNzaW9uPiB7CiBwdWJsaWM6CkBAIC00NSwxNiArNDcsMjEgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiYgZGVmYXVsdFNlc3Npb24oKTsKICAgICB2aXJ0
dWFsIH5OZXR3b3JrU2Vzc2lvbigpOwogCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVBbmRD
YW5jZWwoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIHsgfTsKIAogICAgIFdlYkNvcmU6OlNl
c3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQogICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAKKyAgICB2b2lkIHJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFzayYg
dGFzaykgeyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFzayk7IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJO
ZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQucmVt
b3ZlKCZ0YXNrKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgTmV0d29ya1Nlc3Npb24oV2ViQ29yZTo6
U2Vzc2lvbklEKTsKIAogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKworICAg
IEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKaW5kZXggMGE4ZWRiYi4uNjM0MmUxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0Rh
dGFUYXNrQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHN1c3BlbmQoKSBvdmVycmlkZTsKICAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3Zl
cnJpZGUgeyB9CiAgICAgTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcm
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUq
Lykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRleCA4MzMxYzM5Li40OTQ2YTEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRh
VGFza1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgTmV0d29ya0RhdGFUYXNrU291
cDo6TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0Rh
dGFUYXMKICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAg
ICAsIG1fdGltZW91dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRh
c2tTb3VwOjp0aW1lb3V0RmlyZWQpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25T
b3VwJj4obV9zZXNzaW9uLmdldCgpKS5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7Cisg
ICAgbV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiAgICAgaWYgKG1f
c2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47CiAKQEAg
LTgwLDcgKzgwLDcgQEAgTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cChO
ZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXMKIE5ldHdvcmtEYXRhVGFza1Nv
dXA6On5OZXR3b3JrRGF0YVRhc2tTb3VwKCkKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKLSAgICBz
dGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0
ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdv
cmtEYXRhVGFzaygqdGhpcyk7CiB9CiAKIFN0cmluZyBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdWdn
ZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CkBAIC04NjMsNyArODYzLDcgQEAgdm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpkb3dubG9hZCgpCiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IGFkb3B0
R1JlZihHX09VVFBVVF9TVFJFQU0ob3V0cHV0U3RyZWFtLmxlYWtSZWYoKSkpOwogCiAgICAgYXV0
byYgZG93bmxvYWRNYW5hZ2VyID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2Fk
TWFuYWdlcigpOwotICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2Fk
Pihkb3dubG9hZE1hbmFnZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsIHRoaXMsIG1fc2Vzc2lvbi0+
c2Vzc2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIGF1dG8gZG93bmxvYWQgPSBz
dGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIG1fcGVuZGluZ0Rvd25s
b2FkSUQsICp0aGlzLCBtX3Nlc3Npb24tPnNlc3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgp
KTsKICAgICBhdXRvKiBkb3dubG9hZFB0ciA9IGRvd25sb2FkLmdldCgpOwogICAgIGRvd25sb2Fk
TWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhtX3BlbmRpbmdEb3dubG9hZElELCBX
VEZNb3ZlKGRvd25sb2FkKSk7CiAgICAgZG93bmxvYWRQdHItPmRpZENyZWF0ZURlc3RpbmF0aW9u
KG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCBjOGZhMWEy
Li4wYmZlNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApAQCAtNDIsMTQgKzQyLDEzIEBAIHB1YmxpYzoK
IAogICAgIH5OZXR3b3JrRGF0YVRhc2tTb3VwKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVBbmRD
YW5jZWwoKTsKLQogcHJpdmF0ZToKICAgICBOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNz
aW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmlu
Z1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsK
IAogICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRD
YW5jZWwoKSBvdmVycmlkZTsKICAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092
ZXJ3cml0ZSovKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAppbmRleCBhYzgyODcwLi41OWVm
OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0yNiwxMCArMjYsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogCi0jaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrU291cC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDks
MTAgKzQ3LDQgQEAgU291cFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24o
KSBjb25zdAogICAgIHJldHVybiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nl
c3Npb24oKS5zb3VwU2Vzc2lvbigpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6aW52
YWxpZGF0ZUFuZENhbmNlbCgpCi17Ci0gICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1Nl
dCkKLSAgICAgICAgdGFzay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtTZXNzaW9uU291cC5oCmluZGV4IGQ3NWZiODguLmM1ZmNmZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3Vw
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuaApAQCAtMjYsMTQgKzI2LDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5l
dHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogdHlwZWRlZiBzdHJ1
Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgTmV0d29ya0RhdGFUYXNrU291cDsKLQogY2xhc3MgTmV0d29ya1Nlc3Npb25Tb3VwIGZpbmFs
IDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdv
cmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTQ0LDE1
ICs0MSw4IEBAIHB1YmxpYzoKIAogICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0
OwogCi0gICAgdm9pZCByZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3Vw
JiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRkKCZ0YXNrKTsgfQotICAgIHZvaWQgdW5yZWdpc3Rl
ck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tT
ZXQucmVtb3ZlKCZ0YXNrKTsgfQotCiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChX
ZWJDb3JlOjpTZXNzaW9uSUQpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3Zl
cnJpZGU7Ci0KLSAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFza1NvdXAqPiBtX2RhdGFUYXNrU2V0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmlu
ZGV4IDdkOWEwMzYuLjU0NmU2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC02LDgg
KzYsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9lZmwvRG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcAogCi0gICAgTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA3NTk1OWEzLi44NmM1NTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzMsOCAr
MzMsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAogCi0gICAgTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293118</attachid>
            <date>2016-10-27 23:07:41 -0700</date>
            <delta_ts>2016-10-29 02:23:35 -0700</delta_ts>
            <desc>Builds macOS and iOS, passes fast layout tests, loads various pages.</desc>
            <filename>bug-163939-20161027230351.patch</filename>
            <type>text/plain</type>
            <size>11883</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDEzOGNkZDAwNTJlYjY3MjUyYjFmOGMw
YjRkMmE5OTdkMDg4MmFmNy4uNGIxZDg2YjBlY2U4MmFhY2QwNTA1MGYxNTBlMTllNmY5MzQ2NTEw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjA1Myw3ICsyMDUzLDcgQEAKIAkJNTE0Qzc2NzAwQ0U5MjNBMTAwN0VGM0NEIC8q
IEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY1QjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRDNzY3MTBDRTkyM0ExMDA3RUYz
Q0QgLyogSFRUUEhlYWRlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE0Qzc2NUMwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJNYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRDNzY3
MjBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUQwQ0U5MjNBMTAwN0VGM0NEIC8qIEhU
VFBQYXJzZXJzLmNwcCAqLzsgfTsKLQkJNTE0Qzc2NzMwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQ
YXJzZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzY1RTBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuaCAqLzsgfTsKKwkJNTE0Qzc2
NzMwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY1RTBDRTkyM0ExMDA3RUYzQ0QgLyogSFRU
UFBhcnNlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MTRDNzY3NDBDRTkyM0ExMDA3RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY1RjBD
RTkyM0ExMDA3RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi87IH07CiAJCTUxNEM3
Njc1MENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2MDBDRTkyM0ExMDA3RUYz
Q0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3Njc4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJj
ZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2MzBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OwpA
QCAtNjE2OCw3ICs2MTY4LDcgQEAKIAkJRTFDQTVDQkMwRThDRENBRjAwRThFRjkwIC8qIEpTV29y
a2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi87IH07
CiAJCUUxQ0FBNUM2MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQUE1QzUwRThCRDIzNjAwQTczRUNB
IC8qIEpTV29ya2VyLmggKi87IH07CiAJCUUxQ0RFOTIwMTUwMThFRDAwMDg2MkNDNSAvKiBBc3lu
Y0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFDREU5MUYxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgKi87
IH07Ci0JCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTIxMTUwMTkx
NjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OworCQlFMUNERTkyMjE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3Ry
ZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNE
RTkyMTE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTFEMzFDREMxOTE5NjAyMDAwMTAw
NUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUQzMUNEQTE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRh
dGFGaWxlUmVmZXJlbmNlLmNwcCAqLzsgfTsKIAkJRTFEMzFDREQxOTE5NjAyMDAwMTAwNUEzIC8q
IEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFEMzFDREIxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJl
ZmVyZW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUxRTFCRjAwMTE1RkY2RkIwMDZGNTJDQSAvKiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFMUJFRkYxMTVG
RjZGQjAwNkY1MkNBIC8qIFdpbmRvd3NLZXlib2FyZENvZGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oCmluZGV4IDM1ZTg1YTdhMTVkZTMzOTc3Yzc3ZTc0NmFiYWQzMDhhMTljZWJj
MmUuLmY4NDhiZmIxMWJiNjg3NTg4NGFlYmRiY2JlY2E3Zjk0NGEwZjA3OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBG
aWxlU3RyZWFtQ2xpZW50OwogY2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIFVSTDsKIAotY2xhc3Mg
QXN5bmNGaWxlU3RyZWFtIHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEFzeW5jRmlsZVN0cmVhbSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQm
KTsKICAgICB+QXN5bmNGaWxlU3RyZWFtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JEYXRhLmgKaW5kZXggYjFmY2Q5YzI0MmQ3ZDcwMWQ0NTIxYWRiYmNjMzA5NTU3YTQw
MjY0YS4uOTMyZDVhYjhiN2YyNzQwMWJmMzlhZjg3MjRkMTdiOWQxZjkzMDU5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiAgICAgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlLmdldCgpOyB9CiAKICAgICBsb25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZp
bGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25n
IGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90
IGtub3duIHlldC4KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2
NjIxNjQ1MDg3ZGE3ZGVhNTJlZGVmYWM3NmZiYWIxMzM2Ny4uN2Y2YjQyNmFjMDk1Y2Q5NTY4YmFl
OTRjNzMzZDJlMzM5MjgzZjBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFBhcnNlcnMuaApAQCAtODEsNyArODEsNyBAQCBBdG9taWNTdHJpbmcgZXh0cmFjdFJl
YXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShjb25zdCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlv
bnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9wdGlvbnNIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAK
IC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUgb2YgdGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGlu
ZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkLgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0
IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxv
bmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJh
bmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFu
Z2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOwogCiAjaWYgRU5BQkxFKE5PU05J
RkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9u
c0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKaW5kZXggN2Q2ODk1MWRh
MGQ5YWZhOTljZmY3ODkyYjJhYzA1ZDhkODNjMDI1Ni4uZDg5NjYxNWZkZmNjNDA3MzNmMTdhZmQz
YzhhN2M3ZWU0OGU2ZDM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6
CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBzZXRIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCmluZGV4IDE1ZmJi
NmQ3N2MwNGY5YTNiOTM1YzZlZjc2NzE1MjBiYmNhMjAwOTYuLjIxZDJiZjE2NWVmNzBiYjJhNzhi
MDBlYzJjYWI5M2EyNWNmY2U5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjaWYgIVVTRShORVRXT1JL
X1NFU1NJT04pCiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKIAogdm9pZCBOZXR3b3JrTG9hZDo6
d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCkBAIC01Miw1ICs1Myw2IEBAIHZvaWQgTmV0d29ya0xv
YWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNo
ZWRVUkxSZXNwCiB9CiAKICNlbmRpZiAvLyAhVVNFKENGVVJMQ09OTkVDVElPTikKKyNlbmRpZiAv
LyAhVVNFKE5FVFdPUktfU0VTU0lPTikKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTM4
YzcyN2VmN2E0ZTQ4ZDRkYjYxY2QzMTg5NGQyMWEyODQyMTgwYi4uNjVjOTkzYzhhYmIxM2U0ZTUy
NTNlZTEyMDcwYTc3ZGNmZTkxNzE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0Myw2ICsxMDQzLDggQEAKIAkJNTMyMTU5
NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0Mg
LyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTND
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lv
bkNvY29hLmggKi87IH07CiAJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87
IH07CisJCTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ2
MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLzsgfTsKKwkJNTNC
QTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ3MURDMkVFNDAwMDlE
NDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi87IH07CiAJCTVDMDUyRjI2MUM2RDNCRDMw
MDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNBQjYwMDc2RTkxOSAv
KiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMxNDI2RUMxQzIzRjgw
OTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUyMUMyM0Y4MDUw
MEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJ
CTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMx
NDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggKi87IH07CkBAIC0zMTMxLDYgKzMxMzMsOCBAQAogCQk1MzIxNTk1MDFEQkFFNkQ3MDA1NEFB
M0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1
OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMjE1OTUyMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFz
a0Jsb2IuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzOUVCNTQ3MURDMkVFNDAwMDlENDhDRiAv
KiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtEYXRhVGFza0Jsb2IuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRh
VGFza0Jsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RDE4QjcxQ0NGRTM0
QjAwQjE5NzRDIC8qIFBob3Rvc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaG90b3NTUEkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwNTJGMjQxQzZEM0FCNjAwNzZFOTE5IC8qIEF1
dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07IHBhdGggPSBBdXRoZW50
aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI2RTIxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTgsNiArNTQ2Miw4IEBACiAJCQkJNUNCQzlCODkxQzY1
MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovLAogCQkJCTgzOTkwMUZGMUJFOUEw
MUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8sCiAJCQkJODM5OTAxRkUxQkU5QTAxQjAw
MEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggKi8sCisJCQkJNTM5RUI1NDYxREMyRUU0MDAwOUQ0OENG
IC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICovLAorCQkJCTUzOUVCNTQ3MURDMkVFNDAwMDlE
NDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8sCiAJCQkJODNENDU0RDYxQkU5RDNDNDAw
NkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggKi8sCiAJCQkJODM5MTQ5NjMxQkVBODM4NTAw
RDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovLAogCQkJCTUxMENDN0RGMTYxMzhF
MjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAgKi8sCkBAIC03ODE5LDYgKzc4MjUsNyBA
QAogCQkJCTFBMEVDNkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEVDNzVFMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Q
cm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzQjVFMTI0RDVFOUQwMEZGQkZC
NSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNC
QTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQ
bHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLApAQCAtOTMxMiw2ICs5MzE5LDcgQEAKIAkJCQkx
QTJEOTIyMTEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENjIyNzcxNzM5RDg2MzAwNUJEN0ZGIC8q
IFBsdWdpblNhbmRib3hQcm9maWxlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTNCQTQ3RDAxREMy
RUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM4Mjg0NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RkI3QUUxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4QzkyRjQxMkRCOUU3MTAwQ0YyQUVCIC8qIFBy
aW50SW5mby5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293287</attachid>
            <date>2016-10-29 02:23:35 -0700</date>
            <delta_ts>2016-10-30 00:10:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>83083</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MjFmZDU0Li44NWQ3NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTAtMjkgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1hcmsgSFRUUFBhcnNlcnMuaCBh
bmQgQXN5bmNGaWxlU3RyZWFtLmggYXMgcHJpdmF0ZS4KKyAgICAgICAgKiBmaWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gQXN5bmNGaWxlU3RyZWFtIGNsYXNz
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaDogQWRkIFdFQkNPUkVfRVhQ
T1JUIHRvIGxlbmd0aCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aDogQWRkIFdFQkNPUkVfRVhQT1JUIHRvIHBhcnNlUmFuZ2UoKS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBz
ZXRIVFRQSGVhZGVyRmllbGQoKS4KKwogMjAxNi0xMC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhZGQgSW5wdXQgRXZlbnRz
IHRvIHRoZSBmZWF0dXJlcyBsaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUxMzFjMzkuLmI4ODE3YWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTMs
NyArMjA1Myw3IEBACiAJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUIwQ0U5
MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzEwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFk
ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NEM3NjVDMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VG
M0NEIC8qIEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjVEMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAg
Ki87IH07Ci0JCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNB
MTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IH07CisJCTUxNEM3NjczMENFOTIzQTEwMDdF
RjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzQw
Q0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NE
IC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3NTBDRTkyM0ExMDA3
RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rp
b25TcGFjZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTRDNzY3ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjMwQ0U5
MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKQEAgLTYxNjgsNyArNjE2
OCw3IEBACiAJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNCQjBF
OENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQlFMUNBQTVDNjBF
OEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5o
ICovOyB9OwogCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTFG
MTUwMThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovOyB9OwotCQlFMUNERTky
MjE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1MDE5MTY5MDA4NjJDQzUgLyog
QXN5bmNGaWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
KwkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAw
ODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0
YUZpbGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFEMzFDREExOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5j
ZS5jcHAgKi87IH07CiAJCUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVS
ZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxRDMxQ0RCMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUUxQkYwMDEx
NUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAv
KiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaApp
bmRleCAzNWU4NWE3Li5mODQ4YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0FzeW5jRmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxl
U3RyZWFtLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNz
IEZpbGVTdHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSB7CitjbGFz
cyBXRUJDT1JFX0VYUE9SVCBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgogICAgIGV4cGxpY2l0
IEFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVh
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggMWE3NzJm
Yy4uYjc4NTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTYtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFU
YXNrIGltcGxlbWVudGF0aW9uIGZvciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVtb3ZlIERvd25sb2FkU291cC5j
cHAKKwogMjAxNi0xMC0xOSAgR2Fib3IgS2VsZW1lbiAgPGtlbGVtZW5nQHVidW50dS5jb20+CiAK
ICAgICAgICAgW0dUS10gW0wxMG5dIFVwZGF0ZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggN2ZhMjgyNS4uYjY1
ZmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVT
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAt
MSw3ICsxLDYgQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xh
dGFibGUgc3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCi0u
Li8uLi8uLi9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291
cC5jcHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JE
YXRhLmgKaW5kZXggYjFmY2Q5Yy4uOTMyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxvYkRh
dGFGaWxlUmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAK
ICAgICBsb25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBs
b25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mg
bm90IGtub3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkgY29u
c3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2Ni4uN2Y2YjQyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODEsNyAr
ODEsNyBAQCBBdG9taWNTdHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGlu
ZShjb25zdCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9w
dGlvbnNIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUg
b2YgdGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3Bl
Y2lmaWVkLgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VP
ZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgp
OworV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9u
ZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZm
aXhMZW5ndGgpOwogCiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNw
b3NpdGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmgKaW5kZXggN2Q2ODk1MS4uZDg5NjYxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAt
OTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0gICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKEhU
VFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lk
IGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRhM2IwLi40MmRkY2RiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dApAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29ya1Byb2Nl
c3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCisg
ICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCAwN2YwMWE3Li43NWNiZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTA0IEBACisyMDE2LTEwLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBpbXBs
ZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBOZXR3b3JrRGF0YVRhc2tCbG9iIHRvIGhhbmRsZSBibG9icyB3aGVu
IHVzaW5nIE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgdXNpbmcgUmVzb3VyY2VIYW5kbGUuIFRo
aXMgcGF0Y2gKKyAgICAgICAgYWRkcyBtb3JlIFVTRShORVRXT1JLX1NFU1NJT04pIGlmZGVmcyB0
byBub3QgdXNlIFJlc291cmNlSGFuZGxlIGluIERvd25sb2FkcyBhbmQgTmV0d29ya0xvYWQgd2hl
biBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBpcyBlbmFibGVkLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkOjpEb3dubG9hZCk6IFNwbGl0IHRoZSBjb25zdHJ1Y3RvciBhZ2FpbiBhbmQgcmVtb3Zl
IHRoZSBQbGF0Zm9ybURvd25sb2FkVGFza1JlZgorICAgICAgICBkZWZpbml0aW9ucy4gTm93IENv
Y29hIHNwZWNpZmljIGNvbnN0cnVjdG9yIHJlY2VpdmVzIGEgTlNVUkxTZXNzaW9uRG93bmxvYWRU
YXNrIGFuZCB0aGUgZ2VuZXJhbCBjb25zdHJ1Y3RvcgorICAgICAgICByZXZlaWNlcyBhIE5ldHdv
cmtEYXRhVGFzayBhbmQgaXMgdXNlZCBieSBTb3VwIGJhY2tlbmQgYW5kIGJsb2JzLgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6
CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNhbmNl
bE5ldHdvcmtMb2FkKTogUmVuYW1lIGNhbmNlbE5ldHdvcmtMb2FkKCkgYXMgcGxhdGZvcm1DYW5j
ZWxOZXR3b3JrTG9hZCgpIHNpbmNlCisgICAgICAgIHRoaXMgaXMgbm93IHVzZWQgb25seSBieSBD
b2NvYSBwbGF0Zm9ybSB0byBjYW5jZWwgdGhlIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzay4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdl
YktpdDo6RG93bmxvYWQ6OkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN1
Z2dlc3RlZE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cmVxdWVzdCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6IFJlbW92ZSBibG9i
cyBzcGVjaWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5h
dGlvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdl
ci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3Jr
TG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRT
b3VwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOiBSZW1vdmUg
YmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuCisgICAgICAgIHVzaW5nIE5ldHdvcmtTZXNzaW9uLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTogSWYgcmVxdWVzdCBpcyBhIGJsb2IsIGNy
ZWF0ZSBhIE5ldHdvcmtEYXRhVGFza0Jsb2IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrLmg6IEFkZCBpbnZhbGlkYXRlQW5kQ2FuY2VsIHB1cmUgdmlydHVhbCBtZXRo
b2QuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0YVRh
c2tCbG9iKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtE
YXRhVGFza0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVh
clN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3VtZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQmxvYjo6c2Vlayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza0Jsb2I6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9i
OjpyZWFkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRG
aWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmlsZXMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2hEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6TmV0
d29ya0xvYWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuIHVzaW5nIE5ldHdvcmtT
ZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrTG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xv
YWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xv
YWQ6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlQXN5bmMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6IE1vdmVkIGZyb20g
TmV0d29ya1Nlc3Npb25Tb3VwLCBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGFsc28gYnkgYmxvYnMu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNr
KTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EuaDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRv
ZXMgbm90aGluZworICAgICAgICBiZWNhdXNlIGluIENvY29hIGFsbCB0YXNrcyBhcmUgaW52YWxp
ZGF0ZWQgYW5kIGNhbmNlbCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IFJl
bW92ZSBEb3dubG9hZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxhdGZv
cm1HVEsuY21ha2U6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMC0yOCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUGx1Z2lu
IHByb2Nlc3MgY3Jhc2hlcyBpbiBOUE5fSW52b2tlRGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xp
ZW50LmNwcAppbmRleCA3MjFiNjRiLi5jMzA0Mzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJs
b2JEb3dubG9hZENsaWVudC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNs
dWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWQuaCIKICNpbmNsdWRlICJX
ZWJFcnJvcnMuaCIKQEAgLTk3LDMgKzk5LDUgQEAgdm9pZCBCbG9iRG93bmxvYWRDbGllbnQ6OmRp
ZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAog
fQorCisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmgKaW5kZXggZGNiODg5ZC4uNGEzZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaApAQCAt
MjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9O
KQorCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDMg
KzU3LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNT
SU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZC5jcHAKaW5kZXggNjQ5NDhlMi4uMDIzNzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC00NSwxMCAr
NDUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi1Eb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5h
Z2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxv
YWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgTmV0d29y
a0RhdGFUYXNrJiBkb3dubG9hZCwgY29uc3QgU2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFu
YWdlcikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9kb3dubG9hZChk
b3dubG9hZCkKKyAgICAsIG1fZG93bmxvYWQoJmRvd25sb2FkKQogICAgICwgbV9zZXNzaW9uSUQo
c2Vzc2lvbklEKQogICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CkBAIC01
Niw4ICs1NiwyMCBAQCBEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9h
ZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdAogCiAgICAgbV9kb3dubG9hZE1h
bmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKIH0KLSNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09B
KQorRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBE
b3dubG9hZElEIGRvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogZG93bmxvYWQs
IGNvbnN0IFNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUp
CisgICAgOiBtX2Rvd25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCisgICAgLCBtX2Rvd25s
b2FkSUQoZG93bmxvYWRJRCkKKyAgICAsIG1fZG93bmxvYWRUYXNrKGRvd25sb2FkKQorICAgICwg
bV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5h
bWUpCit7CisgICAgQVNTRVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCisgICAgbV9k
b3dubG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKK30KKyNlbmRpZgorI2Vsc2UKIERv
d25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxv
YWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFu
YWdlcikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQpAQCAtNjgsOSArODAsMTEgQEAg
RG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3du
bG9hZElEIGRvd25sb2FkSUQsIGNvbnMKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0
ZURvd25sb2FkKCk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxv
YWQ6On5Eb3dubG9hZCgpCiB7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1f
cmVzb3VyY2VIYW5kbGUpIHsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQo
KTsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIg
QEAgRG93bmxvYWQ6On5Eb3dubG9hZCgpCiAgICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7
CiAKICAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1h
bmFnZXIuZGlkRGVzdHJveURvd25sb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKIHZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNCbG9iKCkpIHsKQEAgLTkyLDExICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFy
dCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3
ICsxMjAsMzkgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHJlc3BvbnNlKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbHNlCiAgICAgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7
Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQogeworI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisgICAgaWYgKG1fZG93bmxvYWQpIHsKKyAgICAgICAgbV9kb3du
bG9hZC0+Y2FuY2VsKCk7CisgICAgICAgIGRpZENhbmNlbCh7IH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorI2Vsc2UKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkp
IHsKICAgICAgICAgYXV0byByZXNvdXJjZUhhbmRsZSA9IFdURk1vdmUobV9yZXNvdXJjZUhhbmRs
ZSk7CiAgICAgICAgIHJlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgc3RhdGljX2Nh
c3Q8QmxvYkRvd25sb2FkQ2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmRpZENhbmNl
bCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhbmNlbE5ldHdvcmtMb2FkKCk7Cisj
ZW5kaWYKKyAgICBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QsIG1fc3VnZ2VzdGVkTmFt
ZSkpOwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRv
d25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwogfQotI2VuZGlmCiAKIHZv
aWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKIHsKQEAgLTE0NywxNiArMTYxLDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIHNlbmQoTWVz
c2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwogfQog
Ci12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFtX2hhc1JlY2VpdmVkRGF0YSkgewotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJkaWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1NjQg
IikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKLSAgICAgICAgbV9oYXNSZWNlaXZlZERh
dGEgPSB0cnVlOwotICAgIH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRp
ZFJlY2VpdmVEYXRhKGxlbmd0aCkpOwotfQotCiBib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVT
b3VyY2VEYXRhT2ZNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGJvb2wg
cmVzdWx0OwpAQCAtMTY2LDggKzE3MCw2IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNv
dXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCiBTdHJpbmcgRG93bmxvYWQ6
OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlvbjsK
QEAgLTE4Miw4ICsxODQsNiBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsCiAgICAgcmV0dXJuIGRl
c3RpbmF0aW9uOwogfQogCi0jZW5kaWYKLQogdm9pZCBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVu
YW1lKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoZG93bmxvYWRJRCgpLCBzdWdnZXN0ZWRGaWxl
bmFtZSkpOwpAQCAtMjA5LDE3ICsyMDksMzAgQEAgdm9pZCBEb3dubG9hZDo6Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKQogewogICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7CiB9CisjZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkQ3JlYXRlRGVz
dGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25s
b2FkUHJveHk6OkRpZENyZWF0ZURlc3RpbmF0aW9uKHBhdGgpKTsKIH0KIAordm9pZCBEb3dubG9h
ZDo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKQoreworICAgIGlmICghbV9oYXNSZWNl
aXZlZERhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURh
dGE6IFN0YXJ0ZWQgcmVjZWl2aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJ
RCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShs
ZW5ndGgpKTsKK30KKwogdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKIHsKICAgICBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKCJkaWRGaW5pc2g6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2Fk
SUQoKS5kb3dubG9hZElEKCkpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgcGxh
dGZvcm1EaWRGaW5pc2goKTsKKyNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQ
cm94eTo6RGlkRmluaXNoKCkpOwogCkBAIC0yNzcsNCArMjkwLDEwIEBAIGJvb2wgRG93bmxvYWQ6
OmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFQTEFU
Rk9STShDT0NPQSkKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQor
eworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBjM2ZiZjA5Li4y
NWNiYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuaApAQCAtNDAsMTIgKzQwLDYgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQogI2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRh
c2s7Ci10eXBlZGVmIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRh
c2tSZWY7Ci0jZWxpZiBVU0UoU09VUCkKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgTmV0d29y
a0RhdGFUYXNrOwotfQotdHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWY7CiAjZW5kaWYKICNlbHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAj
aWYgUExBVEZPUk0oQ09DT0EpCkBAIC03Myw2ICs2Nyw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRNYW5hZ2VyOworY2xhc3Mg
TmV0d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQYWdlOwog
CkBAIC04MCwzOSArNzUsNDMgQEAgY2xhc3MgRG93bmxvYWQgOiBwdWJsaWMgSVBDOjpNZXNzYWdl
U2VuZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgRG93
bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWYsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lID0geyB9KTsKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBE
b3dubG9hZElELCBOZXR3b3JrRGF0YVRhc2smLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwg
TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiwgY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOwogI2VuZGlmCisj
ZWxzZQogICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUg
PSB7IH0pOworI2VuZGlmCiAKICAgICB+RG93bmxvYWQoKTsKIAorI2lmICFVU0UoTkVUV09SS19T
RVNTSU9OKQogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsK
KyNlbmRpZgogICAgIHZvaWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1l
RGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KTsKICAgICB2b2lkIGNhbmNlbCgpOwogCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29u
c3QgeyByZXR1cm4gbV9kb3dubG9hZElEOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0ZWROYW1lOyB9Ci0gICAgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9
CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc2V0U2FuZGJveEV4dGVuc2lv
bihSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7IG1fc2FuZGJv
eEV4dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNlCisgICAgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXF1ZXN0OyB9CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogICAgIHZvaWQg
ZGlkU3RhcnQoKTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5n
dGgpOwogICAgIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIGRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKLSNlbmRpZgogICAgIHZvaWQgZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IGRpZERlY2lkZURvd25sb2FkRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBh
dGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUp
OwogICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHBsYXRm
b3JtRGlkRmluaXNoKCk7CisjZW5kaWYKICAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5n
dGgpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgp
OwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3Qg
SVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogCkBAIC0xMjQsMzcgKzEyMywzNSBA
QCBwcml2YXRlOgogI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnROZXR3
b3JrTG9hZCgpOwogICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0jZW5k
aWYKLSAgICB2b2lkIGNhbmNlbE5ldHdvcmtMb2FkKCk7Ci0KICAgICB2b2lkIHBsYXRmb3JtSW52
YWxpZGF0ZSgpOworI2VuZGlmCisgICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7
CiAKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93
bmxvYWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxv
YWRJRDsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogCiAgICAgUmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKIAogI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vz
c2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsKLSNlbGlmIFVTRShTT1VQKQogICAgIFJlZlB0
cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
UmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZFRhc2s7CiAjZW5k
aWYKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAjZWxzZSAvLyBVU0UoTkVU
V09SS19TRVNTSU9OKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxE
b3dubG9hZDsKICAgICBSZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7
CiAjZW5kaWYKLSNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFVTRShDRlVSTENP
Tk5FQ1RJT04pCiAgICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAj
ZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+
IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBt
X3Jlc291cmNlSGFuZGxlOworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3Ry
aW5nIG1fc3VnZ2VzdGVkTmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2Ug
fTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmluZGV4IGIyZmRmYWEuLmI0MDZkZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZE1hbmFnZXIuY3BwCkBAIC00NywyMyArNDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpE
b3dubG9hZE1hbmFnZXIoQ2xpZW50JiBjbGllbnQpCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3Rh
cnREb3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KQogewogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9u
VHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKCFuZXR3b3Jr
U2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTmV0d29ya0xvYWRQYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklE
OwotICAgICAgICBwYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgICAgICBwYXJhbWV0
ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlB
c2tDbGllbnRGb3JDcmVkZW50aWFsczsKLSAgICAgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChk
b3dubG9hZElELCBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJh
bWV0ZXJzKSwgZG93bmxvYWRJRCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7Cisg
ICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKTsKKyAgICBpZiAoIW5ldHdvcmtTZXNzaW9uKQogICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAg
cGFyYW1ldGVycy5zZXNzaW9uSUQgPSBzZXNzaW9uSUQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0
ID0gcmVxdWVzdDsKKyAgICBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGll
bnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFsczsKKyAgICBtX3Bl
bmRpbmdEb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rv
d25sb2FkPihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24s
IHN1Z2dlc3RlZE5hbWUpKTsKKyNlbHNlCiAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWQ+KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0LCBzdWdnZXN0ZWROYW1l
KTsKICAgICBkb3dubG9hZC0+c3RhcnQoKTsKIAogICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29u
dGFpbnMoZG93bmxvYWRJRCkpOwogICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEZN
b3ZlKGRvd25sb2FkKSk7CisjZW5kaWYKIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCkBA
IC05OSw4ICs5Nyw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjp3aWxsRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3CiAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JEZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3Rk
OjptYWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhh
bmRsZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNl
bmRpZgotCisjZWxzZQogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25s
b2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKIHsKICAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRo
aXMsIGRvd25sb2FkSUQsIHJlcXVlc3QpOwpAQCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxv
YWRNYW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQs
IFJlc291cmNlSGFuCiAgICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElE
KSk7CiAgICAgbV9kb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsK
IH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiB2b2lkIERvd25sb2FkTWFuYWdl
cjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRv
d25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQogewpAQCAt
MTM0LDExICsxMzIsMTEgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVu
ZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCBkb3dubG8KIAogICAgICAgICBBU1NF
UlQoIW1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJ
RCkpOwogICAgICAgICBtX2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25EZWNpZGVkLnNldChkb3du
bG9hZElELCBuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlm
CisjZWxzZQogICAgIGlmIChhdXRvKiB3YWl0aW5nRG93bmxvYWQgPSBkb3dubG9hZChkb3dubG9h
ZElEKSkKICAgICAgICAgd2FpdGluZ0Rvd25sb2FkLT5kaWREZWNpZGVEb3dubG9hZERlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7
CisjZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFNlc3Np
b25JRCwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJl
c3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDA3MWVh
OWUuLjkwNjNmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKQEAgLTgwLDggKzgwLDkgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB3aWxsRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciYmKTsKLSNlbmRpZgorI2Vsc2UKICAgICB2b2lkIGNvbnZlcnRIYW5kbGVUb0Rvd25sb2Fk
KERvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlm
CiAgICAgdm9pZCBjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25s
b2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7CiAKICAgICB2b2lkIHJlc3VtZURvd25sb2FkKFdlYkNv
cmU6OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2NvY29hL0Rvd25sb2FkQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQppbmRleCBkMzIwOWFkLi44NjhlMTE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2Ev
RG93bmxvYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQpAQCAtMzgsMTAgKzM4LDEwIEBAIHZvaWQgRG93
bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0
IFN0cmluZyYgcGF0aCwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogICAgIAotdm9pZCBEb3du
bG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxO
ZXR3b3JrTG9hZCgpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWQpOwotICAgIFttX2Rvd25sb2Fk
IGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTogXihOU0RhdGEgKiBfTnVsbGFibGUgcmVzdW1l
RGF0YSkKKyAgICBBU1NFUlQobV9kb3dubG9hZFRhc2spOworICAgIFttX2Rvd25sb2FkVGFzayBj
YW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURh
dGEpCiAgICAgewogICAgICAgICBpZiAocmVzdW1lRGF0YSAmJiByZXN1bWVEYXRhLmJ5dGVzICYm
IHJlc3VtZURhdGEubGVuZ3RoKQogICAgICAgICAgICAgZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVy
ZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1bWVEYXRhLmJ5dGVzKSwg
cmVzdW1lRGF0YS5sZW5ndGgpKTsKQEAgLTUwLDE1ICs1MCw2IEBAIHZvaWQgRG93bmxvYWQ6OmNh
bmNlbE5ldHdvcmtMb2FkKCkKICAgICB9XTsKIH0KIAotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1J
bnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2Fk
OjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBVU0UoTkVU
V09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDgyZThjNWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEJyZW50IEZ1bGdo
YW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJEb3dubG9hZC5oIgotCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50
ZWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci12b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCi17Ci0g
ICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7Ci0gICAgZGlkQ2FuY2VsKHsgfSk7Ci19Ci0KLXZvaWQg
RG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnBs
YXRmb3JtRGlkRmluaXNoKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODM0YWVjYS4uMGU2M2MzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMjA3LDE4ICsyMDcsMTYgQEAgdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFNl
c3Npb25JRAogICAgIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKCFyZXF1
ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAgbG9hZGVyLT5uZXR3b3JrTG9h
ZCgpLT5jb252ZXJ0VGFza1RvRG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2Up
OwotICAgICAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKKyAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCktPmNvbnZlcnRUYXNr
VG9Eb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgbG9hZGVyLT5k
aWRDb252ZXJ0VG9Eb3dubG9hZCgpOworI2Vsc2UKICAgICBuZXR3b3JrUHJvY2Vzcy5kb3dubG9h
ZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChkb3dubG9hZElELCBsb2FkZXItPm5l
dHdvcmtMb2FkKCktPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CiAKICAgICAvLyBVbmJs
b2NrIHRoZSBVUkwgY29ubmVjdGlvbiBvcGVyYXRpb24gcXVldWUuCiAgICAgbG9hZGVyLT5uZXR3
b3JrTG9hZCgpLT5oYW5kbGUoKS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIAogICAg
IGxvYWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQoKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NKFNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyYgcmVzdWx0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5j
cHAKaW5kZXggNTRkYTRmYi4uZGJiMDY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQogCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQmxvYi5oIgog
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IApAQCAtNDQsNiArNDUsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUmVmPE5ldHdvcmtEYXRh
VGFzaz4gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDb250ZW50U25pZmZpbmdQ
b2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QpCiB7CisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2Io
KSkKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNyZWF0ZShzZXNzaW9uLCBj
bGllbnQsIHJlcXVlc3QsIHNob3VsZENvbnRlbnRTbmlmZik7CisKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGll
bnQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCmluZGV4IDRkYzEyOTAu
LjZkYTQxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtEYXRhVGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3Vz
cGVuZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZXN1bWUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwo
KSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2Iu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzMjg4YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Js
b2IuY3BwCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQmxvYi5oIgor
CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJEb3dubG9hZC5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0FzeW5jRmlsZVN0cmVhbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGEu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JSZWdpc3RyeUltcGwuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGVTdHJlYW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRUUFBhcnNlcnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhcnNl
ZENvbnRlbnRSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJ1
ZmZlclNpemUgPSA1MTIgKiAxMDI0OworCitzdGF0aWMgY29uc3QgaW50IGh0dHBPSyA9IDIwMDsK
K3N0YXRpYyBjb25zdCBpbnQgaHR0cFBhcnRpYWxDb250ZW50ID0gMjA2Oworc3RhdGljIGNvbnN0
IGludCBodHRwTm90QWxsb3dlZCA9IDQwMzsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cFJlcXVlc3Rl
ZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7CitzdGF0aWMgY29uc3QgaW50IGh0dHBJbnRlcm5h
bEVycm9yID0gNTAwOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBPS1RleHQgPSAiT0siOworc3Rh
dGljIGNvbnN0IGNoYXIqIGh0dHBQYXJ0aWFsQ29udGVudFRleHQgPSAiUGFydGlhbCBDb250ZW50
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwTm90QWxsb3dlZFRleHQgPSAiTm90IEFsbG93ZWQi
Oworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlVGV4
dCA9ICJSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlzZmlhYmxlIjsKK3N0YXRpYyBjb25zdCBjaGFy
KiBodHRwSW50ZXJuYWxFcnJvclRleHQgPSAiSW50ZXJuYWwgU2VydmVyIEVycm9yIjsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiA9ICJXZWJLaXRC
bG9iUmVzb3VyY2UiOworCitOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0YVRhc2tCbG9i
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hv
dWxkQ29udGVudFNuaWZmKQorICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwg
cmVxdWVzdCwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBmYWxzZSkKKyAgICAsIG1fYmxv
YkRhdGEoc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5SW1wbCY+KGJsb2JSZWdpc3RyeSgpKS5nZXRC
bG9iRGF0YUZyb21VUkwocmVxdWVzdC51cmwoKSkpCisgICAgLCBtX3N0cmVhbShzdGQ6Om1ha2Vf
dW5pcXVlPEFzeW5jRmlsZVN0cmVhbT4oKnRoaXMpKQoreworICAgIG1fc2Vzc2lvbi0+cmVnaXN0
ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworfQorCitOZXR3b3JrRGF0YVRhc2tCbG9iOjp+TmV0
d29ya0RhdGFUYXNrQmxvYigpCit7CisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBtX3Nlc3Npb24t
PnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OmNsZWFyU3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXBsZXRl
ZDsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9maWxlT3BlbmVkID0gZmFs
c2U7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgIH0KKyAgICBtX3N0cmVhbSA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6cmVzdW1lKCkKK3sKKyAgICBB
U1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6UnVubmluZyk7CisgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKworICAgIGlmIChtX3NjaGVk
dWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgeworICAgICAgICBBU1NFUlQobV9mYWlsdXJl
VGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0g
eworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgIGNsZWFyU3RyZWFt
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1fZmlyc3RSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgImdl
dCIpKSB7CisgICAgICAgICAgICBkaWRGYWlsKEVycm9yOjpNZXRob2ROb3RBbGxvd2VkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBibG9iIGRh
dGEgaXMgbm90IGZvdW5kLCBmYWlsIG5vdy4KKyAgICAgICAgaWYgKCFtX2Jsb2JEYXRhKSB7Cisg
ICAgICAgICAgICBkaWRGYWlsKEVycm9yOjpOb3RGb3VuZEVycm9yKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcnNlIHRoZSAiUmFuZ2UiIGhlYWRlciB3
ZSBjYXJlIGFib3V0LgorICAgICAgICBTdHJpbmcgcmFuZ2UgPSBtX2ZpcnN0UmVxdWVzdC5odHRw
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5p
c0VtcHR5KCkgJiYgIXBhcnNlUmFuZ2UocmFuZ2UsIG1fcmFuZ2VPZmZzZXQsIG1fcmFuZ2VFbmQs
IG1fcmFuZ2VTdWZmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2Uo
RXJyb3I6OlJhbmdlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tCbG9iOjpzdXNwZW5kKCkKK3sKKyAgICAvLyBGSVhNRTogY2FuIHRoaXMgaGFwcGVuPworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNhbmNlbCgpCit7CisgICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworCisgICAgaWYg
KG1fZmlsZU9wZW5lZCkgeworICAgICAgICBtX2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAg
bV9zdHJlYW0tPmNsb3NlKCk7CisgICAgfQorCisgICAgaWYgKGlzRG93bmxvYWQoKSkKKyAgICAg
ICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6
aW52YWxpZGF0ZUFuZENhbmNlbCgpCit7CisgICAgY2FuY2VsKCk7CisgICAgY2xlYXJTdHJlYW0o
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpnZXRTaXplRm9yTmV4dCgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIERvIHdlIGZpbmlzaCB2YWxpZGF0
aW5nIGFuZCBjb3VudGluZyBzaXplIGZvciBhbGwgaXRlbXM/CisgICAgaWYgKG1fc2l6ZUl0ZW1D
b3VudCA+PSBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUoKSkgeworICAgICAgICBzZWVrKCk7Cisg
ICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5hdChtX3Np
emVJdGVtQ291bnQpOworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEJsb2JE
YXRhSXRlbTo6VHlwZTo6RGF0YToKKyAgICAgICAgZGlkR2V0U2l6ZShpdGVtLmxlbmd0aCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkZpbGU6CisgICAg
ICAgIC8vIEZpbGVzIGtub3cgdGhlaXIgc2l6ZXMsIGJ1dCBhc2tpbmcgdGhlIHN0cmVhbSB0byB2
ZXJpZnkgdGhhdCB0aGUgZmlsZSB3YXNuJ3QgbW9kaWZpZWQuCisgICAgICAgIG1fc3RyZWFtLT5n
ZXRTaXplKGl0ZW0uZmlsZSgpLT5wYXRoKCksIGl0ZW0uZmlsZSgpLT5leHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpk
aWRHZXRTaXplKGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAg
IGNsZWFyU3RyZWFtKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUg
c2l6ZSBpcyAtMSwgaXQgbWVhbnMgdGhlIGZpbGUgaGFzIGJlZW4gbW92ZWQgb3IgY2hhbmdlZC4g
RmFpbCBub3cuCisgICAgaWYgKHNpemUgPT0gLTEpIHsKKyAgICAgICAgZGlkRmFpbChFcnJvcjo6
Tm90Rm91bmRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2l6
ZSBwYXNzZWQgYmFjayBpcyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZmlsZS4gSWYgdGhlIHVuZGVy
bHlpbmcgaXRlbSBpcyBhIHNsaWNlZCBmaWxlLCB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xpY2UgbGVu
Z3RoLgorICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCku
YXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBzaXplID0gaXRlbS5sZW5ndGgoKTsKKworICAgIC8v
IENhY2hlIHRoZSBzaXplLgorICAgIG1faXRlbUxlbmd0aExpc3QuYXBwZW5kKHNpemUpOworCisg
ICAgLy8gQ291bnQgdGhlIHNpemUuCisgICAgbV90b3RhbFNpemUgKz0gc2l6ZTsKKyAgICBtX3Rv
dGFsUmVtYWluaW5nU2l6ZSArPSBzaXplOworICAgIG1fc2l6ZUl0ZW1Db3VudCsrOworCisgICAg
Ly8gQ29udGludWUgd2l0aCB0aGUgbmV4dCBpdGVtLgorICAgIGdldFNpemVGb3JOZXh0KCk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c2VlaygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIC8vIENvbnZlcnQgZnJvbSB0aGUgc3VmZml4IGxlbmd0aCB0byB0
aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VTdWZmaXhMZW5ndGggIT0ga1Bvc2l0aW9uTm90U3Bl
Y2lmaWVkKSB7CisgICAgICAgIG1fcmFuZ2VPZmZzZXQgPSBtX3RvdGFsUmVtYWluaW5nU2l6ZSAt
IG1fcmFuZ2VTdWZmaXhMZW5ndGg7CisgICAgICAgIG1fcmFuZ2VFbmQgPSBtX3JhbmdlT2Zmc2V0
ICsgbV9yYW5nZVN1ZmZpeExlbmd0aCAtIDE7CisgICAgfQorCisgICAgLy8gQmFpbCBvdXQgaWYg
dGhlIHJhbmdlIGlzIG5vdCBwcm92aWRlZC4KKyAgICBpZiAobV9yYW5nZU9mZnNldCA9PSBrUG9z
aXRpb25Ob3RTcGVjaWZpZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNraXAgdGhlIGlu
aXRpYWwgaXRlbXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZS4KKyAgICBsb25nIGxvbmcgb2Zm
c2V0ID0gbV9yYW5nZU9mZnNldDsKKyAgICBmb3IgKG1fcmVhZEl0ZW1Db3VudCA9IDA7IG1fcmVh
ZEl0ZW1Db3VudCA8IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpICYmIG9mZnNldCA+PSBtX2l0
ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF07ICsrbV9yZWFkSXRlbUNvdW50KQorICAgICAg
ICBvZmZzZXQgLT0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdOworCisgICAgLy8g
U2V0IHRoZSBvZmZzZXQgdGhhdCBuZWVkIHRvIGp1bXAgdG8gZm9yIHRoZSBmaXJzdCBpdGVtIGlu
IHRoZSByYW5nZS4KKyAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSBvZmZzZXQ7CisKKyAgICAv
LyBBZGp1c3QgdGhlIHRvdGFsIHJlbWFpbmluZyBzaXplIGluIG9yZGVyIG5vdCB0byBnbyBiZXlv
bmQgdGhlIHJhbmdlLgorICAgIGlmIChtX3JhbmdlRW5kICE9IGtQb3NpdGlvbk5vdFNwZWNpZmll
ZCkgeworICAgICAgICBsb25nIGxvbmcgcmFuZ2VTaXplID0gbV9yYW5nZUVuZCAtIG1fcmFuZ2VP
ZmZzZXQgKyAxOworICAgICAgICBpZiAobV90b3RhbFJlbWFpbmluZ1NpemUgPiByYW5nZVNpemUp
CisgICAgICAgICAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSA9IHJhbmdlU2l6ZTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgLT0gbV9yYW5nZU9mZnNldDsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWNlaXZlUmVzcG9uc2UoRXJyb3IgZXJyb3JD
b2RlKQoreworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlzKCp0aGlz
KTsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBl
cnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IgPyAidGV4dC9wbGFpbiIgOiBtX2Jsb2JEYXRhLT5j
b250ZW50VHlwZSgpLCBlcnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IgPyAwIDogbV90b3RhbFJl
bWFpbmluZ1NpemUsIFN0cmluZygpKTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgIGNh
c2UgRXJyb3I6Ok5vRXJyb3I6IHsKKyAgICAgICAgYm9vbCBpc1JhbmdlUmVxdWVzdCA9IG1fcmFu
Z2VPZmZzZXQgIT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVkOworICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzQ29kZShpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudCA6IGh0dHBP
Syk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGlzUmFuZ2VSZXF1ZXN0ID8g
aHR0cFBhcnRpYWxDb250ZW50VGV4dCA6IGh0dHBPS1RleHQpOworCisgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUsIG1fYmxvYkRh
dGEtPmNvbnRlbnRUeXBlKCkpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgsIFN0cmluZzo6bnVtYmVyKG1fdG90YWxSZW1h
aW5pbmdTaXplKSk7CisKKyAgICAgICAgaWYgKGlzUmFuZ2VSZXF1ZXN0KQorICAgICAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2Us
IFBhcnNlZENvbnRlbnRSYW5nZShtX3JhbmdlT2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3RvdGFsU2l6
ZSkuaGVhZGVyVmFsdWUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBJZiBhIHJlc291cmNlIGlkZW50
aWZpZWQgd2l0aCBhIGJsb2I6IFVSTCBpcyBhIEZpbGUgb2JqZWN0LCB1c2VyIGFnZW50cyBtdXN0
IHVzZSB0aGF0IGZpbGUncyBuYW1lIGF0dHJpYnV0ZSwKKyAgICAgICAgLy8gYXMgaWYgdGhlIHJl
c3BvbnNlIGhhZCBhIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIHdpdGggdGhlIGZpbGVuYW1l
IHBhcmFtZXRlciBzZXQgdG8gdGhlIEZpbGUncyBuYW1lIGF0dHJpYnV0ZS4KKyAgICAgICAgLy8g
Tm90YWJseSwgdGhpcyB3aWxsIGFmZmVjdCBhIG5hbWUgc3VnZ2VzdGVkIGluICJGaWxlIFNhdmUg
QXMiLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBFcnJvcjo6UmFuZ2VFcnJvcjoK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cFJlcXVlc3RlZFJhbmdlTm90
U2F0aXNmaWFibGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwUmVx
dWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRleHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEVycm9yOjpTZWN1cml0eUVycm9yOgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZShodHRwTm90QWxsb3dlZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGh0
dHBOb3RBbGxvd2VkVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBJbnRlcm5hbEVycm9yKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoaHR0cEludGVybmFsRXJyb3JUZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdv
cmtTZXNzaW9uKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGVycm9yQ29kZV0oUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikg
eworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvckNvZGUgIT0gRXJyb3I6
Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIGRpZEZpbmlzaCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAg
Y2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6
ZShidWZmZXJTaXplKTsKKyAgICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xpY3lEb3dubG9hZDoKKyAgICAgICAg
ICAgIGRvd25sb2FkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWQoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBtb3JlIHJlbWFpbmluZyBkYXRh
IHRvIHJlYWQsIHdlIGFyZSBkb25lLgorICAgIGlmICghbV90b3RhbFJlbWFpbmluZ1NpemUgfHwg
bV9yZWFkSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKSB7CisgICAgICAg
IGRpZEZpbmlzaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQmxvYkRh
dGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5hdChtX3JlYWRJdGVtQ291bnQpOwor
ICAgIGlmIChpdGVtLnR5cGUoKSA9PSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRhdGEpCisgICAgICAg
IHJlYWREYXRhKGl0ZW0pOworICAgIGVsc2UgaWYgKGl0ZW0udHlwZSgpID09IEJsb2JEYXRhSXRl
bTo6VHlwZTo6RmlsZSkKKyAgICAgICAgcmVhZEZpbGUoaXRlbSk7CisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpy
ZWFkRGF0YShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKGl0ZW0uZGF0
YSgpLmRhdGEoKSk7CisKKyAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQgPSBpdGVtLmxlbmd0aCgp
IC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxS
ZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IG1fdG90YWxSZW1haW5pbmdTaXpl
OworICAgIGNvbnN1bWVEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGl0ZW0uZGF0
YSgpLmRhdGEoKS0+ZGF0YSgpKSArIGl0ZW0ub2Zmc2V0KCkgKyBtX2N1cnJlbnRJdGVtUmVhZFNp
emUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXNUb1JlYWQpKTsKKyAgICBtX2N1cnJlbnRJdGVtUmVh
ZFNpemUgPSAwOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRGaWxlKGNvbnN0
IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VS
VChtX3N0cmVhbSk7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1fc3RyZWFt
LT5yZWFkKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9IG1faXRlbUxlbmd0aExpc3Rb
bV9yZWFkSXRlbUNvdW50XSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0ZXNU
b1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1fdG90YWxSZW1haW5pbmdTaXplKTsKKyAgICBtX3N0cmVhbS0+b3BlbkZv
clJlYWQoaXRlbS5maWxlKCktPnBhdGgoKSwgaXRlbS5vZmZzZXQoKSArIG1fY3VycmVudEl0ZW1S
ZWFkU2l6ZSwgYnl0ZXNUb1JlYWQpOworICAgIG1fZmlsZU9wZW5lZCA9IHRydWU7CisgICAgbV9j
dXJyZW50SXRlbVJlYWRTaXplID0gMDsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpk
aWRPcGVuKGJvb2wgc3VjY2VzcykKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2Vs
aW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rv
d25sb2FkKCkpKSB7CisgICAgICAgIGNsZWFyU3RyZWFtKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90UmVh
ZGFibGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8TmV0d29ya0Rh
dGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgcmVhZCgpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQoaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIGNsZWFyU3RyZWFt
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNSZWFkIDwgMCkgewor
ICAgICAgICBkaWRGYWlsKEVycm9yOjpOb3RSZWFkYWJsZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlzKCp0
aGlzKTsKKyAgICBjb25zdW1lRGF0YShtX2J1ZmZlci5kYXRhKCksIGJ5dGVzUmVhZCk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y29uc3VtZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGJ5dGVzUmVhZCkKK3sKKyAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBieXRlc1JlYWQ7
CisKKyAgICBpZiAoYnl0ZXNSZWFkKSB7CisgICAgICAgIGlmIChtX2Rvd25sb2FkRmlsZSAhPSBp
bnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgICAgICBpZiAoIXdyaXRlRG93bmxv
YWQoZGF0YSwgYnl0ZXNSZWFkKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9jbGllbnQpOworICAgICAgICAgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGJ5dGVzUmVhZCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICAv
LyBXaGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgYSBmaWxlIGl0ZW0sIHRoZSByZWFkaW5nIGlzIGNv
bXBsZXRlZCBvbmx5IGlmIGJ5dGVzUmVhZCBpcyAwLgorICAgICAgICBpZiAoIWJ5dGVzUmVhZCkg
eworICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgICAgICBtX2ZpbGVPcGVu
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworCisgICAgICAgICAg
ICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgICAgICBtX3JlYWRJdGVtQ291bnQr
KzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgcmVh
ZCB0aGUgY3VycmVudCB0ZXh0IGl0ZW0gYXMgYSB3aG9sZSBhbmQgbW92ZSB0byB0aGUgbmV4dCBp
dGVtLgorICAgICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAgICB9CisKKyAgICByZWFkKCk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24o
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAgIE5ldHdv
cmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZmlsZW5hbWUsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlKTsKKyAgICBpZiAoYWxsb3dPdmVyd3JpdGUg
JiYgZmlsZUV4aXN0cyhtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKSkKKyAgICAgICAgZGVsZXRl
RmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKK30KKworU3RyaW5nIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OnN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3VnZ2Vz
dGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFt
ZTsKKworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInVua25vd24iKTsKK30KKwordm9pZCBOZXR3
b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7
CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworCisgICAgbV9kb3dubG9h
ZEZpbGUgPSBvcGVuRmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uLCBPcGVuRm9yV3JpdGUp
OworICAgIGlmIChtX2Rvd25sb2FkRmlsZSA9PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7
CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChjYW5jZWxsZWRFcnJvcihtX2ZpcnN0UmVxdWVzdCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0g
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOworICAgIGF1dG8g
ZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIG1f
cGVuZGluZ0Rvd25sb2FkSUQsICp0aGlzLCBtX3Nlc3Npb24tPnNlc3Npb25JRCgpLCBzdWdnZXN0
ZWRGaWxlbmFtZSgpKTsKKyAgICBhdXRvKiBkb3dubG9hZFB0ciA9IGRvd25sb2FkLmdldCgpOwor
ICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25sb2FkVGFzayhtX3BlbmRpbmdE
b3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CisgICAgZG93bmxvYWRQdHItPmRpZENyZWF0
ZURlc3RpbmF0aW9uKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworCisgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQmVjb21lRG93bmxvYWQoKTsKKworICAgIG1fYnVm
ZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKKyAgICByZWFkKCk7Cit9CisKK2Jvb2wgTmV0d29ya0Rh
dGFUYXNrQmxvYjo6d3JpdGVEb3dubG9hZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFk
KQoreworICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOworICAgIGludCBieXRlc1dyaXR0ZW4gPSB3
cml0ZVRvRmlsZShtX2Rvd25sb2FkRmlsZSwgZGF0YSwgYnl0ZXNSZWFkKTsKKyAgICBpZiAoYnl0
ZXNXcml0dGVuID09IC0xKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChjYW5jZWxsZWRFcnJv
cihtX2ZpcnN0UmVxdWVzdCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
QVNTRVJUKGJ5dGVzV3JpdHRlbiA9PSBieXRlc1JlYWQpOworICAgIGF1dG8qIGRvd25sb2FkID0g
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKG1f
cGVuZGluZ0Rvd25sb2FkSUQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93bmxvYWQt
PmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y2xlYW5Eb3dubG9hZEZpbGVzKCkKK3sKKyAgICBpZiAo
bV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICBj
bG9zZUZpbGUobV9kb3dubG9hZEZpbGUpOworICAgICAgICBtX2Rvd25sb2FkRmlsZSA9IGludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQorICAgIGRlbGV0ZUZpbGUobV9wZW5kaW5nRG93
bmxvYWRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmFpbERv
d25sb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGNsZWFyU3RyZWFtKCk7
CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8qIGRvd25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2Fk
TWFuYWdlcigpLmRvd25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOworICAgICAgICBBU1NFUlQo
ZG93bmxvYWQpOworICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbChlcnJvciwgSVBDOjpEYXRhUmVm
ZXJlbmNlKCkpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5p
c2hEb3dubG9hZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgY2xvc2VGaWxl
KG1fZG93bmxvYWRGaWxlKTsKKyAgICBtX2Rvd25sb2FkRmlsZSA9IGludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGU7CisKKyAgICBjbGVhclN0cmVhbSgpOworICAgIGF1dG8qIGRvd25sb2FkID0gTmV0
d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKG1fcGVu
ZGluZ0Rvd25sb2FkSUQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPmRp
ZEZpbmlzaCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwoRXJyb3Ig
ZXJyb3JDb2RlKQoreworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKKyAgICBpZiAoaXNEb3dubG9hZCgpKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9h
ZChSZXNvdXJjZUVycm9yKHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50
PihlcnJvckNvZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNsZWFyU3RyZWFtKCk7CisgICAgQVNTRVJUKG1fY2xpZW50
KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJvcih3ZWJL
aXRCbG9iUmVzb3VyY2VEb21haW4sIHN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSwgbV9maXJz
dFJlcXVlc3QudXJsKCksIFN0cmluZygpKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxv
Yjo6ZGlkRmluaXNoKCkKK3sKKyAgICBpZiAobV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSkgeworICAgICAgICBkaWRGaW5pc2hEb3dubG9hZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBBU1NFUlQobV9jbGllbnQp
OworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1NTJiYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaApA
QCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3RyZWFtQ2xpZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFz
eW5jRmlsZVN0cmVhbTsKK2NsYXNzIEJsb2JEYXRhOworY2xhc3MgQmxvYkRhdGFJdGVtOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrQmxvYiBmaW5hbCA6
IHB1YmxpYyBOZXR3b3JrRGF0YVRhc2ssIHB1YmxpYyBXZWJDb3JlOjpGaWxlU3RyZWFtQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdv
cmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpDb250ZW50U25pZmZp
bmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQmxvYihzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHNo
b3VsZENvbnRlbnRTbmlmZikpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tCbG9iKCk7
CisKK3ByaXZhdGU6CisgICAgTmV0d29ya0RhdGFUYXNrQmxvYihOZXR3b3JrU2Vzc2lvbiYsIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdl
YkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSk7CisKKyAgICB2b2lkIHN1c3BlbmQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdW1lKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgTmV0
d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKworICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5n
JiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRl
Ki8pIG92ZXJyaWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2RzLgorICAgIHZvaWQgZGlkR2V0
U2l6ZShsb25nIGxvbmcpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkT3Blbihib29sKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZFJlYWQoaW50KSBvdmVycmlkZTsKKworICAgIGVudW0gY2xhc3MgRXJy
b3IgeworICAgICAgICBOb0Vycm9yID0gMCwKKyAgICAgICAgTm90Rm91bmRFcnJvciA9IDEsCisg
ICAgICAgIFNlY3VyaXR5RXJyb3IgPSAyLAorICAgICAgICBSYW5nZUVycm9yID0gMywKKyAgICAg
ICAgTm90UmVhZGFibGVFcnJvciA9IDQsCisgICAgICAgIE1ldGhvZE5vdEFsbG93ZWQgPSA1Cisg
ICAgfTsKKworICAgIHZvaWQgY2xlYXJTdHJlYW0oKTsKKyAgICB2b2lkIGdldFNpemVGb3JOZXh0
KCk7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoRXJyb3IgPSBFcnJvcjo6Tm9FcnJvcik7
CisgICAgdm9pZCBzZWVrKCk7CisgICAgdm9pZCBjb25zdW1lRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgYnl0ZXNSZWFkKTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIHJlYWREYXRhKGNv
bnN0IFdlYkNvcmU6OkJsb2JEYXRhSXRlbSYpOworICAgIHZvaWQgcmVhZEZpbGUoY29uc3QgV2Vi
Q29yZTo6QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCBkb3dubG9hZCgpOworICAgIGJvb2wgd3Jp
dGVEb3dubG9hZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKTsKKyAgICB2b2lkIGNs
ZWFuRG93bmxvYWRGaWxlcygpOworICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAg
dm9pZCBkaWRGYWlsKEVycm9yKTsKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworCisgICAgZW51bSB7
IGtQb3NpdGlvbk5vdFNwZWNpZmllZCA9IC0xIH07CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6Qmxv
YkRhdGE+IG1fYmxvYkRhdGE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkFzeW5jRmls
ZVN0cmVhbT4gbV9zdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI7CisgICAgVmVjdG9yPGxvbmcgbG9uZz4gbV9pdGVtTGVuZ3RoTGlz
dDsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAgIGxvbmcgbG9u
ZyBtX3JhbmdlT2Zmc2V0IHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07CisgICAgbG9uZyBsb25n
IG1fcmFuZ2VFbmQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgfTsKKyAgICBsb25nIGxvbmcgbV9y
YW5nZVN1ZmZpeExlbmd0aCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9OworICAgIGxvbmcgbG9u
ZyBtX3RvdGFsU2l6ZSB7IDAgfTsKKyAgICBsb25nIGxvbmcgbV90b3RhbFJlbWFpbmluZ1NpemUg
eyAwIH07CisgICAgbG9uZyBsb25nIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX3NpemVJdGVtQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9yZWFkSXRlbUNv
dW50IHsgMCB9OworICAgIGJvb2wgbV9maWxlT3BlbmVkIHsgZmFsc2UgfTsKKyAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9kb3dubG9hZEZpbGUgeyBXZWJDb3JlOjppbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAKaW5kZXggOTAzMTU2Mi4uNTg3NWJhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcApAQCAtNjcsMTAgKzY3LDYgQEAg
TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiBjbGllbnQsIE5ldHdv
cmtMb2FkUGFyYW1ldGVycyYmIHBhcmEKICAgICAsIG1fcGFyYW1ldGVycyhXVEZNb3ZlKHBhcmFt
ZXRlcnMpKQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX3BhcmFtZXRlcnMucmVxdWVzdCkKIHsK
LSAgICBpZiAobV9wYXJhbWV0ZXJzLnJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkgewot
ICAgICAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUobnVsbHB0ciwgbV9wYXJh
bWV0ZXJzLnJlcXVlc3QsIHRoaXMsIG1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nLCBtX3BhcmFt
ZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUobmV0d29y
a1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMucmVxdWVzdCwgbV9wYXJhbWV0ZXJzLmFsbG93
U3RvcmVkQ3JlZGVudGlhbHMsIG1fcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3ksIG1f
cGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKICAg
ICBpZiAoIW1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQogICAgICAgICBtX3Rhc2stPnJlc3Vt
ZSgpOwpAQCAtMTAxLDEyICs5NywxNCBAQCBOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKCkKICNl
bmRpZgogICAgIGlmIChtX3Rhc2spCiAgICAgICAgIG1fdGFzay0+Y2xlYXJDbGllbnQoKTsKLSNl
bGlmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisjZWxzZQorI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiAgICAgaWYgKG1faGFuZGxlICYmIG1fd2Fp
dGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSkKICAg
ICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShmYWxzZSk7CiAjZW5kaWYKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxl
LT5jbGVhckNsaWVudCgpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnMpCkBAIC0xMTgsOSArMTE2LDEwIEBAIHZvaWQgTmV0d29ya0xv
YWQ6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1fdGFzay0+cmVzdW1lKCk7CiAgICAgfQotI2VuZGlmCisjZWxzZQogICAgIGlmIChtX2hh
bmRsZSkKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyNlbmRp
ZgogfQogCiB2b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQpAQCAtMTI4LDkgKzEyNywxMCBAQCB2
b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAg
aWYgKG1fdGFzaykKICAgICAgICAgbV90YXNrLT5jYW5jZWwoKTsKLSNlbmRpZgorI2Vsc2UKICAg
ICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKKyNlbmRpZgogfQog
CiB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQpAQCAtMTQzLDI3ICsxNDMsMTkgQEAgdm9pZCBOZXR3
b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYgbmV3UmVxdWVzdCkKICNlbmRpZgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBh
dXRvIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7ICAgIAorICAgIGF1dG8gcmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyLCBu
dWxscHRyKTsKICAgICBBU1NFUlQocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcik7Ci0jZW5kaWYK
LSAgICAKKyAgICBpZiAocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmVkaXJl
Y3RDb21wbGV0aW9uSGFuZGxlcihtX2N1cnJlbnRSZXF1ZXN0KTsKKyNlbHNlCiAgICAgaWYgKG1f
Y3VycmVudFJlcXVlc3QuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1faGFuZGxlKQogICAgICAg
ICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgp
LCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICAgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAg
ICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJu
OwogICAgIH0gZWxzZSBpZiAobV9oYW5kbGUpIHsKICAgICAgICAgYXV0byBjdXJyZW50UmVxdWVz
dENvcHkgPSBtX2N1cnJlbnRSZXF1ZXN0OwogICAgICAgICBtX2hhbmRsZS0+Y29udGludWVXaWxs
U2VuZFJlcXVlc3QoV1RGTW92ZShjdXJyZW50UmVxdWVzdENvcHkpKTsKICAgICB9Ci0KLSNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKQot
ICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKG1fY3VycmVudFJlcXVlc3QpOwogI2Vu
ZGlmCiB9CiAKQEAgLTE3MSwxMiArMTYzLDEzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIGlm
IChtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgbV9yZXNwb25zZUNvbXBs
ZXRpb25IYW5kbGVyKFBvbGljeVVzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9
IHN0ZDo6ZXhjaGFuZ2UobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAg
ICAgICAgcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIH0KLSNlbmRp
ZgorI2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSgpOworI2VuZGlmCiB9CiAKIE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91
bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrTG9hZDo6c2hhcmVkRGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkKQEAgLTI4NSw2ICsyNzgsMjMg
QEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDaGFs
bGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGMKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmds
ZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwg
Km1fY2hhbGxlbmdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKKyNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9pZCBOZXR3b3JrTG9hZDo6Y29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQorewor
ICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBhdXRvIGNvbXBs
ZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
LCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAobV90YXNrICYmIG1f
dGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2Up
KQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxs
ZW5nZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsg
fSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyNlbmRpZgorCiB2b2lk
IE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMzYyLDggKzM3Miw4
IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwoKQogewogICAgIG1fY2xpZW50LmRp
ZEZhaWxMb2FkaW5nKGNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9Ci0g
ICAgCi0jZW5kaWYKKworI2Vsc2UKIAogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXNwb25zZSYmIHJlY2Vp
dmVkUmVzcG9uc2UpCiB7CkBAIC00MTgsMzIgKzQyOCwxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04p
CiAgICAgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlID0gdHJ1ZTsKLSNlbmRpZgogICAgIG1fY2xpZW50LmNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2VBc3luYyhwcm90ZWN0aW9uU3BhY2UpOwogfQotI2VuZGlmCiAKLSNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBOZXR3b3JrTG9hZDo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0
KQogewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
bV9oYW5kbGUsICJCbG9icyBzaG91bGQgbmV2ZXIgZ2l2ZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVu
Z2VzIik7Ci0gICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwotICAgIGF1
dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fY2hhbGxlbmdlQ29tcGxldGlv
bkhhbmRsZXIsIG51bGxwdHIpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChtX3Rh
c2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KCptX2No
YWxsZW5nZSkpCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2ZXJUcnVzdENyZWRlbnRpYWwo
Km1fY2hhbGxlbmdlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25T
cGFjZSwgeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbXBsZXRlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotI2Vsc2UKICAg
ICBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UgPSBmYWxzZTsKLSNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUt
PmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwog
fQpAQCAtNTE1LDUgKzUwNiw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0
aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0CiAgICAgbV9oYW5k
bGUtPmNhbmNlbCgpOwogICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9y
KG1fY3VycmVudFJlcXVlc3QpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrTG9hZC5oCmluZGV4IDI3ZDQzMTcuLjNmNjEzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtNDAsOSArNDAsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtMb2FkIGZpbmFsIDogcHJpdmF0ZSBXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUNsaWVudAorY2xhc3MgTmV0d29ya0xvYWQgZmluYWwgOgogI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudAor
ICAgIHByaXZhdGUgTmV0d29ya0RhdGFUYXNrQ2xpZW50CisjZWxzZQorICAgIHByaXZhdGUgV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKICNlbmRpZgogewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtNjksNyArNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdWdnZXN0
ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZChQ
ZW5kaW5nRG93bmxvYWQmKTsKICAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElEKCkgeyBy
ZXR1cm4gbV90YXNrLT5wZW5kaW5nRG93bmxvYWRJRCgpOyB9Ci0jZW5kaWYKKyNlbHNlCisgICAg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxl
LmdldCgpOyB9CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAg
IHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJp
ZGU7CkBAIC04NSwxNyArODgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbENhY2hlUmVzcG9u
c2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikg
b3ZlcnJpZGU7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04p
CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGUuZ2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hv
dWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9pZCBzaGFyZWRXaWxsU2VuZFJlZGly
ZWN0ZWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgLy8gUmVzb3Vy
Y2VIYW5kbGVDbGllbnQKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlKSBmaW5hbDsKICAgICB2b2lkIGRpZFNlbmRE
YXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgZmluYWw7CkBAIC0xMTEs
OCArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSBmaW5hbDsKICAgICBib29sIHVzZXNBc3luY0NhbGxiYWNrcygpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KICAgICBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIGZpbmFsIHsgcmV0dXJu
IG1fY2xpZW50LmlzU3luY2hyb25vdXMoKTsgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
KyNlbHNlCiAgICAgLy8gTmV0d29ya0RhdGFUYXNrQ2xpZW50CiAgICAgdm9pZCB3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwogICAg
IHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwpAQCAtMTQ2LDgg
KzE0OCw4IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV93YWl0aW5nRm9yQ29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBSZWZQ
dHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jZW5kaWYK
ICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2VuZGlmCiAK
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRl
ZCBvbiByZWRpcmVjdHMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IDFmODE4MTkuLjFlNWUwMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTgxLDYgKzgyLDEyIEBAIE5ldHdvcmtTZXNz
aW9uOjp+TmV0d29ya1Nlc3Npb24oKQogewogfQogCit2b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZh
bGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0
KQorICAgICAgICB0YXNrLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IDk5ZDA5ODEuLmQ1
YjAxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKICNpbmNs
dWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM4LDYg
KzM5LDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsK
IAogY2xhc3MgTmV0d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrU2Vzc2lv
bj4gewogcHVibGljOgpAQCAtNDUsMTYgKzQ3LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CiAgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b24oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQ3JlZGVudGlhbHMoKSB7IH07CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KICAgICBXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCisgICAgdm9pZCBy
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smIHRhc2spIHsgbV9kYXRhVGFz
a1NldC5hZGQoJnRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5l
dHdvcmtEYXRhVGFzayYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7IH0KKwog
cHJvdGVjdGVkOgogICAgIE5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAKICAg
ICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisKKyAgICBIYXNoU2V0PE5ldHdvcmtE
YXRhVGFzayo+IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
RGF0YVRhc2tDb2NvYS5oCmluZGV4IDBhOGVkYmIuLjYzNDJlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3VtZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlIHsgfQogICAgIE5l
dHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFj
Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1t
CmluZGV4IDE1ZmJiNmQuLjY0NzU1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KQEAgLTI2LDYgKzI2LDggQEAKICNpbXBv
cnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTmV0d29ya0xvYWQuaCIKIAorI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQorCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogCkBAIC01NCwzICs1Niw1IEBAIHZvaWQgTmV0d29y
a0xvYWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlND
YWNoZWRVUkxSZXNwCiAjZW5kaWYgLy8gIVVTRShDRlVSTENPTk5FQ1RJT04pCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1Nv
dXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRh
c2tTb3VwLmNwcAppbmRleCAxNzYzNjUyLi4xZTllZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAK
QEAgLTUyLDcgKzUyLDcgQEAgTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291
cChOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXMKICAgICAsIG1fc2hvdWxk
Q29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAsIG1fdGltZW91dFNvdXJjZShS
dW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2tTb3VwOjp0aW1lb3V0RmlyZWQp
CiB7Ci0gICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgp
KS5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CisgICAgbV9zZXNzaW9uLT5yZWdpc3Rl
ck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiAgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
IT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47CiAKQEAgLTgwLDcgKzgwLDcgQEAgTmV0d29y
a0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXMKIE5ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tT
b3VwKCkKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKLSAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRo
aXMpOworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiB9
CiAKIFN0cmluZyBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CkBAIC04NjMsNyArODYzLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCgp
CiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX09VVFBVVF9TVFJFQU0o
b3V0cHV0U3RyZWFtLmxlYWtSZWYoKSkpOwogCiAgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0g
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwotICAgIGF1dG8g
ZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIG1f
cGVuZGluZ0Rvd25sb2FkSUQsIHRoaXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3Rl
ZEZpbGVuYW1lKCkpOworICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25s
b2FkPihkb3dubG9hZE1hbmFnZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsICp0aGlzLCBtX3Nlc3Np
b24tPnNlc3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsKICAgICBhdXRvKiBkb3dubG9h
ZFB0ciA9IGRvd25sb2FkLmdldCgpOwogICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0JlY2Ft
ZURvd25sb2FkVGFzayhtX3BlbmRpbmdEb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CiAg
ICAgZG93bmxvYWRQdHItPmRpZENyZWF0ZURlc3RpbmF0aW9uKG1fcGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCBjOGZhMWEyLi4wYmZlNTk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFz
a1NvdXAuaApAQCAtNDIsMTQgKzQyLDEzIEBAIHB1YmxpYzoKIAogICAgIH5OZXR3b3JrRGF0YVRh
c2tTb3VwKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLQogcHJpdmF0ZToK
ICAgICBOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAgIHZvaWQgc3VzcGVuZCgp
IG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1bWUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKICAg
ICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmNwcAppbmRleCBhYzgyODcwLi41OWVmOTFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwCkBAIC0yNiwxMCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtTZXNzaW9uU291cC5oIgogCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDksMTAgKzQ3LDQgQEAgU291cFNlc3Np
b24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24oKSBjb25zdAogICAgIHJldHVybiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigp
OwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCi17
Ci0gICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKLSAgICAgICAgdGFzay0+aW52
YWxpZGF0ZUFuZENhbmNlbCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3Vw
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5oCmluZGV4IGQ3NWZiODguLmM1ZmNmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMjYsMTQgKzI2
LDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBT
ZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTmV0d29ya0RhdGFUYXNrU291
cDsKLQogY2xhc3MgTmV0d29ya1Nlc3Npb25Tb3VwIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNz
aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTQ0LDE1ICs0MSw4IEBAIHB1YmxpYzoKIAog
ICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OwogCi0gICAgdm9pZCByZWdpc3Rl
ck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tT
ZXQuYWRkKCZ0YXNrKTsgfQotICAgIHZvaWQgdW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3
b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQucmVtb3ZlKCZ0YXNrKTsgfQot
CiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChXZWJDb3JlOjpTZXNzaW9uSUQpOwot
Ci0gICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7Ci0KLSAgICBIYXNoU2V0
PE5ldHdvcmtEYXRhVGFza1NvdXAqPiBtX2RhdGFUYXNrU2V0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdkOWEwMzYuLjU0NmU2NWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC02LDggKzYsNiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9lZmwvRG93bmxv
YWRTb3VwRXJyb3JzRWZsLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAv
RG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxT
b3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA3NTk1OWEzLi44NmM1NTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzMsOCArMzMsNiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxv
YWRTb3VwRXJyb3JzR3RrLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAv
RG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRh
U291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxT
b3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGVjOGNlMWEuLmQxZjFiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDMsNiArMTA0Myw4IEBACiAJ
CTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTExREJBRTZGQzAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi87IH07CiAJCTUzMjE1OTU1MURCQUU3Mjkw
MDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29y
a1Nlc3Npb25Db2NvYS5oICovOyB9OwogCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2Nv
YS5oICovOyB9OworCQk1M0JBNDdEMDFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNr
QmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgKi87IH07
CisJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjU0NzFEQzJF
RTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovOyB9OwogCQk1QzA1MkYyNjFD
NkQzQkQzMDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzA1MkYyNDFDNkQzQUI2MDA3
NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi87IH07CiAJCTVDMTQyNkVD
MUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFMjFD
MjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICov
OyB9OwogCQk1QzE0MjZFRDFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDMTQyNkUzMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oICovOyB9OwpAQCAtMzEzMSw2ICszMTMzLDggQEAKIAkJNTMyMTU5NTAxREJBRTZE
NzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Npb24uY3Bw
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFU
YXNrQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
RGF0YVRhc2tCbG9iLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Js
b2IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzlFQjU0NzFEQzJFRTQwMDA5
RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2tCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUQxOEI3
MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGhvdG9zU1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNBQjYwMDc2RTkx
OSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBwYXRoID0g
QXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDY1LDYgKzU0NjksOCBAQAogCQkJCTVDQkM5
Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLywKIAkJCQk4Mzk5MDFG
RjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovLAogCQkJCTgzOTkwMUZFMUJF
OUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oICovLAorCQkJCTUzOUVCNTQ2MURDMkVFNDAw
MDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLywKKwkJCQk1MzlFQjU0NzFEQzJF
RTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovLAogCQkJCTgzRDQ1NEQ2MUJF
OUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovLAogCQkJCTgzOTE0OTYzMUJF
QTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCAqLywKIAkJCQk1MTBDQzdE
RjE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3BwICovLApAQCAtNzgyNyw2ICs3
ODMzLDcgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0QTUgLyog
UGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEyNEQ1RTlE
MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Q
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5
ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAgLTkzMjAsNiArOTMyNyw3IEBA
CiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRDYyMjc3MTczOUQ4NjMwMDVC
RDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUzQkE0
N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNlRW50cnlQ
b2ludC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkZCN0FFMTFFNjRCNjgwMERCMTM3MSAvKiBQ
bHVnaW5WaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEM5MkY0MTJEQjlFNzEwMENGMkFF
QiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="commit-queue"
          id="316191"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>293288</attachid>
            <date>2016-10-29 03:51:00 -0700</date>
            <delta_ts>2016-10-30 01:11:38 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews126 for ios-simulator-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293336</attachid>
            <date>2016-10-30 00:10:30 -0700</date>
            <delta_ts>2016-10-30 01:11:38 -0700</delta_ts>
            <desc>Try to fix mac builds</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>84185</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTZlNjZjLi4zMTZhYTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTAtMjkgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1hcmsgSFRUUFBhcnNlcnMuaCBh
bmQgQXN5bmNGaWxlU3RyZWFtLmggYXMgcHJpdmF0ZS4KKyAgICAgICAgKiBmaWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gQXN5bmNGaWxlU3RyZWFtIGNsYXNz
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaDogQWRkIFdFQkNPUkVfRVhQ
T1JUIHRvIGxlbmd0aCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aDogQWRkIFdFQkNPUkVfRVhQT1JUIHRvIHBhcnNlUmFuZ2UoKS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBz
ZXRIVFRQSGVhZGVyRmllbGQoKS4KKwogMjAxNi0xMC0yOSAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ1NTIFBhcnNlcl0gQWRkIGZvbnQtdmFyaWFudC0qIGtleXdv
cmQgcHJvcGVydHkgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUxMzFjMzkuLmI4ODE3YWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTMsNyAr
MjA1Myw3IEBACiAJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUIwQ0U5MjNB
MTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzEwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjVDMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VGM0NE
IC8qIEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjVEMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi87
IH07Ci0JCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAw
N0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IH07CisJCTUxNEM3NjczMENFOTIzQTEwMDdFRjND
RCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzQwQ0U5
MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8q
IFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3NTBDRTkyM0ExMDA3RUYz
Q0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MTRDNzY3ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjMwQ0U5MjNB
MTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKQEAgLTYxNjgsNyArNjE2OCw3
IEBACiAJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNCQjBFOENE
Q0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQlFMUNBQTVDNjBFOEJE
MjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICov
OyB9OwogCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTFGMTUw
MThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovOyB9OwotCQlFMUNERTkyMjE1
MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1MDE5MTY5MDA4NjJDQzUgLyogQXN5
bmNGaWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJ
RTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYy
Q0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFEMzFDREExOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5j
cHAgKi87IH07CiAJCUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZl
cmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RDMxQ0RCMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUUxQkYwMDExNUZG
NkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAvKiBX
aW5kb3dzS2V5Ym9hcmRDb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmls
ZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRl
eCAzNWU4NWE3Li5mODQ4YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3Ry
ZWFtLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZp
bGVTdHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSB7CitjbGFzcyBX
RUJDT1JFX0VYUE9SVCBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IEFz
eW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVhbSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggMWE3NzJmYy4u
Yjc4NTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTYtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNr
IGltcGxlbWVudGF0aW9uIGZvciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVtb3ZlIERvd25sb2FkU291cC5jcHAK
KwogMjAxNi0xMC0xOSAgR2Fib3IgS2VsZW1lbiAgPGtlbGVtZW5nQHVidW50dS5jb20+CiAKICAg
ICAgICAgW0dUS10gW0wxMG5dIFVwZGF0ZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggN2ZhMjgyNS4uYjY1ZmI4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmlu
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw3
ICsxLDYgQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFi
bGUgc3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCi0uLi8u
Li8uLi9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRh
LmgKaW5kZXggYjFmY2Q5Yy4uOTMyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxvYkRhdGFG
aWxlUmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAKICAg
ICBsb25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBsb25n
IGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90
IGtub3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7
IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2Ni4uN2Y2YjQyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODEsNyArODEs
NyBAQCBBdG9taWNTdHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShj
b25zdCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9wdGlv
bnNIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUgb2Yg
dGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lm
aWVkLgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZz
ZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOwor
V0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYg
cmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhM
ZW5ndGgpOwogCiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3Np
dGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmgKaW5kZXggN2Q2ODk1MS4uZDg5NjYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtOTks
NyArOTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRU
UEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0g
ICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFk
ZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRhM2IwLi40MmRkY2RiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dApAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29ya1Byb2Nlc3Nf
Q09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCisgICAg
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
ICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlN2Y5N2ZiLi4zNmJmMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0
IEBACisyMDE2LTEwLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBpbXBsZW1l
bnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBOZXR3b3JrRGF0YVRhc2tCbG9iIHRvIGhhbmRsZSBibG9icyB3aGVuIHVz
aW5nIE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgdXNpbmcgUmVzb3VyY2VIYW5kbGUuIFRoaXMg
cGF0Y2gKKyAgICAgICAgYWRkcyBtb3JlIFVTRShORVRXT1JLX1NFU1NJT04pIGlmZGVmcyB0byBu
b3QgdXNlIFJlc291cmNlSGFuZGxlIGluIERvd25sb2FkcyBhbmQgTmV0d29ya0xvYWQgd2hlbiBO
ZXR3b3JrU2Vzc2lvbgorICAgICAgICBpcyBlbmFibGVkLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkOjpEb3dubG9hZCk6IFNwbGl0IHRoZSBjb25zdHJ1Y3RvciBhZ2FpbiBhbmQgcmVtb3ZlIHRo
ZSBQbGF0Zm9ybURvd25sb2FkVGFza1JlZgorICAgICAgICBkZWZpbml0aW9ucy4gTm93IENvY29h
IHNwZWNpZmljIGNvbnN0cnVjdG9yIHJlY2VpdmVzIGEgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNr
IGFuZCB0aGUgZ2VuZXJhbCBjb25zdHJ1Y3RvcgorICAgICAgICByZXZlaWNlcyBhIE5ldHdvcmtE
YXRhVGFzayBhbmQgaXMgdXNlZCBieSBTb3VwIGJhY2tlbmQgYW5kIGJsb2JzLgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5l
dHdvcmtMb2FkKTogUmVuYW1lIGNhbmNlbE5ldHdvcmtMb2FkKCkgYXMgcGxhdGZvcm1DYW5jZWxO
ZXR3b3JrTG9hZCgpIHNpbmNlCisgICAgICAgIHRoaXMgaXMgbm93IHVzZWQgb25seSBieSBDb2Nv
YSBwbGF0Zm9ybSB0byBjYW5jZWwgdGhlIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzay4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN1Z2dl
c3RlZE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cmVxdWVzdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6IFJlbW92ZSBibG9icyBz
cGVjaWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5o
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9h
ZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3Vw
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOiBSZW1vdmUgYmxv
YnMgc3BlY2lmaWMgY29kZSB3aGVuCisgICAgICAgIHVzaW5nIE5ldHdvcmtTZXNzaW9uLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTogSWYgcmVxdWVzdCBpcyBhIGJsb2IsIGNyZWF0
ZSBhIE5ldHdvcmtEYXRhVGFza0Jsb2IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrLmg6IEFkZCBpbnZhbGlkYXRlQW5kQ2FuY2VsIHB1cmUgdmlydHVhbCBtZXRob2Qu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0YVRhc2tC
bG9iKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRh
VGFza0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0
cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3VtZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6c2Vlayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0Jsb2I6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpy
ZWFkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmlsZXMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2hEb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6TmV0d29y
a0xvYWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuIHVzaW5nIE5ldHdvcmtTZXNz
aW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrTG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xv
YWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlQXN5bmMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6IE1vdmVkIGZyb20gTmV0
d29ya1Nlc3Npb25Tb3VwLCBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGFsc28gYnkgYmxvYnMuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTog
RGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMg
bm90aGluZworICAgICAgICBiZWNhdXNlIGluIENvY29hIGFsbCB0YXNrcyBhcmUgaW52YWxpZGF0
ZWQgYW5kIGNhbmNlbCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IFJlbW92
ZSBEb3dubG9hZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMC0yOCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUGx1Z2luIHBy
b2Nlc3MgY3Jhc2hlcyBpbiBOUE5fSW52b2tlRGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmNwcAppbmRleCA3MjFiNjRiLi5jMzA0Mzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNw
cApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2JE
b3dubG9hZENsaWVudC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWQuaCIKICNpbmNsdWRlICJXZWJF
cnJvcnMuaCIKQEAgLTk3LDMgKzk5LDUgQEAgdm9pZCBCbG9iRG93bmxvYWRDbGllbnQ6OmRpZEZh
aWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAogfQor
CisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmgK
aW5kZXggZGNiODg5ZC4uNGEzZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaApAQCAtMjUs
NiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQor
CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDMgKzU3
LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZC5jcHAKaW5kZXggNjQ5NDhlMi4uMDIzNzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC00NSwxMCArNDUs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi1Eb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2Vy
JiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9h
ZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgTmV0d29ya0Rh
dGFUYXNrJiBkb3dubG9hZCwgY29uc3QgU2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdl
cikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9kb3dubG9hZChkb3du
bG9hZCkKKyAgICAsIG1fZG93bmxvYWQoJmRvd25sb2FkKQogICAgICwgbV9zZXNzaW9uSUQoc2Vz
c2lvbklEKQogICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CkBAIC01Niw4
ICs1NiwyMCBAQCBEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1h
bmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdAogCiAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKIH0KLSNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQor
RG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3du
bG9hZElEIGRvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogZG93bmxvYWQsIGNv
bnN0IFNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCisg
ICAgOiBtX2Rvd25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCisgICAgLCBtX2Rvd25sb2Fk
SUQoZG93bmxvYWRJRCkKKyAgICAsIG1fZG93bmxvYWRUYXNrKGRvd25sb2FkKQorICAgICwgbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUp
Cit7CisgICAgQVNTRVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCisgICAgbV9kb3du
bG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKK30KKyNlbmRpZgorI2Vsc2UKIERvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdl
cikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQpAQCAtNjgsOSArODAsMTEgQEAgRG93
bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9h
ZElEIGRvd25sb2FkSUQsIGNvbnMKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURv
d25sb2FkKCk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxvYWQ6
On5Eb3dubG9hZCgpCiB7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1fcmVz
b3VyY2VIYW5kbGUpIHsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQoKTsK
ICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIgQEAg
RG93bmxvYWQ6On5Eb3dubG9hZCgpCiAgICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7CiAK
ICAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZGlkRGVzdHJveURvd25sb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
IHZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNCbG9iKCkpIHsKQEAgLTkyLDExICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFydCgp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3ICsx
MjAsMzkgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHJlc3BvbnNlKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bHNlCiAgICAgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7Ci0j
ZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQogeworI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCisgICAgaWYgKG1fZG93bmxvYWQpIHsKKyAgICAgICAgbV9kb3dubG9h
ZC0+Y2FuY2VsKCk7CisgICAgICAgIGRpZENhbmNlbCh7IH0pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2Vsc2UKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsK
ICAgICAgICAgYXV0byByZXNvdXJjZUhhbmRsZSA9IFdURk1vdmUobV9yZXNvdXJjZUhhbmRsZSk7
CiAgICAgICAgIHJlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8
QmxvYkRvd25sb2FkQ2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmRpZENhbmNlbCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhbmNlbE5ldHdvcmtMb2FkKCk7CisjZW5k
aWYKKyAgICBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdP
UktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QsIG1fc3VnZ2VzdGVkTmFtZSkp
OwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25s
b2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwogfQotI2VuZGlmCiAKIHZvaWQg
RG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKIHsKQEAgLTE0NywxNiArMTYxLDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwogfQogCi12
b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgaWYg
KCFtX2hhc1JlY2VpdmVkRGF0YSkgewotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJk
aWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1NjQgIiki
LCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKLSAgICAgICAgbV9oYXNSZWNlaXZlZERhdGEg
PSB0cnVlOwotICAgIH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJl
Y2VpdmVEYXRhKGxlbmd0aCkpOwotfQotCiBib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVTb3Vy
Y2VEYXRhT2ZNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGJvb2wgcmVz
dWx0OwpAQCAtMTY2LDggKzE3MCw2IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJj
ZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCiBTdHJpbmcgRG93bmxvYWQ6OmRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKQEAg
LTE4Miw4ICsxODQsNiBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsCiAgICAgcmV0dXJuIGRlc3Rp
bmF0aW9uOwogfQogCi0jZW5kaWYKLQogdm9pZCBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25X
aXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoZG93bmxvYWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFt
ZSkpOwpAQCAtMjA5LDE3ICsyMDksMzAgQEAgdm9pZCBEb3dubG9hZDo6Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKQogewogICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CiB9CisjZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkQ3JlYXRlRGVzdGlu
YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6OkRpZENyZWF0ZURlc3RpbmF0aW9uKHBhdGgpKTsKIH0KIAordm9pZCBEb3dubG9hZDo6
ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKQoreworICAgIGlmICghbV9oYXNSZWNlaXZl
ZERhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6
IFN0YXJ0ZWQgcmVjZWl2aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5n
dGgpKTsKK30KKwogdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKIHsKICAgICBSRUxFQVNFX0xP
R19JRl9BTExPV0VEKCJkaWRGaW5pc2g6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQo
KS5kb3dubG9hZElEKCkpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgcGxhdGZv
cm1EaWRGaW5pc2goKTsKKyNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6RGlkRmluaXNoKCkpOwogCkBAIC0yNzcsNCArMjkwLDEwIEBAIGJvb2wgRG93bmxvYWQ6Omlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFQTEFURk9S
TShDT0NPQSkKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQorewor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBjM2ZiZjA5Li4yNWNi
YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuaApAQCAtNDAsMTIgKzQwLDYgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
I2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7
Ci10eXBlZGVmIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7Ci0jZWxpZiBVU0UoU09VUCkKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOwotfQotdHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWY7CiAjZW5kaWYKICNlbHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC03Myw2ICs2Nyw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRNYW5hZ2VyOworY2xhc3MgTmV0
d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQYWdlOwogCkBA
IC04MCwzOSArNzUsNDMgQEAgY2xhc3MgRG93bmxvYWQgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2Vu
ZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgRG93bmxv
YWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYs
IGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lID0geyB9KTsKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3du
bG9hZElELCBOZXR3b3JrRGF0YVRhc2smLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTlNV
UkxTZXNzaW9uRG93bmxvYWRUYXNrKiwgY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOwogI2VuZGlmCisjZWxz
ZQogICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7
IH0pOworI2VuZGlmCiAKICAgICB+RG93bmxvYWQoKTsKIAorI2lmICFVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyNl
bmRpZgogICAgIHZvaWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0
YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwogCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29uc3Qg
eyByZXR1cm4gbV9kb3dubG9hZElEOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0ZWROYW1lOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAK
ICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc2V0U2FuZGJveEV4dGVuc2lvbihS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7IG1fc2FuZGJveEV4
dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNlCisgICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
ZXN0OyB9CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogICAgIHZvaWQgZGlk
U3RhcnQoKTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgp
OwogICAgIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIGRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKLSNlbmRpZgogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRp
ZERlY2lkZURvd25sb2FkRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgs
IGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwog
ICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHBsYXRmb3Jt
RGlkRmluaXNoKCk7CisjZW5kaWYKICAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgp
OwogICAgIHZvaWQgZGlkRmluaXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwog
ICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogCkBAIC0xMjQsMzcgKzEyMywzNSBAQCBw
cml2YXRlOgogI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnROZXR3b3Jr
TG9hZCgpOwogICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0jZW5kaWYK
LSAgICB2b2lkIGNhbmNlbE5ldHdvcmtMb2FkKCk7Ci0KICAgICB2b2lkIHBsYXRmb3JtSW52YWxp
ZGF0ZSgpOworI2VuZGlmCisgICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAK
ICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93bmxv
YWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJ
RDsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogCiAgICAgUmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKIAogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsKLSNlbGlmIFVTRShTT1VQKQogICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0
YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZFRhc2s7CiAjZW5kaWYK
ICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAjZWxzZSAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3du
bG9hZDsKICAgICBSZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAj
ZW5kaWYKLSNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFVTRShDRlVSTENPTk5F
Q1RJT04pCiAgICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZW5k
aWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1f
ZG93bmxvYWRDbGllbnQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jl
c291cmNlSGFuZGxlOworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5n
IG1fc3VnZ2VzdGVkTmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmluZGV4IGIyZmRmYWEuLmI0MDZkZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuY3BwCkBAIC00NywyMyArNDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3du
bG9hZE1hbmFnZXIoQ2xpZW50JiBjbGllbnQpCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnRE
b3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQog
ewogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNCbG9iKCkpIHsKLSAgICAgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJh
Y2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrU2Vz
c2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklEOwot
ICAgICAgICBwYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgICAgICBwYXJhbWV0ZXJz
LmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tD
bGllbnRGb3JDcmVkZW50aWFsczsKLSAgICAgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3du
bG9hZElELCBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0
ZXJzKSwgZG93bmxvYWRJRCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisgICAg
YXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKTsKKyAgICBpZiAoIW5ldHdvcmtTZXNzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFy
YW1ldGVycy5zZXNzaW9uSUQgPSBzZXNzaW9uSUQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0g
cmVxdWVzdDsKKyAgICBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRD
cmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFsczsKKyAgICBtX3BlbmRp
bmdEb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rvd25s
b2FkPihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24sIHN1
Z2dlc3RlZE5hbWUpKTsKKyNlbHNlCiAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlx
dWU8RG93bmxvYWQ+KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0LCBzdWdnZXN0ZWROYW1lKTsK
ICAgICBkb3dubG9hZC0+c3RhcnQoKTsKIAogICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFp
bnMoZG93bmxvYWRJRCkpOwogICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEZNb3Zl
KGRvd25sb2FkKSk7CisjZW5kaWYKIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCkBAIC05
OSw4ICs5Nyw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjp3aWxsRGVjaWRlUGVuZGluZ0Rvd25s
b2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3CiAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JEZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3RkOjpt
YWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNlbmRp
ZgotCisjZWxzZQogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2Fk
KERvd25sb2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKICAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMs
IGRvd25sb2FkSUQsIHJlcXVlc3QpOwpAQCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxvYWRN
YW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJl
c291cmNlSGFuCiAgICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7
CiAgICAgbV9kb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKIH0K
KyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6
Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRvd25s
b2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQogewpAQCAtMTM0
LDExICsxMzIsMTEgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGlu
Z0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCBkb3dubG8KIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkp
OwogICAgICAgICBtX2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25EZWNpZGVkLnNldChkb3dubG9h
ZElELCBuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCisj
ZWxzZQogICAgIGlmIChhdXRvKiB3YWl0aW5nRG93bmxvYWQgPSBkb3dubG9hZChkb3dubG9hZElE
KSkKICAgICAgICAgd2FpdGluZ0Rvd25sb2FkLT5kaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFNlc3Npb25J
RCwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3Vt
ZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDA3MWVhOWUu
LjkwNjNmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKQEAgLTgwLDggKzgwLDkgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB3aWxsRGVjaWRlUGVuZGluZ0Rvd25s
b2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxl
ciYmKTsKLSNlbmRpZgorI2Vsc2UKICAgICB2b2lkIGNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERv
d25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlmCiAg
ICAgdm9pZCBjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2Fk
SUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwg
Ym9vbCBhbGxvd092ZXJ3cml0ZSk7CiAKICAgICB2b2lkIHJlc3VtZURvd25sb2FkKFdlYkNvcmU6
OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2Nv
Y29hL0Rvd25sb2FkQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQppbmRleCBkMzIwOWFkLi44NjhlMTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93
bmxvYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQpAQCAtMzgsMTAgKzM4LDEwIEBAIHZvaWQgRG93bmxv
YWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0
cmluZyYgcGF0aCwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogICAgIAotdm9pZCBEb3dubG9h
ZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3
b3JrTG9hZCgpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWQpOwotICAgIFttX2Rvd25sb2FkIGNh
bmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTogXihOU0RhdGEgKiBfTnVsbGFibGUgcmVzdW1lRGF0
YSkKKyAgICBBU1NFUlQobV9kb3dubG9hZFRhc2spOworICAgIFttX2Rvd25sb2FkVGFzayBjYW5j
ZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEp
CiAgICAgewogICAgICAgICBpZiAocmVzdW1lRGF0YSAmJiByZXN1bWVEYXRhLmJ5dGVzICYmIHJl
c3VtZURhdGEubGVuZ3RoKQogICAgICAgICAgICAgZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5j
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1bWVEYXRhLmJ5dGVzKSwgcmVz
dW1lRGF0YS5sZW5ndGgpKTsKQEAgLTUwLDE1ICs1MCw2IEBAIHZvaWQgRG93bmxvYWQ6OmNhbmNl
bE5ldHdvcmtMb2FkKCkKICAgICB9XTsKIH0KIAotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpw
bGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KaW5kZXggZjMzOGFiYy4uNTAyNGFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3du
bG9hZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
aW9zL0Rvd25sb2FkSU9TLm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBEb3dubG9hZDo6c3Rh
cnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVz
b3VyY2UKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIH0KIAotdm9pZCBEb3dubG9hZDo6
Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3Jr
TG9hZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCmlu
ZGV4IGJiM2ZmMmIuLjk5ZTM4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJl
c3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwKICAgICBbbV9uc1VSTERvd25sb2FkIHNldERl
bGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOwogfQogCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3
b3JrTG9hZCgpCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKIHsK
ICAgICBbbV9uc1VSTERvd25sb2FkIGNhbmNlbF07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmU4YzVjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2Vs
TmV0d29ya0xvYWQoKQotewotICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAgIGRpZENhbmNl
bCh7IH0pOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQot
Ci12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDgzNGFlY2EuLjBl
NjNjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTIwNywxOCArMjA3LDE2
IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChTZXNzaW9uSUQKICAgICB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAg
IGxvYWRlci0+bmV0d29ya0xvYWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQs
IHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9h
ZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgbG9hZGVyLT5uZXR3b3Jr
TG9hZCgpLT5jb252ZXJ0VGFza1RvRG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9u
c2UpOworICAgIGxvYWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQoKTsKKyNlbHNlCiAgICAgbmV0
d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93
bmxvYWRJRCwgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9u
c2UpOwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVl
LgogICAgIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CiAKICAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZW5k
aWYKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRP
TShTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYg
dXJsLCBTdHJpbmcmIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2suY3BwCmluZGV4IDU0ZGE0ZmIuLmRiYjA2NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza0Jsb2IuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTQ0LDYgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIFJlZjxOZXR3b3JrRGF0YVRhc2s+IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQogeworICAgIGlmIChyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNCbG9iKCkpCisgICAgICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tCbG9i
OjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpOwor
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza0NvY29hOjpj
cmVhdGUoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxk
Q29udGVudFNuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2suaAppbmRleCA0ZGMxMjkwLi42ZGE0MWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaApAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOwogCiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAg
ICAgIFJ1bm5pbmcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFza0Jsb2IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIyMzI4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza0Jsb2IuaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiV2Vi
RXJyb3JzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Bc3luY0ZpbGVTdHJlYW0uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Jsb2JEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBs
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3RyZWFtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9I
VFRQSGVhZGVyTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gNTEyICogMTAyNDsKKworc3RhdGljIGNvbnN0
IGludCBodHRwT0sgPSAyMDA7CitzdGF0aWMgY29uc3QgaW50IGh0dHBQYXJ0aWFsQ29udGVudCA9
IDIwNjsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cE5vdEFsbG93ZWQgPSA0MDM7CitzdGF0aWMgY29u
c3QgaW50IGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDE2Oworc3RhdGljIGNv
bnN0IGludCBodHRwSW50ZXJuYWxFcnJvciA9IDUwMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRw
T0tUZXh0ID0gIk9LIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwUGFydGlhbENvbnRlbnRUZXh0
ID0gIlBhcnRpYWwgQ29udGVudCI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cE5vdEFsbG93ZWRU
ZXh0ID0gIk5vdCBBbGxvd2VkIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwUmVxdWVzdGVkUmFu
Z2VOb3RTYXRpc2ZpYWJsZVRleHQgPSAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSI7
CitzdGF0aWMgY29uc3QgY2hhciogaHR0cEludGVybmFsRXJyb3JUZXh0ID0gIkludGVybmFsIFNl
cnZlciBFcnJvciI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB3ZWJLaXRCbG9iUmVzb3Vy
Y2VEb21haW4gPSAiV2ViS2l0QmxvYlJlc291cmNlIjsKKworTmV0d29ya0RhdGFUYXNrQmxvYjo6
TmV0d29ya0RhdGFUYXNrQmxvYihOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFU
YXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ29udGVu
dFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZikKKyAgICA6IE5ldHdvcmtEYXRhVGFz
ayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywg
ZmFsc2UpCisgICAgLCBtX2Jsb2JEYXRhKHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihi
bG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpKQorICAgICwg
bV9zdHJlYW0oc3RkOjptYWtlX3VuaXF1ZTxBc3luY0ZpbGVTdHJlYW0+KCp0aGlzKSkKK3sKKyAg
ICBtX3Nlc3Npb24tPnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKK30KKworTmV0d29y
a0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRhVGFza0Jsb2IoKQoreworICAgIGNsZWFyU3RyZWFt
KCk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0cmVhbSgpCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAg
IG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKyAgICB9
CisgICAgbV9zdHJlYW0gPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6
OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOworICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bm5pbmc7
CisKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpIHsKKyAgICAg
ICAgQVNTRVJUKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CisgICAg
ICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX2ZpcnN0UmVxdWVz
dC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAgICAgZGlkRmFpbChFcnJvcjo6TWV0
aG9kTm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGUgYmxvYiBkYXRhIGlzIG5vdCBmb3VuZCwgZmFpbCBub3cuCisgICAgICAgIGlm
ICghbV9ibG9iRGF0YSkgeworICAgICAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90Rm91bmRFcnJv
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXJzZSB0
aGUgIlJhbmdlIiBoZWFkZXIgd2UgY2FyZSBhYm91dC4KKyAgICAgICAgU3RyaW5nIHJhbmdlID0g
bV9maXJzdFJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpSYW5nZSk7Cisg
ICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJzZVJhbmdlKHJhbmdlLCBtX3Jhbmdl
T2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3JhbmdlU3VmZml4TGVuZ3RoKSkgeworICAgICAgICAgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9yOjpSYW5nZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGdldFNpemVGb3JOZXh0KCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VzcGVuZCgpCit7CisgICAgLy8gRklYTUU6IGNh
biB0aGlzIGhhcHBlbj8KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNh
bmNlbGluZzsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9maWxlT3BlbmVk
ID0gZmFsc2U7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgIH0KKworICAgIGlmIChp
c0Rvd25sb2FkKCkpCisgICAgICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza0Jsb2I6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgp
OworICAgIGNsZWFyU3RyZWFtKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0
U2l6ZUZvck5leHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBE
byB3ZSBmaW5pc2ggdmFsaWRhdGluZyBhbmQgY291bnRpbmcgc2l6ZSBmb3IgYWxsIGl0ZW1zPwor
ICAgIGlmIChtX3NpemVJdGVtQ291bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkpIHsK
KyAgICAgICAgc2VlaygpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRh
dGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRhdGE6CisgICAgICAgIGRpZEdldFNp
emUoaXRlbS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxvYkRhdGFJdGVt
OjpUeXBlOjpGaWxlOgorICAgICAgICAvLyBGaWxlcyBrbm93IHRoZWlyIHNpemVzLCBidXQgYXNr
aW5nIHRoZSBzdHJlYW0gdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgd2Fzbid0IG1vZGlmaWVkLgor
ICAgICAgICBtX3N0cmVhbS0+Z2V0U2l6ZShpdGVtLmZpbGUoKS0+cGF0aCgpLCBpdGVtLmZpbGUo
KS0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGlu
ZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3du
bG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSWYgdGhlIHNpemUgaXMgLTEsIGl0IG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVu
IG1vdmVkIG9yIGNoYW5nZWQuIEZhaWwgbm93LgorICAgIGlmIChzaXplID09IC0xKSB7CisgICAg
ICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gVGhlIHNpemUgcGFzc2VkIGJhY2sgaXMgdGhlIHNpemUgb2YgdGhlIHdob2xl
IGZpbGUuIElmIHRoZSB1bmRlcmx5aW5nIGl0ZW0gaXMgYSBzbGljZWQgZmlsZSwgd2UgbmVlZCB0
byB1c2UgdGhlIHNsaWNlIGxlbmd0aC4KKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBt
X2Jsb2JEYXRhLT5pdGVtcygpLmF0KG1fc2l6ZUl0ZW1Db3VudCk7CisgICAgc2l6ZSA9IGl0ZW0u
bGVuZ3RoKCk7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0ZW1MZW5ndGhMaXN0
LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAgIG1fdG90YWxTaXpl
ICs9IHNpemU7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgKz0gc2l6ZTsKKyAgICBtX3NpemVJ
dGVtQ291bnQrKzsKKworICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG5leHQgaXRlbS4KKyAgICBn
ZXRTaXplRm9yTmV4dCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnNlZWsoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gdGhl
IHN1ZmZpeCBsZW5ndGggdG8gdGhlIHJhbmdlLgorICAgIGlmIChtX3JhbmdlU3VmZml4TGVuZ3Ro
ICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkgeworICAgICAgICBtX3JhbmdlT2Zmc2V0ID0gbV90
b3RhbFJlbWFpbmluZ1NpemUgLSBtX3JhbmdlU3VmZml4TGVuZ3RoOworICAgICAgICBtX3Jhbmdl
RW5kID0gbV9yYW5nZU9mZnNldCArIG1fcmFuZ2VTdWZmaXhMZW5ndGggLSAxOworICAgIH0KKwor
ICAgIC8vIEJhaWwgb3V0IGlmIHRoZSByYW5nZSBpcyBub3QgcHJvdmlkZWQuCisgICAgaWYgKG1f
cmFuZ2VPZmZzZXQgPT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2Uu
CisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9yIChtX3JlYWRJ
dGVtQ291bnQgPSAwOyBtX3JlYWRJdGVtQ291bnQgPCBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUo
KSAmJiBvZmZzZXQgPj0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdOyArK21fcmVh
ZEl0ZW1Db3VudCkKKyAgICAgICAgb2Zmc2V0IC09IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRl
bUNvdW50XTsKKworICAgIC8vIFNldCB0aGUgb2Zmc2V0IHRoYXQgbmVlZCB0byBqdW1wIHRvIGZv
ciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmFuZ2UuCisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXpl
ID0gb2Zmc2V0OworCisgICAgLy8gQWRqdXN0IHRoZSB0b3RhbCByZW1haW5pbmcgc2l6ZSBpbiBv
cmRlciBub3QgdG8gZ28gYmV5b25kIHRoZSByYW5nZS4KKyAgICBpZiAobV9yYW5nZUVuZCAhPSBr
UG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbG9uZyBsb25nIHJhbmdlU2l6ZSA9IG1f
cmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsgMTsKKyAgICAgICAgaWYgKG1fdG90YWxSZW1haW5p
bmdTaXplID4gcmFuZ2VTaXplKQorICAgICAgICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgPSBy
YW5nZVNpemU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IG1f
cmFuZ2VPZmZzZXQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxvYj4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShtX2Zp
cnN0UmVxdWVzdC51cmwoKSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9yID8gInRleHQvcGxh
aW4iIDogbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vy
cm9yID8gMCA6IG1fdG90YWxSZW1haW5pbmdTaXplLCBTdHJpbmcoKSk7CisgICAgc3dpdGNoIChl
cnJvckNvZGUpIHsKKyAgICBjYXNlIEVycm9yOjpOb0Vycm9yOiB7CisgICAgICAgIGJvb2wgaXNS
YW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZDsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaXNSYW5nZVJlcXVlc3QgPyBodHRwUGFy
dGlhbENvbnRlbnQgOiBodHRwT0spOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4
dChpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudFRleHQgOiBodHRwT0tUZXh0KTsK
KworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNv
bnRlbnRUeXBlLCBtX2Jsb2JEYXRhLT5jb250ZW50VHlwZSgpKTsKKyAgICAgICAgcmVzcG9uc2Uu
c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoLCBTdHJpbmc6
Om51bWJlcihtX3RvdGFsUmVtYWluaW5nU2l6ZSkpOworCisgICAgICAgIGlmIChpc1JhbmdlUmVx
dWVzdCkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFJhbmdlLCBQYXJzZWRDb250ZW50UmFuZ2UobV9yYW5nZU9mZnNldCwgbV9y
YW5nZUVuZCwgbV90b3RhbFNpemUpLmhlYWRlclZhbHVlKCkpOworICAgICAgICAvLyBGSVhNRTog
SWYgYSByZXNvdXJjZSBpZGVudGlmaWVkIHdpdGggYSBibG9iOiBVUkwgaXMgYSBGaWxlIG9iamVj
dCwgdXNlciBhZ2VudHMgbXVzdCB1c2UgdGhhdCBmaWxlJ3MgbmFtZSBhdHRyaWJ1dGUsCisgICAg
ICAgIC8vIGFzIGlmIHRoZSByZXNwb25zZSBoYWQgYSBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRl
ciB3aXRoIHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgc2V0IHRvIHRoZSBGaWxlJ3MgbmFtZSBhdHRy
aWJ1dGUuCisgICAgICAgIC8vIE5vdGFibHksIHRoaXMgd2lsbCBhZmZlY3QgYSBuYW1lIHN1Z2dl
c3RlZCBpbiAiRmlsZSBTYXZlIEFzIi4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
RXJyb3I6OlJhbmdlRXJyb3I6CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0
dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c1RleHQoaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFcnJvcjo6U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cE5vdEFsbG93ZWQpOworICAgICAgICByZXNwb25zZS5z
ZXRIVFRQU3RhdHVzVGV4dChodHRwTm90QWxsb3dlZFRleHQpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwSW50ZXJu
YWxFcnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGh0dHBJbnRlcm5h
bEVycm9yVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBlcnJvckNvZGVdKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFy
U3RyZWFtKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9yKSB7CisgICAgICAgICAgICBkaWRGaW5pc2goKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAocG9saWN5
QWN0aW9uKSB7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xpY3lVc2U6CisgICAgICAg
ICAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7CisgICAgICAgICAgICByZWFkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeUlnbm9y
ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5
RG93bmxvYWQ6CisgICAgICAgICAgICBkb3dubG9hZCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8g
bW9yZSByZW1haW5pbmcgZGF0YSB0byByZWFkLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoIW1fdG90
YWxSZW1haW5pbmdTaXplIHx8IG1fcmVhZEl0ZW1Db3VudCA+PSBtX2Jsb2JEYXRhLT5pdGVtcygp
LnNpemUoKSkgeworICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQo
bV9yZWFkSXRlbUNvdW50KTsKKyAgICBpZiAoaXRlbS50eXBlKCkgPT0gQmxvYkRhdGFJdGVtOjpU
eXBlOjpEYXRhKQorICAgICAgICByZWFkRGF0YShpdGVtKTsKKyAgICBlbHNlIGlmIChpdGVtLnR5
cGUoKSA9PSBCbG9iRGF0YUl0ZW06OlR5cGU6OkZpbGUpCisgICAgICAgIHJlYWRGaWxlKGl0ZW0p
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6cmVhZERhdGEoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQorewor
ICAgIEFTU0VSVChpdGVtLmRhdGEoKS5kYXRhKCkpOworCisgICAgbG9uZyBsb25nIGJ5dGVzVG9S
ZWFkID0gaXRlbS5sZW5ndGgoKSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0
ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBt
X3RvdGFsUmVtYWluaW5nU2l6ZTsKKyAgICBjb25zdW1lRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpdGVtLmRhdGEoKS5kYXRhKCktPmRhdGEoKSkgKyBpdGVtLm9mZnNldCgpICsg
bV9jdXJyZW50SXRlbVJlYWRTaXplLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzVG9SZWFkKSk7Cisg
ICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpyZWFkRmlsZShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKyAgICBBU1NFUlQobV9zdHJlYW0pOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkg
eworICAgICAgICBtX3N0cmVhbS0+cmVhZChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQg
PSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF0gLSBtX2N1cnJlbnRJdGVtUmVhZFNp
emU7CisgICAgaWYgKGJ5dGVzVG9SZWFkID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAg
IGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8aW50PihtX3RvdGFsUmVtYWluaW5nU2l6ZSk7Cisg
ICAgbV9zdHJlYW0tPm9wZW5Gb3JSZWFkKGl0ZW0uZmlsZSgpLT5wYXRoKCksIGl0ZW0ub2Zmc2V0
KCkgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIGJ5dGVzVG9SZWFkKTsKKyAgICBtX2ZpbGVPcGVu
ZWQgPSB0cnVlOworICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbihib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
KCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGRp
ZEZhaWwoRXJyb3I6Ok5vdFJlYWRhYmxlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAg
IHJlYWQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWFkKGludCBieXRl
c1JlYWQpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgewor
ICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGJ5dGVzUmVhZCA8IDApIHsKKyAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90UmVhZGFibGVFcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxv
Yj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgY29uc3VtZURhdGEobV9idWZmZXIuZGF0YSgp
LCBieXRlc1JlYWQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNvbnN1bWVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgbV90b3RhbFJlbWFpbmlu
Z1NpemUgLT0gYnl0ZXNSZWFkOworCisgICAgaWYgKGJ5dGVzUmVhZCkgeworICAgICAgICBpZiAo
bV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICAg
ICAgaWYgKCF3cml0ZURvd25sb2FkKGRhdGEsIGJ5dGVzUmVhZCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0
ZShkYXRhLCBieXRlc1JlYWQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2ZpbGVP
cGVuZWQpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVudCBpdGVtIGlzIGEgZmlsZSBpdGVt
LCB0aGUgcmVhZGluZyBpcyBjb21wbGV0ZWQgb25seSBpZiBieXRlc1JlYWQgaXMgMC4KKyAgICAg
ICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgICAgIC8vIENsb3NlIHRoZSBmaWxlLgorICAg
ICAgICAgICAgbV9maWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgICAgICBtX3N0cmVhbS0+Y2xv
c2UoKTsKKworICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICAgICAg
ICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBPdGhlcndpc2UsIHdlIHJlYWQgdGhlIGN1cnJlbnQgdGV4dCBpdGVtIGFzIGEgd2hvbGUgYW5k
IG1vdmUgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAg
fQorCisgICAgcmVhZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRp
bmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3
cml0ZSkKK3sKKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KGZpbGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CisgICAg
aWYgKGFsbG93T3ZlcndyaXRlICYmIGZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlv
bikpCisgICAgICAgIGRlbGV0ZUZpbGUobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7Cit9CisK
K1N0cmluZyBOZXR3b3JrRGF0YVRhc2tCbG9iOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3N1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bmtub3du
Iik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZG93bmxvYWQoKQoreworICAgIEFT
U0VSVChpc0Rvd25sb2FkKCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9u
KTsKKworICAgIG1fZG93bmxvYWRGaWxlID0gb3BlbkZpbGUobV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbiwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAobV9kb3dubG9hZEZpbGUgPT0gaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQoY2FuY2VsbGVkRXJy
b3IobV9maXJzdFJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8m
IGRvd25sb2FkTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKTsKKyAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4o
ZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9hZElELCAqdGhpcywgbV9zZXNzaW9uLT5z
ZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93bmxvYWRQdHIg
PSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3du
bG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGRv
d25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9u
KTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJlY29tZURvd25s
b2FkKCk7CisKKyAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7CisgICAgcmVhZCgpOwor
fQorCitib29sIE5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQoaXNEb3dubG9hZCgpKTsKKyAgICBp
bnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUobV9kb3dubG9hZEZpbGUsIGRhdGEsIGJ5dGVz
UmVhZCk7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBkaWRGYWlsRG93
bmxvYWQoY2FuY2VsbGVkRXJyb3IobV9maXJzdFJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4gPT0gYnl0ZXNSZWFkKTsKKyAg
ICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICBBU1NFUlQoZG93bmxv
YWQpOworICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4pOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNsZWFuRG93bmxvYWRG
aWxlcygpCit7CisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUpIHsKKyAgICAgICAgY2xvc2VGaWxlKG1fZG93bmxvYWRGaWxlKTsKKyAgICAgICAgbV9k
b3dubG9hZEZpbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIH0KKyAgICBkZWxl
dGVGaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBjbGVhclN0cmVhbSgpOworICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworCisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3Ip
OworICAgIGVsc2UgeworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElE
KTsKKyAgICAgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwo
ZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrQmxvYjo6ZGlkRmluaXNoRG93bmxvYWQoKQoreworICAgIEFTU0VSVChpc0Rvd25sb2Fk
KCkpOworICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAgbV9kb3dubG9hZEZpbGUg
PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBh
dXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFn
ZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICBBU1NFUlQoZG93bmxvYWQp
OworICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpkaWRGYWlsKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNr
QmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgaWYgKGlzRG93bmxvYWQoKSkgeworICAg
ICAgICBkaWRGYWlsRG93bmxvYWQoUmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3VyY2VEb21h
aW4sIHN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSwgbV9maXJzdFJlcXVlc3QudXJsKCksIFN0
cmluZygpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjbGVhclN0cmVhbSgpOwor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9y
KFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCgpCit7CisgICAgaWYgKG1fZG93bmxvYWRG
aWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmluaXNoRG93
bmxvYWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsZWFyU3RyZWFtKCk7Cisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3Io
eyB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrQmxvYi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrQmxvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTUy
YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2tCbG9iLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwor
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN0cmVh
bUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBBc3luY0ZpbGVTdHJlYW07CitjbGFzcyBCbG9iRGF0YTsKK2NsYXNz
IEJsb2JEYXRhSXRlbTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtE
YXRhVGFza0Jsb2IgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrLCBwdWJsaWMgV2ViQ29y
ZTo6RmlsZVN0cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0
YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xp
ZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza0Jsb2Ioc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpKTsKKyAgICB9CisKKyAgICB+TmV0
d29ya0RhdGFUYXNrQmxvYigpOworCitwcml2YXRlOgorICAgIE5ldHdvcmtEYXRhVGFza0Jsb2Io
TmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kpOworCisgICAg
dm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgp
IG92ZXJyaWRlOworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJv
b2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc3VnZ2VzdGVkRmls
ZW5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEZpbGVTdHJlYW1DbGllbnQgbWV0aG9k
cy4KKyAgICB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZE9wZW4oYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWFkKGludCkgb3ZlcnJpZGU7CisK
KyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTm9FcnJvciA9IDAsCisgICAgICAgIE5v
dEZvdW5kRXJyb3IgPSAxLAorICAgICAgICBTZWN1cml0eUVycm9yID0gMiwKKyAgICAgICAgUmFu
Z2VFcnJvciA9IDMsCisgICAgICAgIE5vdFJlYWRhYmxlRXJyb3IgPSA0LAorICAgICAgICBNZXRo
b2ROb3RBbGxvd2VkID0gNQorICAgIH07CisKKyAgICB2b2lkIGNsZWFyU3RyZWFtKCk7CisgICAg
dm9pZCBnZXRTaXplRm9yTmV4dCgpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9y
ID0gRXJyb3I6Ok5vRXJyb3IpOworICAgIHZvaWQgc2VlaygpOworICAgIHZvaWQgY29uc3VtZURh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCk7CisgICAgdm9pZCByZWFkKCk7Cisg
ICAgdm9pZCByZWFkRGF0YShjb25zdCBXZWJDb3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lk
IHJlYWRGaWxlKGNvbnN0IFdlYkNvcmU6OkJsb2JEYXRhSXRlbSYpOworICAgIHZvaWQgZG93bmxv
YWQoKTsKKyAgICBib29sIHdyaXRlRG93bmxvYWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVz
UmVhZCk7CisgICAgdm9pZCBjbGVhbkRvd25sb2FkRmlsZXMoKTsKKyAgICB2b2lkIGRpZEZhaWxE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBkaWRGaW5p
c2hEb3dubG9hZCgpOworICAgIHZvaWQgZGlkRmFpbChFcnJvcik7CisgICAgdm9pZCBkaWRGaW5p
c2goKTsKKworICAgIGVudW0geyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgPSAtMSB9OworCisgICAg
UmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiBtX2Jsb2JEYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW0+IG1fc3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3Vz
IGxvYWRpbmcuCisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOworICAgIFZlY3Rvcjxsb25nIGxv
bmc+IG1faXRlbUxlbmd0aExpc3Q7CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5k
ZWQgfTsKKyAgICBsb25nIGxvbmcgbV9yYW5nZU9mZnNldCB7IGtQb3NpdGlvbk5vdFNwZWNpZmll
ZCB9OworICAgIGxvbmcgbG9uZyBtX3JhbmdlRW5kIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07
CisgICAgbG9uZyBsb25nIG1fcmFuZ2VTdWZmaXhMZW5ndGggeyBrUG9zaXRpb25Ob3RTcGVjaWZp
ZWQgfTsKKyAgICBsb25nIGxvbmcgbV90b3RhbFNpemUgeyAwIH07CisgICAgbG9uZyBsb25nIG1f
dG90YWxSZW1haW5pbmdTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX2N1cnJlbnRJdGVtUmVh
ZFNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9zaXplSXRlbUNvdW50IHsgMCB9OworICAgIHVu
c2lnbmVkIG1fcmVhZEl0ZW1Db3VudCB7IDAgfTsKKyAgICBib29sIG1fZmlsZU9wZW5lZCB7IGZh
bHNlIH07CisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZG93bmxvYWRGaWxlIHsg
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IDkwMzE1NjIuLjU4NzVi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAK
QEAgLTY3LDEwICs2Nyw2IEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENs
aWVudCYgY2xpZW50LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFt
ZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpCiB7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5yZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlKG51bGxwdHIsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMuZGVm
ZXJzTG9hZGluZywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNv
bnRlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIG1fdGFzayA9IE5ldHdvcmtEYXRh
VGFzazo6Y3JlYXRlKG5ldHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzLnJlcXVlc3Qs
IG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBtX3BhcmFtZXRlcnMuY29udGVu
dFNuaWZmaW5nUG9saWN5LCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCk7CiAgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAg
ICAgICAgbV90YXNrLT5yZXN1bWUoKTsKQEAgLTEwMSwxMiArOTcsMTQgQEAgTmV0d29ya0xvYWQ6
On5OZXR3b3JrTG9hZCgpCiAjZW5kaWYKICAgICBpZiAobV90YXNrKQogICAgICAgICBtX3Rhc2st
PmNsZWFyQ2xpZW50KCk7Ci0jZWxpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQorI2Vsc2UKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIGlm
IChtX2hhbmRsZSAmJiBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwogI2VuZGlmCiAgICAgaWYgKG1faGFuZGxl
KQogICAgICAgICBtX2hhbmRsZS0+Y2xlYXJDbGllbnQoKTsKKyNlbmRpZgogfQogCiB2b2lkIE5l
dHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTE4LDkgKzExNiwx
MCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwogICAgIH0KLSNlbmRpZgor
I2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVycyk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKQEAg
LTEyOCw5ICsxMjcsMTAgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQogICAgIGlmIChtX3Rhc2spCiAgICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7
Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y2Fu
Y2VsKCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKQEAgLTE0MywyNyAr
MTQzLDE5IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpCiAjZW5kaWYKIAogI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCi0gICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpl
eGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOyAgICAKKyAgICBh
dXRvIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7CiAgICAgQVNTRVJUKHJlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIpOwotI2VuZGlmCi0gICAgCisgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRs
ZXIpCisgICAgICAgIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIobV9jdXJyZW50UmVxdWVzdCk7
CisjZWxzZQogICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7CiAgICAgICAgIGlm
IChtX2hhbmRsZSkKICAgICAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgZGlk
RmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwot
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25I
YW5kbGVyKQotICAgICAgICAgICAgcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcih7IH0pOwotI2Vu
ZGlmCi0gICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKG1faGFuZGxlKSB7CiAgICAgICAg
IGF1dG8gY3VycmVudFJlcXVlc3RDb3B5ID0gbV9jdXJyZW50UmVxdWVzdDsKICAgICAgICAgbV9o
YW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUoY3VycmVudFJlcXVlc3RDb3B5
KSk7CiAgICAgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAocmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcihtX2N1
cnJlbnRSZXF1ZXN0KTsKICNlbmRpZgogfQogCkBAIC0xNzEsMTIgKzE2MywxMyBAQCB2b2lkIE5l
dHdvcmtMb2FkOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAjaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKICAgICBpZiAobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAg
ICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwotICAgICAgICBtX3Jl
c3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIHJlc3BvbnNl
Q29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciwgbnVsbHB0cik7CisgICAgICAgIHJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5
VXNlKTsKICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBt
X2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyNlbmRpZgogfQogCiBOZXR3
b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0d29ya0xv
YWQ6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2Up
CkBAIC0yODUsNiArMjc4LDIzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbXBsZXRlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjCiAgICAgICAgIE5l
dHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJh
bWV0ZXJzLndlYkZyYW1lSUQsICptX2NoYWxsZW5nZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQg
TmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZShib29sIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQobV9jaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
cik7CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9jaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoKm1fY2hhbGxlbmdlKSkKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIHNlcnZlclRydXN0
Q3JlZGVudGlhbCgqbV9jaGFsbGVuZ2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0
UHJvdGVjdGlvblNwYWNlLCB7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29t
cGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Cit9CisjZW5kaWYKKwogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29y
a1Nlc3Npb24oUmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNwb25zZUNvbXBsZXRpb25I
YW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTM2Miw4ICszNzIsOCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjYW5ub3RTaG93VVJMKCkK
IHsKICAgICBtX2NsaWVudC5kaWRGYWlsTG9hZGluZyhjYW5ub3RTaG93VVJMRXJyb3IobV9jdXJy
ZW50UmVxdWVzdCkpOwogfQotICAgIAotI2VuZGlmCisKKyNlbHNlCiAKIHZvaWQgTmV0d29ya0xv
YWQ6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291
cmNlUmVzcG9uc2UmJiByZWNlaXZlZFJlc3BvbnNlKQogewpAQCAtNDE4LDMyICs0MjgsMTMgQEAg
dm9pZCBOZXR3b3JrTG9hZDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFz
eW5jKFJlc291cmNlSGFuZGxlKiBoYW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmICFV
U0UoTkVUV09SS19TRVNTSU9OKQogICAgIG1fd2FpdGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSA9IHRydWU7Ci0jZW5kaWYKICAgICBtX2NsaWVudC5j
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMocHJvdGVjdGlvblNwYWNl
KTsKIH0KLSNlbmRpZgogCi0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
IHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShib29sIHJlc3VsdCkKIHsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIW1faGFuZGxlLCAiQmxvYnMgc2hvdWxkIG5ldmVyIGdpdmUgYXV0
aGVudGljYXRpb24gY2hhbGxlbmdlcyIpOwotICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRp
b25IYW5kbGVyKTsKLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZSht
X2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKLSAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBpZiAobV90YXNrICYmIG1fdGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2UpKQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgc2Vy
dmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxsZW5nZSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
OjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSNlbHNlCiAgICAgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlID0gZmFsc2U7Ci0jZW5kaWYKICAgICBpZiAobV9oYW5kbGUp
CiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UocmVzdWx0KTsKIH0KQEAgLTUxNSw1ICs1MDYsNiBAQCB2b2lkIE5ldHdvcmtMb2Fk
OjpyZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRo
ZW50aWNhdAogICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKICAgICBkaWRGYWlsKG1faGFuZGxlLmdl
dCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAppbmRleCAyN2Q0MzE3Li4zZjYxMzAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKQEAgLTQwLDkg
KzQwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBOZXR3b3JrTG9hZCBmaW5h
bCA6IHByaXZhdGUgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKK2NsYXNzIE5ldHdvcmtM
b2FkIGZpbmFsIDoKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICwgcHJpdmF0ZSBOZXR3
b3JrRGF0YVRhc2tDbGllbnQKKyAgICBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudAorI2Vs
c2UKKyAgICBwcml2YXRlIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50CiAjZW5kaWYKIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDcgKzcxLDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBz
ZXRQZW5kaW5nRG93bmxvYWQoUGVuZGluZ0Rvd25sb2FkJik7CiAgICAgRG93bmxvYWRJRCBwZW5k
aW5nRG93bmxvYWRJRCgpIHsgcmV0dXJuIG1fdGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsgfQot
I2VuZGlmCisjZWxzZQorICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiBoYW5kbGUoKSBjb25z
dCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQogCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0Vf
QVVUSF9DQUxMQkFDSykKICAgICB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlByb3Rl
Y3Rpb25TcGFjZSYpIG92ZXJyaWRlOwpAQCAtODUsMTcgKzg4LDE3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQogCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShib29sKTsKICNlbmRpZgogCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9Ci0KIHByaXZhdGU6CiAgICAgTmV0
d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHNoYXJlZERp
ZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYpOwogICAgIHZvaWQg
c2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmKTsKIAorI2lmICFVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CiAgICAgdm9pZCB3aWxsU2VuZFJlcXVl
c3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSkgZmluYWw7
CiAgICAgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVk
IGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNl
bnQpIGZpbmFsOwpAQCAtMTExLDggKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNlaXZl
ZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgZmluYWw7CiAgICAgYm9vbCB1c2VzQXN5bmNDYWxsYmFj
a3MoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBsb2FkaW5nU3luY2hyb25vdXNY
SFIoKSBmaW5hbCB7IHJldHVybiBtX2NsaWVudC5pc1N5bmNocm9ub3VzKCk7IH0KLQotI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisjZWxzZQogICAgIC8vIE5ldHdvcmtEYXRhVGFza0NsaWVudAog
ICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFu
ZGxlciYmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYm
KSBmaW5hbDsKQEAgLTE0Niw4ICsxNDgsOCBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29sIG1f
d2FpdGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7
IGZhbHNlIH07CiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtp
bmdDb250ZXh0OwotI2VuZGlmCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBt
X2hhbmRsZTsKKyNlbmRpZgogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVu
dFJlcXVlc3Q7IC8vIFVwZGF0ZWQgb24gcmVkaXJlY3RzLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAppbmRleCAxZjgxODE5Li4xZTVl
MDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vz
c2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogCisj
aW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC04MSw2ICs4
MiwxMiBAQCBOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKCkKIHsKIH0KIAordm9pZCBO
ZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit7CisgICAgZm9yIChhdXRvKiB0
YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAgdGFzay0+aW52YWxpZGF0ZUFuZENhbmNlbCgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFVTRShORVRXT1JLX1NF
U1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
U2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24u
aAppbmRleCA5OWQwOTgxLi5kNWIwMTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQogCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCkBAIC0zOCw2ICszOSw3IEBAIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7CitjbGFz
cyBOZXR3b3JrRGF0YVRhc2s7CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNv
dW50ZWQ8TmV0d29ya1Nlc3Npb24+IHsKIHB1YmxpYzoKQEAgLTQ1LDE2ICs0NywyMSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uJiBkZWZhdWx0U2Vzc2lvbigpOwogICAgIHZp
cnR1YWwgfk5ldHdvcmtTZXNzaW9uKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUFu
ZENhbmNlbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgeyB9OwogCiAgICAgV2ViQ29yZTo6
U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAgICAg
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBj
b25zdDsKIAorICAgIHZvaWQgcmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNr
JiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRkKCZ0YXNrKTsgfQorICAgIHZvaWQgdW5yZWdpc3Rl
ck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smIHRhc2spIHsgbV9kYXRhVGFza1NldC5y
ZW1vdmUoJnRhc2spOyB9CisKIHByb3RlY3RlZDoKICAgICBOZXR3b3JrU2Vzc2lvbihXZWJDb3Jl
OjpTZXNzaW9uSUQpOwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworCisg
ICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrU2V0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAppbmRleCAwYThlZGJiLi42MzQyZTFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
RGF0YVRhc2tDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtEYXRhVGFza0NvY29hLmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc3VzcGVuZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBv
dmVycmlkZSB7IH0KICAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0
ZSovKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrTG9hZE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21h
Yy9OZXR3b3JrTG9hZE1hYy5tbQppbmRleCAxNWZiYjZkLi42NDc1NTIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCkBAIC0y
Niw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk5ldHdvcmtMb2FkLmgi
CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKwogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdv
cmtTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KIApAQCAtNTQsMyAr
NTYsNSBAQCB2b2lkIE5ldHdvcmtMb2FkOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcAogI2VuZGlmIC8vICFVU0UoQ0ZVUkxDT05O
RUNUSU9OKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vICFVU0UoTkVUV09S
S19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggMTc2MzY1Mi4uMWU5ZWU3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRh
c2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtEYXRhVGFza1NvdXAuY3BwCkBAIC01Miw3ICs1Miw3IEBAIE5ldHdvcmtEYXRhVGFza1NvdXA6
Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRh
VGFzCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAgICAg
LCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0d29ya0RhdGFUYXNr
U291cDo6dGltZW91dEZpcmVkKQogewotICAgIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291
cCY+KG1fc2Vzc2lvbi5nZXQoKSkucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworICAg
IG1fc2Vzc2lvbi0+cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOwogICAgIGlmIChtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04
MCw3ICs4MCw3IEBAIE5ldHdvcmtEYXRhVGFza1NvdXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0
d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFzCiBOZXR3b3JrRGF0YVRhc2tTb3Vw
Ojp+TmV0d29ya0RhdGFUYXNrU291cCgpCiB7CiAgICAgY2xlYXJSZXF1ZXN0KCk7Ci0gICAgc3Rh
dGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS51bnJlZ2lzdGVy
TmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBtX3Nlc3Npb24tPnVucmVnaXN0ZXJOZXR3b3Jr
RGF0YVRhc2soKnRoaXMpOwogfQogCiBTdHJpbmcgTmV0d29ya0RhdGFUYXNrU291cDo6c3VnZ2Vz
dGVkRmlsZW5hbWUoKSBjb25zdApAQCAtODYzLDcgKzg2Myw3IEBAIHZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6ZG93bmxvYWQoKQogICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBhZG9wdEdS
ZWYoR19PVVRQVVRfU1RSRUFNKG91dHB1dFN0cmVhbS5sZWFrUmVmKCkpKTsKIAogICAgIGF1dG8m
IGRvd25sb2FkTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKTsKLSAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4o
ZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9hZElELCB0aGlzLCBtX3Nlc3Npb24tPnNl
c3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICBhdXRvIGRvd25sb2FkID0gc3Rk
OjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9h
ZElELCAqdGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7
CiAgICAgYXV0byogZG93bmxvYWRQdHIgPSBkb3dubG9hZC5nZXQoKTsKICAgICBkb3dubG9hZE1h
bmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RG
TW92ZShkb3dubG9hZCkpOwogICAgIGRvd25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbiht
X3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKaW5kZXggYzhmYTFhMi4u
MGJmZTU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrRGF0YVRhc2tTb3VwLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTQyLDE0ICs0MiwxMyBAQCBwdWJsaWM6CiAK
ICAgICB+TmV0d29ya0RhdGFUYXNrU291cCgpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2Fu
Y2VsKCk7Ci0KIHByaXZhdGU6CiAgICAgTmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lv
biYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAK
ICAgICB2b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsKICAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRl
OwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2Fu
Y2VsKCkgb3ZlcnJpZGU7CiAgICAgTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBT
dHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVy
d3JpdGUqLykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKaW5kZXggYWM4Mjg3MC4uNTllZjkx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtMjYsMTAgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKIAotI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza1NvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDEw
ICs0Nyw0IEBAIFNvdXBTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvblNvdXA6OnNvdXBTZXNzaW9uKCkg
Y29uc3QKICAgICByZXR1cm4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNz
aW9uKCkuc291cFNlc3Npb24oKTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmludmFs
aWRhdGVBbmRDYW5jZWwoKQotewotICAgIGZvciAoYXV0byogdGFzayA6IG1fZGF0YVRhc2tTZXQp
Ci0gICAgICAgIHRhc2stPmludmFsaWRhdGVBbmRDYW5jZWwoKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAppbmRleCBkNzVmYjg4Li5jNWZjZmQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmgKQEAgLTI2LDE0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIHR5cGVkZWYgc3RydWN0
IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IE5ldHdvcmtEYXRhVGFza1NvdXA7Ci0KIGNsYXNzIE5ldHdvcmtTZXNzaW9uU291cCBmaW5hbCA6
IHB1YmxpYyBOZXR3b3JrU2Vzc2lvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3Jr
U2Vzc2lvbj4gY3JlYXRlKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC00NCwxNSAr
NDEsOCBAQCBwdWJsaWM6CiAKICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdDsK
IAotICAgIHZvaWQgcmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291cCYg
dGFzaykgeyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFzayk7IH0KLSAgICB2b2lkIHVucmVnaXN0ZXJO
ZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291cCYgdGFzaykgeyBtX2RhdGFUYXNrU2V0
LnJlbW92ZSgmdGFzayk7IH0KLQogcHJpdmF0ZToKICAgICBOZXR3b3JrU2Vzc2lvblNvdXAoV2Vi
Q29yZTo6U2Vzc2lvbklEKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJy
aWRlOwotCi0gICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4gbV9kYXRhVGFza1NldDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCA3ZDlhMDM2Li41NDZlNjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNiw4ICs2
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAKIAotICAgIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKLQogICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
NzU5NTlhMy4uODZjNTU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMzLDggKzMz
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKIAotICAgIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKLQogICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzhjZTFhLi5kMWYxYmU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDQzLDYgKzEwNDMsOCBAQAogCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyogTmV0d29ya0Rh
dGFUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovOyB9Owog
CQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTAxREJBRTZE
NzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKIAkJNTMyMTU5NTYxREJB
RTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyog
TmV0d29ya0RhdGFUYXNrQ29jb2EuaCAqLzsgfTsKKwkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFE
IC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RUI1NDYxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRh
VGFza0Jsb2IuY3BwICovOyB9OworCQk1M0JBNDdEMTFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29y
a0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCAq
LzsgfTsKIAkJNUMwNTJGMjYxQzZEM0JEMzAwNzZFOTE5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdl
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUMwNTJGMjQxQzZEM0FCNjAwNzZFOTE5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1t
ICovOyB9OwogCQk1QzE0MjZFQzFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUMxNDI2RTIxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcCAqLzsgfTsKIAkJNUMxNDI2RUQxQzIzRjgwOTAwRDQxMTgzIC8qIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFMzFDMjNGODA1MDBENDExODMgLyogTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKQEAgLTMxMzEsNiArMzEzMyw4IEBA
CiAJCTUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uQ29jb2EuaDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NTExREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtE
YXRhVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
RGF0YVRhc2suY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NTIxREJBRTZGQzAwNTRBQTNDIC8q
IE5ldHdvcmtTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IE5ldHdvcmtTZXNzaW9uLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM5RUI1NDYxREMyRUU0MDAwOUQ0
OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQmxvYi5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzlEMThCNzFDQ0ZFMzRCMDBCMTk3NEMgLyogUGhvdG9zU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBob3Rvc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzA1
MkYyNDFDNkQzQUI2MDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFn
ZXJDb2NvYS5tbTsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRpY2F0aW9uTWFu
YWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjZFMjFDMjNG
ODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ2NSw2ICs1
NDY5LDggQEAKIAkJCQk1Q0JDOUI4OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNr
LmggKi8sCiAJCQkJODM5OTAxRkYxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAq
LywKIAkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLywKKwkJ
CQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgKi8s
CisJCQkJNTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCAq
LywKIAkJCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCAq
LywKIAkJCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJz
LmggKi8sCiAJCQkJNTEwQ0M3REYxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzLmNw
cCAqLywKQEAgLTc4MjcsNiArNzgzMyw3IEBACiAJCQkJMUEwRUM2QzAxMjRCQkQ5QjAwN0VGNEE1
IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRUM3NUUx
MjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUEwNDNCNUUxMjRENUU5RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0JBNDdEMTFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29y
a0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwNDNEQzExMjRGRjg3NTAwRkZC
RkI1IC8qIFBsdWdpblByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFRkE3MTEyNTJCODQx
MDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0
QTlGMzMxMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1aXJrcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MzIwLDYgKzkzMjcsNyBAQAogCQkJCTFBMkQ5MjIxMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVn
aW5Qcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3
RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0Q2MjI3NzE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1M0JBNDdEMDFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNr
QmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODQ0RDE2QjUwODFDMDBBMjc4RkUgLyog
UGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTZGQjdBRTEx
RTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThD
OTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293337</attachid>
            <date>2016-10-30 01:11:38 -0700</date>
            <delta_ts>2016-11-01 04:05:09 -0700</delta_ts>
            <desc>Try to fix failing tests</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>84286</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMTZlNjZjLi4zMTZhYTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTAtMjkgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1hcmsgSFRUUFBhcnNlcnMuaCBh
bmQgQXN5bmNGaWxlU3RyZWFtLmggYXMgcHJpdmF0ZS4KKyAgICAgICAgKiBmaWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gQXN5bmNGaWxlU3RyZWFtIGNsYXNz
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaDogQWRkIFdFQkNPUkVfRVhQ
T1JUIHRvIGxlbmd0aCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aDogQWRkIFdFQkNPUkVfRVhQT1JUIHRvIHBhcnNlUmFuZ2UoKS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBz
ZXRIVFRQSGVhZGVyRmllbGQoKS4KKwogMjAxNi0xMC0yOSAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBbQ1NTIFBhcnNlcl0gQWRkIGZvbnQtdmFyaWFudC0qIGtleXdv
cmQgcHJvcGVydHkgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUxMzFjMzkuLmI4ODE3YWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNTMsNyAr
MjA1Myw3IEBACiAJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUIwQ0U5MjNB
MTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzEwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjVDMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VGM0NE
IC8qIEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjVEMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi87
IH07Ci0JCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAw
N0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IH07CisJCTUxNEM3NjczMENFOTIzQTEwMDdFRjND
RCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzQwQ0U5
MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8q
IFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3NTBDRTkyM0ExMDA3RUYz
Q0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MTRDNzY3ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjMwQ0U5MjNB
MTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKQEAgLTYxNjgsNyArNjE2OCw3
IEBACiAJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNCQjBFOENE
Q0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQlFMUNBQTVDNjBFOEJE
MjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICov
OyB9OwogCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTFGMTUw
MThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovOyB9OwotCQlFMUNERTkyMjE1
MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1MDE5MTY5MDA4NjJDQzUgLyogQXN5
bmNGaWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJ
RTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYy
Q0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFEMzFDREExOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5j
cHAgKi87IH07CiAJCUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZl
cmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RDMxQ0RCMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUUxQkYwMDExNUZG
NkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAvKiBX
aW5kb3dzS2V5Ym9hcmRDb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmls
ZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRl
eCAzNWU4NWE3Li5mODQ4YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3Ry
ZWFtLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZp
bGVTdHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSB7CitjbGFzcyBX
RUJDT1JFX0VYUE9SVCBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IEFz
eW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVhbSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggMWE3NzJmYy4u
Yjc4NTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTYtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNr
IGltcGxlbWVudGF0aW9uIGZvciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVtb3ZlIERvd25sb2FkU291cC5jcHAK
KwogMjAxNi0xMC0xOSAgR2Fib3IgS2VsZW1lbiAgPGtlbGVtZW5nQHVidW50dS5jb20+CiAKICAg
ICAgICAgW0dUS10gW0wxMG5dIFVwZGF0ZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggN2ZhMjgyNS4uYjY1ZmI4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmlu
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw3
ICsxLDYgQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFi
bGUgc3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCi0uLi8u
Li8uLi9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZp
Y29uRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRh
LmgKaW5kZXggYjFmY2Q5Yy4uOTMyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxvYkRhdGFG
aWxlUmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAKICAg
ICBsb25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBsb25n
IGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90
IGtub3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7
IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2Ni4uN2Y2YjQyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODEsNyArODEs
NyBAQCBBdG9taWNTdHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShj
b25zdCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9wdGlv
bnNIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUgb2Yg
dGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lm
aWVkLgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZz
ZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOwor
V0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYg
cmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhM
ZW5ndGgpOwogCiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3Np
dGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmgKaW5kZXggN2Q2ODk1MS4uZDg5NjYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtOTks
NyArOTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRU
UEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0g
ICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRUUEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFk
ZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRhM2IwLi40MmRkY2RiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dApAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29ya1Byb2Nlc3Nf
Q09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCisgICAg
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
ICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlN2Y5N2ZiLi4zNmJmMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0
IEBACisyMDE2LTEwLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBpbXBsZW1l
bnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBOZXR3b3JrRGF0YVRhc2tCbG9iIHRvIGhhbmRsZSBibG9icyB3aGVuIHVz
aW5nIE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgdXNpbmcgUmVzb3VyY2VIYW5kbGUuIFRoaXMg
cGF0Y2gKKyAgICAgICAgYWRkcyBtb3JlIFVTRShORVRXT1JLX1NFU1NJT04pIGlmZGVmcyB0byBu
b3QgdXNlIFJlc291cmNlSGFuZGxlIGluIERvd25sb2FkcyBhbmQgTmV0d29ya0xvYWQgd2hlbiBO
ZXR3b3JrU2Vzc2lvbgorICAgICAgICBpcyBlbmFibGVkLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25s
b2FkOjpEb3dubG9hZCk6IFNwbGl0IHRoZSBjb25zdHJ1Y3RvciBhZ2FpbiBhbmQgcmVtb3ZlIHRo
ZSBQbGF0Zm9ybURvd25sb2FkVGFza1JlZgorICAgICAgICBkZWZpbml0aW9ucy4gTm93IENvY29h
IHNwZWNpZmljIGNvbnN0cnVjdG9yIHJlY2VpdmVzIGEgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNr
IGFuZCB0aGUgZ2VuZXJhbCBjb25zdHJ1Y3RvcgorICAgICAgICByZXZlaWNlcyBhIE5ldHdvcmtE
YXRhVGFzayBhbmQgaXMgdXNlZCBieSBTb3VwIGJhY2tlbmQgYW5kIGJsb2JzLgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5l
dHdvcmtMb2FkKTogUmVuYW1lIGNhbmNlbE5ldHdvcmtMb2FkKCkgYXMgcGxhdGZvcm1DYW5jZWxO
ZXR3b3JrTG9hZCgpIHNpbmNlCisgICAgICAgIHRoaXMgaXMgbm93IHVzZWQgb25seSBieSBDb2Nv
YSBwbGF0Zm9ybSB0byBjYW5jZWwgdGhlIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzay4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN1Z2dl
c3RlZE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cmVxdWVzdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6IFJlbW92ZSBibG9icyBz
cGVjaWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlv
bik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5o
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9h
ZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3Vw
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOiBSZW1vdmUgYmxv
YnMgc3BlY2lmaWMgY29kZSB3aGVuCisgICAgICAgIHVzaW5nIE5ldHdvcmtTZXNzaW9uLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTogSWYgcmVxdWVzdCBpcyBhIGJsb2IsIGNyZWF0
ZSBhIE5ldHdvcmtEYXRhVGFza0Jsb2IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrLmg6IEFkZCBpbnZhbGlkYXRlQW5kQ2FuY2VsIHB1cmUgdmlydHVhbCBtZXRob2Qu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0YVRhc2tC
bG9iKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRh
VGFza0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0
cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3VtZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6c2Vlayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0Jsb2I6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpy
ZWFkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmlsZXMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2hEb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6TmV0d29y
a0xvYWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuIHVzaW5nIE5ldHdvcmtTZXNz
aW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrTG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xv
YWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlQXN5bmMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6IE1vdmVkIGZyb20gTmV0
d29ya1Nlc3Npb25Tb3VwLCBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGFsc28gYnkgYmxvYnMuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTog
RGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMg
bm90aGluZworICAgICAgICBiZWNhdXNlIGluIENvY29hIGFsbCB0YXNrcyBhcmUgaW52YWxpZGF0
ZWQgYW5kIGNhbmNlbCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IFJlbW92
ZSBEb3dubG9hZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMC0yOCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUGx1Z2luIHBy
b2Nlc3MgY3Jhc2hlcyBpbiBOUE5fSW52b2tlRGVmYXVsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50
LmNwcAppbmRleCA3MjFiNjRiLi5jMzA0Mzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNw
cApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2JE
b3dubG9hZENsaWVudC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWQuaCIKICNpbmNsdWRlICJXZWJF
cnJvcnMuaCIKQEAgLTk3LDMgKzk5LDUgQEAgdm9pZCBCbG9iRG93bmxvYWRDbGllbnQ6OmRpZEZh
aWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAogfQor
CisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmgK
aW5kZXggZGNiODg5ZC4uNGEzZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaApAQCAtMjUs
NiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQor
CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDMgKzU3
LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZC5jcHAKaW5kZXggNjQ5NDhlMi4uMDIzNzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC00NSwxMCArNDUs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi1Eb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2Vy
JiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9h
ZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgTmV0d29ya0Rh
dGFUYXNrJiBkb3dubG9hZCwgY29uc3QgU2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdl
cikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9kb3dubG9hZChkb3du
bG9hZCkKKyAgICAsIG1fZG93bmxvYWQoJmRvd25sb2FkKQogICAgICwgbV9zZXNzaW9uSUQoc2Vz
c2lvbklEKQogICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CkBAIC01Niw4
ICs1NiwyMCBAQCBEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1h
bmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdAogCiAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKIH0KLSNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQor
RG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3du
bG9hZElEIGRvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogZG93bmxvYWQsIGNv
bnN0IFNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCisg
ICAgOiBtX2Rvd25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCisgICAgLCBtX2Rvd25sb2Fk
SUQoZG93bmxvYWRJRCkKKyAgICAsIG1fZG93bmxvYWRUYXNrKGRvd25sb2FkKQorICAgICwgbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQorICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUp
Cit7CisgICAgQVNTRVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCisgICAgbV9kb3du
bG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsKK30KKyNlbmRpZgorI2Vsc2UKIERvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdl
cikKICAgICAsIG1fZG93bmxvYWRJRChkb3dubG9hZElEKQpAQCAtNjgsOSArODAsMTEgQEAgRG93
bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9h
ZElEIGRvd25sb2FkSUQsIGNvbnMKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURv
d25sb2FkKCk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxvYWQ6
On5Eb3dubG9hZCgpCiB7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1fcmVz
b3VyY2VIYW5kbGUpIHsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQoKTsK
ICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIgQEAg
RG93bmxvYWQ6On5Eb3dubG9hZCgpCiAgICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7CiAK
ICAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1hbmFn
ZXIuZGlkRGVzdHJveURvd25sb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
IHZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNCbG9iKCkpIHsKQEAgLTkyLDExICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFydCgp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3ICsx
MjAsMzkgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHJlc3BvbnNlKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bHNlCiAgICAgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7Ci0j
ZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQogeworI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCisgICAgaWYgKG1fZG93bmxvYWQpIHsKKyAgICAgICAgbV9kb3dubG9h
ZC0+Y2FuY2VsKCk7CisgICAgICAgIGRpZENhbmNlbCh7IH0pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2Vsc2UKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsK
ICAgICAgICAgYXV0byByZXNvdXJjZUhhbmRsZSA9IFdURk1vdmUobV9yZXNvdXJjZUhhbmRsZSk7
CiAgICAgICAgIHJlc291cmNlSGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8
QmxvYkRvd25sb2FkQ2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmRpZENhbmNlbCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhbmNlbE5ldHdvcmtMb2FkKCk7CisjZW5k
aWYKKyAgICBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdP
UktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QsIG1fc3VnZ2VzdGVkTmFtZSkp
OwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25s
b2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSgqdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwogfQotI2VuZGlmCiAKIHZvaWQg
RG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKIHsKQEAgLTE0NywxNiArMTYxLDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwogfQogCi12
b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgaWYg
KCFtX2hhc1JlY2VpdmVkRGF0YSkgewotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJk
aWRSZWNlaXZlRGF0YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1NjQgIiki
LCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKLSAgICAgICAgbV9oYXNSZWNlaXZlZERhdGEg
PSB0cnVlOwotICAgIH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJl
Y2VpdmVEYXRhKGxlbmd0aCkpOwotfQotCiBib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVTb3Vy
Y2VEYXRhT2ZNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGJvb2wgcmVz
dWx0OwpAQCAtMTY2LDggKzE3MCw2IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJj
ZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCiBTdHJpbmcgRG93bmxvYWQ6OmRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKQEAg
LTE4Miw4ICsxODQsNiBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsCiAgICAgcmV0dXJuIGRlc3Rp
bmF0aW9uOwogfQogCi0jZW5kaWYKLQogdm9pZCBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25X
aXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoZG93bmxvYWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFt
ZSkpOwpAQCAtMjA5LDE3ICsyMDksMzAgQEAgdm9pZCBEb3dubG9hZDo6Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKQogewogICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CiB9CisjZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkQ3JlYXRlRGVzdGlu
YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6OkRpZENyZWF0ZURlc3RpbmF0aW9uKHBhdGgpKTsKIH0KIAordm9pZCBEb3dubG9hZDo6
ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKQoreworICAgIGlmICghbV9oYXNSZWNlaXZl
ZERhdGEpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6
IFN0YXJ0ZWQgcmVjZWl2aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgp
LmRvd25sb2FkSUQoKSk7CisgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5n
dGgpKTsKK30KKwogdm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKIHsKICAgICBSRUxFQVNFX0xP
R19JRl9BTExPV0VEKCJkaWRGaW5pc2g6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQo
KS5kb3dubG9hZElEKCkpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgcGxhdGZv
cm1EaWRGaW5pc2goKTsKKyNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6RGlkRmluaXNoKCkpOwogCkBAIC0yNzcsNCArMjkwLDEwIEBAIGJvb2wgRG93bmxvYWQ6Omlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFQTEFURk9S
TShDT0NPQSkKK3ZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQorewor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBjM2ZiZjA5Li4yNWNi
YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuaApAQCAtNDAsMTIgKzQwLDYgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
I2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7
Ci10eXBlZGVmIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7Ci0jZWxpZiBVU0UoU09VUCkKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOwotfQotdHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWY7CiAjZW5kaWYKICNlbHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC03Myw2ICs2Nyw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRNYW5hZ2VyOworY2xhc3MgTmV0
d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQYWdlOwogCkBA
IC04MCwzOSArNzUsNDMgQEAgY2xhc3MgRG93bmxvYWQgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2Vu
ZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgRG93bmxv
YWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYs
IGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZEZpbGVuYW1lID0geyB9KTsKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3du
bG9hZElELCBOZXR3b3JrRGF0YVRhc2smLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTlNV
UkxTZXNzaW9uRG93bmxvYWRUYXNrKiwgY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOwogI2VuZGlmCisjZWxz
ZQogICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7
IH0pOworI2VuZGlmCiAKICAgICB+RG93bmxvYWQoKTsKIAorI2lmICFVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyNl
bmRpZgogICAgIHZvaWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0
YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwogCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29uc3Qg
eyByZXR1cm4gbV9kb3dubG9hZElEOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0ZWROYW1lOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAK
ICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc2V0U2FuZGJveEV4dGVuc2lvbihS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7IG1fc2FuZGJveEV4
dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNlCisgICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
ZXN0OyB9CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogICAgIHZvaWQgZGlk
U3RhcnQoKTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgp
OwogICAgIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIGRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGJvb2wmIGFsbG93T3ZlcndyaXRlKTsKLSNlbmRpZgogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRp
ZERlY2lkZURvd25sb2FkRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgs
IGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwog
ICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHBsYXRmb3Jt
RGlkRmluaXNoKCk7CisjZW5kaWYKICAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgp
OwogICAgIHZvaWQgZGlkRmluaXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwog
ICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEpOwogCkBAIC0xMjQsMzcgKzEyMywzNSBAQCBw
cml2YXRlOgogI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnROZXR3b3Jr
TG9hZCgpOwogICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0jZW5kaWYK
LSAgICB2b2lkIGNhbmNlbE5ldHdvcmtMb2FkKCk7Ci0KICAgICB2b2lkIHBsYXRmb3JtSW52YWxp
ZGF0ZSgpOworI2VuZGlmCisgICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAK
ICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93bmxv
YWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJ
RDsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogCiAgICAgUmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKIAogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lv
bkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsKLSNlbGlmIFVTRShTT1VQKQogICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0
YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZFRhc2s7CiAjZW5kaWYK
ICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAjZWxzZSAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3du
bG9hZDsKICAgICBSZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAj
ZW5kaWYKLSNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFVTRShDRlVSTENPTk5F
Q1RJT04pCiAgICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZW5k
aWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1f
ZG93bmxvYWRDbGllbnQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jl
c291cmNlSGFuZGxlOworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5n
IG1fc3VnZ2VzdGVkTmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCmluZGV4IGIyZmRmYWEuLmI0MDZkZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuY3BwCkBAIC00NywyMyArNDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3du
bG9hZE1hbmFnZXIoQ2xpZW50JiBjbGllbnQpCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnRE
b3dubG9hZChTZXNzaW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQog
ewogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNCbG9iKCkpIHsKLSAgICAgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJh
Y2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrU2Vz
c2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklEOwot
ICAgICAgICBwYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgICAgICBwYXJhbWV0ZXJz
LmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tD
bGllbnRGb3JDcmVkZW50aWFsczsKLSAgICAgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3du
bG9hZElELCBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0
ZXJzKSwgZG93bmxvYWRJRCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisgICAg
YXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKTsKKyAgICBpZiAoIW5ldHdvcmtTZXNzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFy
YW1ldGVycy5zZXNzaW9uSUQgPSBzZXNzaW9uSUQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0g
cmVxdWVzdDsKKyAgICBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRD
cmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFsczsKKyAgICBtX3BlbmRp
bmdEb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rvd25s
b2FkPihXVEZNb3ZlKHBhcmFtZXRlcnMpLCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24sIHN1
Z2dlc3RlZE5hbWUpKTsKKyNlbHNlCiAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlx
dWU8RG93bmxvYWQ+KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0LCBzdWdnZXN0ZWROYW1lKTsK
ICAgICBkb3dubG9hZC0+c3RhcnQoKTsKIAogICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFp
bnMoZG93bmxvYWRJRCkpOwogICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEZNb3Zl
KGRvd25sb2FkKSk7CisjZW5kaWYKIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCkBAIC05
OSw4ICs5Nyw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjp3aWxsRGVjaWRlUGVuZGluZ0Rvd25s
b2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3CiAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JEZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3RkOjpt
YWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNlbmRp
ZgotCisjZWxzZQogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2Fk
KERvd25sb2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKICAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMs
IGRvd25sb2FkSUQsIHJlcXVlc3QpOwpAQCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxvYWRN
YW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJl
c291cmNlSGFuCiAgICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7
CiAgICAgbV9kb3dubG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKIH0K
KyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6
Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRvd25s
b2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQogewpAQCAtMTM0
LDExICsxMzIsMTEgQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGlu
Z0Rvd25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCBkb3dubG8KIAogICAgICAgICBBU1NFUlQo
IW1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkp
OwogICAgICAgICBtX2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25EZWNpZGVkLnNldChkb3dubG9h
ZElELCBuZXR3b3JrRGF0YVRhc2spOwotICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCisj
ZWxzZQogICAgIGlmIChhdXRvKiB3YWl0aW5nRG93bmxvYWQgPSBkb3dubG9hZChkb3dubG9hZElE
KSkKICAgICAgICAgd2FpdGluZ0Rvd25sb2FkLT5kaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFNlc3Npb25J
RCwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3Vt
ZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDA3MWVhOWUu
LjkwNjNmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKQEAgLTgwLDggKzgwLDkgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CiAgICAgdm9pZCB3aWxsRGVjaWRlUGVuZGluZ0Rvd25s
b2FkRGVzdGluYXRpb24oTmV0d29ya0RhdGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxl
ciYmKTsKLSNlbmRpZgorI2Vsc2UKICAgICB2b2lkIGNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERv
d25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlmCiAg
ICAgdm9pZCBjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2Fk
SUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwg
Ym9vbCBhbGxvd092ZXJ3cml0ZSk7CiAKICAgICB2b2lkIHJlc3VtZURvd25sb2FkKFdlYkNvcmU6
OlNlc3Npb25JRCwgRG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2Nv
Y29hL0Rvd25sb2FkQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQppbmRleCBkMzIwOWFkLi44NjhlMTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93
bmxvYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQpAQCAtMzgsMTAgKzM4LDEwIEBAIHZvaWQgRG93bmxv
YWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0
cmluZyYgcGF0aCwKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogICAgIAotdm9pZCBEb3dubG9h
ZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3
b3JrTG9hZCgpCiB7Ci0gICAgQVNTRVJUKG1fZG93bmxvYWQpOwotICAgIFttX2Rvd25sb2FkIGNh
bmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0YTogXihOU0RhdGEgKiBfTnVsbGFibGUgcmVzdW1lRGF0
YSkKKyAgICBBU1NFUlQobV9kb3dubG9hZFRhc2spOworICAgIFttX2Rvd25sb2FkVGFzayBjYW5j
ZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEp
CiAgICAgewogICAgICAgICBpZiAocmVzdW1lRGF0YSAmJiByZXN1bWVEYXRhLmJ5dGVzICYmIHJl
c3VtZURhdGEubGVuZ3RoKQogICAgICAgICAgICAgZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5j
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1bWVEYXRhLmJ5dGVzKSwgcmVz
dW1lRGF0YS5sZW5ndGgpKTsKQEAgLTUwLDE1ICs1MCw2IEBAIHZvaWQgRG93bmxvYWQ6OmNhbmNl
bE5ldHdvcmtMb2FkKCkKICAgICB9XTsKIH0KIAotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpw
bGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KaW5kZXggZjMzOGFiYy4uNTAyNGFkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3du
bG9hZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
aW9zL0Rvd25sb2FkSU9TLm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBEb3dubG9hZDo6c3Rh
cnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVz
b3VyY2UKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIH0KIAotdm9pZCBEb3dubG9hZDo6
Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3Jr
TG9hZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCmlu
ZGV4IGJiM2ZmMmIuLjk5ZTM4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJl
c3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwKICAgICBbbV9uc1VSTERvd25sb2FkIHNldERl
bGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOwogfQogCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3
b3JrTG9hZCgpCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKIHsK
ICAgICBbbV9uc1VSTERvd25sb2FkIGNhbmNlbF07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmU4YzVjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2Vs
TmV0d29ya0xvYWQoKQotewotICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAgIGRpZENhbmNl
bCh7IH0pOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQot
Ci12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDgzNGFlY2EuLjBl
NjNjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTIwNywxOCArMjA3LDE2
IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChTZXNzaW9uSUQKICAgICB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAg
IGxvYWRlci0+bmV0d29ya0xvYWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQs
IHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9h
ZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgbG9hZGVyLT5uZXR3b3Jr
TG9hZCgpLT5jb252ZXJ0VGFza1RvRG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9u
c2UpOworICAgIGxvYWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQoKTsKKyNlbHNlCiAgICAgbmV0
d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93
bmxvYWRJRCwgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9u
c2UpOwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVl
LgogICAgIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CiAKICAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZW5k
aWYKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRP
TShTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYg
dXJsLCBTdHJpbmcmIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2suY3BwCmluZGV4IDU0ZGE0ZmIuLmRiYjA2NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza0Jsb2IuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTQ0LDYgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIFJlZjxOZXR3b3JrRGF0YVRhc2s+IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQogeworICAgIGlmIChyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNCbG9iKCkpCisgICAgICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tCbG9i
OjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpOwor
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza0NvY29hOjpj
cmVhdGUoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxk
Q29udGVudFNuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2suaAppbmRleCA0ZGMxMjkwLi42ZGE0MWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaApAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOwogCiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAg
ICAgIFJ1bm5pbmcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFza0Jsb2IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIyMzI4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza0Jsb2IuaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiV2Vi
RXJyb3JzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Bc3luY0ZpbGVTdHJlYW0uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Jsb2JEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBs
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3RyZWFtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9I
VFRQSGVhZGVyTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gNTEyICogMTAyNDsKKworc3RhdGljIGNvbnN0
IGludCBodHRwT0sgPSAyMDA7CitzdGF0aWMgY29uc3QgaW50IGh0dHBQYXJ0aWFsQ29udGVudCA9
IDIwNjsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cE5vdEFsbG93ZWQgPSA0MDM7CitzdGF0aWMgY29u
c3QgaW50IGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDE2Oworc3RhdGljIGNv
bnN0IGludCBodHRwSW50ZXJuYWxFcnJvciA9IDUwMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRw
T0tUZXh0ID0gIk9LIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwUGFydGlhbENvbnRlbnRUZXh0
ID0gIlBhcnRpYWwgQ29udGVudCI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cE5vdEFsbG93ZWRU
ZXh0ID0gIk5vdCBBbGxvd2VkIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwUmVxdWVzdGVkUmFu
Z2VOb3RTYXRpc2ZpYWJsZVRleHQgPSAiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSI7
CitzdGF0aWMgY29uc3QgY2hhciogaHR0cEludGVybmFsRXJyb3JUZXh0ID0gIkludGVybmFsIFNl
cnZlciBFcnJvciI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB3ZWJLaXRCbG9iUmVzb3Vy
Y2VEb21haW4gPSAiV2ViS2l0QmxvYlJlc291cmNlIjsKKworTmV0d29ya0RhdGFUYXNrQmxvYjo6
TmV0d29ya0RhdGFUYXNrQmxvYihOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFU
YXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ29udGVu
dFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZikKKyAgICA6IE5ldHdvcmtEYXRhVGFz
ayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywg
ZmFsc2UpCisgICAgLCBtX2Jsb2JEYXRhKHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihi
bG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpKQorICAgICwg
bV9zdHJlYW0oc3RkOjptYWtlX3VuaXF1ZTxBc3luY0ZpbGVTdHJlYW0+KCp0aGlzKSkKK3sKKyAg
ICBtX3Nlc3Npb24tPnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKK30KKworTmV0d29y
a0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRhVGFza0Jsb2IoKQoreworICAgIGNsZWFyU3RyZWFt
KCk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0cmVhbSgpCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAg
IG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKyAgICB9
CisgICAgbV9zdHJlYW0gPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6
OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOworICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bm5pbmc7
CisKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpIHsKKyAgICAg
ICAgQVNTRVJUKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CisgICAg
ICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX2ZpcnN0UmVxdWVz
dC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAgICAgZGlkRmFpbChFcnJvcjo6TWV0
aG9kTm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGUgYmxvYiBkYXRhIGlzIG5vdCBmb3VuZCwgZmFpbCBub3cuCisgICAgICAgIGlm
ICghbV9ibG9iRGF0YSkgeworICAgICAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90Rm91bmRFcnJv
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXJzZSB0
aGUgIlJhbmdlIiBoZWFkZXIgd2UgY2FyZSBhYm91dC4KKyAgICAgICAgU3RyaW5nIHJhbmdlID0g
bV9maXJzdFJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpSYW5nZSk7Cisg
ICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJzZVJhbmdlKHJhbmdlLCBtX3Jhbmdl
T2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3JhbmdlU3VmZml4TGVuZ3RoKSkgeworICAgICAgICAgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9yOjpSYW5nZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGdldFNpemVGb3JOZXh0KCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VzcGVuZCgpCit7CisgICAgLy8gRklYTUU6IGNh
biB0aGlzIGhhcHBlbj8KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNh
bmNlbGluZzsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9maWxlT3BlbmVk
ID0gZmFsc2U7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgIH0KKworICAgIGlmIChp
c0Rvd25sb2FkKCkpCisgICAgICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza0Jsb2I6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgp
OworICAgIGNsZWFyU3RyZWFtKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0
U2l6ZUZvck5leHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBE
byB3ZSBmaW5pc2ggdmFsaWRhdGluZyBhbmQgY291bnRpbmcgc2l6ZSBmb3IgYWxsIGl0ZW1zPwor
ICAgIGlmIChtX3NpemVJdGVtQ291bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkpIHsK
KyAgICAgICAgc2VlaygpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRh
dGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRhdGE6CisgICAgICAgIGRpZEdldFNp
emUoaXRlbS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxvYkRhdGFJdGVt
OjpUeXBlOjpGaWxlOgorICAgICAgICAvLyBGaWxlcyBrbm93IHRoZWlyIHNpemVzLCBidXQgYXNr
aW5nIHRoZSBzdHJlYW0gdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgd2Fzbid0IG1vZGlmaWVkLgor
ICAgICAgICBtX3N0cmVhbS0+Z2V0U2l6ZShpdGVtLmZpbGUoKS0+cGF0aCgpLCBpdGVtLmZpbGUo
KS0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGlu
ZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3du
bG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSWYgdGhlIHNpemUgaXMgLTEsIGl0IG1lYW5zIHRoZSBmaWxlIGhhcyBiZWVu
IG1vdmVkIG9yIGNoYW5nZWQuIEZhaWwgbm93LgorICAgIGlmIChzaXplID09IC0xKSB7CisgICAg
ICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gVGhlIHNpemUgcGFzc2VkIGJhY2sgaXMgdGhlIHNpemUgb2YgdGhlIHdob2xl
IGZpbGUuIElmIHRoZSB1bmRlcmx5aW5nIGl0ZW0gaXMgYSBzbGljZWQgZmlsZSwgd2UgbmVlZCB0
byB1c2UgdGhlIHNsaWNlIGxlbmd0aC4KKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBt
X2Jsb2JEYXRhLT5pdGVtcygpLmF0KG1fc2l6ZUl0ZW1Db3VudCk7CisgICAgc2l6ZSA9IGl0ZW0u
bGVuZ3RoKCk7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0ZW1MZW5ndGhMaXN0
LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAgIG1fdG90YWxTaXpl
ICs9IHNpemU7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgKz0gc2l6ZTsKKyAgICBtX3NpemVJ
dGVtQ291bnQrKzsKKworICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG5leHQgaXRlbS4KKyAgICBn
ZXRTaXplRm9yTmV4dCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnNlZWsoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gdGhl
IHN1ZmZpeCBsZW5ndGggdG8gdGhlIHJhbmdlLgorICAgIGlmIChtX3JhbmdlU3VmZml4TGVuZ3Ro
ICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkgeworICAgICAgICBtX3JhbmdlT2Zmc2V0ID0gbV90
b3RhbFJlbWFpbmluZ1NpemUgLSBtX3JhbmdlU3VmZml4TGVuZ3RoOworICAgICAgICBtX3Jhbmdl
RW5kID0gbV9yYW5nZU9mZnNldCArIG1fcmFuZ2VTdWZmaXhMZW5ndGggLSAxOworICAgIH0KKwor
ICAgIC8vIEJhaWwgb3V0IGlmIHRoZSByYW5nZSBpcyBub3QgcHJvdmlkZWQuCisgICAgaWYgKG1f
cmFuZ2VPZmZzZXQgPT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2Uu
CisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9yIChtX3JlYWRJ
dGVtQ291bnQgPSAwOyBtX3JlYWRJdGVtQ291bnQgPCBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUo
KSAmJiBvZmZzZXQgPj0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdOyArK21fcmVh
ZEl0ZW1Db3VudCkKKyAgICAgICAgb2Zmc2V0IC09IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRl
bUNvdW50XTsKKworICAgIC8vIFNldCB0aGUgb2Zmc2V0IHRoYXQgbmVlZCB0byBqdW1wIHRvIGZv
ciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmFuZ2UuCisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXpl
ID0gb2Zmc2V0OworCisgICAgLy8gQWRqdXN0IHRoZSB0b3RhbCByZW1haW5pbmcgc2l6ZSBpbiBv
cmRlciBub3QgdG8gZ28gYmV5b25kIHRoZSByYW5nZS4KKyAgICBpZiAobV9yYW5nZUVuZCAhPSBr
UG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbG9uZyBsb25nIHJhbmdlU2l6ZSA9IG1f
cmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsgMTsKKyAgICAgICAgaWYgKG1fdG90YWxSZW1haW5p
bmdTaXplID4gcmFuZ2VTaXplKQorICAgICAgICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgPSBy
YW5nZVNpemU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09IG1f
cmFuZ2VPZmZzZXQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxvYj4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShtX2Zp
cnN0UmVxdWVzdC51cmwoKSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9yID8gInRleHQvcGxh
aW4iIDogbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vy
cm9yID8gMCA6IG1fdG90YWxSZW1haW5pbmdTaXplLCBTdHJpbmcoKSk7CisgICAgc3dpdGNoIChl
cnJvckNvZGUpIHsKKyAgICBjYXNlIEVycm9yOjpOb0Vycm9yOiB7CisgICAgICAgIGJvb2wgaXNS
YW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZDsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaXNSYW5nZVJlcXVlc3QgPyBodHRwUGFy
dGlhbENvbnRlbnQgOiBodHRwT0spOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4
dChpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudFRleHQgOiBodHRwT0tUZXh0KTsK
KworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNv
bnRlbnRUeXBlLCBtX2Jsb2JEYXRhLT5jb250ZW50VHlwZSgpKTsKKyAgICAgICAgcmVzcG9uc2Uu
c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoLCBTdHJpbmc6
Om51bWJlcihtX3RvdGFsUmVtYWluaW5nU2l6ZSkpOworCisgICAgICAgIGlmIChpc1JhbmdlUmVx
dWVzdCkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFJhbmdlLCBQYXJzZWRDb250ZW50UmFuZ2UobV9yYW5nZU9mZnNldCwgbV9y
YW5nZUVuZCwgbV90b3RhbFNpemUpLmhlYWRlclZhbHVlKCkpOworICAgICAgICAvLyBGSVhNRTog
SWYgYSByZXNvdXJjZSBpZGVudGlmaWVkIHdpdGggYSBibG9iOiBVUkwgaXMgYSBGaWxlIG9iamVj
dCwgdXNlciBhZ2VudHMgbXVzdCB1c2UgdGhhdCBmaWxlJ3MgbmFtZSBhdHRyaWJ1dGUsCisgICAg
ICAgIC8vIGFzIGlmIHRoZSByZXNwb25zZSBoYWQgYSBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRl
ciB3aXRoIHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgc2V0IHRvIHRoZSBGaWxlJ3MgbmFtZSBhdHRy
aWJ1dGUuCisgICAgICAgIC8vIE5vdGFibHksIHRoaXMgd2lsbCBhZmZlY3QgYSBuYW1lIHN1Z2dl
c3RlZCBpbiAiRmlsZSBTYXZlIEFzIi4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
RXJyb3I6OlJhbmdlRXJyb3I6CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0
dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c1RleHQoaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFcnJvcjo6U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cE5vdEFsbG93ZWQpOworICAgICAgICByZXNwb25zZS5z
ZXRIVFRQU3RhdHVzVGV4dChodHRwTm90QWxsb3dlZFRleHQpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwSW50ZXJu
YWxFcnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGh0dHBJbnRlcm5h
bEVycm9yVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBlcnJvckNvZGVdKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFy
U3RyZWFtKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9yKSB7CisgICAgICAgICAgICBkaWRGaW5pc2goKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAocG9saWN5
QWN0aW9uKSB7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xpY3lVc2U6CisgICAgICAg
ICAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7CisgICAgICAgICAgICByZWFkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeUlnbm9y
ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5
RG93bmxvYWQ6CisgICAgICAgICAgICBkb3dubG9hZCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8g
bW9yZSByZW1haW5pbmcgZGF0YSB0byByZWFkLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoIW1fdG90
YWxSZW1haW5pbmdTaXplIHx8IG1fcmVhZEl0ZW1Db3VudCA+PSBtX2Jsb2JEYXRhLT5pdGVtcygp
LnNpemUoKSkgeworICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQo
bV9yZWFkSXRlbUNvdW50KTsKKyAgICBpZiAoaXRlbS50eXBlKCkgPT0gQmxvYkRhdGFJdGVtOjpU
eXBlOjpEYXRhKQorICAgICAgICByZWFkRGF0YShpdGVtKTsKKyAgICBlbHNlIGlmIChpdGVtLnR5
cGUoKSA9PSBCbG9iRGF0YUl0ZW06OlR5cGU6OkZpbGUpCisgICAgICAgIHJlYWRGaWxlKGl0ZW0p
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6cmVhZERhdGEoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQorewor
ICAgIEFTU0VSVChpdGVtLmRhdGEoKS5kYXRhKCkpOworCisgICAgbG9uZyBsb25nIGJ5dGVzVG9S
ZWFkID0gaXRlbS5sZW5ndGgoKSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0
ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBt
X3RvdGFsUmVtYWluaW5nU2l6ZTsKKyAgICBjb25zdW1lRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpdGVtLmRhdGEoKS5kYXRhKCktPmRhdGEoKSkgKyBpdGVtLm9mZnNldCgpICsg
bV9jdXJyZW50SXRlbVJlYWRTaXplLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzVG9SZWFkKSk7Cisg
ICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpyZWFkRmlsZShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKyAgICBBU1NFUlQobV9zdHJlYW0pOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkg
eworICAgICAgICBtX3N0cmVhbS0+cmVhZChtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQg
PSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF0gLSBtX2N1cnJlbnRJdGVtUmVhZFNp
emU7CisgICAgaWYgKGJ5dGVzVG9SZWFkID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAg
IGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8aW50PihtX3RvdGFsUmVtYWluaW5nU2l6ZSk7Cisg
ICAgbV9zdHJlYW0tPm9wZW5Gb3JSZWFkKGl0ZW0uZmlsZSgpLT5wYXRoKCksIGl0ZW0ub2Zmc2V0
KCkgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIGJ5dGVzVG9SZWFkKTsKKyAgICBtX2ZpbGVPcGVu
ZWQgPSB0cnVlOworICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbihib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
KCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGRp
ZEZhaWwoRXJyb3I6Ok5vdFJlYWRhYmxlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAg
IHJlYWQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWFkKGludCBieXRl
c1JlYWQpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgewor
ICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGJ5dGVzUmVhZCA8IDApIHsKKyAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90UmVhZGFibGVFcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxv
Yj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgY29uc3VtZURhdGEobV9idWZmZXIuZGF0YSgp
LCBieXRlc1JlYWQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNvbnN1bWVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgbV90b3RhbFJlbWFpbmlu
Z1NpemUgLT0gYnl0ZXNSZWFkOworCisgICAgaWYgKGJ5dGVzUmVhZCkgeworICAgICAgICBpZiAo
bV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICAg
ICAgaWYgKCF3cml0ZURvd25sb2FkKGRhdGEsIGJ5dGVzUmVhZCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0
ZShkYXRhLCBieXRlc1JlYWQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2ZpbGVP
cGVuZWQpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVudCBpdGVtIGlzIGEgZmlsZSBpdGVt
LCB0aGUgcmVhZGluZyBpcyBjb21wbGV0ZWQgb25seSBpZiBieXRlc1JlYWQgaXMgMC4KKyAgICAg
ICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAgICAgICAgIC8vIENsb3NlIHRoZSBmaWxlLgorICAg
ICAgICAgICAgbV9maWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgICAgICBtX3N0cmVhbS0+Y2xv
c2UoKTsKKworICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICAgICAg
ICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBPdGhlcndpc2UsIHdlIHJlYWQgdGhlIGN1cnJlbnQgdGV4dCBpdGVtIGFzIGEgd2hvbGUgYW5k
IG1vdmUgdG8gdGhlIG5leHQgaXRlbS4KKyAgICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAg
fQorCisgICAgcmVhZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRp
bmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3
cml0ZSkKK3sKKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KGZpbGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CisgICAg
aWYgKGFsbG93T3ZlcndyaXRlICYmIGZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlv
bikpCisgICAgICAgIGRlbGV0ZUZpbGUobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7Cit9CisK
K1N0cmluZyBOZXR3b3JrRGF0YVRhc2tCbG9iOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3N1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bmtub3du
Iik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZG93bmxvYWQoKQoreworICAgIEFT
U0VSVChpc0Rvd25sb2FkKCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9u
KTsKKworICAgIG1fZG93bmxvYWRGaWxlID0gb3BlbkZpbGUobV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbiwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAobV9kb3dubG9hZEZpbGUgPT0gaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQoY2FuY2VsbGVkRXJy
b3IobV9maXJzdFJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8m
IGRvd25sb2FkTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKTsKKyAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4o
ZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9hZElELCAqdGhpcywgbV9zZXNzaW9uLT5z
ZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93bmxvYWRQdHIg
PSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3du
bG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGRv
d25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9u
KTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJlY29tZURvd25s
b2FkKCk7CisKKyAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7CisgICAgcmVhZCgpOwor
fQorCitib29sIE5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQoaXNEb3dubG9hZCgpKTsKKyAgICBp
bnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUobV9kb3dubG9hZEZpbGUsIGRhdGEsIGJ5dGVz
UmVhZCk7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBkaWRGYWlsRG93
bmxvYWQoY2FuY2VsbGVkRXJyb3IobV9maXJzdFJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4gPT0gYnl0ZXNSZWFkKTsKKyAg
ICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICBBU1NFUlQoZG93bmxv
YWQpOworICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4pOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNsZWFuRG93bmxvYWRG
aWxlcygpCit7CisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUpIHsKKyAgICAgICAgY2xvc2VGaWxlKG1fZG93bmxvYWRGaWxlKTsKKyAgICAgICAgbV9k
b3dubG9hZEZpbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIH0KKyAgICBkZWxl
dGVGaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBjbGVhclN0cmVhbSgpOworICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworCisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3Ip
OworICAgIGVsc2UgeworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElE
KTsKKyAgICAgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwo
ZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrQmxvYjo6ZGlkRmluaXNoRG93bmxvYWQoKQoreworICAgIEFTU0VSVChpc0Rvd25sb2Fk
KCkpOworICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAgbV9kb3dubG9hZEZpbGUg
PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBh
dXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFn
ZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICBBU1NFUlQoZG93bmxvYWQp
OworICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpkaWRGYWlsKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNr
QmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgaWYgKGlzRG93bmxvYWQoKSkgeworICAg
ICAgICBkaWRGYWlsRG93bmxvYWQoUmVzb3VyY2VFcnJvcih3ZWJLaXRCbG9iUmVzb3VyY2VEb21h
aW4sIHN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSwgbV9maXJzdFJlcXVlc3QudXJsKCksIFN0
cmluZygpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjbGVhclN0cmVhbSgpOwor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9y
KFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCgpCit7CisgICAgaWYgKG1fZG93bmxvYWRG
aWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmluaXNoRG93
bmxvYWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsZWFyU3RyZWFtKCk7Cisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3Io
eyB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrQmxvYi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrQmxvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTUy
YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2tCbG9iLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwor
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN0cmVh
bUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBBc3luY0ZpbGVTdHJlYW07CitjbGFzcyBCbG9iRGF0YTsKK2NsYXNz
IEJsb2JEYXRhSXRlbTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtE
YXRhVGFza0Jsb2IgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrLCBwdWJsaWMgV2ViQ29y
ZTo6RmlsZVN0cmVhbUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0
YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xp
ZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza0Jsb2Ioc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpKTsKKyAgICB9CisKKyAgICB+TmV0
d29ya0RhdGFUYXNrQmxvYigpOworCitwcml2YXRlOgorICAgIE5ldHdvcmtEYXRhVGFza0Jsb2Io
TmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kpOworCisgICAg
dm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgp
IG92ZXJyaWRlOworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJv
b2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc3VnZ2VzdGVkRmls
ZW5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEZpbGVTdHJlYW1DbGllbnQgbWV0aG9k
cy4KKyAgICB2b2lkIGRpZEdldFNpemUobG9uZyBsb25nKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZE9wZW4oYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWFkKGludCkgb3ZlcnJpZGU7CisK
KyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTm9FcnJvciA9IDAsCisgICAgICAgIE5v
dEZvdW5kRXJyb3IgPSAxLAorICAgICAgICBTZWN1cml0eUVycm9yID0gMiwKKyAgICAgICAgUmFu
Z2VFcnJvciA9IDMsCisgICAgICAgIE5vdFJlYWRhYmxlRXJyb3IgPSA0LAorICAgICAgICBNZXRo
b2ROb3RBbGxvd2VkID0gNQorICAgIH07CisKKyAgICB2b2lkIGNsZWFyU3RyZWFtKCk7CisgICAg
dm9pZCBnZXRTaXplRm9yTmV4dCgpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9y
ID0gRXJyb3I6Ok5vRXJyb3IpOworICAgIHZvaWQgc2VlaygpOworICAgIHZvaWQgY29uc3VtZURh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCk7CisgICAgdm9pZCByZWFkKCk7Cisg
ICAgdm9pZCByZWFkRGF0YShjb25zdCBXZWJDb3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lk
IHJlYWRGaWxlKGNvbnN0IFdlYkNvcmU6OkJsb2JEYXRhSXRlbSYpOworICAgIHZvaWQgZG93bmxv
YWQoKTsKKyAgICBib29sIHdyaXRlRG93bmxvYWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVz
UmVhZCk7CisgICAgdm9pZCBjbGVhbkRvd25sb2FkRmlsZXMoKTsKKyAgICB2b2lkIGRpZEZhaWxE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBkaWRGaW5p
c2hEb3dubG9hZCgpOworICAgIHZvaWQgZGlkRmFpbChFcnJvcik7CisgICAgdm9pZCBkaWRGaW5p
c2goKTsKKworICAgIGVudW0geyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgPSAtMSB9OworCisgICAg
UmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiBtX2Jsb2JEYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW0+IG1fc3RyZWFtOyAvLyBGb3IgYXN5bmNocm9ub3Vz
IGxvYWRpbmcuCisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOworICAgIFZlY3Rvcjxsb25nIGxv
bmc+IG1faXRlbUxlbmd0aExpc3Q7CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5k
ZWQgfTsKKyAgICBsb25nIGxvbmcgbV9yYW5nZU9mZnNldCB7IGtQb3NpdGlvbk5vdFNwZWNpZmll
ZCB9OworICAgIGxvbmcgbG9uZyBtX3JhbmdlRW5kIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07
CisgICAgbG9uZyBsb25nIG1fcmFuZ2VTdWZmaXhMZW5ndGggeyBrUG9zaXRpb25Ob3RTcGVjaWZp
ZWQgfTsKKyAgICBsb25nIGxvbmcgbV90b3RhbFNpemUgeyAwIH07CisgICAgbG9uZyBsb25nIG1f
dG90YWxSZW1haW5pbmdTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX2N1cnJlbnRJdGVtUmVh
ZFNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9zaXplSXRlbUNvdW50IHsgMCB9OworICAgIHVu
c2lnbmVkIG1fcmVhZEl0ZW1Db3VudCB7IDAgfTsKKyAgICBib29sIG1fZmlsZU9wZW5lZCB7IGZh
bHNlIH07CisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZG93bmxvYWRGaWxlIHsg
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IDkwMzE1NjIuLmJjNGM0
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAK
QEAgLTY3LDEwICs2Nyw2IEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENs
aWVudCYgY2xpZW50LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFt
ZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpCiB7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5yZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlKG51bGxwdHIsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMuZGVm
ZXJzTG9hZGluZywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNv
bnRlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIG1fdGFzayA9IE5ldHdvcmtEYXRh
VGFzazo6Y3JlYXRlKG5ldHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzLnJlcXVlc3Qs
IG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBtX3BhcmFtZXRlcnMuY29udGVu
dFNuaWZmaW5nUG9saWN5LCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCk7CiAgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAg
ICAgICAgbV90YXNrLT5yZXN1bWUoKTsKQEAgLTEwMSwxMiArOTcsMTQgQEAgTmV0d29ya0xvYWQ6
On5OZXR3b3JrTG9hZCgpCiAjZW5kaWYKICAgICBpZiAobV90YXNrKQogICAgICAgICBtX3Rhc2st
PmNsZWFyQ2xpZW50KCk7Ci0jZWxpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQorI2Vsc2UKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIGlm
IChtX2hhbmRsZSAmJiBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwogI2VuZGlmCiAgICAgaWYgKG1faGFuZGxl
KQogICAgICAgICBtX2hhbmRsZS0+Y2xlYXJDbGllbnQoKTsKKyNlbmRpZgogfQogCiB2b2lkIE5l
dHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTE4LDkgKzExNiwx
MCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwogICAgIH0KLSNlbmRpZgor
I2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVycyk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKQEAg
LTEyOCw5ICsxMjcsMTAgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQogICAgIGlmIChtX3Rhc2spCiAgICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7
Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y2Fu
Y2VsKCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKQEAgLTE0MywyNyAr
MTQzLDIxIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpCiAjZW5kaWYKIAogI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCi0gICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpl
eGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOyAgICAKKyAgICBh
dXRvIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7CisgICAgaWYgKG1fY3VycmVudFJlcXVlc3QuaXNO
dWxsKCkpCisgICAgICAgIGRpZENvbXBsZXRlV2l0aEVycm9yKGNhbmNlbGxlZEVycm9yKG1fY3Vy
cmVudFJlcXVlc3QpKTsKICAgICBBU1NFUlQocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcik7Ci0j
ZW5kaWYKLSAgICAKKyAgICBpZiAocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAg
cmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcihtX2N1cnJlbnRSZXF1ZXN0KTsKKyNlbHNlCiAgICAg
aWYgKG1fY3VycmVudFJlcXVlc3QuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1faGFuZGxlKQog
ICAgICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRGYWlsKG1faGFuZGxl
LmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci0jaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKLSAgICAgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpCi0gICAg
ICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0jZW5kaWYKLSAgICAgICAg
cmV0dXJuOwogICAgIH0gZWxzZSBpZiAobV9oYW5kbGUpIHsKICAgICAgICAgYXV0byBjdXJyZW50
UmVxdWVzdENvcHkgPSBtX2N1cnJlbnRSZXF1ZXN0OwogICAgICAgICBtX2hhbmRsZS0+Y29udGlu
dWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShjdXJyZW50UmVxdWVzdENvcHkpKTsKICAgICB9Ci0K
LSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25IYW5k
bGVyKQotICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKG1fY3VycmVudFJlcXVlc3Qp
OwogI2VuZGlmCiB9CiAKQEAgLTE3MSwxMiArMTY1LDEzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
ICAgIGlmIChtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgbV9yZXNwb25z
ZUNvbXBsZXRpb25IYW5kbGVyKFBvbGljeVVzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VDb21wbGV0
aW9uSGFuZGxlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gcmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KTsKKyAgICAgICAgcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIH0K
LSNlbmRpZgorI2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jb250
aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworI2VuZGlmCiB9CiAKIE5ldHdvcmtMb2FkQ2xpZW50
OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrTG9hZDo6c2hhcmVkRGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkKQEAgLTI4NSw2ICsy
ODAsMjMgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGMKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJh
bWVJRCwgKm1fY2hhbGxlbmdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKKyNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9pZCBOZXR3b3JrTG9hZDo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0
KQoreworICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX2NoYWxsZW5nZUNvbXBsZXRpb25I
YW5kbGVyLCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAobV90YXNr
ICYmIG1fdGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCgqbV9jaGFs
bGVuZ2UpKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKCpt
X2NoYWxsZW5nZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3Bh
Y2UsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb21wbGV0ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyNlbmRpZgor
CiB2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNv
dXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMzYyLDgg
KzM3NCw4IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwoKQogewogICAgIG1fY2xp
ZW50LmRpZEZhaWxMb2FkaW5nKGNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7
CiB9Ci0gICAgCi0jZW5kaWYKKworI2Vsc2UKIAogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXNwb25zZSYm
IHJlY2VpdmVkUmVzcG9uc2UpCiB7CkBAIC00MTgsMzIgKzQzMCwxMyBAQCB2b2lkIE5ldHdvcmtM
b2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VI
YW5kbGUqIGhhbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVVTRShORVRXT1JLX1NF
U1NJT04pCiAgICAgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlID0gdHJ1ZTsKLSNlbmRpZgogICAgIG1fY2xpZW50LmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhwcm90ZWN0aW9uU3BhY2UpOwogfQotI2VuZGlm
CiAKLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBOZXR3b3Jr
TG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wg
cmVzdWx0KQogewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghbV9oYW5kbGUsICJCbG9icyBzaG91bGQgbmV2ZXIgZ2l2ZSBhdXRoZW50aWNhdGlvbiBj
aGFsbGVuZ2VzIik7Ci0gICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwot
ICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fY2hhbGxlbmdlQ29t
cGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlm
IChtX3Rhc2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KCptX2NoYWxsZW5nZSkpCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2ZXJUcnVzdENyZWRl
bnRpYWwoKm1fY2hhbGxlbmdlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3Rl
Y3Rpb25TcGFjZSwgeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbXBsZXRl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotI2Vs
c2UKICAgICBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UgPSBmYWxzZTsKLSNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9o
YW5kbGUtPmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1
bHQpOwogfQpAQCAtNTE1LDUgKzUwOCw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6OnJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0CiAgICAg
bV9oYW5kbGUtPmNhbmNlbCgpOwogICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxl
ZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNT
SU9OKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDI3ZDQzMTcuLjNmNjEzMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtNDAsOSArNDAsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtMb2FkIGZpbmFsIDogcHJpdmF0ZSBX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudAorY2xhc3MgTmV0d29ya0xvYWQgZmluYWwgOgog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0Ns
aWVudAorICAgIHByaXZhdGUgTmV0d29ya0RhdGFUYXNrQ2xpZW50CisjZWxzZQorICAgIHByaXZh
dGUgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKICNlbmRpZgogewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksNyArNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
dWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFBlbmRpbmdEb3du
bG9hZChQZW5kaW5nRG93bmxvYWQmKTsKICAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElE
KCkgeyByZXR1cm4gbV90YXNrLT5wZW5kaW5nRG93bmxvYWRJRCgpOyB9Ci0jZW5kaWYKKyNlbHNl
CisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFuZGxlLmdldCgpOyB9CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQogICAgIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikg
b3ZlcnJpZGU7CkBAIC04NSwxNyArODgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbENhY2hl
UmVzcG9uc2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9u
c2UgKikgb3ZlcnJpZGU7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NF
U1NJT04pCiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZv
aWQgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwog
I2VuZGlmCiAKLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBOZXR3b3JrTG9hZENsaWVu
dDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3Bv
bnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9pZCBzaGFyZWRXaWxsU2Vu
ZFJlZGlyZWN0ZWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiYpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgLy8g
UmVzb3VyY2VIYW5kbGVDbGllbnQKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlKSBmaW5hbDsKICAgICB2b2lkIGRp
ZFNlbmREYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgZmluYWw7CkBA
IC0xMTEsOCArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9u
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKSBmaW5hbDsKICAgICBib29sIHVzZXNBc3luY0NhbGxiYWNrcygpIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KICAgICBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIGZpbmFsIHsg
cmV0dXJuIG1fY2xpZW50LmlzU3luY2hyb25vdXMoKTsgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKKyNlbHNlCiAgICAgLy8gTmV0d29ya0RhdGFUYXNrQ2xpZW50CiAgICAgdm9pZCB3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwpAQCAt
MTQ2LDggKzE0OCw4IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV93YWl0aW5nRm9yQ29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAg
ICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0j
ZW5kaWYKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2Vu
ZGlmCiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8g
VXBkYXRlZCBvbiByZWRpcmVjdHMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IDFmODE4MTkuLjFlNWUwMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3
b3JrRGF0YVRhc2suaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTgxLDYgKzgyLDEyIEBAIE5ldHdv
cmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQogewogfQogCit2b2lkIE5ldHdvcmtTZXNzaW9u
OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFU
YXNrU2V0KQorICAgICAgICB0YXNrLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IDk5ZDA5
ODEuLmQ1YjAxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAK
ICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTM4LDYgKzM5LDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtEYXRh
VGFzazsKIAogY2xhc3MgTmV0d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3Jr
U2Vzc2lvbj4gewogcHVibGljOgpAQCAtNDUsMTYgKzQ3LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CiAgICAgdmlydHVhbCB+TmV0d29y
a1Nlc3Npb24oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQ3JlZGVudGlhbHMoKSB7IH07CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KICAgICBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCisgICAg
dm9pZCByZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smIHRhc2spIHsgbV9k
YXRhVGFza1NldC5hZGQoJnRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtEYXRhVGFzayYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7
IH0KKwogcHJvdGVjdGVkOgogICAgIE5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7
CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisKKyAgICBIYXNoU2V0PE5l
dHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtEYXRhVGFza0NvY29hLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oCmluZGV4IDBhOGVkYmIuLjYzNDJlMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3VtZSgp
IG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlIHsgfQog
ICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtM
b2FkTWFjLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2Fk
TWFjLm1tCmluZGV4IDE1ZmJiNmQuLjY0NzU1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KQEAgLTI2LDYgKzI2LDggQEAK
ICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTmV0d29ya0xvYWQuaCIKIAorI2lmICFVU0Uo
TkVUV09SS19TRVNTSU9OKQorCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogCkBAIC01NCwzICs1Niw1IEBAIHZvaWQg
TmV0d29ya0xvYWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgTlNDYWNoZWRVUkxSZXNwCiAjZW5kaWYgLy8gIVVTRShDRlVSTENPTk5FQ1RJT04pCiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRh
VGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
RGF0YVRhc2tTb3VwLmNwcAppbmRleCAxNzYzNjUyLi4xZTllZTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291
cC5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFU
YXNrU291cChOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXMKICAgICAsIG1f
c2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAsIG1fdGltZW91dFNv
dXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2tTb3VwOjp0aW1lb3V0
RmlyZWQpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9u
LmdldCgpKS5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CisgICAgbV9zZXNzaW9uLT5y
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiAgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVy
ZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47CiAKQEAgLTgwLDcgKzgwLDcgQEAg
TmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYg
c2Vzc2lvbiwgTmV0d29ya0RhdGFUYXMKIE5ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0
YVRhc2tTb3VwKCkKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKLSAgICBzdGF0aWNfY2FzdDxOZXR3
b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRh
c2soKnRoaXMpOworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhp
cyk7CiB9CiAKIFN0cmluZyBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdWdnZXN0ZWRGaWxlbmFtZSgp
IGNvbnN0CkBAIC04NjMsNyArODYzLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3du
bG9hZCgpCiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX09VVFBVVF9T
VFJFQU0ob3V0cHV0U3RyZWFtLmxlYWtSZWYoKSkpOwogCiAgICAgYXV0byYgZG93bmxvYWRNYW5h
Z2VyID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwotICAg
IGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFn
ZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsIHRoaXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1
Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVl
PERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsICp0aGlzLCBt
X3Nlc3Npb24tPnNlc3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsKICAgICBhdXRvKiBk
b3dubG9hZFB0ciA9IGRvd25sb2FkLmdldCgpOwogICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFz
a0JlY2FtZURvd25sb2FkVGFzayhtX3BlbmRpbmdEb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2Fk
KSk7CiAgICAgZG93bmxvYWRQdHItPmRpZENyZWF0ZURlc3RpbmF0aW9uKG1fcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCBjOGZhMWEyLi4wYmZlNTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFz
a1NvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtE
YXRhVGFza1NvdXAuaApAQCAtNDIsMTQgKzQyLDEzIEBAIHB1YmxpYzoKIAogICAgIH5OZXR3b3Jr
RGF0YVRhc2tTb3VwKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLQogcHJp
dmF0ZToKICAgICBOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0Rh
dGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAgIHZvaWQgc3Vz
cGVuZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBy
ZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlk
ZTsKICAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmNwcAppbmRleCBhYzgyODcwLi41OWVmOTFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuY3BwCkBAIC0yNiwxMCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291
cC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDksMTAgKzQ3LDQgQEAgU291
cFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24oKSBjb25zdAogICAgIHJl
dHVybiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vz
c2lvbigpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0ZUFuZENhbmNl
bCgpCi17Ci0gICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKLSAgICAgICAgdGFz
ay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Np
b25Tb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNz
aW9uU291cC5oCmluZGV4IGQ3NWZiODguLmM1ZmNmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMjYs
MTQgKzI2LDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgi
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9u
IFNvdXBTZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTmV0d29ya0RhdGFU
YXNrU291cDsKLQogY2xhc3MgTmV0d29ya1Nlc3Npb25Tb3VwIGZpbmFsIDogcHVibGljIE5ldHdv
cmtTZXNzaW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVh
dGUoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTQ0LDE1ICs0MSw4IEBAIHB1Ymxp
YzoKIAogICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OwogCi0gICAgdm9pZCBy
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0
YVRhc2tTZXQuYWRkKCZ0YXNrKTsgfQotICAgIHZvaWQgdW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFz
ayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQucmVtb3ZlKCZ0YXNr
KTsgfQotCiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChXZWJDb3JlOjpTZXNzaW9u
SUQpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7Ci0KLSAgICBI
YXNoU2V0PE5ldHdvcmtEYXRhVGFza1NvdXAqPiBtX2RhdGFUYXNrU2V0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdkOWEwMzYuLjU0
NmU2NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC02LDggKzYsNiBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9lZmwv
RG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlQ29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA3NTk1OWEzLi44NmM1
NTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzMsOCArMzMsNiBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9ndGsv
RG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlQ29kZXJzU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGVjOGNlMWEuLmQxZjFiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDMsNiArMTA0Myw4
IEBACiAJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTExREJB
RTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi87IH07CiAJCTUzMjE1OTU1MURC
QUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyog
TmV0d29ya1Nlc3Npb25Db2NvYS5oICovOyB9OwogCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0Mg
LyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRh
c2tDb2NvYS5oICovOyB9OworCQk1M0JBNDdEMDFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0Rh
dGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAg
Ki87IH07CisJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjU0
NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovOyB9OwogCQk1QzA1
MkYyNjFDNkQzQkQzMDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzA1MkYyNDFDNkQz
QUI2MDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi87IH07CiAJCTVD
MTQyNkVDMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0
MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwICovOyB9OwogCQk1QzE0MjZFRDFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDMTQyNkUzMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oICovOyB9OwpAQCAtMzEzMSw2ICszMTMzLDggQEAKIAkJNTMyMTU5NTAx
REJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Np
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Np
b24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29y
a0RhdGFUYXNrQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBO
ZXR3b3JrRGF0YVRhc2tCbG9iLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRh
VGFza0Jsb2IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzlFQjU0NzFEQzJF
RTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
OUQxOEI3MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGhv
dG9zU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNBQjYw
MDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBw
YXRoID0gQXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDY1LDYgKzU0NjksOCBAQAogCQkJ
CTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLywKIAkJCQk4
Mzk5MDFGRjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovLAogCQkJCTgzOTkw
MUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oICovLAorCQkJCTUzOUVCNTQ2MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLywKKwkJCQk1MzlFQjU0
NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovLAogCQkJCTgzRDQ1
NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovLAogCQkJCTgzOTE0
OTYzMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCAqLywKIAkJCQk1
MTBDQzdERjE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3BwICovLApAQCAtNzgy
Nyw2ICs3ODMzLDcgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJv
Y2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0
QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEy
NEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2lu
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQ
bHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOUYzMzEyQjg0NEUy
MDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAgLTkzMjAsNiArOTMy
Nyw3IEBACiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRDYyMjc3MTczOUQ4
NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNl
RW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkZCN0FFMTFFNjRCNjgwMERCMTM3
MSAvKiBQbHVnaW5WaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEM5MkY0MTJEQjlFNzEw
MENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="316236"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293547</attachid>
            <date>2016-11-01 04:05:09 -0700</date>
            <delta_ts>2016-11-01 17:21:49 -0700</delta_ts>
            <desc>Updated patch including logs</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>85064</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDc0ZmViLi5hZjkyZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTAtMjkgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1hcmsgSFRUUFBhcnNlcnMuaCBh
bmQgQXN5bmNGaWxlU3RyZWFtLmggYXMgcHJpdmF0ZS4KKyAgICAgICAgKiBmaWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gQXN5bmNGaWxlU3RyZWFtIGNsYXNz
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaDogQWRkIFdFQkNPUkVfRVhQ
T1JUIHRvIGxlbmd0aCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aDogQWRkIFdFQkNPUkVfRVhQT1JUIHRvIHBhcnNlUmFuZ2UoKS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBz
ZXRIVFRQSGVhZGVyRmllbGQoKS4KKwogMjAxNi0xMS0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgdGhlIHN1cHBvcnQgZm9y
IGN1c3RvbSBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDI0NjJkNGIuLjlhNmNhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNjMsNyArMjA2
Myw3IEBACiAJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUIwQ0U5MjNBMTAw
N0VGM0NEIC8qIEZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzEwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVD
MENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VGM0NEIC8q
IEhUVFBQYXJzZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNEM3NjVEMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi87IH07
Ci0JCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VG
M0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IH07CisJCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAv
KiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzQwQ0U5MjNB
MTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFBy
b3RlY3Rpb25TcGFjZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3NTBDRTkyM0ExMDA3RUYzQ0Qg
LyogUHJvdGVjdGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFj
ZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MTRDNzY3ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjMwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKQEAgLTYxODIsNyArNjE4Miw3IEBA
CiAJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNCQjBFOENEQ0FG
MDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQlFMUNBQTVDNjBFOEJEMjM2
MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovOyB9
OwogCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTFGMTUwMThF
RDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovOyB9OwotCQlFMUNERTkyMjE1MDE5
MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNG
aWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJRTFD
REU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYyQ0M1
IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVS
ZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFEMzFDREExOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5jcHAg
Ki87IH07CiAJCUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVu
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRDMx
Q0RCMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUUxQkYwMDExNUZGNkZC
MDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAvKiBXaW5k
b3dzS2V5Ym9hcmRDb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0
cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRleCAz
NWU4NWE3Li5mODQ4YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5j
RmlsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFt
LmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZpbGVT
dHJlYW07CiBjbGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSB7CitjbGFzcyBXRUJD
T1JFX0VYUE9SVCBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IEFzeW5j
RmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVhbSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggMWE3NzJmYy4uYjc4
NTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTYtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGlt
cGxlbWVudGF0aW9uIGZvciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVtb3ZlIERvd25sb2FkU291cC5jcHAKKwog
MjAxNi0xMC0xOSAgR2Fib3IgS2VsZW1lbiAgPGtlbGVtZW5nQHVidW50dS5jb20+CiAKICAgICAg
ICAgW0dUS10gW0wxMG5dIFVwZGF0ZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggN2ZhMjgyNS4uYjY1ZmI4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw3ICsx
LDYgQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUg
c3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCi0uLi8uLi8u
Li9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAK
IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25E
aWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25s
b2FkLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmgK
aW5kZXggYjFmY2Q5Yy4uOTMyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxvYkRhdGFGaWxl
UmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAKICAgICBs
b25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBsb25nIGxv
bmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtu
b3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8v
IENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2Ni4uN2Y2YjQyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODEsNyArODEsNyBA
QCBBdG9taWNTdHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShjb25z
dCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9wdGlvbnNI
ZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUgb2YgdGhl
IHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVk
LgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQs
IGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOworV0VC
Q09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFu
Z2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5n
dGgpOwogCiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNEaXNwb3NpdGlv
biBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmgKaW5kZXggN2Q2ODk1MS4uZDg5NjYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtOTksNyAr
OTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhl
YWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAg
dm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRUUEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFkZEhU
VFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRhM2IwLi40MmRkY2RiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dApAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29ya1Byb2Nlc3NfQ09N
TU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCisgICAgTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBmNzdkYTMxLi4yODg3YjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0IEBA
CisyMDE2LTEwLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBpbXBsZW1lbnRh
dGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBOZXR3b3JrRGF0YVRhc2tCbG9iIHRvIGhhbmRsZSBibG9icyB3aGVuIHVzaW5n
IE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgdXNpbmcgUmVzb3VyY2VIYW5kbGUuIFRoaXMgcGF0
Y2gKKyAgICAgICAgYWRkcyBtb3JlIFVTRShORVRXT1JLX1NFU1NJT04pIGlmZGVmcyB0byBub3Qg
dXNlIFJlc291cmNlSGFuZGxlIGluIERvd25sb2FkcyBhbmQgTmV0d29ya0xvYWQgd2hlbiBOZXR3
b3JrU2Vzc2lvbgorICAgICAgICBpcyBlbmFibGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjpEb3dubG9hZCk6IFNwbGl0IHRoZSBjb25zdHJ1Y3RvciBhZ2FpbiBhbmQgcmVtb3ZlIHRoZSBQ
bGF0Zm9ybURvd25sb2FkVGFza1JlZgorICAgICAgICBkZWZpbml0aW9ucy4gTm93IENvY29hIHNw
ZWNpZmljIGNvbnN0cnVjdG9yIHJlY2VpdmVzIGEgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrIGFu
ZCB0aGUgZ2VuZXJhbCBjb25zdHJ1Y3RvcgorICAgICAgICByZXZlaWNlcyBhIE5ldHdvcmtEYXRh
VGFzayBhbmQgaXMgdXNlZCBieSBTb3VwIGJhY2tlbmQgYW5kIGJsb2JzLgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0
YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRp
ZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdv
cmtMb2FkKTogUmVuYW1lIGNhbmNlbE5ldHdvcmtMb2FkKCkgYXMgcGxhdGZvcm1DYW5jZWxOZXR3
b3JrTG9hZCgpIHNpbmNlCisgICAgICAgIHRoaXMgaXMgbm93IHVzZWQgb25seSBieSBDb2NvYSBw
bGF0Zm9ybSB0byBjYW5jZWwgdGhlIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzay4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWQ6OkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN1Z2dlc3Rl
ZE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cmVxdWVzdCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6IFJlbW92ZSBibG9icyBzcGVj
aWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbik6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOiBSZW1vdmUgYmxvYnMg
c3BlY2lmaWMgY29kZSB3aGVuCisgICAgICAgIHVzaW5nIE5ldHdvcmtTZXNzaW9uLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTogSWYgcmVxdWVzdCBpcyBhIGJsb2IsIGNyZWF0ZSBh
IE5ldHdvcmtEYXRhVGFza0Jsb2IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Rh
dGFUYXNrLmg6IEFkZCBpbnZhbGlkYXRlQW5kQ2FuY2VsIHB1cmUgdmlydHVhbCBtZXRob2QuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0YVRhc2tCbG9i
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRhVGFz
a0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0cmVh
bSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3VtZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQmxvYjo6c2Vlayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Js
b2I6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0Jsb2I6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFk
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmlsZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2hEb3dubG9hZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFza0Jsb2IuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6TmV0d29ya0xv
YWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuIHVzaW5nIE5ldHdvcmtTZXNzaW9u
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6
OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlQXN5bmMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6IE1vdmVkIGZyb20gTmV0d29y
a1Nlc3Npb25Tb3VwLCBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGFsc28gYnkgYmxvYnMuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0
dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
aDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90
aGluZworICAgICAgICBiZWNhdXNlIGluIENvY29hIGFsbCB0YXNrcyBhcmUgaW52YWxpZGF0ZWQg
YW5kIGNhbmNlbCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Nlc3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IFJlbW92ZSBE
b3dubG9hZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMC0zMSAgSmFlaHVuIExp
bSAgPGxqYWVodW4ubGltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIENNYWtl
IGJ1aWxkIGZpeApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAppbmRleCA3MjFiNjRiLi5jMzA0
Mzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
QmxvYkRvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2JEb3dubG9hZENsaWVudC5oIgogCisjaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiRG93bmxvYWQuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKQEAgLTk3LDMgKzk5LDUg
QEAgdm9pZCBCbG9iRG93bmxvYWRDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAogfQorCisjZW5kaWYgLy8gIVVTRShORVRXT1JL
X1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmgKaW5kZXggZGNiODg5ZC4uNGEzZTYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JE
b3dubG9hZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQorCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxl
U3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDMgKzU3LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0K
KworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKaW5kZXggNjQ5NDhlMi4u
MDIzNzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWQuY3BwCkBAIC00NSwxMCArNDUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi1E
b3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25s
b2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0
IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5h
bWUpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIs
IERvd25sb2FkSUQgZG93bmxvYWRJRCwgTmV0d29ya0RhdGFUYXNrJiBkb3dubG9hZCwgY29uc3Qg
U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6
IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKICAgICAsIG1fZG93bmxvYWRJRChk
b3dubG9hZElEKQotICAgICwgbV9kb3dubG9hZChkb3dubG9hZCkKKyAgICAsIG1fZG93bmxvYWQo
JmRvd25sb2FkKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9zdWdnZXN0
ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CkBAIC01Niw4ICs1NiwyMCBAQCBEb3dubG9hZDo6RG93
bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxv
YWRJRCwgUGxhdAogCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93bmxvYWQoKTsK
IH0KLSNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorRG93bmxvYWQ6OkRvd25sb2FkKERvd25s
b2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIE5TVVJM
U2Vzc2lvbkRvd25sb2FkVGFzayogZG93bmxvYWQsIGNvbnN0IFNlc3Npb25JRCYgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCisgICAgOiBtX2Rvd25sb2FkTWFuYWdlcihk
b3dubG9hZE1hbmFnZXIpCisgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKKyAgICAsIG1f
ZG93bmxvYWRUYXNrKGRvd25sb2FkKQorICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorICAg
ICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCit7CisgICAgQVNTRVJUKG1fZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCisgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkQ3JlYXRlRG93
bmxvYWQoKTsKK30KKyNlbmRpZgorI2Vsc2UKIERvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkKICAgICA6
IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKICAgICAsIG1fZG93bmxvYWRJRChk
b3dubG9hZElEKQpAQCAtNjgsOSArODAsMTEgQEAgRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2Fk
TWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnMKIAog
ICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURvd25sb2FkKCk7CiB9CisjZW5kaWYgLy8g
VVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxvYWQ6On5Eb3dubG9hZCgpCiB7CisjaWYgIVVT
RShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1fcmVzb3VyY2VIYW5kbGUpIHsKICAgICAgICAg
bV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQoKTsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRs
ZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIgQEAgRG93bmxvYWQ6On5Eb3dubG9hZCgpCiAg
ICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7CiAKICAgICBwbGF0Zm9ybUludmFsaWRhdGUo
KTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkRGVzdHJveURvd25sb2FkKCk7
CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkK
IHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsKQEAgLTkyLDEx
ICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFydCgpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBEb3dubG9h
ZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3ICsxMjAsMzkgQEAgdm9pZCBEb3dubG9hZDo6
c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCi0gICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlc3BvbnNl
KTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNlCiAgICAgc3RhcnROZXR3b3JrTG9h
ZFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lk
IERvd25sb2FkOjpjYW5jZWwoKQogeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgaWYg
KG1fZG93bmxvYWQpIHsKKyAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7CisgICAgICAgIGRp
ZENhbmNlbCh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKICAgICBpZiAobV9y
ZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsKICAgICAgICAgYXV0byByZXNvdXJjZUhh
bmRsZSA9IFdURk1vdmUobV9yZXNvdXJjZUhhbmRsZSk7CiAgICAgICAgIHJlc291cmNlSGFuZGxl
LT5jYW5jZWwoKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8QmxvYkRvd25sb2FkQ2xpZW50Kj4obV9k
b3dubG9hZENsaWVudC5nZXQoKSktPmRpZENhbmNlbCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGNhbmNlbE5ldHdvcmtMb2FkKCk7CisjZW5kaWYKKyAgICBwbGF0Zm9ybUNhbmNlbE5l
dHdvcmtMb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxv
YWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRT
dGFydChtX3JlcXVlc3QsIG1fc3VnZ2VzdGVkTmFtZSkpOwogfQogCi0jaWYgIVVTRShORVRXT1JL
X1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdl
cigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpOwogfQotI2VuZGlmCiAKIHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKQEAgLTE0NywxNiArMTYx
LDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJl
Y2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwogfQogCi12b2lkIERvd25sb2FkOjpkaWRSZWNlaXZl
RGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgaWYgKCFtX2hhc1JlY2VpdmVkRGF0YSkgewot
ICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJkaWRSZWNlaXZlRGF0YTogU3RhcnRlZCBy
ZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJ
RCgpKTsKLSAgICAgICAgbV9oYXNSZWNlaXZlZERhdGEgPSB0cnVlOwotICAgIH0KLQotICAgIHNl
bmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVEYXRhKGxlbmd0aCkpOwotfQot
CiBib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQogewogICAgIGJvb2wgcmVzdWx0OwpAQCAtMTY2LDggKzE3MCw2IEBA
IGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQotCiBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRl
KQogewogICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKQEAgLTE4Miw4ICsxODQsNiBAQCBTdHJpbmcg
RG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsCiAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi0jZW5kaWYKLQog
dm9pZCBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
Yyhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIHNlbmQoTWVzc2FnZXM6
OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5
bmMoZG93bmxvYWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSkpOwpAQCAtMjA5LDE3ICsyMDksMzAg
QEAgdm9pZCBEb3dubG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQogewogICAgIG1f
cmVzb3VyY2VIYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CisjZW5kaWYK
IAogdm9pZCBEb3dubG9hZDo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRo
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENyZWF0ZURlc3RpbmF0
aW9uKHBhdGgpKTsKIH0KIAordm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3Qg
bGVuZ3RoKQoreworICAgIGlmICghbV9oYXNSZWNlaXZlZERhdGEpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2aW5nIGRhdGEg
KGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7CisgICAgICAg
IG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpE
b3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKK30KKwogdm9pZCBEb3dubG9h
ZDo6ZGlkRmluaXNoKCkKIHsKICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJkaWRGaW5pc2g6
IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOwogCisjaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgcGxhdGZvcm1EaWRGaW5pc2goKTsKKyNlbmRpZgog
CiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkRmluaXNoKCkpOwogCkBAIC0y
NzcsNCArMjkwLDEwIEBAIGJvb2wgRG93bmxvYWQ6OmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
IGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgRG93bmxvYWQ6
OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQoreworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuaAppbmRleCBjM2ZiZjA5Li4yNWNiYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaApAQCAtNDAsMTIgKzQw
LDYgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFBMQVRGT1JNKENPQ09BKQogT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7Ci10eXBlZGVmIE5TVVJMU2Vzc2lvbkRv
d25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWY7Ci0jZWxpZiBVU0UoU09VUCkKLW5h
bWVzcGFjZSBXZWJLaXQgewotY2xhc3MgTmV0d29ya0RhdGFUYXNrOwotfQotdHlwZWRlZiBXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWY7CiAjZW5kaWYKICNl
bHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC03Myw2
ICs2Nyw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRG93bmxvYWRNYW5hZ2VyOworY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogY2xhc3MgTmV0
d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQYWdlOwogCkBAIC04MCwzOSArNzUsNDMgQEAgY2xhc3Mg
RG93bmxvYWQgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShEb3dubG9hZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93
bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25J
RCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lID0geyB9KTsKKyAg
ICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3dubG9hZElELCBOZXR3b3JrRGF0YVRhc2sm
LCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRG93bmxvYWQo
RG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiwg
Y29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUgPSB7IH0pOwogI2VuZGlmCisjZWxzZQogICAgIERvd25sb2FkKERvd25sb2Fk
TWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworI2VuZGlmCiAKICAgICB+RG93
bmxvYWQoKTsKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnQoKTsK
ICAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyNlbmRpZgogICAgIHZvaWQgcmVzdW1lKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2b2lkIGNhbmNlbCgpOwogCiAg
ICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZElEOyB9
CiAgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdWdn
ZXN0ZWROYW1lOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQogICAgIHZvaWQgc2V0U2FuZGJveEV4dGVuc2lvbihSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4m
JiBzYW5kYm94RXh0ZW5zaW9uKSB7IG1fc2FuZGJveEV4dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJv
eEV4dGVuc2lvbik7IH0KICNlbHNlCisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAgICAgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKLSNlbmRpZgogICAgIHZvaWQgZGlkU3RhcnQoKTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9p
ZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwogICAgIGJvb2wgc2hvdWxkRGVjb2Rl
U291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0jaWYgIVVTRShO
RVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKTsK
LSNlbmRpZgogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVB
c3luYyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZERlY2lkZURvd25sb2FkRGVzdGluYXRp
b24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwogICAgIHZvaWQgY29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGlkRmluaXNoKCk7CisjZW5kaWYKICAg
ICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9p
ZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3Vt
ZURhdGEpOwogCkBAIC0xMjQsMzcgKzEyMywzNSBAQCBwcml2YXRlOgogI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZCgpOwogICAgIHZvaWQgc3RhcnRO
ZXR3b3JrTG9hZFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0jZW5kaWYKLSAgICB2b2lkIGNhbmNlbE5ldHdvcmtM
b2FkKCk7Ci0KICAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworI2VuZGlmCisgICAgdm9p
ZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAKICAgICBib29sIGlzQWx3YXlzT25Mb2dn
aW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93bmxvYWRNYW5hZ2VyJiBtX2Rvd25sb2FkTWFu
YWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJRDsKLSAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgbV9yZXF1ZXN0OwogCiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2Fu
ZGJveEV4dGVuc2lvbjsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9h
ZDsKLSNlbGlmIFVTRShTT1VQKQogICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxv
YWQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25s
b2FkVGFzaz4gbV9kb3dubG9hZFRhc2s7CiAjZW5kaWYKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQg
bV9zZXNzaW9uSUQ7CiAjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0
YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3dubG9hZDsKICAgICBSZXRhaW5QdHI8V0tE
b3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAjZW5kaWYKLSNlbmRpZiAvLyBVU0UoTkVU
V09SS19TRVNTSU9OKQogI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pCiAgICAgUmV0YWluUHRyPENG
VVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgUmVm
UHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlSGFuZGxlOworI2VuZGlmIC8v
IFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKICAgICBi
b29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3Bw
CmluZGV4IGIyZmRmYWEuLmI0MDZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCkBAIC00Nywy
MyArNDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3dubG9hZE1hbmFnZXIoQ2xpZW50JiBjbGll
bnQpCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZChTZXNzaW9uSUQgc2Vzc2lv
bklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogewogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAg
YXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrU2Vzc2lvbikKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgIHBh
cmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklEOwotICAgICAgICBwYXJhbWV0ZXJzLnJlcXVl
c3QgPSByZXF1ZXN0OwotICAgICAgICBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kg
PSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFsczsKLSAg
ICAgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3dubG9hZElELCBzdGQ6Om1ha2VfdW5pcXVl
PFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0ZXJzKSwgZG93bmxvYWRJRCwgKm5ldHdv
cmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBT
ZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKKyAgICBpZiAoIW5ldHdv
cmtTZXNzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgTmV0d29ya0xv
YWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5zZXNzaW9uSUQgPSBzZXNz
aW9uSUQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBwYXJhbWV0ZXJz
LmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tD
bGllbnRGb3JDcmVkZW50aWFsczsKKyAgICBtX3BlbmRpbmdEb3dubG9hZHMuYWRkKGRvd25sb2Fk
SUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rvd25sb2FkPihXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24sIHN1Z2dlc3RlZE5hbWUpKTsKKyNlbHNlCiAg
ICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KCp0aGlzLCBkb3du
bG9hZElELCByZXF1ZXN0LCBzdWdnZXN0ZWROYW1lKTsKICAgICBkb3dubG9hZC0+c3RhcnQoKTsK
IAogICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogICAgIG1f
ZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CisjZW5kaWYKIH0K
IAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCkBAIC05OSw4ICs5Nyw3IEBAIHZvaWQgRG93bmxv
YWRNYW5hZ2VyOjp3aWxsRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oTmV0d29ya0Rh
dGFUYXNrJiBuZXR3CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JE
ZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3RkOjptYWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNlbmRpZgotCisjZWxzZQogdm9pZCBEb3dubG9h
ZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwg
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBhdXRvIGRvd25sb2FkID0g
c3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQsIHJlcXVlc3QpOwpA
QCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9E
b3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJlc291cmNlSGFuCiAgICAgQVNTRVJUKCFt
X2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAgICAgbV9kb3dubG9hZHMuYWRkKGRv
d25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19T
RVNTSU9OKQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93
bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRvd25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlv
biwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBib29sIGFsbG93T3ZlcndyaXRlKQogewpAQCAtMTM0LDExICsxMzIsMTEgQEAgdm9pZCBEb3du
bG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oRG93
bmxvYWRJRCBkb3dubG8KIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5h
dGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkpOwogICAgICAgICBtX2Rvd25sb2Fkc0Fm
dGVyRGVzdGluYXRpb25EZWNpZGVkLnNldChkb3dubG9hZElELCBuZXR3b3JrRGF0YVRhc2spOwot
ICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCisjZWxzZQogICAgIGlmIChhdXRvKiB3YWl0
aW5nRG93bmxvYWQgPSBkb3dubG9hZChkb3dubG9hZElEKSkKICAgICAgICAgd2FpdGluZ0Rvd25s
b2FkLT5kaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBEb3dubG9h
ZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFNlc3Npb25JRCwgRG93bmxvYWRJRCBkb3dubG9hZElE
LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDA3MWVhOWUuLjkwNjNmODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmgKQEAgLTgwLDggKzgwLDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb250aW51
ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7
CiAgICAgdm9pZCB3aWxsRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oTmV0d29ya0Rh
dGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSNlbmRpZgorI2Vsc2UKICAg
ICB2b2lkIGNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlmCiAgICAgdm9pZCBjb250aW51ZURlY2lkZVBl
bmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7CiAK
ICAgICB2b2lkIHJlc3VtZURvd25sb2FkKFdlYkNvcmU6OlNlc3Npb25JRCwgRG93bmxvYWRJRCwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2Nv
YS5tbQppbmRleCBkMzIwOWFkLi44NjhlMTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5t
bQpAQCAtMzgsMTAgKzM4LDEwIEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogICAgIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQor
dm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7Ci0gICAgQVNTRVJU
KG1fZG93bmxvYWQpOwotICAgIFttX2Rvd25sb2FkIGNhbmNlbEJ5UHJvZHVjaW5nUmVzdW1lRGF0
YTogXihOU0RhdGEgKiBfTnVsbGFibGUgcmVzdW1lRGF0YSkKKyAgICBBU1NFUlQobV9kb3dubG9h
ZFRhc2spOworICAgIFttX2Rvd25sb2FkVGFzayBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6
IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEpCiAgICAgewogICAgICAgICBpZiAocmVz
dW1lRGF0YSAmJiByZXN1bWVEYXRhLmJ5dGVzICYmIHJlc3VtZURhdGEubGVuZ3RoKQogICAgICAg
ICAgICAgZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihyZXN1bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5ndGgpKTsKQEAgLTUw
LDE1ICs1MCw2IEBAIHZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKICAgICB9XTsK
IH0KIAotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19
Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5t
bSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJ
T1MubW0KaW5kZXggZjMzOGFiYy4uNTAyNGFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tCkBAIC0x
NDIsNyArMTQyLDcgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2UKICNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwb3AKIH0KIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQordm9p
ZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCmluZGV4IGJiM2ZmMmIuLjk5ZTM4ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93
bmxvYWRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L21hYy9Eb3dubG9hZE1hYy5tbQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgRG93bmxvYWQ6OnJl
c3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYg
cGF0aCwKICAgICBbbV9uc1VSTERvd25sb2FkIHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9d
OwogfQogCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCit2b2lkIERvd25sb2Fk
OjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKIHsKICAgICBbbV9uc1VSTERvd25sb2FkIGNh
bmNlbF07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4MmU4YzVjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBCcmVudCBGdWxnaGFtIDxi
ZnVsZ2hhbUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRl
ICJOZXR3b3JrRGF0YVRhc2suaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQotewotICAgIG1f
ZG93bmxvYWQtPmNhbmNlbCgpOwotICAgIGRpZENhbmNlbCh7IH0pOwotfQotCi12b2lkIERvd25s
b2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9y
bURpZEZpbmlzaCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCmluZGV4IDgzNGFlY2EuLjBlNjNjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKQEAgLTIwNywxOCArMjA3LDE2IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChTZXNzaW9u
SUQKICAgICB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlmICghcmVxdWVzdC51
cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+
Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAg
ICAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9hZCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCisgICAgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5jb252ZXJ0VGFza1RvRG93
bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIGxvYWRlci0+ZGlkQ29u
dmVydFRvRG93bmxvYWQoKTsKKyNlbHNlCiAgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5h
Z2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5uZXR3b3Jr
TG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwogCiAgICAgLy8gVW5ibG9jayB0
aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgogICAgIGxvYWRlci0+bmV0d29ya0xv
YWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAKICAgICBsb2Fk
ZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTShTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcmIHJlc3VsdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCmlu
ZGV4IDU0ZGE0ZmIuLmRiYjA2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKIAorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0Jsb2IuaCIKICNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAg
LTQ0LDYgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJlZjxOZXR3b3JrRGF0YVRhc2s+
IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3Jr
RGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ29udGVudFNuaWZmaW5nUG9saWN5
IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KQogeworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpCisg
ICAgICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50
LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza0NvY29hOjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBy
ZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAppbmRleCA0ZGMxMjkwLi42ZGE0
MWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0
YVRhc2suaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2suaApAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAw
OwogCiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFJ1bm5pbmcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYzcwMDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNw
cApAQCAtMCwwICsxLDU2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0Jsb2IuaCIKKworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Bc3luY0ZpbGVTdHJlYW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JEYXRhLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9CbG9iUmVnaXN0cnlJbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3RyZWFtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXJzZWRDb250
ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBidWZmZXJT
aXplID0gNTEyICogMTAyNDsKKworc3RhdGljIGNvbnN0IGludCBodHRwT0sgPSAyMDA7CitzdGF0
aWMgY29uc3QgaW50IGh0dHBQYXJ0aWFsQ29udGVudCA9IDIwNjsKK3N0YXRpYyBjb25zdCBpbnQg
aHR0cE5vdEFsbG93ZWQgPSA0MDM7CitzdGF0aWMgY29uc3QgaW50IGh0dHBSZXF1ZXN0ZWRSYW5n
ZU5vdFNhdGlzZmlhYmxlID0gNDE2Oworc3RhdGljIGNvbnN0IGludCBodHRwSW50ZXJuYWxFcnJv
ciA9IDUwMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwT0tUZXh0ID0gIk9LIjsKK3N0YXRpYyBj
b25zdCBjaGFyKiBodHRwUGFydGlhbENvbnRlbnRUZXh0ID0gIlBhcnRpYWwgQ29udGVudCI7Citz
dGF0aWMgY29uc3QgY2hhciogaHR0cE5vdEFsbG93ZWRUZXh0ID0gIk5vdCBBbGxvd2VkIjsKK3N0
YXRpYyBjb25zdCBjaGFyKiBodHRwUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRleHQgPSAi
UmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0
cEludGVybmFsRXJyb3JUZXh0ID0gIkludGVybmFsIFNlcnZlciBFcnJvciI7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCB3ZWJLaXRCbG9iUmVzb3VyY2VEb21haW4gPSAiV2ViS2l0QmxvYlJl
c291cmNlIjsKKworTmV0d29ya0RhdGFUYXNrQmxvYjo6TmV0d29ya0RhdGFUYXNrQmxvYihOZXR3
b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENv
bnRlbnRTbmlmZikKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVl
c3QsIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywgZmFsc2UpCisgICAgLCBtX2Jsb2JEYXRh
KHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihibG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRh
dGFGcm9tVVJMKHJlcXVlc3QudXJsKCkpKQorICAgICwgbV9zdHJlYW0oc3RkOjptYWtlX3VuaXF1
ZTxBc3luY0ZpbGVTdHJlYW0+KCp0aGlzKSkKK3sKKyAgICBtX3Nlc3Npb24tPnJlZ2lzdGVyTmV0
d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlcCAtIENyZWF0
ZWQgTmV0d29ya0RhdGFUYXNrQmxvYiBmb3IgJXMiLCB0aGlzLCByZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCitOZXR3b3JrRGF0YVRhc2tCbG9iOjp+TmV0d29ya0Rh
dGFUYXNrQmxvYigpCit7CisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBtX3Nlc3Npb24tPnVucmVn
aXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Js
b2I6OmNsZWFyU3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXBsZXRlZDsKKwor
ICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9maWxlT3BlbmVkID0gZmFsc2U7Cisg
ICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgIH0KKyAgICBtX3N0cmVhbSA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZSAhPSBTdGF0ZTo6UnVubmluZyk7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNh
bmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKworICAgIGlmIChtX3NjaGVkdWxlZEZh
aWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgeworICAgICAgICBBU1NFUlQobV9mYWlsdXJlVGltZXIu
aXNBY3RpdmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAg
ICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgIGNsZWFyU3RyZWFtKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG1fZmlyc3RSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgImdldCIpKSB7
CisgICAgICAgICAgICBkaWRGYWlsKEVycm9yOjpNZXRob2ROb3RBbGxvd2VkKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBibG9iIGRhdGEgaXMg
bm90IGZvdW5kLCBmYWlsIG5vdy4KKyAgICAgICAgaWYgKCFtX2Jsb2JEYXRhKSB7CisgICAgICAg
ICAgICBkaWRGYWlsKEVycm9yOjpOb3RGb3VuZEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcnNlIHRoZSAiUmFuZ2UiIGhlYWRlciB3ZSBjYXJl
IGFib3V0LgorICAgICAgICBTdHJpbmcgcmFuZ2UgPSBtX2ZpcnN0UmVxdWVzdC5odHRwSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OlJhbmdlKTsKKyAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5
KCkgJiYgIXBhcnNlUmFuZ2UocmFuZ2UsIG1fcmFuZ2VPZmZzZXQsIG1fcmFuZ2VFbmQsIG1fcmFu
Z2VTdWZmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoRXJyb3I6
OlJhbmdlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2V0U2l6ZUZvck5leHQoKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9i
OjpzdXNwZW5kKCkKK3sKKyAgICAvLyBGSVhNRTogY2FuIHRoaXMgaGFwcGVuPworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OmNhbmNlbCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworCisgICAgaWYgKG1fZmls
ZU9wZW5lZCkgeworICAgICAgICBtX2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdHJl
YW0tPmNsb3NlKCk7CisgICAgfQorCisgICAgaWYgKGlzRG93bmxvYWQoKSkKKyAgICAgICAgY2xl
YW5Eb3dubG9hZEZpbGVzKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6aW52YWxp
ZGF0ZUFuZENhbmNlbCgpCit7CisgICAgY2FuY2VsKCk7CisgICAgY2xlYXJTdHJlYW0oKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpnZXRTaXplRm9yTmV4dCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIERvIHdlIGZpbmlzaCB2YWxpZGF0aW5nIGFu
ZCBjb3VudGluZyBzaXplIGZvciBhbGwgaXRlbXM/CisgICAgaWYgKG1fc2l6ZUl0ZW1Db3VudCA+
PSBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUoKSkgeworICAgICAgICBzZWVrKCk7CisgICAgICAg
IGRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5hdChtX3NpemVJdGVt
Q291bnQpOworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEJsb2JEYXRhSXRl
bTo6VHlwZTo6RGF0YToKKyAgICAgICAgZGlkR2V0U2l6ZShpdGVtLmxlbmd0aCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkZpbGU6CisgICAgICAgIC8v
IEZpbGVzIGtub3cgdGhlaXIgc2l6ZXMsIGJ1dCBhc2tpbmcgdGhlIHN0cmVhbSB0byB2ZXJpZnkg
dGhhdCB0aGUgZmlsZSB3YXNuJ3QgbW9kaWZpZWQuCisgICAgICAgIG1fc3RyZWFtLT5nZXRTaXpl
KGl0ZW0uZmlsZSgpLT5wYXRoKCksIGl0ZW0uZmlsZSgpLT5leHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRT
aXplKGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIGNsZWFy
U3RyZWFtKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgc2l6ZSBp
cyAtMSwgaXQgbWVhbnMgdGhlIGZpbGUgaGFzIGJlZW4gbW92ZWQgb3IgY2hhbmdlZC4gRmFpbCBu
b3cuCisgICAgaWYgKHNpemUgPT0gLTEpIHsKKyAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90Rm91
bmRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgc2l6ZSBwYXNz
ZWQgYmFjayBpcyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZmlsZS4gSWYgdGhlIHVuZGVybHlpbmcg
aXRlbSBpcyBhIHNsaWNlZCBmaWxlLCB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xpY2UgbGVuZ3RoLgor
ICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9z
aXplSXRlbUNvdW50KTsKKyAgICBzaXplID0gaXRlbS5sZW5ndGgoKTsKKworICAgIC8vIENhY2hl
IHRoZSBzaXplLgorICAgIG1faXRlbUxlbmd0aExpc3QuYXBwZW5kKHNpemUpOworCisgICAgLy8g
Q291bnQgdGhlIHNpemUuCisgICAgbV90b3RhbFNpemUgKz0gc2l6ZTsKKyAgICBtX3RvdGFsUmVt
YWluaW5nU2l6ZSArPSBzaXplOworICAgIG1fc2l6ZUl0ZW1Db3VudCsrOworCisgICAgLy8gQ29u
dGludWUgd2l0aCB0aGUgbmV4dCBpdGVtLgorICAgIGdldFNpemVGb3JOZXh0KCk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c2VlaygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIC8vIENvbnZlcnQgZnJvbSB0aGUgc3VmZml4IGxlbmd0aCB0byB0aGUgcmFu
Z2UuCisgICAgaWYgKG1fcmFuZ2VTdWZmaXhMZW5ndGggIT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVk
KSB7CisgICAgICAgIG1fcmFuZ2VPZmZzZXQgPSBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtIG1fcmFu
Z2VTdWZmaXhMZW5ndGg7CisgICAgICAgIG1fcmFuZ2VFbmQgPSBtX3JhbmdlT2Zmc2V0ICsgbV9y
YW5nZVN1ZmZpeExlbmd0aCAtIDE7CisgICAgfQorCisgICAgLy8gQmFpbCBvdXQgaWYgdGhlIHJh
bmdlIGlzIG5vdCBwcm92aWRlZC4KKyAgICBpZiAobV9yYW5nZU9mZnNldCA9PSBrUG9zaXRpb25O
b3RTcGVjaWZpZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNraXAgdGhlIGluaXRpYWwg
aXRlbXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZS4KKyAgICBsb25nIGxvbmcgb2Zmc2V0ID0g
bV9yYW5nZU9mZnNldDsKKyAgICBmb3IgKG1fcmVhZEl0ZW1Db3VudCA9IDA7IG1fcmVhZEl0ZW1D
b3VudCA8IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpICYmIG9mZnNldCA+PSBtX2l0ZW1MZW5n
dGhMaXN0W21fcmVhZEl0ZW1Db3VudF07ICsrbV9yZWFkSXRlbUNvdW50KQorICAgICAgICBvZmZz
ZXQgLT0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdOworCisgICAgLy8gU2V0IHRo
ZSBvZmZzZXQgdGhhdCBuZWVkIHRvIGp1bXAgdG8gZm9yIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBy
YW5nZS4KKyAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSBvZmZzZXQ7CisKKyAgICAvLyBBZGp1
c3QgdGhlIHRvdGFsIHJlbWFpbmluZyBzaXplIGluIG9yZGVyIG5vdCB0byBnbyBiZXlvbmQgdGhl
IHJhbmdlLgorICAgIGlmIChtX3JhbmdlRW5kICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkgewor
ICAgICAgICBsb25nIGxvbmcgcmFuZ2VTaXplID0gbV9yYW5nZUVuZCAtIG1fcmFuZ2VPZmZzZXQg
KyAxOworICAgICAgICBpZiAobV90b3RhbFJlbWFpbmluZ1NpemUgPiByYW5nZVNpemUpCisgICAg
ICAgICAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSA9IHJhbmdlU2l6ZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgLT0gbV9yYW5nZU9mZnNldDsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWNlaXZlUmVzcG9uc2UoRXJyb3IgZXJyb3JDb2RlKQor
eworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKCV1KSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlcnJvckNv
ZGUpKTsKKworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlzKCp0aGlz
KTsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBl
cnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IgPyAidGV4dC9wbGFpbiIgOiBtX2Jsb2JEYXRhLT5j
b250ZW50VHlwZSgpLCBlcnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IgPyAwIDogbV90b3RhbFJl
bWFpbmluZ1NpemUsIFN0cmluZygpKTsKKyAgICBzd2l0Y2ggKGVycm9yQ29kZSkgeworICAgIGNh
c2UgRXJyb3I6Ok5vRXJyb3I6IHsKKyAgICAgICAgYm9vbCBpc1JhbmdlUmVxdWVzdCA9IG1fcmFu
Z2VPZmZzZXQgIT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVkOworICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzQ29kZShpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudCA6IGh0dHBP
Syk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGlzUmFuZ2VSZXF1ZXN0ID8g
aHR0cFBhcnRpYWxDb250ZW50VGV4dCA6IGh0dHBPS1RleHQpOworCisgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUsIG1fYmxvYkRh
dGEtPmNvbnRlbnRUeXBlKCkpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgsIFN0cmluZzo6bnVtYmVyKG1fdG90YWxSZW1h
aW5pbmdTaXplKSk7CisKKyAgICAgICAgaWYgKGlzUmFuZ2VSZXF1ZXN0KQorICAgICAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2Us
IFBhcnNlZENvbnRlbnRSYW5nZShtX3JhbmdlT2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3RvdGFsU2l6
ZSkuaGVhZGVyVmFsdWUoKSk7CisgICAgICAgIC8vIEZJWE1FOiBJZiBhIHJlc291cmNlIGlkZW50
aWZpZWQgd2l0aCBhIGJsb2I6IFVSTCBpcyBhIEZpbGUgb2JqZWN0LCB1c2VyIGFnZW50cyBtdXN0
IHVzZSB0aGF0IGZpbGUncyBuYW1lIGF0dHJpYnV0ZSwKKyAgICAgICAgLy8gYXMgaWYgdGhlIHJl
c3BvbnNlIGhhZCBhIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIHdpdGggdGhlIGZpbGVuYW1l
IHBhcmFtZXRlciBzZXQgdG8gdGhlIEZpbGUncyBuYW1lIGF0dHJpYnV0ZS4KKyAgICAgICAgLy8g
Tm90YWJseSwgdGhpcyB3aWxsIGFmZmVjdCBhIG5hbWUgc3VnZ2VzdGVkIGluICJGaWxlIFNhdmUg
QXMiLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBFcnJvcjo6UmFuZ2VFcnJvcjoK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cFJlcXVlc3RlZFJhbmdlTm90
U2F0aXNmaWFibGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwUmVx
dWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRleHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEVycm9yOjpTZWN1cml0eUVycm9yOgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZShodHRwTm90QWxsb3dlZCk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGh0
dHBOb3RBbGxvd2VkVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBJbnRlcm5hbEVycm9yKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoaHR0cEludGVybmFsRXJyb3JUZXh0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdv
cmtTZXNzaW9uKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGVycm9yQ29kZV0oUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikg
eworICAgICAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtEYXRhVGFza0Jsb2I6
OmRpZFJlY2VpdmVSZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlciAoJXUpIiwgdGhpcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBvbGljeUFjdGlvbikpOworCisgICAgICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAg
ICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvcikgeworICAgICAgICAgICAg
ZGlkRmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBz
d2l0Y2ggKHBvbGljeUFjdGlvbikgeworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5
VXNlOgorICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgICAgICAg
ICAgcmVhZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9u
OjpQb2xpY3lJZ25vcmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lB
Y3Rpb246OlBvbGljeURvd25sb2FkOgorICAgICAgICAgICAgZG93bmxvYWQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
QmxvYjo6cmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIElm
IHRoZXJlIGlzIG5vIG1vcmUgcmVtYWluaW5nIGRhdGEgdG8gcmVhZCwgd2UgYXJlIGRvbmUuCisg
ICAgaWYgKCFtX3RvdGFsUmVtYWluaW5nU2l6ZSB8fCBtX3JlYWRJdGVtQ291bnQgPj0gbV9ibG9i
RGF0YS0+aXRlbXMoKS5zaXplKCkpIHsKKyAgICAgICAgZGlkRmluaXNoKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRh
LT5pdGVtcygpLmF0KG1fcmVhZEl0ZW1Db3VudCk7CisgICAgaWYgKGl0ZW0udHlwZSgpID09IEJs
b2JEYXRhSXRlbTo6VHlwZTo6RGF0YSkKKyAgICAgICAgcmVhZERhdGEoaXRlbSk7CisgICAgZWxz
ZSBpZiAoaXRlbS50eXBlKCkgPT0gQmxvYkRhdGFJdGVtOjpUeXBlOjpGaWxlKQorICAgICAgICBy
ZWFkRmlsZShpdGVtKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWREYXRhKGNvbnN0IEJsb2JEYXRhSXRl
bSYgaXRlbSkKK3sKKyAgICBBU1NFUlQoaXRlbS5kYXRhKCkuZGF0YSgpKTsKKworICAgIGxvbmcg
bG9uZyBieXRlc1RvUmVhZCA9IGl0ZW0ubGVuZ3RoKCkgLSBtX2N1cnJlbnRJdGVtUmVhZFNpemU7
CisgICAgaWYgKGJ5dGVzVG9SZWFkID4gbV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAgIGJ5
dGVzVG9SZWFkID0gbV90b3RhbFJlbWFpbmluZ1NpemU7CisgICAgY29uc3VtZURhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaXRlbS5kYXRhKCkuZGF0YSgpLT5kYXRhKCkpICsgaXRl
bS5vZmZzZXQoKSArIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSwgc3RhdGljX2Nhc3Q8aW50PihieXRl
c1RvUmVhZCkpOworICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6cmVhZEZpbGUoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQorewor
ICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUKG1fc3RyZWFtKTsKKworICAgIGlmICht
X2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9zdHJlYW0tPnJlYWQobV9idWZmZXIuZGF0YSgpLCBt
X2J1ZmZlci5zaXplKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9uZyBsb25n
IGJ5dGVzVG9SZWFkID0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRdIC0gbV9jdXJy
ZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdT
aXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PGludD4obV90b3RhbFJlbWFp
bmluZ1NpemUpOworICAgIG1fc3RyZWFtLT5vcGVuRm9yUmVhZChpdGVtLmZpbGUoKS0+cGF0aCgp
LCBpdGVtLm9mZnNldCgpICsgbV9jdXJyZW50SXRlbVJlYWRTaXplLCBieXRlc1RvUmVhZCk7Cisg
ICAgbV9maWxlT3BlbmVkID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZE9wZW4oYm9vbCBzdWNjZXNzKQorewor
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93bmxvYWQoKSkpIHsKKyAgICAgICAgY2xl
YXJTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICBkaWRGYWlsKEVycm9yOjpOb3RSZWFkYWJsZUVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlk
UmVhZChpbnQgYnl0ZXNSZWFkKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93
bmxvYWQoKSkpIHsKKyAgICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChieXRlc1JlYWQgPCAwKSB7CisgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5v
dFJlYWRhYmxlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmPE5ldHdv
cmtEYXRhVGFza0Jsb2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGNvbnN1bWVEYXRhKG1f
YnVmZmVyLmRhdGEoKSwgYnl0ZXNSZWFkKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9i
Ojpjb25zdW1lRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQoreworICAgIG1f
dG90YWxSZW1haW5pbmdTaXplIC09IGJ5dGVzUmVhZDsKKworICAgIGlmIChieXRlc1JlYWQpIHsK
KyAgICAgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUp
IHsKKyAgICAgICAgICAgIGlmICghd3JpdGVEb3dubG9hZChkYXRhLCBieXRlc1JlYWQpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2NsaWVudCk7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoU2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YSwgYnl0ZXNSZWFkKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgaXRlbSBp
cyBhIGZpbGUgaXRlbSwgdGhlIHJlYWRpbmcgaXMgY29tcGxldGVkIG9ubHkgaWYgYnl0ZXNSZWFk
IGlzIDAuCisgICAgICAgIGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgICAgICAvLyBDbG9zZSB0
aGUgZmlsZS4KKyAgICAgICAgICAgIG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICAgICAg
bV9zdHJlYW0tPmNsb3NlKCk7CisKKyAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgaXRl
bS4KKyAgICAgICAgICAgIG1fcmVhZEl0ZW1Db3VudCsrOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSByZWFkIHRoZSBjdXJyZW50IHRleHQgaXRlbSBh
cyBhIHdob2xlIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgIG1fcmVhZEl0ZW1D
b3VudCsrOworICAgIH0KKworICAgIHJlYWQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJv
b2wgYWxsb3dPdmVyd3JpdGUpCit7CisgICAgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93
bmxvYWRMb2NhdGlvbihmaWxlbmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVy
d3JpdGUpOworICAgIGlmIChhbGxvd092ZXJ3cml0ZSAmJiBmaWxlRXhpc3RzKG1fcGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24pKQorICAgICAgICBkZWxldGVGaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24pOworfQorCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5h
bWUoKSBjb25zdAoreworICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgidW5rbm93biIpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRvd25sb2Fk
KCkKK3sKKyAgICBBU1NFUlQoaXNEb3dubG9hZCgpKTsKKyAgICBBU1NFUlQobV9wZW5kaW5nRG93
bmxvYWRMb2NhdGlvbik7CisKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtE
YXRhVGFza0Jsb2I6OmRvd25sb2FkIHRvICVzIiwgdGhpcywgbV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbi51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fZG93bmxvYWRGaWxlID0gb3BlbkZpbGUobV9w
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbiwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAobV9kb3dubG9h
ZEZpbGUgPT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICBkaWRGYWlsRG93
bmxvYWQoY2FuY2VsbGVkRXJyb3IobV9maXJzdFJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKTsKKyAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtl
X3VuaXF1ZTxEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9hZElELCAq
dGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAg
YXV0byogZG93bmxvYWRQdHIgPSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIu
ZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShk
b3dubG9hZCkpOworICAgIGRvd25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRp
bmdEb3dubG9hZExvY2F0aW9uKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGll
bnQtPmRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVyU2l6
ZSk7CisgICAgcmVhZCgpOworfQorCitib29sIE5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93
bmxvYWQoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBBU1NFUlQoaXNE
b3dubG9hZCgpKTsKKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUobV9kb3dubG9h
ZEZpbGUsIGRhdGEsIGJ5dGVzUmVhZCk7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgewor
ICAgICAgICBkaWRGYWlsRG93bmxvYWQoY2FuY2VsbGVkRXJyb3IobV9maXJzdFJlcXVlc3QpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4g
PT0gYnl0ZXNSZWFkKTsKKyAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsK
KyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlRGF0YShieXRl
c1dyaXR0ZW4pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Js
b2I6OmNsZWFuRG93bmxvYWRGaWxlcygpCit7CisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgY2xvc2VGaWxlKG1fZG93bmxvYWRG
aWxlKTsKKyAgICAgICAgbV9kb3dubG9hZEZpbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
OworICAgIH0KKyAgICBkZWxldGVGaWxlKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKK3sKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtE
YXRhVGFza0Jsb2I6OmRpZEZhaWxEb3dubG9hZCIsIHRoaXMpOworCisgICAgY2xlYXJTdHJlYW0o
KTsKKyAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxv
YWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgICAgIEFTU0VS
VChkb3dubG9hZCk7CisgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFS
ZWZlcmVuY2UoKSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZp
bmlzaERvd25sb2FkKCkKK3sKKyAgICBMT0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtE
YXRhVGFza0Jsb2I6OmRpZEZpbmlzaERvd25sb2FkIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNE
b3dubG9hZCgpKTsKKyAgICBjbG9zZUZpbGUobV9kb3dubG9hZEZpbGUpOworICAgIG1fZG93bmxv
YWRGaWxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKworICAgIGNsZWFyU3RyZWFtKCk7
CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxv
YWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRv
d25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrQmxvYjo6ZGlkRmFpbChFcnJvciBlcnJvckNvZGUpCit7CisgICAgUmVmPE5ldHdvcmtE
YXRhVGFza0Jsb2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGlmIChpc0Rvd25sb2FkKCkp
IHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291
cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVy
bCgpLCBTdHJpbmcoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKE5ldHdv
cmtTZXNzaW9uLCAiJXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsIiwgdGhpcyk7CisK
KyAgICBjbGVhclN0cmVhbSgpOworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQt
PmRpZENvbXBsZXRlV2l0aEVycm9yKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9t
YWluLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBT
dHJpbmcoKSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCgpCit7
CisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsK
KyAgICAgICAgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmlu
aXNoIiwgdGhpcyk7CisKKyAgICBjbGVhclN0cmVhbSgpOworICAgIEFTU0VSVChtX2NsaWVudCk7
CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsgfSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjU1MmJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5oCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTdHJlYW1DbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXN5
bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBCbG9iRGF0YUl0ZW07Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tCbG9iIGZpbmFsIDog
cHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6OkZpbGVTdHJlYW1DbGllbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29y
a1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmlu
Z1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tCbG9iKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc2hv
dWxkQ29udGVudFNuaWZmKSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRhVGFza0Jsb2IoKTsK
KworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tCbG9iKE5ldHdvcmtTZXNzaW9uJiwgTmV0
d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJy
aWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICBOZXR3
b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zdGF0
ZTsgfQorCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcm
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUq
Lykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdm9pZCBkaWRHZXRT
aXplKGxvbmcgbG9uZykgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRPcGVuKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkUmVhZChpbnQpIG92ZXJyaWRlOworCisgICAgZW51bSBjbGFzcyBFcnJv
ciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBOb3RGb3VuZEVycm9yID0gMSwKKyAg
ICAgICAgU2VjdXJpdHlFcnJvciA9IDIsCisgICAgICAgIFJhbmdlRXJyb3IgPSAzLAorICAgICAg
ICBOb3RSZWFkYWJsZUVycm9yID0gNCwKKyAgICAgICAgTWV0aG9kTm90QWxsb3dlZCA9IDUKKyAg
ICB9OworCisgICAgdm9pZCBjbGVhclN0cmVhbSgpOworICAgIHZvaWQgZ2V0U2l6ZUZvck5leHQo
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShFcnJvciA9IEVycm9yOjpOb0Vycm9yKTsK
KyAgICB2b2lkIHNlZWsoKTsKKyAgICB2b2lkIGNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBieXRlc1JlYWQpOworICAgIHZvaWQgcmVhZCgpOworICAgIHZvaWQgcmVhZERhdGEoY29u
c3QgV2ViQ29yZTo6QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCByZWFkRmlsZShjb25zdCBXZWJD
b3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lkIGRvd25sb2FkKCk7CisgICAgYm9vbCB3cml0
ZURvd25sb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOworICAgIHZvaWQgY2xl
YW5Eb3dubG9hZEZpbGVzKCk7CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2
b2lkIGRpZEZhaWwoRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNoKCk7CisKKyAgICBlbnVtIHsg
a1Bvc2l0aW9uTm90U3BlY2lmaWVkID0gLTEgfTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpCbG9i
RGF0YT4gbV9ibG9iRGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nLgorICAgIFZlY3Rv
cjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0ZW1MZW5ndGhMaXN0
OworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgbG9uZyBsb25n
IG1fcmFuZ2VPZmZzZXQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgfTsKKyAgICBsb25nIGxvbmcg
bV9yYW5nZUVuZCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9OworICAgIGxvbmcgbG9uZyBtX3Jh
bmdlU3VmZml4TGVuZ3RoIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07CisgICAgbG9uZyBsb25n
IG1fdG90YWxTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX3RvdGFsUmVtYWluaW5nU2l6ZSB7
IDAgfTsKKyAgICBsb25nIGxvbmcgbV9jdXJyZW50SXRlbVJlYWRTaXplIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fc2l6ZUl0ZW1Db3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3JlYWRJdGVtQ291
bnQgeyAwIH07CisgICAgYm9vbCBtX2ZpbGVPcGVuZWQgeyBmYWxzZSB9OworICAgIFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2Rvd25sb2FkRmlsZSB7IFdlYkNvcmU6OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAppbmRleCA5MDMxNTYyLi5iYzRjNDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC02NywxMCArNjcsNiBAQCBO
ZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllbnQmIGNsaWVudCwgTmV0d29y
a0xvYWRQYXJhbWV0ZXJzJiYgcGFyYQogICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1l
dGVycykpCiAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fcGFyYW1ldGVycy5yZXF1ZXN0KQogewot
ICAgIGlmIChtX3BhcmFtZXRlcnMucmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0g
ICAgICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShudWxscHRyLCBtX3BhcmFt
ZXRlcnMucmVxdWVzdCwgdGhpcywgbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcsIG1fcGFyYW1l
dGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KICAgICBtX3Rhc2sgPSBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShuZXR3b3Jr
U2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCBtX3BhcmFtZXRlcnMuYWxsb3dT
dG9yZWRDcmVkZW50aWFscywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgbV9w
YXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogICAg
IGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCiAgICAgICAgIG1fdGFzay0+cmVzdW1l
KCk7CkBAIC0xMDEsMTIgKzk3LDE0IEBAIE5ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQoKQogI2Vu
ZGlmCiAgICAgaWYgKG1fdGFzaykKICAgICAgICAgbV90YXNrLT5jbGVhckNsaWVudCgpOwotI2Vs
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNlbHNlCisjaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICBpZiAobV9oYW5kbGUgJiYgbV93YWl0
aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKQogICAg
ICAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGZhbHNlKTsKICNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUt
PmNsZWFyQ2xpZW50KCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJz
TG9hZGluZyhib29sIGRlZmVycykKQEAgLTExOCw5ICsxMTYsMTAgQEAgdm9pZCBOZXR3b3JrTG9h
ZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV90YXNrLT5yZXN1bWUoKTsKICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFu
ZGxlKQogICAgICAgICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworI2VuZGlm
CiB9CiAKIHZvaWQgTmV0d29ya0xvYWQ6OmNhbmNlbCgpCkBAIC0xMjgsOSArMTI3LDEwIEBAIHZv
aWQgTmV0d29ya0xvYWQ6OmNhbmNlbCgpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBp
ZiAobV90YXNrKQogICAgICAgICBtX3Rhc2stPmNhbmNlbCgpOwotI2VuZGlmCisjZWxzZQogICAg
IGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworI2VuZGlmCiB9CiAK
IHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpCkBAIC0xNDMsMjcgKzE0MywyMSBAQCB2b2lkIE5ldHdv
cmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiBuZXdSZXF1ZXN0KQogI2VuZGlmCiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1
dG8gcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZWRpcmVjdENv
bXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsgICAgCisgICAgYXV0byByZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51
bGxwdHIpOworICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKQorICAgICAgICBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiAgICAg
QVNTRVJUKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpOwotI2VuZGlmCi0gICAgCisgICAgaWYg
KHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIHJlZGlyZWN0Q29tcGxldGlvbkhh
bmRsZXIobV9jdXJyZW50UmVxdWVzdCk7CisjZWxzZQogICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0
LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgICAgIG1faGFuZGxl
LT5jYW5jZWwoKTsKICAgICAgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJy
b3IobV9jdXJyZW50UmVxdWVzdCkpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAg
IGlmIChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICAgICAgcmVkaXJlY3RDb21w
bGV0aW9uSGFuZGxlcih7IH0pOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKICAgICB9IGVsc2Ug
aWYgKG1faGFuZGxlKSB7CiAgICAgICAgIGF1dG8gY3VycmVudFJlcXVlc3RDb3B5ID0gbV9jdXJy
ZW50UmVxdWVzdDsKICAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdU
Rk1vdmUoY3VycmVudFJlcXVlc3RDb3B5KSk7CiAgICAgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICBpZiAocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgcmVkaXJl
Y3RDb21wbGV0aW9uSGFuZGxlcihtX2N1cnJlbnRSZXF1ZXN0KTsKICNlbmRpZgogfQogCkBAIC0x
NzEsMTIgKzE2NSwxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSgpCiB7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBpZiAobV9yZXNwb25zZUNv
bXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQ
b2xpY3lVc2UpOwotICAgICAgICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRy
OworICAgICAgICBhdXRvIHJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdl
KG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7CisgICAgICAgIHJlc3BvbnNl
Q29tcGxldGlvbkhhbmRsZXIoUG9saWN5VXNlKTsKICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAg
aWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2UoKTsKKyNlbmRpZgogfQogCiBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UgTmV0d29ya0xvYWQ6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShSZXNv
dXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UpCkBAIC0yODUsNiArMjgwLDIzIEBAIHZvaWQgTmV0d29y
a0xvYWQ6OmNvbXBsZXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ2hhbGxlbmdlQ29tcGxldGlv
bkhhbmRsZXImJiBjCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50
aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJh
bWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsICptX2NoYWxsZW5nZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCisjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQobV9j
aGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9
IHN0ZDo6ZXhjaGFuZ2UobV9jaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7Cisg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPmFsbG93c1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoKm1fY2hhbGxlbmdlKSkKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVz
ZUNyZWRlbnRpYWwsIHNlcnZlclRydXN0Q3JlZGVudGlhbCgqbV9jaGFsbGVuZ2UpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlLCB7IH0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisjZW5kaWYKKwogdm9pZCBOZXR3b3JrTG9hZDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oUmVzb3VyY2VSZXNwb25zZSYmIHJlc3Bv
bnNlLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTM2Miw4ICszNzQsOCBAQCB2b2lkIE5ldHdv
cmtMb2FkOjpjYW5ub3RTaG93VVJMKCkKIHsKICAgICBtX2NsaWVudC5kaWRGYWlsTG9hZGluZyhj
YW5ub3RTaG93VVJMRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwogfQotICAgIAotI2VuZGlmCisK
KyNlbHNlCiAKIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVzcG9uc2UmJiByZWNlaXZlZFJlc3BvbnNlKQog
ewpAQCAtNDE4LDMyICs0MzAsMTMgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW4KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIG1fd2FpdGlu
Z0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSA9IHRydWU7
Ci0jZW5kaWYKICAgICBtX2NsaWVudC5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlQXN5bmMocHJvdGVjdGlvblNwYWNlKTsKIH0KLSNlbmRpZgogCi0jaWYgVVNFKFBST1RFQ1RJ
T05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKIHsKLSNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faGFuZGxlLCAiQmxv
YnMgc2hvdWxkIG5ldmVyIGdpdmUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlcyIpOwotICAgIEFT
U0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICBhdXRvIGNvbXBsZXRpb25I
YW5kbGVyID0gc3RkOjpleGNoYW5nZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyLCBudWxs
cHRyKTsKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAobV90YXNrICYmIG1fdGFzay0+
YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2UpKQotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbjo6VXNlQ3JlZGVudGlhbCwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxsZW5nZSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSNlbHNlCiAgICAgbV93YWl0aW5nRm9y
Q29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlID0gZmFsc2U7Ci0j
ZW5kaWYKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKIH0KQEAgLTUxNSw1ICs1
MDgsNiBAQCB2b2lkIE5ldHdvcmtMb2FkOjpyZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdAogICAgIG1faGFuZGxlLT5jYW5jZWwoKTsK
ICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1
ZXN0KSk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrTG9hZC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApp
bmRleCAyN2Q0MzE3Li4zZjYxMzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmgKQEAgLTQwLDkgKzQwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1jbGFzcyBOZXR3b3JrTG9hZCBmaW5hbCA6IHByaXZhdGUgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDbGllbnQKK2NsYXNzIE5ldHdvcmtMb2FkIGZpbmFsIDoKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgICwgcHJpdmF0ZSBOZXR3b3JrRGF0YVRhc2tDbGllbnQKKyAgICBwcml2YXRlIE5l
dHdvcmtEYXRhVGFza0NsaWVudAorI2Vsc2UKKyAgICBwcml2YXRlIFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlQ2xpZW50CiAjZW5kaWYKIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTY5LDcgKzcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWQoUGVuZGluZ0Rvd25sb2Fk
Jik7CiAgICAgRG93bmxvYWRJRCBwZW5kaW5nRG93bmxvYWRJRCgpIHsgcmV0dXJuIG1fdGFzay0+
cGVuZGluZ0Rvd25sb2FkSUQoKTsgfQotI2VuZGlmCisjZWxzZQorICAgIFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQogCiAj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICB2b2lkIGNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlOwpAQCAtODUsMTcg
Kzg4LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2Vu
ZGlmCiAjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiAjaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKICNlbmRpZgogCi0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgp
OyB9Ci0KIHByaXZhdGU6CiAgICAgTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYpOwogICAgIHZvaWQgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmKTsK
IAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50
CiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSos
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYg
cmVkaXJlY3RSZXNwb25zZSkgZmluYWw7CiAgICAgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIGZpbmFsOwpAQCAtMTExLDggKzExNCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgZmluYWw7CiAg
ICAgYm9vbCB1c2VzQXN5bmNDYWxsYmFja3MoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAg
Ym9vbCBsb2FkaW5nU3luY2hyb25vdXNYSFIoKSBmaW5hbCB7IHJldHVybiBtX2NsaWVudC5pc1N5
bmNocm9ub3VzKCk7IH0KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjZWxzZQogICAgIC8v
IE5ldHdvcmtEYXRhVGFza0NsaWVudAogICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rp
b24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2Vp
dmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFs
bGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKQEAgLTE0Niw4ICsxNDgsOCBAQCBwcml2
YXRlOgogI2Vsc2UKICAgICBib29sIG1fd2FpdGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgUmVmUHRyPFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwotI2VuZGlmCiAgICAgUmVmUHRyPFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKKyNlbmRpZgogCiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7IC8vIFVwZGF0ZWQgb24gcmVkaXJlY3Rz
LgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmNwcAppbmRleCAxZjgxODE5Li4xZTVlMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQogCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogCkBAIC04MSw2ICs4MiwxMiBAQCBOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtT
ZXNzaW9uKCkKIHsKIH0KIAordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNl
bCgpCit7CisgICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAgdGFz
ay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCA5OWQwOTgxLi5kNWIwMTZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogCiAjaW5jbHVkZSA8V2ViQ29yZS9T
ZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zOCw2ICszOSw3IEBAIGNsYXNz
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBDdXN0
b21Qcm90b2NvbE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CiAKIGNsYXNzIE5ldHdv
cmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Npb24+IHsKIHB1YmxpYzoK
QEAgLTQ1LDE2ICs0NywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uJiBk
ZWZhdWx0U2Vzc2lvbigpOwogICAgIHZpcnR1YWwgfk5ldHdvcmtTZXNzaW9uKCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRlbnRpYWxz
KCkgeyB9OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Vzc2lvbklEOyB9CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAorICAgIHZvaWQgcmVnaXN0ZXJOZXR3b3Jr
RGF0YVRhc2soTmV0d29ya0RhdGFUYXNrJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRkKCZ0YXNr
KTsgfQorICAgIHZvaWQgdW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2sm
IHRhc2spIHsgbV9kYXRhVGFza1NldC5yZW1vdmUoJnRhc2spOyB9CisKIHByb3RlY3RlZDoKICAg
ICBOZXR3b3JrU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwogCiAgICAgV2ViQ29yZTo6U2Vz
c2lvbklEIG1fc2Vzc2lvbklEOworCisgICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2sqPiBtX2Rh
dGFUYXNrU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2Eu
aAppbmRleCAwYThlZGJiLi42MzQyZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKQEAgLTYxLDYg
KzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZSB7IH0KICAgICBOZXR3b3JrRGF0YVRhc2s6
OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQppbmRleCAxNWZiYjZk
Li42NDc1NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
TmV0d29ya0xvYWRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFj
L05ldHdvcmtMb2FkTWFjLm1tCkBAIC0yNiw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIk5ldHdvcmtMb2FkLmgiCiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKwog
I2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3Vy
Y2VIYW5kbGUuaD4KIApAQCAtNTQsMyArNTYsNSBAQCB2b2lkIE5ldHdvcmtMb2FkOjp3aWxsQ2Fj
aGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcAog
I2VuZGlmIC8vICFVU0UoQ0ZVUkxDT05ORUNUSU9OKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5k
ZXggMTc2MzY1Mi4uMWU5ZWU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC01Miw3ICs1Miw3
IEBAIE5ldHdvcmtEYXRhVGFza1NvdXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Np
b24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFzCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihz
aG91bGRDb250ZW50U25pZmYpCiAgICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVkKQogewotICAgIHN0YXRp
Y19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkucmVnaXN0ZXJOZXR3
b3JrRGF0YVRhc2soKnRoaXMpOworICAgIG1fc2Vzc2lvbi0+cmVnaXN0ZXJOZXR3b3JrRGF0YVRh
c2soKnRoaXMpOwogICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtEYXRhVGFza1NvdXA6
Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRh
VGFzCiBOZXR3b3JrRGF0YVRhc2tTb3VwOjp+TmV0d29ya0RhdGFUYXNrU291cCgpCiB7CiAgICAg
Y2xlYXJSZXF1ZXN0KCk7Ci0gICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9z
ZXNzaW9uLmdldCgpKS51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBtX3Nl
c3Npb24tPnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOwogfQogCiBTdHJpbmcgTmV0
d29ya0RhdGFUYXNrU291cDo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdApAQCAtODYzLDcgKzg2
Myw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQoKQogICAgIG1fZG93bmxv
YWRPdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoR19PVVRQVVRfU1RSRUFNKG91dHB1dFN0cmVhbS5s
ZWFrUmVmKCkpKTsKIAogICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNz
OjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKTsKLSAgICBhdXRvIGRvd25sb2FkID0gc3Rk
OjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9h
ZElELCB0aGlzLCBtX3Nlc3Npb24tPnNlc3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsK
KyAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oZG93bmxvYWRN
YW5hZ2VyLCBtX3BlbmRpbmdEb3dubG9hZElELCAqdGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQo
KSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CiAgICAgYXV0byogZG93bmxvYWRQdHIgPSBkb3dubG9h
ZC5nZXQoKTsKICAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2so
bV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwogICAgIGRvd25sb2FkUHRy
LT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRh
c2tTb3VwLmgKaW5kZXggYzhmYTFhMi4uMGJmZTU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTQy
LDE0ICs0MiwxMyBAQCBwdWJsaWM6CiAKICAgICB+TmV0d29ya0RhdGFUYXNrU291cCgpOwogCi0g
ICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Ci0KIHByaXZhdGU6CiAgICAgTmV0d29ya0Rh
dGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBX
ZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAKICAgICB2b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsKICAg
ICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgTmV0d29ya0RhdGFU
YXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5j
cHAKaW5kZXggYWM4Mjg3MC4uNTllZjkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtMjYsMTAg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNv
dXAuaCIKIAotI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1NvdXAuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdv
cmtTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDEwICs0Nyw0IEBAIFNvdXBTZXNzaW9uKiBOZXR3b3JrU2Vz
c2lvblNvdXA6OnNvdXBTZXNzaW9uKCkgY29uc3QKICAgICByZXR1cm4gbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKTsKIH0KIAotdm9pZCBO
ZXR3b3JrU2Vzc2lvblNvdXA6OmludmFsaWRhdGVBbmRDYW5jZWwoKQotewotICAgIGZvciAoYXV0
byogdGFzayA6IG1fZGF0YVRhc2tTZXQpCi0gICAgICAgIHRhc2stPmludmFsaWRhdGVBbmRDYW5j
ZWwoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAppbmRleCBkNzVm
Yjg4Li5jNWZjZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtTZXNzaW9uU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKQEAgLTI2LDE0ICsyNiwxMSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAKIHR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtEYXRhVGFza1NvdXA7Ci0KIGNsYXNzIE5l
dHdvcmtTZXNzaW9uU291cCBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvbiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCkBAIC00NCwxNSArNDEsOCBAQCBwdWJsaWM6CiAKICAgICBTb3VwU2Vzc2lv
biogc291cFNlc3Npb24oKSBjb25zdDsKIAotICAgIHZvaWQgcmVnaXN0ZXJOZXR3b3JrRGF0YVRh
c2soTmV0d29ya0RhdGFUYXNrU291cCYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFzayk7
IH0KLSAgICB2b2lkIHVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291
cCYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7IH0KLQogcHJpdmF0ZToKICAg
ICBOZXR3b3JrU2Vzc2lvblNvdXAoV2ViQ29yZTo6U2Vzc2lvbklEKTsKLQotICAgIHZvaWQgaW52
YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOwotCi0gICAgSGFzaFNldDxOZXR3b3JrRGF0YVRh
c2tTb3VwKj4gbV9kYXRhVGFza1NldDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA3ZDlhMDM2Li41NDZlNjVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtNiw4ICs2LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAKICAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0Vm
bC5jcHAKIAotICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKLQogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCiAgICAg
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNzU5NTlhMy4uODZjNTU1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTMzLDggKzMzLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VT
CiAKICAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0
ay5jcHAKIAotICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKLQogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCiAgICAg
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
YzhjZTFhLi5kMWYxYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDQzLDYgKzEwNDMsOCBAQAogCQk1MzIxNTk1NDFEQkFF
NzFEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3
b3JrRGF0YVRhc2suY3BwICovOyB9OwogCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0
d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2Eu
aCAqLzsgfTsKIAkJNTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0Nv
Y29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIx
NTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCAqLzsgfTsKKwkJ
NTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUI1NDYxREMyRUU0
MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICovOyB9OworCQk1M0JBNDdEMTFE
QzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8q
IE5ldHdvcmtEYXRhVGFza0Jsb2IuaCAqLzsgfTsKIAkJNUMwNTJGMjYxQzZEM0JEMzAwNzZFOTE5
IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMwNTJGMjQxQzZEM0FCNjAwNzZFOTE5IC8qIEF1dGhl
bnRpY2F0aW9uTWFuYWdlckNvY29hLm1tICovOyB9OwogCQk1QzE0MjZFQzFDMjNGODA5MDBENDEx
ODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTIxQzIzRjgwNTAwRDQxMTgz
IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLzsgfTsKIAkJNUMxNDI2
RUQxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFMzFD
MjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsg
fTsKQEAgLTMxMzEsNiArMzEzMyw4IEBACiAJCTUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBO
ZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtTZXNzaW9uQ29jb2EuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NTExREJB
RTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2suY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0RhdGFUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMy
MTU5NTIxREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM5RUI1NDYxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQmxvYi5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdv
cmtEYXRhVGFza0Jsb2IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29y
a0RhdGFUYXNrQmxvYi5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxv
Yi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlEMThCNzFDQ0ZFMzRCMDBCMTk3
NEMgLyogUGhvdG9zU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1NQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QzA1MkYyNDFDNkQzQUI2MDA3NkU5MTkgLyogQXV0aGVudGlj
YXRpb25NYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgcGF0aCA9IEF1dGhlbnRpY2F0aW9u
L2NvY29hL0F1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QzE0MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTQ2NSw2ICs1NDY5LDggQEAKIAkJCQk1Q0JDOUI4OTFDNjUyNEE1MDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8sCiAJCQkJODM5OTAxRkYxQkU5QTAxQjAwMEYz
NjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLywKIAkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMg
LyogTmV0d29ya0xvYWQuaCAqLywKKwkJCQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0
d29ya0RhdGFUYXNrQmxvYi5jcHAgKi8sCisJCQkJNTM5RUI1NDcxREMyRUU0MDAwOUQ0OENGIC8q
IE5ldHdvcmtEYXRhVGFza0Jsb2IuaCAqLywKIAkJCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQg
LyogTmV0d29ya0xvYWRDbGllbnQuaCAqLywKIAkJCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMg
LyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggKi8sCiAJCQkJNTEwQ0M3REYxNjEzOEUyOTAwRDAz
RUQzIC8qIE5ldHdvcmtQcm9jZXNzLmNwcCAqLywKQEAgLTc4MjcsNiArNzgzMyw3IEBACiAJCQkJ
MUEwRUM2QzAxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEwRUM3NUUxMjRCQzdCMjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwNDNCNUUxMjRENUU5RDAwRkZCRkI1IC8qIFBs
dWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0JBNDdEMTFE
QzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUEwNDNEQzExMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQThFRkE3MTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTlGMzMxMkI4NDRFMjAwOEZFOTg0IC8qIFBsdWdpblF1
aXJrcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzIwLDYgKzkzMjcsNyBAQAogCQkJCTFBMkQ5MjIx
MTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q2MjI3NzE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk1M0JBNDdEMDFEQzJFRjVFMDA0
REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgy
ODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQTZGQjdBRTExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMThDOTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293623</attachid>
            <date>2016-11-01 17:21:53 -0700</date>
            <delta_ts>2016-11-02 02:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163939-20161101171755.patch</filename>
            <type>text/plain</type>
            <size>85426</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTExLTAxICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrU2Vz
c2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBpbXBsZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkzOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYXJrIEhUVFBQYXJzZXJzLmggYW5kIEFzeW5jRmlsZVN0
cmVhbS5oIGFzIHByaXZhdGUuCisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaDog
QWRkIFdFQkNPUkVfRVhQT1JUIHRvIEFzeW5jRmlsZVN0cmVhbSBjbGFzcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBsZW5ndGgo
KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmg6IEFkZCBXRUJDT1JF
X0VYUE9SVCB0byBwYXJzZVJhbmdlKCkuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlc3BvbnNlQmFzZS5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gc2V0SFRUUEhlYWRlckZp
ZWxkKCkuCisKIDIwMTYtMTEtMDEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBw
bGUuY29tPgogCiAgICAgICAgIFBvcnQgUGFnZSB0aW1lciB0aHJvdHRsaW5nIHRvIHVzZSBBY3Rp
dml0eVN0YXRlIGluc3RlYWQgb2YgUGFnZVRocm90dGxlcgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MjQ3
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDYzLDcgKzIwNjMsNyBAQAogCQk1MTRDNzY3MDBDRTkyM0ExMDA3
RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjVCMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjcxMENFOTIz
QTEwMDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY1QzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRl
ck1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxNEM3NjcyMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY1RDBDRTkyM0ExMDA3RUYz
Q0QgLyogSFRUUFBhcnNlcnMuY3BwICovOyB9OwotCQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0Qg
LyogSFRUUFBhcnNlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNEM3NjVFMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oICovOyB9Owor
CQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVFMENFOTIzQTEwMDdFRjND
RCAvKiBIVFRQUGFyc2Vycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUxNEM3Njc0MENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VC
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NEM3NjVGMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmNwcCAqLzsgfTsK
IAkJNTE0Qzc2NzUwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjYwMENFOTIz
QTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzgwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjYzMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5jcHAg
Ki87IH07CkBAIC02MTgyLDcgKzYxODIsNyBAQAogCQlFMUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAg
LyogSlNXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDQTVDQkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNw
cCAqLzsgfTsKIAkJRTFDQUE1QzYwRThCRDIzNjAwQTczRUNBIC8qIEpTV29ya2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBQTVDNTBFOEJEMjM2
MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCAqLzsgfTsKIAkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1
IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUNERTkxRjE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFt
LmNwcCAqLzsgfTsKLQkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVh
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5
MjExNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKCk7IH07IH07CisJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3lu
Y0ZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQ0RFOTIxMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUQzMUNEQzE5MTk2
MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRDMxQ0RBMTkxOTYwMjAwMDEwMDVBMyAv
KiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwICovOyB9OwogCQlFMUQzMUNERDE5MTk2MDIwMDAx
MDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUQzMUNEQjE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRh
dGFGaWxlUmVmZXJlbmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTFFMUJGMDAxMTVGRjZGQjAwNkY1MkNBIC8qIFdpbmRvd3NLZXlib2FyZENv
ZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUUx
QkVGRjExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIGNsYXNzIEZpbGVTdHJlYW1DbGllbnQ7CiBjbGFzcyBGaWxlU3RyZWFtOwogY2xh
c3MgVVJMOwogCi1jbGFzcyBBc3luY0ZpbGVTdHJlYW0geworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
QXN5bmNGaWxlU3RyZWFtIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBBc3luY0ZpbGVTdHJlYW0o
RmlsZVN0cmVhbUNsaWVudCYpOwogICAgIH5Bc3luY0ZpbGVTdHJlYW0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MjQ3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE2LTExLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRh
VGFzayBpbXBsZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUE9URklMRVMuaW46IFJlbW92ZSBEb3dubG9hZFNvdXAu
Y3BwCisKIDIwMTYtMTAtMTkgIEdhYm9yIEtlbGVtZW4gIDxrZWxlbWVuZ0B1YnVudHUuY29tPgog
CiAgICAgICAgIFtHVEtdIFtMMTBuXSBVcGRhdGVkIEh1bmdhcmlhbiB0cmFuc2xhdGlvbgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgkocmV2aXNpb24g
MjA4MjQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogIyBMaXN0IG9mIHNvdXJjZSBmaWxlcyB3aGlj
aCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgogRXJyb3JzR3RrLmNwcAogTG9jYWxpemVk
U3RyaW5nc0d0ay5jcHAKLS4uLy4uLy4uL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L3NvdXAvRG93bmxvYWRTb3VwLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmgJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKiBmaWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAKICAgICBsb25nIGxvbmcgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7
IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KKyAgICBXRUJD
T1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVu
Z3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QmxvYkRhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJz
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
UGFyc2Vycy5oCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBQYXJzZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgQXRv
bWljU3RyaW5nIGV4dHJhY3RSZWFzb25QaHJhc2VGcm9tSFRUUAogWEZyYW1lT3B0aW9uc0Rpc3Bv
c2l0aW9uIHBhcnNlWEZyYW1lT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmKTsKIAogLy8gLTEg
Y291bGQgYmUgc2V0IHRvIG9uZSBvZiB0aGUgcmV0dXJuIHBhcmFtZXRlcnMgdG8gaW5kaWNhdGUg
dGhlIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQuCi1ib29sIHBhcnNlUmFuZ2UoY29uc3QgU3RyaW5n
JiwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBsb25nJiByYW5nZUVuZCwgbG9uZyBsb25n
JiByYW5nZVN1ZmZpeExlbmd0aCk7CitXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlUmFuZ2UoY29u
c3QgU3RyaW5nJiwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBsb25nJiByYW5nZUVuZCwg
bG9uZyBsb25nJiByYW5nZVN1ZmZpeExlbmd0aCk7CiAKICNpZiBFTkFCTEUoTk9TTklGRikKIENv
bnRlbnRUeXBlT3B0aW9uc0Rpc3Bvc2l0aW9uIHBhcnNlQ29udGVudFR5cGVPcHRpb25zSGVhZGVy
KGNvbnN0IFN0cmluZyYgaGVhZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDIwODI0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBodHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKIAogICAgIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4
MjQ3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTA0IEBACisyMDE2LTExLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBp
bXBsZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBOZXR3b3JrRGF0YVRhc2tCbG9iIHRvIGhhbmRsZSBibG9icyB3
aGVuIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgdXNpbmcgUmVzb3VyY2VIYW5kbGUu
IFRoaXMgcGF0Y2gKKyAgICAgICAgYWRkcyBtb3JlIFVTRShORVRXT1JLX1NFU1NJT04pIGlmZGVm
cyB0byBub3QgdXNlIFJlc291cmNlSGFuZGxlIGluIERvd25sb2FkcyBhbmQgTmV0d29ya0xvYWQg
d2hlbiBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBpcyBlbmFibGVkLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpEb3dubG9hZCk6IFNwbGl0IHRoZSBjb25zdHJ1Y3RvciBhZ2FpbiBhbmQgcmVt
b3ZlIHRoZSBQbGF0Zm9ybURvd25sb2FkVGFza1JlZgorICAgICAgICBkZWZpbml0aW9ucy4gTm93
IENvY29hIHNwZWNpZmljIGNvbnN0cnVjdG9yIHJlY2VpdmVzIGEgTlNVUkxTZXNzaW9uRG93bmxv
YWRUYXNrIGFuZCB0aGUgZ2VuZXJhbCBjb25zdHJ1Y3RvcgorICAgICAgICByZXZlaWNlcyBhIE5l
dHdvcmtEYXRhVGFzayBhbmQgaXMgdXNlZCBieSBTb3VwIGJhY2tlbmQgYW5kIGJsb2JzLgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNh
bmNlbE5ldHdvcmtMb2FkKTogUmVuYW1lIGNhbmNlbE5ldHdvcmtMb2FkKCkgYXMgcGxhdGZvcm1D
YW5jZWxOZXR3b3JrTG9hZCgpIHNpbmNlCisgICAgICAgIHRoaXMgaXMgbm93IHVzZWQgb25seSBi
eSBDb2NvYSBwbGF0Zm9ybSB0byBjYW5jZWwgdGhlIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzay4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OnN1Z2dlc3RlZE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cmVxdWVzdCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZCk6IFJlbW92ZSBi
bG9icyBzcGVjaWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0
aW5hdGlvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFu
YWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9h
ZENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3
b3JrTG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxv
YWRTb3VwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOiBSZW1v
dmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuCisgICAgICAgIHVzaW5nIE5ldHdvcmtTZXNzaW9u
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKTogSWYgcmVxdWVzdCBpcyBhIGJsb2Is
IGNyZWF0ZSBhIE5ldHdvcmtEYXRhVGFza0Jsb2IuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrLmg6IEFkZCBpbnZhbGlkYXRlQW5kQ2FuY2VsIHB1cmUgdmlydHVhbCBt
ZXRob2QuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3JrRGF0
YVRhc2tCbG9iKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdv
cmtEYXRhVGFza0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpj
bGVhclN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3Vt
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjYW5jZWwpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRHZXRTaXplKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c2Vlayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtEYXRhVGFza0Jsb2I6OnJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tC
bG9iOjpyZWFkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnJl
YWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjb25zdW1lRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VnZ2VzdGVkRmlsZW5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OndyaXRlRG93bmxvYWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRvd25sb2FkRmlsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2hEb3dubG9hZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDogQWRkZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6
TmV0d29ya0xvYWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29kZSB3aGVuIHVzaW5nIE5ldHdv
cmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0xvYWQ6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
Lmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6IE1vdmVkIGZy
b20gTmV0d29ya1Nlc3Npb25Tb3VwLCBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGFsc28gYnkgYmxv
YnMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjp1bnJlZ2lzdGVyTmV0d29ya0RhdGFU
YXNrKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFU
YXNrQ29jb2EuaDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBpbXBsZW1lbnRhdGlvbiB0aGF0
IGRvZXMgbm90aGluZworICAgICAgICBiZWNhdXNlIGluIENvY29hIGFsbCB0YXNrcyBhcmUgaW52
YWxpZGF0ZWQgYW5kIGNhbmNlbCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6
IFJlbW92ZSBEb3dubG9hZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxh
dGZvcm1HVEsuY21ha2U6IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMS0wMSAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IElzQXVkaWJsZSwgSXNMb2FkaW5nIHRvIEFjdGl2aXR5U3RhdGUKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29y
a1Byb2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2su
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMDgyNDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
Niw4ICs2LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvZWZsL0Rvd25sb2FkU291cEVycm9yc0VmbC5jcHAKIAotICAgIE5ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKLQogICAgIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyc1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRGF0YVNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3Vw
RXJyb3JzR3RrLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxv
YWRTb3VwLmNwcAotCiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJz
U291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEYXRhU291cC5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNw
cApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjA4MjQ3KQor
KysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsMTggKzIwNywxNiBAQCB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252CiAgICAgfQogCiAjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0Jsb2IoKSkgewotICAg
ICAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCktPmNvbnZlcnRUYXNrVG9Eb3dubG9hZChkb3dubG9h
ZElELCByZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIGxvYWRlci0+ZGlkQ29udmVydFRvRG93
bmxvYWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIGxvYWRlci0+bmV0
d29ya0xvYWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QsIHJl
c3BvbnNlKTsKKyAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZWxzZQogICAg
IG5ldHdvcmtQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2Fk
KGRvd25sb2FkSUQsIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJl
c3BvbnNlKTsKIAogICAgIC8vIFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBx
dWV1ZS4KICAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCktPmhhbmRsZSgpLT5jb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZSgpOwogCiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9hZCgpOwor
I2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNG
b3JET00oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBV
UkwmIHVybCwgU3RyaW5nJiByZXN1bHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHJldmlzaW9uIDIwODI0NykKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNp
bmNsdWRlICJOZXR3b3JrRGF0YVRhc2tCbG9iLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw2ICs0NSw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNy
ZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYs
IGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKIHsKKyAgICBp
ZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKQorICAgICAgICByZXR1cm4gTmV0d29y
a0RhdGFUYXNrQmxvYjo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc2hvdWxkQ29u
dGVudFNuaWZmKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiBOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVu
dGlhbHMsIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNiArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOwogCiAgICAg
ZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFJ1bm5pbmcsCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2tCbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFza0Jsb2IuaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXN5bmNG
aWxlU3RyZWFtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iRGF0YS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQmxvYlJlZ2lzdHJ5SW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN0cmVhbS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IDUxMiAq
IDEwMjQ7CisKK3N0YXRpYyBjb25zdCBpbnQgaHR0cE9LID0gMjAwOworc3RhdGljIGNvbnN0IGlu
dCBodHRwUGFydGlhbENvbnRlbnQgPSAyMDY7CitzdGF0aWMgY29uc3QgaW50IGh0dHBOb3RBbGxv
d2VkID0gNDAzOworc3RhdGljIGNvbnN0IGludCBodHRwUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2Zp
YWJsZSA9IDQxNjsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cEludGVybmFsRXJyb3IgPSA1MDA7Citz
dGF0aWMgY29uc3QgY2hhciogaHR0cE9LVGV4dCA9ICJPSyI7CitzdGF0aWMgY29uc3QgY2hhciog
aHR0cFBhcnRpYWxDb250ZW50VGV4dCA9ICJQYXJ0aWFsIENvbnRlbnQiOworc3RhdGljIGNvbnN0
IGNoYXIqIGh0dHBOb3RBbGxvd2VkVGV4dCA9ICJOb3QgQWxsb3dlZCI7CitzdGF0aWMgY29uc3Qg
Y2hhciogaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0ID0gIlJlcXVlc3RlZCBS
YW5nZSBOb3QgU2F0aXNmaWFibGUiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBJbnRlcm5hbEVy
cm9yVGV4dCA9ICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiOworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgd2ViS2l0QmxvYlJlc291cmNlRG9tYWluID0gIldlYktpdEJsb2JSZXNvdXJjZSI7CisK
K05ldHdvcmtEYXRhVGFza0Jsb2I6Ok5ldHdvcmtEYXRhVGFza0Jsb2IoTmV0d29ya1Nlc3Npb24m
IHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYp
CisgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBEb05vdEFs
bG93U3RvcmVkQ3JlZGVudGlhbHMsIGZhbHNlKQorICAgICwgbV9ibG9iRGF0YShzdGF0aWNfY2Fz
dDxCbG9iUmVnaXN0cnlJbXBsJj4oYmxvYlJlZ2lzdHJ5KCkpLmdldEJsb2JEYXRhRnJvbVVSTChy
ZXF1ZXN0LnVybCgpKSkKKyAgICAsIG1fc3RyZWFtKHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNGaWxl
U3RyZWFtPigqdGhpcykpCit7CisgICAgbV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFz
aygqdGhpcyk7CisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBDcmVhdGVkIE5ldHdvcmtE
YXRhVGFza0Jsb2IgZm9yICVzIiwgdGhpcywgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKK30KKworTmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRhVGFza0Jsb2Io
KQoreworICAgIGNsZWFyU3RyZWFtKCk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29y
a0RhdGFUYXNrKCp0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0
cmVhbSgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBpZiAobV9m
aWxlT3BlbmVkKSB7CisgICAgICAgIG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICBtX3N0
cmVhbS0+Y2xvc2UoKTsKKyAgICB9CisgICAgbV9zdHJlYW0gPSBudWxscHRyOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0g
U3RhdGU6OlJ1bm5pbmcpOworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
bV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0
YXRlID0gU3RhdGU6OlJ1bm5pbmc7CisKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAh
PSBOb0ZhaWx1cmUpIHsKKyAgICAgICAgQVNTRVJUKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQg
fHwgIW1fY2xpZW50KSB7CisgICAgICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtX2ZpcnN0UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAg
ICAgZGlkRmFpbChFcnJvcjo6TWV0aG9kTm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgYmxvYiBkYXRhIGlzIG5vdCBmb3VuZCwg
ZmFpbCBub3cuCisgICAgICAgIGlmICghbV9ibG9iRGF0YSkgeworICAgICAgICAgICAgZGlkRmFp
bChFcnJvcjo6Tm90Rm91bmRFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBQYXJzZSB0aGUgIlJhbmdlIiBoZWFkZXIgd2UgY2FyZSBhYm91dC4KKyAg
ICAgICAgU3RyaW5nIHJhbmdlID0gbV9maXJzdFJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpSYW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJz
ZVJhbmdlKHJhbmdlLCBtX3JhbmdlT2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3JhbmdlU3VmZml4TGVu
Z3RoKSkgeworICAgICAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9yOjpSYW5nZUVycm9y
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdldFNpemVGb3JO
ZXh0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VzcGVuZCgp
Cit7CisgICAgLy8gRklYTUU6IGNhbiB0aGlzIGhhcHBlbj8KK30KKwordm9pZCBOZXR3b3JrRGF0
YVRhc2tCbG9iOjpjYW5jZWwoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3N0YXRlID0gU3RhdGU6OkNhbmNlbGluZzsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsK
KyAgICAgICAgbV9maWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgp
OworICAgIH0KKworICAgIGlmIChpc0Rvd25sb2FkKCkpCisgICAgICAgIGNsZWFuRG93bmxvYWRG
aWxlcygpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmludmFsaWRhdGVBbmRDYW5j
ZWwoKQoreworICAgIGNhbmNlbCgpOworICAgIGNsZWFyU3RyZWFtKCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQmxvYjo6Z2V0U2l6ZUZvck5leHQoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICAvLyBEbyB3ZSBmaW5pc2ggdmFsaWRhdGluZyBhbmQgY291bnRpbmcg
c2l6ZSBmb3IgYWxsIGl0ZW1zPworICAgIGlmIChtX3NpemVJdGVtQ291bnQgPj0gbV9ibG9iRGF0
YS0+aXRlbXMoKS5zaXplKCkpIHsKKyAgICAgICAgc2VlaygpOworICAgICAgICBkaWRSZWNlaXZl
UmVzcG9uc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRh
SXRlbSYgaXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAg
ICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRh
dGE6CisgICAgICAgIGRpZEdldFNpemUoaXRlbS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpUeXBlOjpGaWxlOgorICAgICAgICAvLyBGaWxlcyBrbm93
IHRoZWlyIHNpemVzLCBidXQgYXNraW5nIHRoZSBzdHJlYW0gdG8gdmVyaWZ5IHRoYXQgdGhlIGZp
bGUgd2Fzbid0IG1vZGlmaWVkLgorICAgICAgICBtX3N0cmVhbS0+Z2V0U2l6ZShpdGVtLmZpbGUo
KS0+cGF0aCgpLCBpdGVtLmZpbGUoKS0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKCkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkR2V0U2l6ZShsb25nIGxv
bmcgc2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
KCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNpemUgaXMgLTEsIGl0IG1l
YW5zIHRoZSBmaWxlIGhhcyBiZWVuIG1vdmVkIG9yIGNoYW5nZWQuIEZhaWwgbm93LgorICAgIGlm
IChzaXplID09IC0xKSB7CisgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIHNpemUgcGFzc2VkIGJhY2sgaXMg
dGhlIHNpemUgb2YgdGhlIHdob2xlIGZpbGUuIElmIHRoZSB1bmRlcmx5aW5nIGl0ZW0gaXMgYSBz
bGljZWQgZmlsZSwgd2UgbmVlZCB0byB1c2UgdGhlIHNsaWNlIGxlbmd0aC4KKyAgICBjb25zdCBC
bG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRhLT5pdGVtcygpLmF0KG1fc2l6ZUl0ZW1Db3Vu
dCk7CisgICAgc2l6ZSA9IGl0ZW0ubGVuZ3RoKCk7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4K
KyAgICBtX2l0ZW1MZW5ndGhMaXN0LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBz
aXplLgorICAgIG1fdG90YWxTaXplICs9IHNpemU7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUg
Kz0gc2l6ZTsKKyAgICBtX3NpemVJdGVtQ291bnQrKzsKKworICAgIC8vIENvbnRpbnVlIHdpdGgg
dGhlIG5leHQgaXRlbS4KKyAgICBnZXRTaXplRm9yTmV4dCgpOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFza0Jsb2I6OnNlZWsoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICAvLyBDb252ZXJ0IGZyb20gdGhlIHN1ZmZpeCBsZW5ndGggdG8gdGhlIHJhbmdlLgorICAgIGlm
IChtX3JhbmdlU3VmZml4TGVuZ3RoICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkgeworICAgICAg
ICBtX3JhbmdlT2Zmc2V0ID0gbV90b3RhbFJlbWFpbmluZ1NpemUgLSBtX3JhbmdlU3VmZml4TGVu
Z3RoOworICAgICAgICBtX3JhbmdlRW5kID0gbV9yYW5nZU9mZnNldCArIG1fcmFuZ2VTdWZmaXhM
ZW5ndGggLSAxOworICAgIH0KKworICAgIC8vIEJhaWwgb3V0IGlmIHRoZSByYW5nZSBpcyBub3Qg
cHJvdmlkZWQuCisgICAgaWYgKG1fcmFuZ2VPZmZzZXQgPT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVk
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQg
YXJlIG5vdCBpbiB0aGUgcmFuZ2UuCisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZz
ZXQ7CisgICAgZm9yIChtX3JlYWRJdGVtQ291bnQgPSAwOyBtX3JlYWRJdGVtQ291bnQgPCBtX2Js
b2JEYXRhLT5pdGVtcygpLnNpemUoKSAmJiBvZmZzZXQgPj0gbV9pdGVtTGVuZ3RoTGlzdFttX3Jl
YWRJdGVtQ291bnRdOyArK21fcmVhZEl0ZW1Db3VudCkKKyAgICAgICAgb2Zmc2V0IC09IG1faXRl
bUxlbmd0aExpc3RbbV9yZWFkSXRlbUNvdW50XTsKKworICAgIC8vIFNldCB0aGUgb2Zmc2V0IHRo
YXQgbmVlZCB0byBqdW1wIHRvIGZvciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmFuZ2UuCisgICAg
bV9jdXJyZW50SXRlbVJlYWRTaXplID0gb2Zmc2V0OworCisgICAgLy8gQWRqdXN0IHRoZSB0b3Rh
bCByZW1haW5pbmcgc2l6ZSBpbiBvcmRlciBub3QgdG8gZ28gYmV5b25kIHRoZSByYW5nZS4KKyAg
ICBpZiAobV9yYW5nZUVuZCAhPSBrUG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbG9u
ZyBsb25nIHJhbmdlU2l6ZSA9IG1fcmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsgMTsKKyAgICAg
ICAgaWYgKG1fdG90YWxSZW1haW5pbmdTaXplID4gcmFuZ2VTaXplKQorICAgICAgICAgICAgbV90
b3RhbFJlbWFpbmluZ1NpemUgPSByYW5nZVNpemU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdG90
YWxSZW1haW5pbmdTaXplIC09IG1fcmFuZ2VPZmZzZXQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrQmxvYjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBMT0co
TmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNw
b25zZSgldSkiLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXJyb3JDb2RlKSk7CisKKyAg
ICBSZWY8TmV0d29ya0RhdGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZShtX2ZpcnN0UmVxdWVzdC51cmwoKSwgZXJyb3JDb2RlICE9
IEVycm9yOjpOb0Vycm9yID8gInRleHQvcGxhaW4iIDogbV9ibG9iRGF0YS0+Y29udGVudFR5cGUo
KSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9yID8gMCA6IG1fdG90YWxSZW1haW5pbmdTaXpl
LCBTdHJpbmcoKSk7CisgICAgc3dpdGNoIChlcnJvckNvZGUpIHsKKyAgICBjYXNlIEVycm9yOjpO
b0Vycm9yOiB7CisgICAgICAgIGJvb2wgaXNSYW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9
IGtQb3NpdGlvbk5vdFNwZWNpZmllZDsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0Nv
ZGUoaXNSYW5nZVJlcXVlc3QgPyBodHRwUGFydGlhbENvbnRlbnQgOiBodHRwT0spOworICAgICAg
ICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFs
Q29udGVudFRleHQgOiBodHRwT0tUZXh0KTsKKworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlLCBtX2Jsb2JEYXRhLT5jb250ZW50
VHlwZSgpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50TGVuZ3RoLCBTdHJpbmc6Om51bWJlcihtX3RvdGFsUmVtYWluaW5nU2l6ZSkp
OworCisgICAgICAgIGlmIChpc1JhbmdlUmVxdWVzdCkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlLCBQYXJzZWRDb250
ZW50UmFuZ2UobV9yYW5nZU9mZnNldCwgbV9yYW5nZUVuZCwgbV90b3RhbFNpemUpLmhlYWRlclZh
bHVlKCkpOworICAgICAgICAvLyBGSVhNRTogSWYgYSByZXNvdXJjZSBpZGVudGlmaWVkIHdpdGgg
YSBibG9iOiBVUkwgaXMgYSBGaWxlIG9iamVjdCwgdXNlciBhZ2VudHMgbXVzdCB1c2UgdGhhdCBm
aWxlJ3MgbmFtZSBhdHRyaWJ1dGUsCisgICAgICAgIC8vIGFzIGlmIHRoZSByZXNwb25zZSBoYWQg
YSBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlciB3aXRoIHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIg
c2V0IHRvIHRoZSBGaWxlJ3MgbmFtZSBhdHRyaWJ1dGUuCisgICAgICAgIC8vIE5vdGFibHksIHRo
aXMgd2lsbCBhZmZlY3QgYSBuYW1lIHN1Z2dlc3RlZCBpbiAiRmlsZSBTYXZlIEFzIi4KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRXJyb3I6OlJhbmdlRXJyb3I6CisgICAgICAgIHJl
c3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxl
KTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoaHR0cFJlcXVlc3RlZFJhbmdl
Tm90U2F0aXNmaWFibGVUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFcnJvcjo6U2Vj
dXJpdHlFcnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cE5vdEFs
bG93ZWQpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwTm90QWxsb3dl
ZFRleHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXNwb25zZS5z
ZXRIVFRQU3RhdHVzQ29kZShodHRwSW50ZXJuYWxFcnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBTdGF0dXNUZXh0KGh0dHBJbnRlcm5hbEVycm9yVGV4dCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpLCBlcnJvckNvZGVdKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAg
TE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWNlaXZl
UmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXIgKCV1KSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb2xpY3lBY3Rpb24pKTsKKworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2Fu
Y2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAgY2xl
YXJTdHJlYW0oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChlcnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIGRpZEZpbmlzaCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xp
Y3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAg
ICAgICAgIG1fYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKKyAgICAgICAgICAgIHJlYWQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5SWdu
b3JlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xp
Y3lEb3dubG9hZDoKKyAgICAgICAgICAgIGRvd25sb2FkKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWQo
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBu
byBtb3JlIHJlbWFpbmluZyBkYXRhIHRvIHJlYWQsIHdlIGFyZSBkb25lLgorICAgIGlmICghbV90
b3RhbFJlbWFpbmluZ1NpemUgfHwgbV9yZWFkSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1z
KCkuc2l6ZSgpKSB7CisgICAgICAgIGRpZEZpbmlzaCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5h
dChtX3JlYWRJdGVtQ291bnQpOworICAgIGlmIChpdGVtLnR5cGUoKSA9PSBCbG9iRGF0YUl0ZW06
OlR5cGU6OkRhdGEpCisgICAgICAgIHJlYWREYXRhKGl0ZW0pOworICAgIGVsc2UgaWYgKGl0ZW0u
dHlwZSgpID09IEJsb2JEYXRhSXRlbTo6VHlwZTo6RmlsZSkKKyAgICAgICAgcmVhZEZpbGUoaXRl
bSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkRGF0YShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7
CisgICAgQVNTRVJUKGl0ZW0uZGF0YSgpLmRhdGEoKSk7CisKKyAgICBsb25nIGxvbmcgYnl0ZXNU
b1JlYWQgPSBpdGVtLmxlbmd0aCgpIC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChi
eXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9
IG1fdG90YWxSZW1haW5pbmdTaXplOworICAgIGNvbnN1bWVEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGl0ZW0uZGF0YSgpLmRhdGEoKS0+ZGF0YSgpKSArIGl0ZW0ub2Zmc2V0KCkg
KyBtX2N1cnJlbnRJdGVtUmVhZFNpemUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXNUb1JlYWQpKTsK
KyAgICBtX2N1cnJlbnRJdGVtUmVhZFNpemUgPSAwOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a0Jsb2I6OnJlYWRGaWxlKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQo
bV9jbGllbnQpOworICAgIEFTU0VSVChtX3N0cmVhbSk7CisKKyAgICBpZiAobV9maWxlT3BlbmVk
KSB7CisgICAgICAgIG1fc3RyZWFtLT5yZWFkKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVh
ZCA9IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRlbUNvdW50XSAtIG1fY3VycmVudEl0ZW1SZWFk
U2l6ZTsKKyAgICBpZiAoYnl0ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAg
ICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fdG90YWxSZW1haW5pbmdTaXplKTsK
KyAgICBtX3N0cmVhbS0+b3BlbkZvclJlYWQoaXRlbS5maWxlKCktPnBhdGgoKSwgaXRlbS5vZmZz
ZXQoKSArIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSwgYnl0ZXNUb1JlYWQpOworICAgIG1fZmlsZU9w
ZW5lZCA9IHRydWU7CisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRPcGVuKGJvb2wgc3VjY2VzcykKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8
fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIGNsZWFyU3RyZWFtKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
ZGlkRmFpbChFcnJvcjo6Tm90UmVhZGFibGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Cisg
ICAgcmVhZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQoaW50IGJ5
dGVzUmVhZCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7
CisgICAgICAgIGNsZWFyU3RyZWFtKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYnl0ZXNSZWFkIDwgMCkgeworICAgICAgICBkaWRGYWlsKEVycm9yOjpOb3RSZWFkYWJsZUVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tC
bG9iPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBjb25zdW1lRGF0YShtX2J1ZmZlci5kYXRh
KCksIGJ5dGVzUmVhZCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y29uc3VtZURh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBtX3RvdGFsUmVtYWlu
aW5nU2l6ZSAtPSBieXRlc1JlYWQ7CisKKyAgICBpZiAoYnl0ZXNSZWFkKSB7CisgICAgICAgIGlm
IChtX2Rvd25sb2FkRmlsZSAhPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAg
ICAgICBpZiAoIXdyaXRlRG93bmxvYWQoZGF0YSwgYnl0ZXNSZWFkKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9jbGllbnQp
OworICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGRhdGEsIGJ5dGVzUmVhZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZmls
ZU9wZW5lZCkgeworICAgICAgICAvLyBXaGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgYSBmaWxlIGl0
ZW0sIHRoZSByZWFkaW5nIGlzIGNvbXBsZXRlZCBvbmx5IGlmIGJ5dGVzUmVhZCBpcyAwLgorICAg
ICAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGZpbGUuCisg
ICAgICAgICAgICBtX2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc3RyZWFtLT5j
bG9zZSgpOworCisgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAg
ICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIE90aGVyd2lzZSwgd2UgcmVhZCB0aGUgY3VycmVudCB0ZXh0IGl0ZW0gYXMgYSB3aG9sZSBh
bmQgbW92ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAg
ICB9CisKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c2V0UGVu
ZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3Zl
cndyaXRlKQoreworICAgIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24oZmlsZW5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlKTsKKwor
ICAgIEFTU0VSVCghbV9zYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX3NhbmRib3hFeHRlbnNpb24g
PSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAg
aWYgKG1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5jb25z
dW1lKCk7CisKKyAgICBpZiAoYWxsb3dPdmVyd3JpdGUgJiYgZmlsZUV4aXN0cyhtX3BlbmRpbmdE
b3dubG9hZExvY2F0aW9uKSkKKyAgICAgICAgZGVsZXRlRmlsZShtX3BlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKTsKK30KKworU3RyaW5nIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1Z2dlc3RlZEZpbGVu
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInVua25vd24iKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9h
ZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24pOworCisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpkb3dubG9hZCB0byAlcyIsIHRoaXMsIG1fcGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24udXRmOCgpLmRhdGEoKSk7CisKKyAgICBtX2Rvd25sb2FkRmlsZSA9IG9wZW5GaWxlKG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24sIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKG1fZG93bmxv
YWRGaWxlID09IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmFpbERv
d25sb2FkKGNhbmNlbGxlZEVycm9yKG1fZmlyc3RSZXF1ZXN0KSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFr
ZV91bmlxdWU8RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwg
KnRoaXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAg
IGF1dG8qIGRvd25sb2FkUHRyID0gZG93bmxvYWQuZ2V0KCk7CisgICAgZG93bmxvYWRNYW5hZ2Vy
LmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKG1fcGVuZGluZ0Rvd25sb2FkSUQsIFdURk1vdmUo
ZG93bmxvYWQpKTsKKyAgICBkb3dubG9hZFB0ci0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9wZW5k
aW5nRG93bmxvYWRMb2NhdGlvbik7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xp
ZW50LT5kaWRCZWNvbWVEb3dubG9hZCgpOworCisgICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNp
emUpOworICAgIHJlYWQoKTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2tCbG9iOjp3cml0ZURv
d25sb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgQVNTRVJUKGlz
RG93bmxvYWQoKSk7CisgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKG1fZG93bmxv
YWRGaWxlLCBkYXRhLCBieXRlc1JlYWQpOworICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsK
KyAgICAgICAgZGlkRmFpbERvd25sb2FkKGNhbmNlbGxlZEVycm9yKG1fZmlyc3RSZXF1ZXN0KSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoYnl0ZXNXcml0dGVu
ID09IGJ5dGVzUmVhZCk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7
CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0
ZXNXcml0dGVuKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tC
bG9iOjpjbGVhbkRvd25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRmlsZSAhPSBp
bnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgIGNsb3NlRmlsZShtX2Rvd25sb2Fk
RmlsZSk7CisgICAgICAgIG1fZG93bmxvYWRGaWxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZTsKKyAgICB9CisgICAgZGVsZXRlRmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQiLCB0aGlzKTsKKworICAgIGNsZWFyU3RyZWFt
KCk7CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5z
aW9uKSB7CisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+cmV2b2tlKCk7CisgICAgICAgIG1f
c2FuZGJveEV4dGVuc2lvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5k
b3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICAgICAg
QVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIElQQzo6
RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6
ZGlkRmluaXNoRG93bmxvYWQoKQoreworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmluaXNoRG93bmxvYWQiLCB0aGlzKTsKKworICAgIEFTU0VS
VChpc0Rvd25sb2FkKCkpOworICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAgbV9k
b3dubG9hZEZpbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgaWYgKG1fc2Fu
ZGJveEV4dGVuc2lvbikgeworICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwor
ICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRyOworICAgIH0KKworICAgIGNsZWFy
U3RyZWFtKCk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9u
KCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAg
QVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmFpbChFcnJvciBlcnJvckNvZGUpCit7CisgICAgQVNT
RVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOworCisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAgICAgICAg
ZGlkRmFpbERvd25sb2FkKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBz
dGF0aWNfY2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmco
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAi
JXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsIiwgdGhpcyk7CisKKyAgICBjbGVhclN0
cmVhbSgpOworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRl
V2l0aEVycm9yKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNf
Y2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCgpCit7CisgICAgQVNTRVJU
KCFtX3NhbmRib3hFeHRlbnNpb24pOworCisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmluaXNoIiwgdGhpcyk7CisKKyAgICBjbGVhclN0cmVhbSgp
OworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVy
cm9yKHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5F
VFdPUktfU0VTU0lPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtEYXRhVGFza0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTdHJlYW1DbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXN5
bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBCbG9iRGF0YUl0ZW07Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tCbG9iIGZpbmFsIDog
cHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6OkZpbGVTdHJlYW1DbGllbnQg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29y
a1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmlu
Z1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tCbG9iKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc2hv
dWxkQ29udGVudFNuaWZmKSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRhVGFza0Jsb2IoKTsK
KworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tCbG9iKE5ldHdvcmtTZXNzaW9uJiwgTmV0
d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJy
aWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICBOZXR3
b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zdGF0
ZTsgfQorCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcm
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUq
Lykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAgdm9pZCBkaWRHZXRT
aXplKGxvbmcgbG9uZykgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRPcGVuKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkUmVhZChpbnQpIG92ZXJyaWRlOworCisgICAgZW51bSBjbGFzcyBFcnJv
ciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBOb3RGb3VuZEVycm9yID0gMSwKKyAg
ICAgICAgU2VjdXJpdHlFcnJvciA9IDIsCisgICAgICAgIFJhbmdlRXJyb3IgPSAzLAorICAgICAg
ICBOb3RSZWFkYWJsZUVycm9yID0gNCwKKyAgICAgICAgTWV0aG9kTm90QWxsb3dlZCA9IDUKKyAg
ICB9OworCisgICAgdm9pZCBjbGVhclN0cmVhbSgpOworICAgIHZvaWQgZ2V0U2l6ZUZvck5leHQo
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShFcnJvciA9IEVycm9yOjpOb0Vycm9yKTsK
KyAgICB2b2lkIHNlZWsoKTsKKyAgICB2b2lkIGNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBieXRlc1JlYWQpOworICAgIHZvaWQgcmVhZCgpOworICAgIHZvaWQgcmVhZERhdGEoY29u
c3QgV2ViQ29yZTo6QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCByZWFkRmlsZShjb25zdCBXZWJD
b3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lkIGRvd25sb2FkKCk7CisgICAgYm9vbCB3cml0
ZURvd25sb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOworICAgIHZvaWQgY2xl
YW5Eb3dubG9hZEZpbGVzKCk7CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2
b2lkIGRpZEZhaWwoRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNoKCk7CisKKyAgICBlbnVtIHsg
a1Bvc2l0aW9uTm90U3BlY2lmaWVkID0gLTEgfTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpCbG9i
RGF0YT4gbV9ibG9iRGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5nLgorICAgIFZlY3Rv
cjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0ZW1MZW5ndGhMaXN0
OworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgbG9uZyBsb25n
IG1fcmFuZ2VPZmZzZXQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgfTsKKyAgICBsb25nIGxvbmcg
bV9yYW5nZUVuZCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9OworICAgIGxvbmcgbG9uZyBtX3Jh
bmdlU3VmZml4TGVuZ3RoIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07CisgICAgbG9uZyBsb25n
IG1fdG90YWxTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX3RvdGFsUmVtYWluaW5nU2l6ZSB7
IDAgfTsKKyAgICBsb25nIGxvbmcgbV9jdXJyZW50SXRlbVJlYWRTaXplIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fc2l6ZUl0ZW1Db3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3JlYWRJdGVtQ291
bnQgeyAwIH07CisgICAgYm9vbCBtX2ZpbGVPcGVuZWQgeyBmYWxzZSB9OworICAgIFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2Rvd25sb2FkRmlsZSB7IFdlYkNvcmU6OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUgfTsKKyAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94
RXh0ZW5zaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0Uo
TkVUV09SS19TRVNTSU9OKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcs
NiBAQCBOZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllCiAgICAgLCBtX3Bh
cmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9w
YXJhbWV0ZXJzLnJlcXVlc3QpCiB7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5yZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNCbG9iKCkpIHsKLSAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6
Y3JlYXRlKG51bGxwdHIsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMu
ZGVmZXJzTG9hZGluZywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlm
ZkNvbnRlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIG1fdGFzayA9IE5ldHdvcmtE
YXRhVGFzazo6Y3JlYXRlKG5ldHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzLnJlcXVl
c3QsIG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBtX3BhcmFtZXRlcnMuY29u
dGVudFNuaWZmaW5nUG9saWN5LCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCk7CiAgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykK
ICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKQEAgLTEwMSwxMiArOTcsMTQgQEAgTmV0d29ya0xv
YWQ6On5OZXR3b3JrTG9hZCgpCiAjZW5kaWYKICAgICBpZiAobV90YXNrKQogICAgICAgICBtX3Rh
c2stPmNsZWFyQ2xpZW50KCk7Ci0jZWxpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExC
QUNLKQorI2Vsc2UKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAg
IGlmIChtX2hhbmRsZSAmJiBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwogI2VuZGlmCiAgICAgaWYgKG1faGFu
ZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y2xlYXJDbGllbnQoKTsKKyNlbmRpZgogfQogCiB2b2lk
IE5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTE4LDkgKzEx
NiwxMCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fdGFzay0+cmVzdW1lKCk7CiAgICAgfQotI2VuZGlmCisjZWxz
ZQogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmco
ZGVmZXJzKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQpAQCAtMTI4
LDkgKzEyNywxMCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAgICAgaWYgKG1fdGFzaykKICAgICAgICAgbV90YXNrLT5jYW5jZWwoKTsKLSNl
bmRpZgorI2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwo
KTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQpAQCAtMTQzLDI3ICsxNDMs
MjEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlcwogI2VuZGlmCiAK
ICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1dG8gcmVkaXJlY3RDb21wbGV0aW9uSGFu
ZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KTsgICAgCisgICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5n
ZShtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOworICAgIGlmIChtX2N1cnJl
bnRSZXF1ZXN0LmlzTnVsbCgpKQorICAgICAgICBkaWRDb21wbGV0ZVdpdGhFcnJvcihjYW5jZWxs
ZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiAgICAgQVNTRVJUKHJlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIpOwotI2VuZGlmCi0gICAgCisgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRs
ZXIpCisgICAgICAgIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIobV9jdXJyZW50UmVxdWVzdCk7
CisjZWxzZQogICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7CiAgICAgICAgIGlm
IChtX2hhbmRsZSkKICAgICAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgZGlk
RmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwot
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25I
YW5kbGVyKQotICAgICAgICAgICAgcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcih7IH0pOwotI2Vu
ZGlmCi0gICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKG1faGFuZGxlKSB7CiAgICAgICAg
IGF1dG8gY3VycmVudFJlcXVlc3RDb3B5ID0gbV9jdXJyZW50UmVxdWVzdDsKICAgICAgICAgbV9o
YW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUoY3VycmVudFJlcXVlc3RDb3B5
KSk7CiAgICAgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAocmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcihtX2N1
cnJlbnRSZXF1ZXN0KTsKICNlbmRpZgogfQogCkBAIC0xNzEsMTIgKzE2NSwxMyBAQCB2b2lkIE5l
dHdvcmtMb2FkOjpjb250aW51ZURpZFJlY2VpdmVSZXNwCiB7CiAjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKICAgICBpZiAobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAgIG1f
cmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwotICAgICAgICBtX3Jlc3BvbnNl
Q29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIHJlc3BvbnNlQ29tcGxl
dGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciwg
bnVsbHB0cik7CisgICAgICAgIHJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5VXNlKTsK
ICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRs
ZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyNlbmRpZgogfQogCiBOZXR3b3JrTG9h
ZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0d29ya0xvYWQ6OnNo
YXJlZERpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UpCkBAIC0y
ODUsNiArMjgwLDIzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbXBsZXRlQXV0aGVudGljYXRpb24K
ICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdl
cigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFn
ZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgKm1fY2hhbGxlbmdlLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExC
QUNLKQordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQoreworICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBs
ZXRpb25IYW5kbGVyKTsKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5n
ZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICBpZiAobV90YXNrICYmIG1fdGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2UpKQorICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwg
c2VydmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxsZW5nZSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0
aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKK30KKyNlbmRpZgorCiB2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVz
cG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNl
Q29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwpAQCAtMzYyLDggKzM3NCw4IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNhbm5v
dFNob3dVUkwoKQogewogICAgIG1fY2xpZW50LmRpZEZhaWxMb2FkaW5nKGNhbm5vdFNob3dVUkxF
cnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9Ci0gICAgCi0jZW5kaWYKKworI2Vsc2UKIAogdm9p
ZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgUmVzb3VyY2VSZXNwb25zZSYmIHJlY2VpdmVkUmVzcG9uc2UpCiB7CkBAIC00MTgsMzIg
KzQzMCwxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBtX3dh
aXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgPSB0
cnVlOwotI2VuZGlmCiAgICAgbV9jbGllbnQuY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZUFzeW5jKHByb3RlY3Rpb25TcGFjZSk7CiB9Ci0jZW5kaWYKIAotI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCiB2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZUNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCByZXN1bHQpCiB7Ci0jaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2hhbmRsZSwg
IkJsb2JzIHNob3VsZCBuZXZlciBnaXZlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZXMiKTsKLSAg
ICBBU1NFUlQobV9jaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgYXV0byBjb21wbGV0
aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9jaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciwg
bnVsbHB0cik7Ci0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgaWYgKG1fdGFzayAmJiBtX3Rh
c2stPmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoKm1fY2hhbGxlbmdlKSkK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb246OlVzZUNyZWRlbnRpYWwsIHNlcnZlclRydXN0Q3JlZGVudGlhbCgqbV9jaGFsbGVu
Z2UpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlLCB7IH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29tcGxldGVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0jZWxzZQogICAgIG1fd2FpdGlu
Z0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSA9IGZhbHNl
OwotI2VuZGlmCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHJlc3VsdCk7CiB9CkBAIC01MTUs
NSArNTA4LDYgQEAgdm9pZCBOZXR3b3JrTG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oUgogICAg
IG1faGFuZGxlLT5jYW5jZWwoKTsKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxs
ZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDkgKzQwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBOZXR3b3JrTG9hZCBm
aW5hbCA6IHByaXZhdGUgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKK2NsYXNzIE5ldHdv
cmtMb2FkIGZpbmFsIDoKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICwgcHJpdmF0ZSBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQKKyAgICBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudAor
I2Vsc2UKKyAgICBwcml2YXRlIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50CiAjZW5kaWYK
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDcgKzcxLDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBzZXRQZW5kaW5nRG93bmxvYWQoUGVuZGluZ0Rvd25sb2FkJik7CiAgICAgRG93bmxvYWRJRCBw
ZW5kaW5nRG93bmxvYWRJRCgpIHsgcmV0dXJuIG1fdGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsg
fQotI2VuZGlmCisjZWxzZQorICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiBoYW5kbGUoKSBj
b25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQogCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykKICAgICB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlBy
b3RlY3Rpb25TcGFjZSYpIG92ZXJyaWRlOwpAQCAtODUsMTcgKzg4LDE3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBO
U0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZiAv
LyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9D
QUxMQkFDSykKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShib29sKTsKICNlbmRpZgogCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9Ci0KIHByaXZhdGU6CiAgICAg
TmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHNoYXJl
ZERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYpOwogICAgIHZv
aWQgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmKTsKIAorI2lmICFVU0UoTkVUV09SS19T
RVNTSU9OKQogICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CiAgICAgdm9pZCB3aWxsU2VuZFJl
cXVlc3RBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSkgZmlu
YWw7CiAgICAgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIHVuc2ln
bmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9C
ZVNlbnQpIGZpbmFsOwpAQCAtMTExLDggKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNl
aXZlZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgZmluYWw7CiAgICAgYm9vbCB1c2VzQXN5bmNDYWxs
YmFja3MoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBsb2FkaW5nU3luY2hyb25v
dXNYSFIoKSBmaW5hbCB7IHJldHVybiBtX2NsaWVudC5pc1N5bmNocm9ub3VzKCk7IH0KLQotI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisjZWxzZQogICAgIC8vIE5ldHdvcmtEYXRhVGFza0NsaWVu
dAogICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9u
SGFuZGxlciYmKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxl
ciYmKSBmaW5hbDsKQEAgLTE0Niw4ICsxNDgsOCBAQCBwcml2YXRlOgogI2Vsc2UKICAgICBib29s
IG1fd2FpdGluZ0ZvckNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZSB7IGZhbHNlIH07CiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdv
cmtpbmdDb250ZXh0OwotI2VuZGlmCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
PiBtX2hhbmRsZTsKKyNlbmRpZgogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3Vy
cmVudFJlcXVlc3Q7IC8vIFVwZGF0ZWQgb24gcmVkaXJlY3RzLgogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9u
IDIwODI0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKIAorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IApAQCAtODEsNiArODIsMTIgQEAgTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCiB7
CiB9CiAKK3ZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAg
IGZvciAoYXV0byogdGFzayA6IG1fZGF0YVRhc2tTZXQpCisgICAgICAgIHRhc2stPmludmFsaWRh
dGVBbmRDYW5jZWwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAogI2luY2x1ZGUgPFdlYkNvcmUv
U2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzgsNiArMzksNyBAQCBjbGFz
cyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyOworY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogCiBjbGFzcyBOZXR3
b3JrU2Vzc2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtTZXNzaW9uPiB7CiBwdWJsaWM6
CkBAIC00NSwxNiArNDcsMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiYg
ZGVmYXVsdFNlc3Npb24oKTsKICAgICB2aXJ0dWFsIH5OZXR3b3JrU2Vzc2lvbigpOwogCi0gICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDcmVkZW50aWFs
cygpIHsgfTsKIAogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJl
dHVybiBtX3Nlc3Npb25JRDsgfQogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlZ2lzdGVyTmV0d29y
a0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFzayYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFz
ayk7IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNr
JiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQucmVtb3ZlKCZ0YXNrKTsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgTmV0d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAogICAgIFdlYkNvcmU6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKKworICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9k
YXRhVGFza1NldDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JE
b3dubG9hZENsaWVudC5jcHAJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxv
YkRvd25sb2FkQ2xpZW50LmgiCiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKwogI2luY2x1
ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJEb3dubG9hZC5oIgogI2luY2x1ZGUgIldl
YkVycm9ycy5oIgpAQCAtOTcsMyArOTksNSBAQCB2b2lkIEJsb2JEb3dubG9hZENsaWVudDo6ZGlk
RmFpbChSZXNvdXJjCiB9CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQpJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9h
ZENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaAkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgIVVT
RShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtNTUsMyArNTcsNSBAQCBwcml2YXRlOgogfTsKIAogfQorCisjZW5kaWYgLy8g
IVVTRShORVRXT1JLX1NFU1NJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDIwODI0NykKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLURvd25sb2Fk
OjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBk
b3dubG9hZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiBkb3dubG9hZCwgY29uc3QgV2ViQ29y
ZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkKK0Rv
d25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxv
YWRJRCBkb3dubG9hZElELCBOZXR3b3JrRGF0YVRhc2smIGRvd25sb2FkLCBjb25zdCBTZXNzaW9u
SUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogICAgIDogbV9kb3du
bG9hZE1hbmFnZXIoZG93bmxvYWRNYW5hZ2VyKQogICAgICwgbV9kb3dubG9hZElEKGRvd25sb2Fk
SUQpCi0gICAgLCBtX2Rvd25sb2FkKGRvd25sb2FkKQorICAgICwgbV9kb3dubG9hZCgmZG93bmxv
YWQpCiAgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX3N1Z2dlc3RlZE5hbWUo
c3VnZ2VzdGVkTmFtZSkKIHsKQEAgLTU2LDggKzU2LDIwIEBAIERvd25sb2FkOjpEb3dubG9hZChE
b3dubG9hZE1hbmFnZXImIGRvd24KIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURv
d25sb2FkKCk7CiB9Ci0jZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKK0Rvd25sb2FkOjpEb3du
bG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9h
ZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBTZXNzaW9uSUQm
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQorICAgIDogbV9kb3dubG9h
ZE1hbmFnZXIoZG93bmxvYWRNYW5hZ2VyKQorICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQp
CisgICAgLCBtX2Rvd25sb2FkVGFzayhkb3dubG9hZCkKKyAgICAsIG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKKyAgICAsIG1fc3VnZ2VzdGVkTmFtZShzdWdnZXN0ZWROYW1lKQoreworICAgIEFTU0VS
VChtX2Rvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAorICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRp
ZENyZWF0ZURvd25sb2FkKCk7Cit9CisjZW5kaWYKKyNlbHNlCiBEb3dubG9hZDo6RG93bmxvYWQo
RG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5h
bWUpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rv
d25sb2FkSUQoZG93bmxvYWRJRCkKQEAgLTY4LDkgKzgwLDExIEBAIERvd25sb2FkOjpEb3dubG9h
ZChEb3dubG9hZE1hbmFnZXImIGRvd24KIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0
ZURvd25sb2FkKCk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxv
YWQ6On5Eb3dubG9hZCgpCiB7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1f
cmVzb3VyY2VIYW5kbGUpIHsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQo
KTsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIg
QEAgRG93bmxvYWQ6On5Eb3dubG9hZCgpCiAgICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7
CiAKICAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1h
bmFnZXIuZGlkRGVzdHJveURvd25sb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKIHZvaWQgRG93bmxvYWQ6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNCbG9iKCkpIHsKQEAgLTkyLDExICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFy
dCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3
ICsxMjAsMzkgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBVTlVT
RURfUEFSQU0oaGFuZGxlKTsKLSAgICBVTlVTRURfUEFSQU0ocmVzcG9uc2UpOwotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkV2l0aEhhbmRsZSho
YW5kbGUsIHJlc3BvbnNlKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgRG93bmxvYWQ6OmNh
bmNlbCgpCiB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBpZiAobV9kb3dubG9hZCkg
eworICAgICAgICBtX2Rvd25sb2FkLT5jYW5jZWwoKTsKKyAgICAgICAgZGlkQ2FuY2VsKHsgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZQogICAgIGlmIChtX3JlcXVlc3QudXJsKCku
cHJvdG9jb2xJc0Jsb2IoKSkgewogICAgICAgICBhdXRvIHJlc291cmNlSGFuZGxlID0gV1RGTW92
ZShtX3Jlc291cmNlSGFuZGxlKTsKICAgICAgICAgcmVzb3VyY2VIYW5kbGUtPmNhbmNlbCgpOwog
ICAgICAgICBzdGF0aWNfY2FzdDxCbG9iRG93bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50
LmdldCgpKS0+ZGlkQ2FuY2VsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FuY2Vs
TmV0d29ya0xvYWQoKTsKKyNlbmRpZgorICAgIHBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKTsK
IH0KIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogdm9pZCBEb3dubG9hZDo6ZGlkU3RhcnQo
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFN0YXJ0KG1fcmVxdWVz
dCwgbV9zdWdnZXN0ZWROYW1lKSk7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZv
aWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CiAgICAgbV9k
b3dubG9hZE1hbmFnZXIuZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCp0aGlzLCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk7
CiB9Ci0jZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewpAQCAtMTQ3LDE2ICsxNjEsNiBAQCB2b2lkIERv
d25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgCiAgICAgc2VuZChNZXNzYWdlczo6RG93
bmxvYWRQcm94eTo6RGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKSk7CiB9CiAKLXZvaWQgRG93
bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1faGFz
UmVjZWl2ZWREYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoImRpZFJlY2Vp
dmVEYXRhOiBTdGFydGVkIHJlY2VpdmluZyBkYXRhIChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25s
b2FkSUQoKS5kb3dubG9hZElEKCkpOwotICAgICAgICBtX2hhc1JlY2VpdmVkRGF0YSA9IHRydWU7
Ci0gICAgfQotCi0gICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURh
dGEobGVuZ3RoKSk7Ci19Ci0KIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFP
Zk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgYm9vbCByZXN1bHQ7CkBA
IC0xNjYsOCArMTcwLDYgQEAgYm9vbCBEb3dubG9hZDo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9m
TQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQog
U3RyaW5nIERvd25sb2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSkKIHsKICAgICBTdHJp
bmcgZGVzdGluYXRpb247CkBAIC0xODIsOCArMTg0LDYgQEAgU3RyaW5nIERvd25sb2FkOjpkZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdQogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotI2VuZGlm
Ci0KIHZvaWQgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
QXN5bmMoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBzZW5kKE1lc3Nh
Z2VzOjpEb3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFt
ZUFzeW5jKGRvd25sb2FkSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUpKTsKQEAgLTIwOSwxNyArMjA5
LDMwIEBAIHZvaWQgRG93bmxvYWQ6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnMKIHsKICAgICBt
X3Jlc291cmNlSGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQorI2VuZGlm
CiAKIHZvaWQgRG93bmxvYWQ6OmRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0
aCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDcmVhdGVEZXN0aW5h
dGlvbihwYXRoKSk7CiB9CiAKK3ZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1faGFzUmVjZWl2ZWREYXRhKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0lGX0FMTE9XRUQoImRpZFJlY2VpdmVEYXRhOiBTdGFydGVkIHJlY2VpdmluZyBkYXRh
IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAg
ICBtX2hhc1JlY2VpdmVkRGF0YSA9IHRydWU7CisgICAgfQorCisgICAgc2VuZChNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7Cit9CisKIHZvaWQgRG93bmxv
YWQ6OmRpZEZpbmlzaCgpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkRmluaXNo
OiAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKIAorI2lm
ICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHBsYXRmb3JtRGlkRmluaXNoKCk7CisjZW5kaWYK
IAogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZEZpbmlzaCgpKTsKIApAQCAt
Mjc3LDQgKzI5MCwxMCBAQCBib29sIERvd25sb2FkOjppc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQo
CiAjZW5kaWYKIH0KIAorI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgRG93bmxvYWQ6OnBsYXRm
b3JtQ2FuY2VsTmV0d29ya0xvYWQoKQoreworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkLmgJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiAr
NDAsNiBAQAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAjaWYgUExBVEZPUk0oQ09DT0EpCiBP
QkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzazsKLXR5cGVkZWYgTlNVUkxTZXNzaW9u
RG93bmxvYWRUYXNrKiBQbGF0Zm9ybURvd25sb2FkVGFza1JlZjsKLSNlbGlmIFVTRShTT1VQKQot
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBOZXR3b3JrRGF0YVRhc2s7Ci19Ci10eXBlZGVmIFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrKiBQbGF0Zm9ybURvd25sb2FkVGFza1JlZjsKICNlbmRpZgog
I2Vsc2UgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTcz
LDYgKzY3LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBEb3dubG9hZE1hbmFnZXI7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2s7CiBjbGFzcyBO
ZXR3b3JrU2Vzc2lvbjsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTgwLDM5ICs3NSw0MyBAQCBjbGFz
cyBEb3dubG9hZCA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kCiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRG93bmxvYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQotICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25s
b2FkSUQsIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisgICAg
RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTmV0d29ya0RhdGFUYXNrJiwg
Y29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUgPSB7IH0pOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIERvd25sb2FkKERv
d25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayosIGNv
bnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lID0geyB9KTsKICNlbmRpZgorI2Vsc2UKICAgICBEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImLCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lID0geyB9KTsKKyNlbmRpZgogCiAgICAgfkRvd25s
b2FkKCk7CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIHN0YXJ0KCk7CiAg
ICAgdm9pZCBzdGFydFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisjZW5kaWYKICAgICB2b2lkIHJlc3VtZShjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAogICAg
IERvd25sb2FkSUQgZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRJRDsgfQog
ICAgIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2Vz
dGVkTmFtZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
ICAgICB2b2lkIHNldFNhbmRib3hFeHRlbnNpb24oUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+JiYg
c2FuZGJveEV4dGVuc2lvbikgeyBtX3NhbmRib3hFeHRlbnNpb24gPSBXVEZNb3ZlKHNhbmRib3hF
eHRlbnNpb24pOyB9CiAjZWxzZQorICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogICAgIHZvaWQgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7Ci0jZW5kaWYKICAgICB2b2lkIGRpZFN0YXJ0KCk7CiAgICAgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQg
ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKTsKICAgICBib29sIHNob3VsZERlY29kZVNv
dXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotI2lmICFVU0UoTkVU
V09SS19TRVNTSU9OKQogICAgIFN0cmluZyBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSk7Ci0j
ZW5kaWYKICAgICB2b2lkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5
bmMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9u
KGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CisgICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOworI2VuZGlmCiAgICAg
dm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQg
ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKTsKICAgICB2b2lkIGRpZEZpbmlzaCgpOwot
ICAgIHZvaWQgcGxhdGZvcm1EaWRGaW5pc2goKTsKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0
YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVE
YXRhKTsKIApAQCAtMTI0LDM3ICsxMjMsMzUgQEAgcHJpdmF0ZToKICNpZiAhVVNFKE5FVFdPUktf
U0VTU0lPTikKICAgICB2b2lkIHN0YXJ0TmV0d29ya0xvYWQoKTsKICAgICB2b2lkIHN0YXJ0TmV0
d29ya0xvYWRXaXRoSGFuZGxlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotI2VuZGlmCi0gICAgdm9pZCBjYW5jZWxOZXR3b3JrTG9h
ZCgpOwotCiAgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgorICAgIHZvaWQg
cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpOwogCiAgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2lu
Z0FsbG93ZWQoKSBjb25zdDsKIAogICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFn
ZXI7CiAgICAgRG93bmxvYWRJRCBtX2Rvd25sb2FkSUQ7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0IG1fcmVxdWVzdDsKIAogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRi
b3hFeHRlbnNpb247CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+IG1fZG93bmxvYWQ7
Ci0jZWxpZiBVU0UoU09VUCkKICAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX2Rvd25sb2Fk
OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9h
ZFRhc2s+IG1fZG93bmxvYWRUYXNrOwogI2VuZGlmCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1f
c2Vzc2lvbklEOwogI2Vsc2UgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFp
blB0cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7CiAgICAgUmV0YWluUHRyPFdLRG93
bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlmCi0jZW5kaWYgLy8gVVNFKE5FVFdP
UktfU0VTU0lPTikKICNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQogICAgIFJldGFpblB0cjxDRlVS
TERvd25sb2FkUmVmPiBtX2Rvd25sb2FkOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIFJlZlB0
cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9yZXNvdXJjZUhhbmRsZTsKKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9v
bCBtX2hhc1JlY2VpdmVkRGF0YSB7IGZhbHNlIH07CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywyMyAr
NDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3dubG9hZE1hbmFnZXIoQ2xpZW50Jgogdm9pZCBE
b3dubG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQoU2Vzc2lvbklEIHNlc3Npb25JRCwgRG93bmxv
YWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkTmFtZSkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlm
ICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIGF1dG8qIG5ldHdv
cmtTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0g
ICAgICAgIGlmICghbmV0d29ya1Nlc3Npb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IE5ldHdvcmtMb2FkUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJhbWV0ZXJzLnNl
c3Npb25JRCA9IHNlc3Npb25JRDsKLSAgICAgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVz
dDsKLSAgICAgICAgcGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gQ2xpZW50Q3Jl
ZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHM7Ci0gICAgICAgIG1fcGVu
ZGluZ0Rvd25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nRG93
bmxvYWQ+KFdURk1vdmUocGFyYW1ldGVycyksIGRvd25sb2FkSUQsICpuZXR3b3JrU2Vzc2lvbiwg
c3VnZ2VzdGVkTmFtZSkpOworICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gU2Vzc2lvblRyYWNr
ZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgaWYgKCFuZXR3b3JrU2Vzc2lvbikK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklEOworICAg
IHBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgcGFyYW1ldGVycy5jbGllbnRDcmVk
ZW50aWFsUG9saWN5ID0gQ2xpZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3Jl
ZGVudGlhbHM7CisgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3dubG9hZElELCBzdGQ6Om1h
a2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0ZXJzKSwgZG93bmxvYWRJ
RCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisjZWxzZQogICAgIGF1dG8gZG93
bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPigqdGhpcywgZG93bmxvYWRJRCwgcmVx
dWVzdCwgc3VnZ2VzdGVkTmFtZSk7CiAgICAgZG93bmxvYWQtPnN0YXJ0KCk7CiAKICAgICBBU1NF
UlQoIW1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKICAgICBtX2Rvd25sb2Fkcy5h
ZGQoZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworI2VuZGlmCiB9CiAKICNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQpAQCAtOTksOCArOTcsNyBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6
d2lsbERlY2lkZVBlbmRpbmdECiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rvd25sb2Fkc1dhaXRp
bmdGb3JEZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3RkOjptYWtlX3BhaXI8UmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXI+KCZuZXR3b3JrRGF0YVRh
c2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNlbmRpZgotCisjZWxzZQogdm9pZCBE
b3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQgZG93bmxv
YWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBhdXRvIGRvd25s
b2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQsIHJlcXVl
c3QpOwpAQCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjb252ZXJ0SGFu
ZGxlVG9Eb3cKICAgICBBU1NFUlQoIW1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsK
ICAgICBtX2Rvd25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwogfQor
I2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAKIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpj
b250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2FkSUQgZG93bmxv
YWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCiB7CkBAIC0xMzQs
MTEgKzEzMiwxMSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kCiAK
ICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25EZWNpZGVkLmNvbnRh
aW5zKGRvd25sb2FkSUQpKTsKICAgICAgICAgbV9kb3dubG9hZHNBZnRlckRlc3RpbmF0aW9uRGVj
aWRlZC5zZXQoZG93bmxvYWRJRCwgbmV0d29ya0RhdGFUYXNrKTsKLSAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSNlbmRpZgorI2Vsc2UKICAgICBpZiAoYXV0byogd2FpdGluZ0Rvd25sb2FkID0gZG93
bmxvYWQoZG93bmxvYWRJRCkpCiAgICAgICAgIHdhaXRpbmdEb3dubG9hZC0+ZGlkRGVjaWRlRG93
bmxvYWREZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxs
b3dPdmVyd3JpdGUpOworI2VuZGlmCiB9CiAKIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpyZXN1bWVE
b3dubG9hZChTZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRN
YW5hZ2VyLmgJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODAsOCAr
ODAsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KERvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKICAgICB2b2lkIHdpbGxE
ZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRhc2smLCBSZXNwb25z
ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwotI2VuZGlmCisjZWxzZQogICAgIHZvaWQgY29udmVydEhh
bmRsZVRvRG93bmxvYWQoRG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CisjZW5kaWYKICAgICB2b2lkIGNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVz
dGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKIAogICAgIHZvaWQgcmVzdW1l
RG93bmxvYWQoV2ViQ29yZTo6U2Vzc2lvbklELCBEb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbQkocmV2
aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2NvY29hL0Rvd25sb2FkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDEwICszOCwxMCBA
QCB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KICAgICAKLXZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKK3Zv
aWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQogewotICAgIEFTU0VSVCht
X2Rvd25sb2FkKTsKLSAgICBbbV9kb3dubG9hZCBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6
IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEpCisgICAgQVNTRVJUKG1fZG93bmxvYWRU
YXNrKTsKKyAgICBbbV9kb3dubG9hZFRhc2sgY2FuY2VsQnlQcm9kdWNpbmdSZXN1bWVEYXRhOiBe
KE5TRGF0YSAqIF9OdWxsYWJsZSByZXN1bWVEYXRhKQogICAgIHsKICAgICAgICAgaWYgKHJlc3Vt
ZURhdGEgJiYgcmVzdW1lRGF0YS5ieXRlcyAmJiByZXN1bWVEYXRhLmxlbmd0aCkKICAgICAgICAg
ICAgIGRpZENhbmNlbChJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4ocmVzdW1lRGF0YS5ieXRlcyksIHJlc3VtZURhdGEubGVuZ3RoKSk7CkBAIC01MCwx
NSArNTAsNiBAQCB2b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCiAgICAgfV07CiB9
CiAKLXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQotewotfQot
ICAgIAogfQogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3du
bG9hZElPUy5tbQkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQy
LDcgKzE0Miw3IEBAIHZvaWQgRG93bmxvYWQ6OnN0YXJ0TmV0d29ya0xvYWRXaXRoSGFuZGwKICNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIH0KIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0
d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQkocmV2
aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L21hYy9Eb3dubG9hZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZv
aWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWYKICAgICBbbV9uc1VSTERvd25s
b2FkIHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmU6Tk9dOwogfQogCi12b2lkIERvd25sb2FkOjpj
YW5jZWxOZXR3b3JrTG9hZCgpCit2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtM
b2FkKCkKIHsKICAgICBbbV9uc1VSTERvd25sb2FkIGNhbmNlbF07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAv
RG93bmxvYWRTb3VwLmNwcAkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEJyZW50IEZ1
bGdoYW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJEb3dubG9hZC5oIgotCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgot
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi12b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCi17
Ci0gICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7Ci0gICAgZGlkQ2FuY2VsKHsgfSk7Ci19Ci0KLXZv
aWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgRG93bmxvYWQ6
OnBsYXRmb3JtRGlkRmluaXNoKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
c291cC9Eb3dubG9hZFNvdXAuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1c3BlbmQoKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGUgeyB9CiAgICAgTmV0
d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBz
ZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2Fk
TWFjLm1tCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya0xvYWRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAK
ICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTmV0d29ya0xvYWQuaCIKIAorI2lmICFVU0Uo
TkVUV09SS19TRVNTSU9OKQorCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogCkBAIC01NCwzICs1Niw1IEBAIHZvaWQg
TmV0d29ya0xvYWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMKICNlbmRpZiAvLyAhVVNFKENGVVJM
Q09OTkVDVElPTikKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAhVVNFKE5F
VFdPUktfU0VTU0lPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya0RhdGFUYXNrU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAkocmV2aXNpb24gMjA4MjQ3
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBOZXR3b3JrRGF0YVRhc2tT
b3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91
bGRDb250ZW50U25pZmYpCiAgICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVkKQogewotICAgIHN0YXRpY19j
YXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkucmVnaXN0ZXJOZXR3b3Jr
RGF0YVRhc2soKnRoaXMpOworICAgIG1fc2Vzc2lvbi0+cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2so
KnRoaXMpOwogICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC04MCw3ICs4MCw3IEBAIE5ldHdvcmtEYXRhVGFza1NvdXA6Ok5l
dHdvcmtEYXRhVGFza1NvdXAKIE5ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tT
b3VwKCkKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKLSAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRo
aXMpOworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiB9
CiAKIFN0cmluZyBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CkBAIC04NjMsNyArODYzLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCgp
CiAgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX09VVFBVVF9TVFJFQU0o
b3V0cHV0U3RyZWFtLmxlYWtSZWYoKSkpOwogCiAgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0g
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwotICAgIGF1dG8g
ZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIG1f
cGVuZGluZ0Rvd25sb2FkSUQsIHRoaXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3Rl
ZEZpbGVuYW1lKCkpOworICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25s
b2FkPihkb3dubG9hZE1hbmFnZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsICp0aGlzLCBtX3Nlc3Np
b24tPnNlc3Npb25JRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsKICAgICBhdXRvKiBkb3dubG9h
ZFB0ciA9IGRvd25sb2FkLmdldCgpOwogICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0JlY2Ft
ZURvd25sb2FkVGFzayhtX3BlbmRpbmdEb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CiAg
ICAgZG93bmxvYWRQdHItPmRpZENyZWF0ZURlc3RpbmF0aW9uKG1fcGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24pOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
RGF0YVRhc2tTb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgJKHJldmlzaW9uIDIwODI0NykKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxNCArNDIsMTMgQEAgcHVibGljOgogCiAgICAgfk5ldHdvcmtEYXRh
VGFza1NvdXAoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOwotCiBwcml2YXRl
OgogICAgIE5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAgdm9pZCBzdXNwZW5k
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3Vt
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOwog
ICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uU291cC5oIgogCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDksMTAgKzQ3LDQgQEAgU291cFNl
c3Npb24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlcwogICAgIHJldHVybiBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpOwogfQogCi12
b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCi17Ci0gICAgZm9y
IChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKLSAgICAgICAgdGFzay0+aW52YWxpZGF0ZUFu
ZENhbmNlbCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
aAkocmV2aXNpb24gMjA4MjQ3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDExIEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9u
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cDsKLQog
Y2xhc3MgTmV0d29ya1Nlc3Npb25Tb3VwIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTQ0LDE1ICs0MSw4IEBAIHB1YmxpYzoKIAogICAgIFNv
dXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OwogCi0gICAgdm9pZCByZWdpc3Rlck5ldHdv
cmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRk
KCZ0YXNrKTsgfQotICAgIHZvaWQgdW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0
YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQucmVtb3ZlKCZ0YXNrKTsgfQotCiBwcml2
YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChXZWJDb3JlOjpTZXNzaW9uSUQpOwotCi0gICAg
dm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7Ci0KLSAgICBIYXNoU2V0PE5ldHdv
cmtEYXRhVGFza1NvdXAqPiBtX2RhdGFUYXNrU2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMDgyNDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNDMsNiArMTA0Myw4
IEBACiAJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTExREJB
RTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi87IH07CiAJCTUzMjE1OTU1MURC
QUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyog
TmV0d29ya1Nlc3Npb25Db2NvYS5oICovOyB9OwogCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0Mg
LyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRh
c2tDb2NvYS5oICovOyB9OworCQk1M0JBNDdEMDFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0Rh
dGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAg
Ki87IH07CisJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjU0
NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovOyB9OwogCQk1QzA1
MkYyNjFDNkQzQkQzMDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzA1MkYyNDFDNkQz
QUI2MDA3NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi87IH07CiAJCTVD
MTQyNkVDMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0
MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwICovOyB9OwogCQk1QzE0MjZFRDFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDMTQyNkUzMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oICovOyB9OwpAQCAtMzEzMSw2ICszMTMzLDggQEAKIAkJNTMyMTU5NTAx
REJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Np
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Np
b24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29y
a0RhdGFUYXNrQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBO
ZXR3b3JrRGF0YVRhc2tCbG9iLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRh
VGFza0Jsb2IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzlFQjU0NzFEQzJF
RTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
OUQxOEI3MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGhv
dG9zU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNBQjYw
MDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBw
YXRoID0gQXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDY1LDYgKzU0NjksOCBAQAogCQkJ
CTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLywKIAkJCQk4
Mzk5MDFGRjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovLAogCQkJCTgzOTkw
MUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oICovLAorCQkJCTUzOUVCNTQ2MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLywKKwkJCQk1MzlFQjU0
NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovLAogCQkJCTgzRDQ1
NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovLAogCQkJCTgzOTE0
OTYzMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCAqLywKIAkJCQk1
MTBDQzdERjE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3BwICovLApAQCAtNzgy
Nyw2ICs3ODMzLDcgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJv
Y2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0
QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEy
NEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2lu
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQ
bHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOUYzMzEyQjg0NEUy
MDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAgLTkzMjAsNiArOTMy
Nyw3IEBACiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRDYyMjc3MTczOUQ4
NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5TZXJ2aWNl
RW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkZCN0FFMTFFNjRCNjgwMERCMTM3
MSAvKiBQbHVnaW5WaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEM5MkY0MTJEQjlFNzEw
MENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293650</attachid>
            <date>2016-11-02 02:59:06 -0700</date>
            <delta_ts>2016-11-04 03:06:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>86334</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMTRjMWNkLi42NDliZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTEtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTWFyayBIVFRQUGFyc2Vycy5o
IGFuZCBBc3luY0ZpbGVTdHJlYW0uaCBhcyBwcml2YXRlLgorICAgICAgICAqIGZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBBc3luY0ZpbGVTdHJlYW0gY2xh
c3MuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oOiBBZGQgV0VCQ09SRV9F
WFBPUlQgdG8gbGVuZ3RoKCkuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vy
cy5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gcGFyc2VSYW5nZSgpLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaDogQWRkIFdFQkNPUkVfRVhQT1JUIHRv
IHNldEhUVFBIZWFkZXJGaWVsZCgpLgorCiAyMDE2LTExLTAyICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgW01vZGVybiBNZWRpYSBDb250cm9sc10gTWVkaWEg
Q29udHJvbGxlcjogUGlQIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YWE4YzgwLi43Mjg4OWJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDU5
LDcgKzIwNTksNyBAQAogCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVCMENF
OTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjcxMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQSGVh
ZGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzY1QzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjcyMENFOTIzQTEwMDdF
RjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTRDNzY1RDBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuY3Bw
ICovOyB9OwotCQk1MTRDNzY3MzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVFMENFOTIz
QTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oICovOyB9OworCQk1MTRDNzY3MzBDRTkyM0ExMDA3
RUYzQ0QgLyogSFRUUFBhcnNlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjVFMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3Njc0
MENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVGMENFOTIzQTEwMDdFRjND
RCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmNwcCAqLzsgfTsKIAkJNTE0Qzc2NzUwQ0U5MjNBMTAw
N0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0
aW9uU3BhY2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTE0Qzc2NzgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjYzMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07CkBAIC02MTc4LDcgKzYx
NzgsNyBAQAogCQlFMUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQTVDQkIw
RThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRTFDQUE1QzYw
RThCRDIzNjAwQTczRUNBIC8qIEpTV29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBQTVDNTBFOEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIu
aCAqLzsgfTsKIAkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkx
RjE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCAqLzsgfTsKLQkJRTFDREU5
MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYyQ0M1IC8q
IEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CisJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTIxMTUwMTkxNjkw
MDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUQzMUNEQzE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRh
dGFGaWxlUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxRDMxQ0RBMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVu
Y2UuY3BwICovOyB9OwogCQlFMUQzMUNERDE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxl
UmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUQzMUNEQjE5MTk2MDIwMDAxMDA1QTMgLyogQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTFFMUJGMDAx
MTVGRjZGQjAwNkY1MkNBIC8qIFdpbmRvd3NLZXlib2FyZENvZGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUUxQkVGRjExNUZGNkZCMDA2RjUyQ0Eg
LyogV2luZG93c0tleWJvYXJkQ29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgK
aW5kZXggMzVlODVhNy4uZjg0OGJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9Bc3luY0ZpbGVTdHJlYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmls
ZVN0cmVhbS5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIEZpbGVTdHJlYW1DbGllbnQ7CiBjbGFz
cyBGaWxlU3RyZWFtOwogY2xhc3MgVVJMOwogCi1jbGFzcyBBc3luY0ZpbGVTdHJlYW0geworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgQXN5bmNGaWxlU3RyZWFtIHsKIHB1YmxpYzoKICAgICBleHBsaWNp
dCBBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCYpOwogICAgIH5Bc3luY0ZpbGVTdHJl
YW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IDFhNzcy
ZmMuLjdlMzUwOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDE2LTExLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRh
VGFzayBpbXBsZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXgg
Q2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogUmVtb3ZlIERvd25sb2FkU291
cC5jcHAKKwogMjAxNi0xMC0xOSAgR2Fib3IgS2VsZW1lbiAgPGtlbGVtZW5nQHVidW50dS5jb20+
CiAKICAgICAgICAgW0dUS10gW0wxMG5dIFVwZGF0ZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggN2ZhMjgyNS4u
YjY1ZmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJ
TEVTLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpA
QCAtMSw3ICsxLDYgQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFu
c2xhdGFibGUgc3RyaW5ncy4KIEVycm9yc0d0ay5jcHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3Bw
Ci0uLi8uLi8uLi9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2Fk
U291cC5jcHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkLmNwcAogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JEYXRhLmgKaW5kZXggYjFmY2Q5Yy4uOTMyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQmxvYkRhdGEuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgQmxv
YkRhdGFGaWxlUmVmZXJlbmNlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9
CiAKICAgICBsb25nIGxvbmcgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAg
ICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0
J3Mgbm90IGtub3duIHlldC4KKyAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGxvbmcgbGVuZ3RoKCkg
Y29uc3Q7IC8vIENvbXB1dGVzIGZpbGUgbGVuZ3RoIGlmIGl0J3Mgbm90IGtub3duIHlldC4KIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvYkRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5kZXggMWY0YTU2Ni4uN2Y2YjQyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODEs
NyArODEsNyBAQCBBdG9taWNTdHJpbmcgZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVz
TGluZShjb25zdCBTdHJpbmcmKTsKIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFt
ZU9wdGlvbnNIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBv
bmUgb2YgdGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qg
c3BlY2lmaWVkLgotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFu
Z2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5n
dGgpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcg
bG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VT
dWZmaXhMZW5ndGgpOwogCiAjaWYgRU5BQkxFKE5PU05JRkYpCiBDb250ZW50VHlwZU9wdGlvbnNE
aXNwb3NpdGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmIGhl
YWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmgKaW5kZXggN2Q2ODk1MS4uZDg5NjYxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApA
QCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0gICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgYWRkSFRU
UEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRhM2IwLi40MmRkY2RiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dApAQCAtMTgzLDYgKzE4Myw3IEBAIGVuZGlmICgpCiBzZXQoTmV0d29ya1By
b2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3Bw
CisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA0Njg1MTM2Li5mNjRlMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTA2IEBACiAyMDE2LTExLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAorICAgICAgICBOZXR3b3JrU2Vzc2lvbjogQWRkIE5ldHdvcmtEYXRhVGFzayBp
bXBsZW1lbnRhdGlvbiBmb3IgYmxvYnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzkzOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0
ZW5zZW4uCisKKyAgICAgICAgQWRkIE5ldHdvcmtEYXRhVGFza0Jsb2IgdG8gaGFuZGxlIGJsb2Jz
IHdoZW4gdXNpbmcgTmV0d29ya1Nlc3Npb24gaW5zdGVhZCBvZiB1c2luZyBSZXNvdXJjZUhhbmRs
ZS4gVGhpcyBwYXRjaAorICAgICAgICBhZGRzIG1vcmUgVVNFKE5FVFdPUktfU0VTU0lPTikgaWZk
ZWZzIHRvIG5vdCB1c2UgUmVzb3VyY2VIYW5kbGUgaW4gRG93bmxvYWRzIGFuZCBOZXR3b3JrTG9h
ZCB3aGVuIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50Lmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OkRvd25sb2FkKTogU3BsaXQgdGhlIGNvbnN0cnVjdG9yIGFnYWluIGFuZCBy
ZW1vdmUgdGhlIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmCisgICAgICAgIGRlZmluaXRpb25zLiBO
b3cgQ29jb2Egc3BlY2lmaWMgY29uc3RydWN0b3IgcmVjZWl2ZXMgYSBOU1VSTFNlc3Npb25Eb3du
bG9hZFRhc2sgYW5kIHRoZSBnZW5lcmFsIGNvbnN0cnVjdG9yCisgICAgICAgIHJldmVpY2VzIGEg
TmV0d29ya0RhdGFUYXNrIGFuZCBpcyB1c2VkIGJ5IFNvdXAgYmFja2VuZCBhbmQgYmxvYnMuCisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjp+RG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6c3RhcnRXaXRoSGFu
ZGxlKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6ZGlkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3Jt
Q2FuY2VsTmV0d29ya0xvYWQpOiBSZW5hbWUgY2FuY2VsTmV0d29ya0xvYWQoKSBhcyBwbGF0Zm9y
bUNhbmNlbE5ldHdvcmtMb2FkKCkgc2luY2UKKyAgICAgICAgdGhpcyBpcyBub3cgdXNlZCBvbmx5
IGJ5IENvY29hIHBsYXRmb3JtIHRvIGNhbmNlbCB0aGUgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNr
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZDo6c3VnZ2VzdGVkTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpyZXF1ZXN0KToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpzdGFydERvd25sb2FkKTogUmVtb3Zl
IGJsb2JzIHNwZWNpZmljIGNvZGUgd2hlbiB1c2luZyBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERl
c3RpbmF0aW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRN
YW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25s
b2FkQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5l
dHdvcmtMb2FkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3du
bG9hZFNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCk6IFJl
bW92ZSBibG9icyBzcGVjaWZpYyBjb2RlIHdoZW4KKyAgICAgICAgdXNpbmcgTmV0d29ya1Nlc3Np
b24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjcmVhdGUpOiBJZiByZXF1ZXN0IGlzIGEgYmxv
YiwgY3JlYXRlIGEgTmV0d29ya0RhdGFUYXNrQmxvYi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2suaDogQWRkIGludmFsaWRhdGVBbmRDYW5jZWwgcHVyZSB2aXJ0dWFs
IG1ldGhvZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6Ok5ldHdvcmtE
YXRhVGFza0Jsb2IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjp+TmV0
d29ya0RhdGFUYXNrQmxvYik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6
OmNsZWFyU3RyZWFtKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6cmVz
dW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmNhbmNlbCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmludmFsaWRhdGVBbmRDYW5jZWwpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpnZXRTaXplRm9yTmV4dCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEdldFNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpzZWVrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQmxvYjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6cmVhZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0Jsb2I6OnJlYWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6
cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRPcGVu
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkUmVhZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmNvbnN1bWVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpzdWdnZXN0ZWRGaWxlbmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6d3JpdGVEb3dubG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmNsZWFuRG93bmxvYWRGaWxlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWxEb3dubG9hZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaERvd25sb2FkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmFpbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2Fk
OjpOZXR3b3JrTG9hZCk6IFJlbW92ZSBibG9icyBzcGVjaWZpYyBjb2RlIHdoZW4gdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrTG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VBc3luYyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKTogTW92ZWQg
ZnJvbSBOZXR3b3JrU2Vzc2lvblNvdXAsIHNpbmNlIHRoaXMgaXMgbm93IHVzZWQgYWxzbyBieSBi
bG9icy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2spOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnVucmVnaXN0ZXJOZXR3b3JrRGF0
YVRhc2spOiBEaXR0by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0
YVRhc2tDb2NvYS5oOiBBZGQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIGltcGxlbWVudGF0aW9uIHRo
YXQgZG9lcyBub3RoaW5nCisgICAgICAgIGJlY2F1c2UgaW4gQ29jb2EgYWxsIHRhc2tzIGFyZSBp
bnZhbGlkYXRlZCBhbmQgY2FuY2VsZWQgYnkgdGhlIG5ldHdvcmsgc2Vzc2lvbi4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW06CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOiBSZW1vdmUgRG93bmxvYWRTb3VwLmNwcCBmcm9tIGNvbXBpbGF0aW9uLgorICAgICAgICAq
IFBsYXRmb3JtR1RLLmNtYWtlOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisKKzIwMTYtMTEt
MDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAg
IFBsdWdpbkluZm9TdG9yZTo6bG9hZFBsdWdpbnNJZk5lY2Vzc2FyeSBjYW4gc3RpbGwgbG9hZCBw
bHVnaW5zIG11bHRpcGxlIHRpbWVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMDMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAppbmRleCA3
MjFiNjRiLi5jMzA0Mzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmNwcApAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2JEb3dubG9hZENsaWVu
dC5oIgogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiRG93bmxvYWQuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKQEAg
LTk3LDMgKzk5LDUgQEAgdm9pZCBCbG9iRG93bmxvYWRDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAogfQorCisjZW5kaWYgLy8g
IVVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvQmxvYkRvd25sb2FkQ2xpZW50LmgKaW5kZXggZGNiODg5
ZC4uNGEzZTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaApAQCAtMjUsNiArMjUsOCBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQorCiAjaW5jbHVkZSA8
V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNs
aWVudC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDMgKzU3LDUgQEAgcHJpdmF0
ZToKIH07CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKaW5k
ZXggNjQ5NDhlMi4uMDIzNzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC00NSwxMCArNDUsMTAgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi1Eb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1h
bmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYgZG93
bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZE5hbWUpCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3du
bG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgTmV0d29ya0RhdGFUYXNrJiBkb3du
bG9hZCwgY29uc3QgU2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
TmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKICAgICAsIG1f
ZG93bmxvYWRJRChkb3dubG9hZElEKQotICAgICwgbV9kb3dubG9hZChkb3dubG9hZCkKKyAgICAs
IG1fZG93bmxvYWQoJmRvd25sb2FkKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAg
ICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CkBAIC01Niw4ICs1NiwyMCBAQCBE
b3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25s
b2FkSUQgZG93bmxvYWRJRCwgUGxhdAogCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkQ3JlYXRl
RG93bmxvYWQoKTsKIH0KLSNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorRG93bmxvYWQ6OkRv
d25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25s
b2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogZG93bmxvYWQsIGNvbnN0IFNlc3Npb25J
RCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCisgICAgOiBtX2Rvd25s
b2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCisgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJ
RCkKKyAgICAsIG1fZG93bmxvYWRUYXNrKGRvd25sb2FkKQorICAgICwgbV9zZXNzaW9uSUQoc2Vz
c2lvbklEKQorICAgICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCit7CisgICAgQVNT
RVJUKG1fZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCisgICAgbV9kb3dubG9hZE1hbmFnZXIu
ZGlkQ3JlYXRlRG93bmxvYWQoKTsKK30KKyNlbmRpZgorI2Vsc2UKIERvd25sb2FkOjpEb3dubG9h
ZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElE
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
TmFtZSkKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKGRvd25sb2FkTWFuYWdlcikKICAgICAsIG1f
ZG93bmxvYWRJRChkb3dubG9hZElEKQpAQCAtNjgsOSArODAsMTEgQEAgRG93bmxvYWQ6OkRvd25s
b2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2Fk
SUQsIGNvbnMKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURvd25sb2FkKCk7CiB9
CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKIAogRG93bmxvYWQ6On5Eb3dubG9hZCgp
CiB7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgaWYgKG1fcmVzb3VyY2VIYW5kbGUp
IHsKICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZS0+Y2xlYXJDbGllbnQoKTsKICAgICAgICAgbV9y
ZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC03OSwxMCArOTMsMTIgQEAgRG93bmxvYWQ6On5E
b3dubG9hZCgpCiAgICAgbV9kb3dubG9hZENsaWVudCA9IG51bGxwdHI7CiAKICAgICBwbGF0Zm9y
bUludmFsaWRhdGUoKTsKKyNlbmRpZgogCiAgICAgbV9kb3dubG9hZE1hbmFnZXIuZGlkRGVzdHJv
eURvd25sb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxv
YWQ6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkp
IHsKQEAgLTkyLDExICsxMDgsNyBAQCB2b2lkIERvd25sb2FkOjpzdGFydCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2Vsc2UKICAgICBzdGFydE5ldHdvcmtMb2FkKCk7Ci0jZW5kaWYKIH0KIAog
dm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA4LDM3ICsxMjAsMzkgQEAgdm9p
ZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHJlc3BvbnNlKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNlCiAgICAgc3Rh
cnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoaGFuZGxlLCByZXNwb25zZSk7Ci0jZW5kaWYKIH0KKyNl
bmRpZgogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQogeworI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisgICAgaWYgKG1fZG93bmxvYWQpIHsKKyAgICAgICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7
CisgICAgICAgIGRpZENhbmNlbCh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UK
ICAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkpIHsKICAgICAgICAgYXV0
byByZXNvdXJjZUhhbmRsZSA9IFdURk1vdmUobV9yZXNvdXJjZUhhbmRsZSk7CiAgICAgICAgIHJl
c291cmNlSGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8QmxvYkRvd25sb2Fk
Q2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmRpZENhbmNlbCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGNhbmNlbE5ldHdvcmtMb2FkKCk7CisjZW5kaWYKKyAgICBwbGF0
Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiB9CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
IHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9h
ZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QsIG1fc3VnZ2VzdGVkTmFtZSkpOwogfQogCi0jaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKQogewogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRvd25sb2Fkc0F1dGhlbnRp
Y2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgqdGhpcywg
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOwogfQotI2VuZGlmCiAKIHZvaWQgRG93bmxvYWQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKQEAg
LTE0NywxNiArMTYxLDYgQEAgdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6OkRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSkpOwogfQogCi12b2lkIERvd25sb2Fk
OjpkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCi17Ci0gICAgaWYgKCFtX2hhc1JlY2Vp
dmVkRGF0YSkgewotICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJkaWRSZWNlaXZlRGF0
YTogU3RhcnRlZCByZWNlaXZpbmcgZGF0YSAoaWQgPSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElE
KCkuZG93bmxvYWRJRCgpKTsKLSAgICAgICAgbV9oYXNSZWNlaXZlZERhdGEgPSB0cnVlOwotICAg
IH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZFJlY2VpdmVEYXRhKGxl
bmd0aCkpOwotfQotCiBib29sIERvd25sb2FkOjpzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGJvb2wgcmVzdWx0OwpAQCAtMTY2
LDggKzE3MCw2IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lm
ICFVU0UoTkVUV09SS19TRVNTSU9OKQotCiBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFs
bG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKQEAgLTE4Miw4ICsxODQs
NiBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsCiAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQog
Ci0jZW5kaWYKLQogdm9pZCBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQogewogICAgIHNl
bmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lQXN5bmMoZG93bmxvYWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSkpOwpAQCAtMjA5
LDE3ICsyMDksMzAgQEAgdm9pZCBEb3dubG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Uo
KQogewogICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7
CiB9CisjZW5kaWYKIAogdm9pZCBEb3dubG9hZDo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3Qg
U3RyaW5nJiBwYXRoKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZENy
ZWF0ZURlc3RpbmF0aW9uKHBhdGgpKTsKIH0KIAordm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZURh
dGEodWludDY0X3QgbGVuZ3RoKQoreworICAgIGlmICghbV9oYXNSZWNlaXZlZERhdGEpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVj
ZWl2aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQo
KSk7CisgICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzZW5k
KE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKK30KKwog
dm9pZCBEb3dubG9hZDo6ZGlkRmluaXNoKCkKIHsKICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KCJkaWRGaW5pc2g6IChpZCA9ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElE
KCkpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgcGxhdGZvcm1EaWRGaW5pc2go
KTsKKyNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkRmluaXNo
KCkpOwogCkBAIC0yNzcsNCArMjkwLDEwIEBAIGJvb2wgRG93bmxvYWQ6OmlzQWx3YXlzT25Mb2dn
aW5nQWxsb3dlZCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFQTEFURk9STShDT0NPQSkKK3Zv
aWQgRG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQoreworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCBjM2ZiZjA5Li4yNWNiYjkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaApA
QCAtNDAsMTIgKzQwLDYgQEAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFBMQVRGT1JN
KENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s7Ci10eXBlZGVmIE5T
VVJMU2Vzc2lvbkRvd25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWY7Ci0jZWxpZiBV
U0UoU09VUCkKLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgTmV0d29ya0RhdGFUYXNrOwotfQot
dHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWY7
CiAjZW5kaWYKICNlbHNlIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAjaWYgUExBVEZPUk0oQ09D
T0EpCkBAIC03Myw2ICs2Nyw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgRG93bmxvYWRNYW5hZ2VyOworY2xhc3MgTmV0d29ya0RhdGFUYXNr
OwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFzcyBXZWJQYWdlOwogCkBAIC04MCwzOSArNzUs
NDMgQEAgY2xhc3MgRG93bmxvYWQgOiBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEb3dubG9hZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgRG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiwgRG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYsIGNvbnN0IFdlYkNv
cmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
ID0geyB9KTsKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3dubG9hZElELCBOZXR3
b3JrRGF0YVRhc2smLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrKiwgY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOwogI2VuZGlmCisjZWxzZQogICAgIERvd25s
b2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2FkSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7IH0pOworI2VuZGlm
CiAKICAgICB+RG93bmxvYWQoKTsKIAorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZv
aWQgc3RhcnQoKTsKICAgICB2b2lkIHN0YXJ0V2l0aEhhbmRsZShXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyNlbmRpZgogICAgIHZv
aWQgcmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2b2lkIGNh
bmNlbCgpOwogCiAgICAgRG93bmxvYWRJRCBkb3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9k
b3dubG9hZElEOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWdnZXN0ZWROYW1lOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAKICNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQogICAgIHZvaWQgc2V0U2FuZGJveEV4dGVuc2lvbihSZWZQdHI8U2FuZGJv
eEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7IG1fc2FuZGJveEV4dGVuc2lvbiA9IFdU
Rk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNlCisgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CiAgICAg
dm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSNlbmRpZgogICAgIHZvaWQgZGlkU3RhcnQoKTsKICAg
ICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwogICAgIGJvb2wg
c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIGRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93
T3ZlcndyaXRlKTsKLSNlbmRpZgogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWVBc3luYyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZERlY2lkZURvd25s
b2FkRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblBhdGgsIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwogICAgIHZvaWQgY29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtRGlkRmluaXNoKCk7
CisjZW5kaWYKICAgICB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0
aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpOwogICAgIHZvaWQg
ZGlkRmluaXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlk
RmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJl
bmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIGRpZENhbmNlbChjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIHJlc3VtZURhdGEpOwogCkBAIC0xMjQsMzcgKzEyMywzNSBAQCBwcml2YXRlOgogI2lm
ICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZCgpOwogICAg
IHZvaWQgc3RhcnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0jZW5kaWYKLSAgICB2b2lkIGNh
bmNlbE5ldHdvcmtMb2FkKCk7Ci0KICAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworI2Vu
ZGlmCisgICAgdm9pZCBwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCk7CiAKICAgICBib29sIGlz
QWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAgICAgRG93bmxvYWRNYW5hZ2VyJiBt
X2Rvd25sb2FkTWFuYWdlcjsKICAgICBEb3dubG9hZElEIG1fZG93bmxvYWRJRDsKLSAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogCiAgICAgUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFz
az4gbV9kb3dubG9hZDsKLSNlbGlmIFVTRShTT1VQKQogICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IG1fZG93bmxvYWQ7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZFRhc2s7CiAjZW5kaWYKICAgICBXZWJDb3Jl
OjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUmV0YWluUHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3dubG9hZDsKICAgICBS
ZXRhaW5QdHI8V0tEb3dubG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAjZW5kaWYKLSNlbmRp
ZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pCiAgICAg
UmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZW5kaWYKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1fZG93bmxvYWRDbGll
bnQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlSGFuZGxl
OworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVk
TmFtZTsKICAgICBib29sIG1faGFzUmVjZWl2ZWREYXRhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuY3BwCmluZGV4IGIyZmRmYWEuLmI0MDZkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIu
Y3BwCkBAIC00NywyMyArNDcsMjEgQEAgRG93bmxvYWRNYW5hZ2VyOjpEb3dubG9hZE1hbmFnZXIo
Q2xpZW50JiBjbGllbnQpCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9hZChTZXNz
aW9uSUQgc2Vzc2lvbklELCBEb3dubG9hZElEIGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogewogI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkp
IHsKLSAgICAgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29y
a1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrU2Vzc2lvbikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
Ci0gICAgICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklEOwotICAgICAgICBwYXJh
bWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgICAgICBwYXJhbWV0ZXJzLmNsaWVudENyZWRl
bnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9saWN5OjpNYXlBc2tDbGllbnRGb3JDcmVk
ZW50aWFsczsKLSAgICAgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3dubG9hZElELCBzdGQ6
Om1ha2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0ZXJzKSwgZG93bmxv
YWRJRCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisgICAgYXV0byogbmV0d29y
a1Nlc3Npb24gPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKKyAg
ICBpZiAoIW5ldHdvcmtTZXNzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisg
ICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5zZXNz
aW9uSUQgPSBzZXNzaW9uSUQ7CisgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAg
ICBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBDbGllbnRDcmVkZW50aWFsUG9s
aWN5OjpNYXlBc2tDbGllbnRGb3JDcmVkZW50aWFsczsKKyAgICBtX3BlbmRpbmdEb3dubG9hZHMu
YWRkKGRvd25sb2FkSUQsIHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0Rvd25sb2FkPihXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBkb3dubG9hZElELCAqbmV0d29ya1Nlc3Npb24sIHN1Z2dlc3RlZE5hbWUp
KTsKKyNlbHNlCiAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+
KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0LCBzdWdnZXN0ZWROYW1lKTsKICAgICBkb3dubG9h
ZC0+c3RhcnQoKTsKIAogICAgIEFTU0VSVCghbV9kb3dubG9hZHMuY29udGFpbnMoZG93bmxvYWRJ
RCkpOwogICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7
CisjZW5kaWYKIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCkBAIC05OSw4ICs5Nyw3IEBA
IHZvaWQgRG93bmxvYWRNYW5hZ2VyOjp3aWxsRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRp
b24oTmV0d29ya0RhdGFUYXNrJiBuZXR3CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rvd25sb2Fk
c1dhaXRpbmdGb3JEZXN0aW5hdGlvbi5zZXQoZG93bmxvYWRJRCwgc3RkOjptYWtlX3BhaXI8UmVm
UHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXI+KCZuZXR3b3Jr
RGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0KLSNlbmRpZgotCisjZWxzZQog
dm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQg
ZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBhdXRv
IGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZD4oKnRoaXMsIGRvd25sb2FkSUQs
IHJlcXVlc3QpOwpAQCAtMTA5LDYgKzEwNiw3IEBAIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjb252
ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJlc291cmNlSGFuCiAg
ICAgQVNTRVJUKCFtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAgICAgbV9kb3du
bG9hZHMuYWRkKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKIH0KKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQogCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNp
ZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElEIGRvd25sb2FkSUQsIFN0cmlu
ZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQogewpAQCAtMTM0LDExICsxMzIsMTEg
QEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVz
dGluYXRpb24oRG93bmxvYWRJRCBkb3dubG8KIAogICAgICAgICBBU1NFUlQoIW1fZG93bmxvYWRz
QWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkpOwogICAgICAgICBt
X2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25EZWNpZGVkLnNldChkb3dubG9hZElELCBuZXR3b3Jr
RGF0YVRhc2spOwotICAgICAgICByZXR1cm47CiAgICAgfQotI2VuZGlmCisjZWxzZQogICAgIGlm
IChhdXRvKiB3YWl0aW5nRG93bmxvYWQgPSBkb3dubG9hZChkb3dubG9hZElEKSkKICAgICAgICAg
d2FpdGluZ0Rvd25sb2FkLT5kaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CisjZW5kaWYKIH0KIAog
dm9pZCBEb3dubG9hZE1hbmFnZXI6OnJlc3VtZURvd25sb2FkKFNlc3Npb25JRCwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCmluZGV4IDA3MWVhOWUuLjkwNjNmODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRNYW5hZ2VyLmgKQEAgLTgwLDggKzgwLDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
dm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJik7CiAgICAgdm9pZCB3aWxsRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRp
b24oTmV0d29ya0RhdGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSNlbmRp
ZgorI2Vsc2UKICAgICB2b2lkIGNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQsIFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworI2VuZGlmCiAgICAgdm9pZCBjb250
aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2FkSUQsIFN0cmluZyBk
ZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCBhbGxvd092
ZXJ3cml0ZSk7CiAKICAgICB2b2lkIHJlc3VtZURvd25sb2FkKFdlYkNvcmU6OlNlc3Npb25JRCwg
RG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2Fk
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2Ev
RG93bmxvYWRDb2NvYS5tbQppbmRleCBkMzIwOWFkLi44NjhlMTE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93
bmxvYWRDb2NvYS5tbQpAQCAtMzgsMTAgKzM4LDEwIEBAIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogICAgIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0
d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7
Ci0gICAgQVNTRVJUKG1fZG93bmxvYWQpOwotICAgIFttX2Rvd25sb2FkIGNhbmNlbEJ5UHJvZHVj
aW5nUmVzdW1lRGF0YTogXihOU0RhdGEgKiBfTnVsbGFibGUgcmVzdW1lRGF0YSkKKyAgICBBU1NF
UlQobV9kb3dubG9hZFRhc2spOworICAgIFttX2Rvd25sb2FkVGFzayBjYW5jZWxCeVByb2R1Y2lu
Z1Jlc3VtZURhdGE6IF4oTlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEpCiAgICAgewogICAg
ICAgICBpZiAocmVzdW1lRGF0YSAmJiByZXN1bWVEYXRhLmJ5dGVzICYmIHJlc3VtZURhdGEubGVu
Z3RoKQogICAgICAgICAgICAgZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihyZXN1bWVEYXRhLmJ5dGVzKSwgcmVzdW1lRGF0YS5sZW5n
dGgpKTsKQEAgLTUwLDE1ICs1MCw2IEBAIHZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2Fk
KCkKICAgICB9XTsKIH0KIAotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIERvd25sb2FkOjpwbGF0Zm9ybURpZEZp
bmlzaCgpCi17Ci19Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9E
b3dubG9hZElPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9p
b3MvRG93bmxvYWRJT1MubW0KaW5kZXggZjMzOGFiYy4uNTAyNGFkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvaW9zL0Rvd25sb2Fk
SU9TLm1tCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnROZXR3b3JrTG9h
ZFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2UKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIH0KIAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29y
a0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tCmluZGV4IGJiM2ZmMmIu
Ljk5ZTM4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQg
RG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNv
bnN0IFN0cmluZyYgcGF0aCwKICAgICBbbV9uc1VSTERvd25sb2FkIHNldERlbGV0ZXNGaWxlVXBv
bkZhaWx1cmU6Tk9dOwogfQogCi12b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCit2
b2lkIERvd25sb2FkOjpwbGF0Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKIHsKICAgICBbbV9uc1VS
TERvd25sb2FkIGNhbmNlbF07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4MmU4YzVjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBCcmVu
dCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRG93bmxvYWQuaCIKLQotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2Uu
aCIKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotdm9pZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQo
KQotewotICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOwotICAgIGRpZENhbmNlbCh7IH0pOwotfQot
Ci12b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi12b2lkIERvd25s
b2FkOjpwbGF0Zm9ybURpZEZpbmlzaCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDgzNGFlY2EuLjBlNjNjM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTIwNywxOCArMjA3LDE2IEBAIHZvaWQgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3du
bG9hZChTZXNzaW9uSUQKICAgICB9CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlm
ICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIGxvYWRlci0+bmV0
d29ya0xvYWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QsIHJl
c3BvbnNlKTsKLSAgICAgICAgbG9hZGVyLT5kaWRDb252ZXJ0VG9Eb3dubG9hZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5jb252
ZXJ0VGFza1RvRG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIGxv
YWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQoKTsKKyNlbHNlCiAgICAgbmV0d29ya1Byb2Nlc3Mu
ZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9h
ZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwogCiAgICAg
Ly8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgogICAgIGxvYWRl
ci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7
CiAKICAgICBsb2FkZXItPmRpZENvbnZlcnRUb0Rvd25sb2FkKCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTShTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcm
IHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtEYXRhVGFzay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0
YVRhc2suY3BwCmluZGV4IDU0ZGE0ZmIuLmRiYjA2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0Js
b2IuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKQEAgLTQ0LDYgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJlZjxOZXR3
b3JrRGF0YVRhc2s+IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ29udGVudFNu
aWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KQogeworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXNCbG9iKCkpCisgICAgICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjcmVhdGUoc2Vz
c2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzaG91bGRDb250ZW50U25pZmYpOworCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza0NvY29hOjpjcmVhdGUoc2Vzc2lv
biwgY2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZm
LCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAppbmRleCA0
ZGMxMjkwLi42ZGE0MWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2suaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2suaApAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5k
Q2FuY2VsKCkgPSAwOwogCiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7CiAgICAgICAgIFJ1bm5pbmcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2tCbG9iLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
a0Jsb2IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWY5N2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0
YVRhc2tCbG9iLmNwcApAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0Js
b2IuaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiRG93bmxvYWQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2lu
Y2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXN5bmNGaWxlU3RyZWFtLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYlJl
Z2lzdHJ5SW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN0cmVhbS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vy
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3Bv
bnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IDUxMiAqIDEwMjQ7CisKK3N0
YXRpYyBjb25zdCBpbnQgaHR0cE9LID0gMjAwOworc3RhdGljIGNvbnN0IGludCBodHRwUGFydGlh
bENvbnRlbnQgPSAyMDY7CitzdGF0aWMgY29uc3QgaW50IGh0dHBOb3RBbGxvd2VkID0gNDAzOwor
c3RhdGljIGNvbnN0IGludCBodHRwUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNjsK
K3N0YXRpYyBjb25zdCBpbnQgaHR0cEludGVybmFsRXJyb3IgPSA1MDA7CitzdGF0aWMgY29uc3Qg
Y2hhciogaHR0cE9LVGV4dCA9ICJPSyI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cFBhcnRpYWxD
b250ZW50VGV4dCA9ICJQYXJ0aWFsIENvbnRlbnQiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBO
b3RBbGxvd2VkVGV4dCA9ICJOb3QgQWxsb3dlZCI7CitzdGF0aWMgY29uc3QgY2hhciogaHR0cFJl
cXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGVUZXh0ID0gIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0
aXNmaWFibGUiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBJbnRlcm5hbEVycm9yVGV4dCA9ICJJ
bnRlcm5hbCBTZXJ2ZXIgRXJyb3IiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgd2ViS2l0
QmxvYlJlc291cmNlRG9tYWluID0gIldlYktpdEJsb2JSZXNvdXJjZSI7CisKK05ldHdvcmtEYXRh
VGFza0Jsb2I6Ok5ldHdvcmtEYXRhVGFza0Jsb2IoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5l
dHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgOiBOZXR3
b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBEb05vdEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMsIGZhbHNlKQorICAgICwgbV9ibG9iRGF0YShzdGF0aWNfY2FzdDxCbG9iUmVnaXN0
cnlJbXBsJj4oYmxvYlJlZ2lzdHJ5KCkpLmdldEJsb2JEYXRhRnJvbVVSTChyZXF1ZXN0LnVybCgp
KSkKKyAgICAsIG1fc3RyZWFtKHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNGaWxlU3RyZWFtPigqdGhp
cykpCit7CisgICAgbV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7Cisg
ICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBDcmVhdGVkIE5ldHdvcmtEYXRhVGFza0Jsb2Ig
Zm9yICVzIiwgdGhpcywgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30K
KworTmV0d29ya0RhdGFUYXNrQmxvYjo6fk5ldHdvcmtEYXRhVGFza0Jsb2IoKQoreworICAgIGNs
ZWFyU3RyZWFtKCk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0
aGlzKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhclN0cmVhbSgpCit7Cisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7
CisgICAgICAgIG1fZmlsZU9wZW5lZCA9IGZhbHNlOworICAgICAgICBtX3N0cmVhbS0+Y2xvc2Uo
KTsKKyAgICB9CisgICAgbV9zdHJlYW0gPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5p
bmcpOworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBT
dGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6
OlJ1bm5pbmc7CisKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUp
IHsKKyAgICAgICAgQVNTRVJUKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50
KSB7CisgICAgICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX2Zp
cnN0UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAgICAgZGlkRmFpbChF
cnJvcjo6TWV0aG9kTm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiB0aGUgYmxvYiBkYXRhIGlzIG5vdCBmb3VuZCwgZmFpbCBub3cuCisg
ICAgICAgIGlmICghbV9ibG9iRGF0YSkgeworICAgICAgICAgICAgZGlkRmFpbChFcnJvcjo6Tm90
Rm91bmRFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
LyBQYXJzZSB0aGUgIlJhbmdlIiBoZWFkZXIgd2UgY2FyZSBhYm91dC4KKyAgICAgICAgU3RyaW5n
IHJhbmdlID0gbV9maXJzdFJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpS
YW5nZSk7CisgICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpICYmICFwYXJzZVJhbmdlKHJhbmdl
LCBtX3JhbmdlT2Zmc2V0LCBtX3JhbmdlRW5kLCBtX3JhbmdlU3VmZml4TGVuZ3RoKSkgeworICAg
ICAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKEVycm9yOjpSYW5nZUVycm9yKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdldFNpemVGb3JOZXh0KCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c3VzcGVuZCgpCit7CisgICAgLy8g
RklYTUU6IGNhbiB0aGlzIGhhcHBlbj8KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpj
YW5jZWwoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0
ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0g
U3RhdGU6OkNhbmNlbGluZzsKKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgbV9m
aWxlT3BlbmVkID0gZmFsc2U7CisgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworICAgIH0KKwor
ICAgIGlmIChpc0Rvd25sb2FkKCkpCisgICAgICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAg
IGNhbmNlbCgpOworICAgIGNsZWFyU3RyZWFtKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
QmxvYjo6Z2V0U2l6ZUZvck5leHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICAvLyBEbyB3ZSBmaW5pc2ggdmFsaWRhdGluZyBhbmQgY291bnRpbmcgc2l6ZSBmb3IgYWxs
IGl0ZW1zPworICAgIGlmIChtX3NpemVJdGVtQ291bnQgPj0gbV9ibG9iRGF0YS0+aXRlbXMoKS5z
aXplKCkpIHsKKyAgICAgICAgc2VlaygpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9
IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9zaXplSXRlbUNvdW50KTsKKyAgICBzd2l0Y2ggKGl0
ZW0udHlwZSgpKSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRhdGE6CisgICAgICAg
IGRpZEdldFNpemUoaXRlbS5sZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxv
YkRhdGFJdGVtOjpUeXBlOjpGaWxlOgorICAgICAgICAvLyBGaWxlcyBrbm93IHRoZWlyIHNpemVz
LCBidXQgYXNraW5nIHRoZSBzdHJlYW0gdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgd2Fzbid0IG1v
ZGlmaWVkLgorICAgICAgICBtX3N0cmVhbS0+Z2V0U2l6ZShpdGVtLmZpbGUoKS0+cGF0aCgpLCBp
dGVtLmZpbGUoKS0+ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKCkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkR2V0U2l6ZShsb25nIGxvbmcgc2l6ZSkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6
OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAm
JiAhaXNEb3dubG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNpemUgaXMgLTEsIGl0IG1lYW5zIHRoZSBmaWxl
IGhhcyBiZWVuIG1vdmVkIG9yIGNoYW5nZWQuIEZhaWwgbm93LgorICAgIGlmIChzaXplID09IC0x
KSB7CisgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gVGhlIHNpemUgcGFzc2VkIGJhY2sgaXMgdGhlIHNpemUgb2Yg
dGhlIHdob2xlIGZpbGUuIElmIHRoZSB1bmRlcmx5aW5nIGl0ZW0gaXMgYSBzbGljZWQgZmlsZSwg
d2UgbmVlZCB0byB1c2UgdGhlIHNsaWNlIGxlbmd0aC4KKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0m
IGl0ZW0gPSBtX2Jsb2JEYXRhLT5pdGVtcygpLmF0KG1fc2l6ZUl0ZW1Db3VudCk7CisgICAgc2l6
ZSA9IGl0ZW0ubGVuZ3RoKCk7CisKKyAgICAvLyBDYWNoZSB0aGUgc2l6ZS4KKyAgICBtX2l0ZW1M
ZW5ndGhMaXN0LmFwcGVuZChzaXplKTsKKworICAgIC8vIENvdW50IHRoZSBzaXplLgorICAgIG1f
dG90YWxTaXplICs9IHNpemU7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgKz0gc2l6ZTsKKyAg
ICBtX3NpemVJdGVtQ291bnQrKzsKKworICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG5leHQgaXRl
bS4KKyAgICBnZXRTaXplRm9yTmV4dCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6
OnNlZWsoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBDb252ZXJ0
IGZyb20gdGhlIHN1ZmZpeCBsZW5ndGggdG8gdGhlIHJhbmdlLgorICAgIGlmIChtX3JhbmdlU3Vm
Zml4TGVuZ3RoICE9IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkgeworICAgICAgICBtX3JhbmdlT2Zm
c2V0ID0gbV90b3RhbFJlbWFpbmluZ1NpemUgLSBtX3JhbmdlU3VmZml4TGVuZ3RoOworICAgICAg
ICBtX3JhbmdlRW5kID0gbV9yYW5nZU9mZnNldCArIG1fcmFuZ2VTdWZmaXhMZW5ndGggLSAxOwor
ICAgIH0KKworICAgIC8vIEJhaWwgb3V0IGlmIHRoZSByYW5nZSBpcyBub3QgcHJvdmlkZWQuCisg
ICAgaWYgKG1fcmFuZ2VPZmZzZXQgPT0ga1Bvc2l0aW9uTm90U3BlY2lmaWVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBTa2lwIHRoZSBpbml0aWFsIGl0ZW1zIHRoYXQgYXJlIG5vdCBpbiB0
aGUgcmFuZ2UuCisgICAgbG9uZyBsb25nIG9mZnNldCA9IG1fcmFuZ2VPZmZzZXQ7CisgICAgZm9y
IChtX3JlYWRJdGVtQ291bnQgPSAwOyBtX3JlYWRJdGVtQ291bnQgPCBtX2Jsb2JEYXRhLT5pdGVt
cygpLnNpemUoKSAmJiBvZmZzZXQgPj0gbV9pdGVtTGVuZ3RoTGlzdFttX3JlYWRJdGVtQ291bnRd
OyArK21fcmVhZEl0ZW1Db3VudCkKKyAgICAgICAgb2Zmc2V0IC09IG1faXRlbUxlbmd0aExpc3Rb
bV9yZWFkSXRlbUNvdW50XTsKKworICAgIC8vIFNldCB0aGUgb2Zmc2V0IHRoYXQgbmVlZCB0byBq
dW1wIHRvIGZvciB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmFuZ2UuCisgICAgbV9jdXJyZW50SXRl
bVJlYWRTaXplID0gb2Zmc2V0OworCisgICAgLy8gQWRqdXN0IHRoZSB0b3RhbCByZW1haW5pbmcg
c2l6ZSBpbiBvcmRlciBub3QgdG8gZ28gYmV5b25kIHRoZSByYW5nZS4KKyAgICBpZiAobV9yYW5n
ZUVuZCAhPSBrUG9zaXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbG9uZyBsb25nIHJhbmdl
U2l6ZSA9IG1fcmFuZ2VFbmQgLSBtX3JhbmdlT2Zmc2V0ICsgMTsKKyAgICAgICAgaWYgKG1fdG90
YWxSZW1haW5pbmdTaXplID4gcmFuZ2VTaXplKQorICAgICAgICAgICAgbV90b3RhbFJlbWFpbmlu
Z1NpemUgPSByYW5nZVNpemU7CisgICAgfSBlbHNlCisgICAgICAgIG1fdG90YWxSZW1haW5pbmdT
aXplIC09IG1fcmFuZ2VPZmZzZXQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBMT0coTmV0d29ya1Nlc3Np
b24sICIlcCAtIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZSgldSkiLCB0
aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXJyb3JDb2RlKSk7CisKKyAgICBSZWY8TmV0d29y
a0RhdGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZShtX2ZpcnN0UmVxdWVzdC51cmwoKSwgZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vy
cm9yID8gInRleHQvcGxhaW4iIDogbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSwgZXJyb3JDb2Rl
ICE9IEVycm9yOjpOb0Vycm9yID8gMCA6IG1fdG90YWxSZW1haW5pbmdTaXplLCBTdHJpbmcoKSk7
CisgICAgc3dpdGNoIChlcnJvckNvZGUpIHsKKyAgICBjYXNlIEVycm9yOjpOb0Vycm9yOiB7Cisg
ICAgICAgIGJvb2wgaXNSYW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9IGtQb3NpdGlvbk5v
dFNwZWNpZmllZDsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaXNSYW5nZVJl
cXVlc3QgPyBodHRwUGFydGlhbENvbnRlbnQgOiBodHRwT0spOworICAgICAgICByZXNwb25zZS5z
ZXRIVFRQU3RhdHVzVGV4dChpc1JhbmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudFRleHQg
OiBodHRwT0tUZXh0KTsKKworICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlLCBtX2Jsb2JEYXRhLT5jb250ZW50VHlwZSgpKTsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50
TGVuZ3RoLCBTdHJpbmc6Om51bWJlcihtX3RvdGFsUmVtYWluaW5nU2l6ZSkpOworCisgICAgICAg
IGlmIChpc1JhbmdlUmVxdWVzdCkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlLCBQYXJzZWRDb250ZW50UmFuZ2UobV9y
YW5nZU9mZnNldCwgbV9yYW5nZUVuZCwgbV90b3RhbFNpemUpLmhlYWRlclZhbHVlKCkpOworICAg
ICAgICAvLyBGSVhNRTogSWYgYSByZXNvdXJjZSBpZGVudGlmaWVkIHdpdGggYSBibG9iOiBVUkwg
aXMgYSBGaWxlIG9iamVjdCwgdXNlciBhZ2VudHMgbXVzdCB1c2UgdGhhdCBmaWxlJ3MgbmFtZSBh
dHRyaWJ1dGUsCisgICAgICAgIC8vIGFzIGlmIHRoZSByZXNwb25zZSBoYWQgYSBDb250ZW50LURp
c3Bvc2l0aW9uIGhlYWRlciB3aXRoIHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgc2V0IHRvIHRoZSBG
aWxlJ3MgbmFtZSBhdHRyaWJ1dGUuCisgICAgICAgIC8vIE5vdGFibHksIHRoaXMgd2lsbCBhZmZl
Y3QgYSBuYW1lIHN1Z2dlc3RlZCBpbiAiRmlsZSBTYXZlIEFzIi4KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRXJyb3I6OlJhbmdlRXJyb3I6CisgICAgICAgIHJlc3BvbnNlLnNldEhU
VFBTdGF0dXNDb2RlKGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFi
bGVUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFcnJvcjo6U2VjdXJpdHlFcnJvcjoK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cE5vdEFsbG93ZWQpOworICAg
ICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwTm90QWxsb3dlZFRleHQpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVz
Q29kZShodHRwSW50ZXJuYWxFcnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNU
ZXh0KGh0dHBJbnRlcm5hbEVycm9yVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3Bv
bnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBlcnJv
ckNvZGVdKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAgTE9HKE5ldHdvcmtT
ZXNzaW9uLCAiJXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWNlaXZlUmVzcG9uc2UgY29t
cGxldGlvbkhhbmRsZXIgKCV1KSIsIHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2xpY3lB
Y3Rpb24pKTsKKworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAgY2xlYXJTdHJlYW0oKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvckNvZGUg
IT0gRXJyb3I6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIGRpZEZpbmlzaCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24pIHsK
KyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAgIG1fYnVm
ZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKKyAgICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9saWN5QWN0aW9uOjpQb2xpY3lEb3dubG9hZDoK
KyAgICAgICAgICAgIGRvd25sb2FkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWQoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBtb3JlIHJlbWFp
bmluZyBkYXRhIHRvIHJlYWQsIHdlIGFyZSBkb25lLgorICAgIGlmICghbV90b3RhbFJlbWFpbmlu
Z1NpemUgfHwgbV9yZWFkSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKSB7
CisgICAgICAgIGRpZEZpbmlzaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0YS0+aXRlbXMoKS5hdChtX3JlYWRJdGVt
Q291bnQpOworICAgIGlmIChpdGVtLnR5cGUoKSA9PSBCbG9iRGF0YUl0ZW06OlR5cGU6OkRhdGEp
CisgICAgICAgIHJlYWREYXRhKGl0ZW0pOworICAgIGVsc2UgaWYgKGl0ZW0udHlwZSgpID09IEJs
b2JEYXRhSXRlbTo6VHlwZTo6RmlsZSkKKyAgICAgICAgcmVhZEZpbGUoaXRlbSk7CisgICAgZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tCbG9iOjpyZWFkRGF0YShjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJU
KGl0ZW0uZGF0YSgpLmRhdGEoKSk7CisKKyAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQgPSBpdGVt
Lmxlbmd0aCgpIC0gbV9jdXJyZW50SXRlbVJlYWRTaXplOworICAgIGlmIChieXRlc1RvUmVhZCA+
IG1fdG90YWxSZW1haW5pbmdTaXplKQorICAgICAgICBieXRlc1RvUmVhZCA9IG1fdG90YWxSZW1h
aW5pbmdTaXplOworICAgIGNvbnN1bWVEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGl0ZW0uZGF0YSgpLmRhdGEoKS0+ZGF0YSgpKSArIGl0ZW0ub2Zmc2V0KCkgKyBtX2N1cnJlbnRJ
dGVtUmVhZFNpemUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXNUb1JlYWQpKTsKKyAgICBtX2N1cnJl
bnRJdGVtUmVhZFNpemUgPSAwOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnJlYWRG
aWxlKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOwor
ICAgIEFTU0VSVChtX3N0cmVhbSk7CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAg
IG1fc3RyZWFtLT5yZWFkKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9IG1faXRlbUxl
bmd0aExpc3RbbV9yZWFkSXRlbUNvdW50XSAtIG1fY3VycmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBp
ZiAoYnl0ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5nU2l6ZSkKKyAgICAgICAgYnl0ZXNUb1Jl
YWQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fdG90YWxSZW1haW5pbmdTaXplKTsKKyAgICBtX3N0cmVh
bS0+b3BlbkZvclJlYWQoaXRlbS5maWxlKCktPnBhdGgoKSwgaXRlbS5vZmZzZXQoKSArIG1fY3Vy
cmVudEl0ZW1SZWFkU2l6ZSwgYnl0ZXNUb1JlYWQpOworICAgIG1fZmlsZU9wZW5lZCA9IHRydWU7
CisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0gMDsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tCbG9iOjpkaWRPcGVuKGJvb2wgc3VjY2VzcykKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIW1fY2xpZW50
ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIGNsZWFyU3RyZWFtKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgZGlkRmFpbChFcnJv
cjo6Tm90UmVhZGFibGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8
TmV0d29ya0RhdGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgcmVhZCgpOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlYWQoaW50IGJ5dGVzUmVhZCkKK3sK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAoIW1fY2xpZW50ICYmICFpc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIGNs
ZWFyU3RyZWFtKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNSZWFk
IDwgMCkgeworICAgICAgICBkaWRGYWlsKEVycm9yOjpOb3RSZWFkYWJsZUVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKKyAgICBjb25zdW1lRGF0YShtX2J1ZmZlci5kYXRhKCksIGJ5dGVzUmVh
ZCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y29uc3VtZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKK3sKKyAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBi
eXRlc1JlYWQ7CisKKyAgICBpZiAoYnl0ZXNSZWFkKSB7CisgICAgICAgIGlmIChtX2Rvd25sb2Fk
RmlsZSAhPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgICAgICBpZiAoIXdy
aXRlRG93bmxvYWQoZGF0YSwgYnl0ZXNSZWFkKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9jbGllbnQpOworICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIGJ5
dGVzUmVhZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgewor
ICAgICAgICAvLyBXaGVuIHRoZSBjdXJyZW50IGl0ZW0gaXMgYSBmaWxlIGl0ZW0sIHRoZSByZWFk
aW5nIGlzIGNvbXBsZXRlZCBvbmx5IGlmIGJ5dGVzUmVhZCBpcyAwLgorICAgICAgICBpZiAoIWJ5
dGVzUmVhZCkgeworICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgICAgICBt
X2ZpbGVPcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc3RyZWFtLT5jbG9zZSgpOworCisg
ICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0uCisgICAgICAgICAgICBtX3JlYWRJ
dGVtQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lz
ZSwgd2UgcmVhZCB0aGUgY3VycmVudCB0ZXh0IGl0ZW0gYXMgYSB3aG9sZSBhbmQgbW92ZSB0byB0
aGUgbmV4dCBpdGVtLgorICAgICAgICBtX3JlYWRJdGVtQ291bnQrKzsKKyAgICB9CisKKyAgICBy
ZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6c2V0UGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3ZlcndyaXRlKQorewor
ICAgIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZmlsZW5hbWUs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlKTsKKworICAgIEFTU0VSVCgh
bV9zYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKG1fc2FuZGJv
eEV4dGVuc2lvbikKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lKCk7CisKKyAg
ICBpZiAoYWxsb3dPdmVyd3JpdGUgJiYgZmlsZUV4aXN0cyhtX3BlbmRpbmdEb3dubG9hZExvY2F0
aW9uKSkKKyAgICAgICAgZGVsZXRlRmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKK30K
KworU3RyaW5nIE5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInVua25v
d24iKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpkb3dubG9hZCgpCit7CisgICAg
QVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24pOworCisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9i
Ojpkb3dubG9hZCB0byAlcyIsIHRoaXMsIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24udXRmOCgp
LmRhdGEoKSk7CisKKyAgICBtX2Rvd25sb2FkRmlsZSA9IG9wZW5GaWxlKG1fcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24sIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKG1fZG93bmxvYWRGaWxlID09IGlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKGNhbmNl
bGxlZEVycm9yKG1fZmlyc3RSZXF1ZXN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93
bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93
bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgKnRoaXMsIG1fc2Vz
c2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOworICAgIGF1dG8qIGRvd25s
b2FkUHRyID0gZG93bmxvYWQuZ2V0KCk7CisgICAgZG93bmxvYWRNYW5hZ2VyLmRhdGFUYXNrQmVj
YW1lRG93bmxvYWRUYXNrKG1fcGVuZGluZ0Rvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsK
KyAgICBkb3dubG9hZFB0ci0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9wZW5kaW5nRG93bmxvYWRM
b2NhdGlvbik7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRCZWNv
bWVEb3dubG9hZCgpOworCisgICAgbV9idWZmZXIucmVzaXplKGJ1ZmZlclNpemUpOworICAgIHJl
YWQoKTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2tCbG9iOjp3cml0ZURvd25sb2FkKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7
CisgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKG1fZG93bmxvYWRGaWxlLCBkYXRh
LCBieXRlc1JlYWQpOworICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsKKyAgICAgICAgZGlk
RmFpbERvd25sb2FkKGNhbmNlbGxlZEVycm9yKG1fZmlyc3RSZXF1ZXN0KSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoYnl0ZXNXcml0dGVuID09IGJ5dGVzUmVh
ZCk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93
bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJU
KGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpjbGVhbkRv
d25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRmlsZSAhPSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlKSB7CisgICAgICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAg
ICAgIG1fZG93bmxvYWRGaWxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICB9Cisg
ICAgZGVsZXRlRmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKK30KKwordm9pZCBOZXR3
b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCit7CisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3JrRGF0YVRhc2tCbG9i
OjpkaWRGYWlsRG93bmxvYWQiLCB0aGlzKTsKKworICAgIGNsZWFyU3RyZWFtKCk7CisgICAgY2xl
YW5Eb3dubG9hZEZpbGVzKCk7CisKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAg
ICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+cmV2b2tlKCk7CisgICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIGVsc2UgeworICAgICAgICBh
dXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFn
ZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICAgICAgQVNTRVJUKGRvd25s
b2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5j
ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmluaXNoRG93
bmxvYWQoKQoreworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNr
QmxvYjo6ZGlkRmluaXNoRG93bmxvYWQiLCB0aGlzKTsKKworICAgIEFTU0VSVChpc0Rvd25sb2Fk
KCkpOworICAgIGNsb3NlRmlsZShtX2Rvd25sb2FkRmlsZSk7CisgICAgbV9kb3dubG9hZEZpbGUg
PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lv
bikgeworICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOworICAgICAgICBtX3Nh
bmRib3hFeHRlbnNpb24gPSBudWxscHRyOworICAgIH0KKworICAgIGNsZWFyU3RyZWFtKCk7Cisg
ICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRN
YW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25s
b2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrQmxvYjo6ZGlkRmFpbChFcnJvciBlcnJvckNvZGUpCit7CisgICAgQVNTRVJUKCFtX3NhbmRi
b3hFeHRlbnNpb24pOworCisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAgICAgICAgZGlkRmFpbERvd25s
b2FkKFJlc291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpkaWRGYWlsIiwgdGhpcyk7CisKKyAgICBjbGVhclN0cmVhbSgpOworICAg
IEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKFJl
c291cmNlRXJyb3Iod2ViS2l0QmxvYlJlc291cmNlRG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KGVy
cm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCgpCit7CisgICAgQVNTRVJUKCFtX3NhbmRib3hF
eHRlbnNpb24pOworCisgICAgaWYgKG1fZG93bmxvYWRGaWxlICE9IGludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGUpIHsKKyAgICAgICAgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNr
QmxvYjo6ZGlkRmluaXNoIiwgdGhpcyk7CisKKyAgICBjbGVhclN0cmVhbSgpOworICAgIEFTU0VS
VChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsgfSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lP
TikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRh
VGFza0Jsb2IuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
a0Jsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI2MzYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrQmxvYi5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRl
ICJOZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTdHJlYW1DbGllbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQXN5bmNGaWxlU3RyZWFtOworY2xhc3MgQmxvYkRhdGE7CitjbGFzcyBCbG9iRGF0
YUl0ZW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tC
bG9iIGZpbmFsIDogcHVibGljIE5ldHdvcmtEYXRhVGFzaywgcHVibGljIFdlYkNvcmU6OkZpbGVT
dHJlYW1DbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBj
cmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OkNv
bnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tCbG9iKHNlc3Npb24sIGNsaWVudCwg
cmVxdWVzdCwgc2hvdWxkQ29udGVudFNuaWZmKSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRh
VGFza0Jsb2IoKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tCbG9iKE5ldHdvcmtT
ZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5KTsKKworICAgIHZvaWQgc3Vz
cGVuZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlk
ZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQorCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihj
b25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxs
b3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBGaWxlU3RyZWFtQ2xpZW50IG1ldGhvZHMuCisgICAg
dm9pZCBkaWRHZXRTaXplKGxvbmcgbG9uZykgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRPcGVuKGJv
b2wpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVhZChpbnQpIG92ZXJyaWRlOworCisgICAgZW51
bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBOb3RGb3VuZEVy
cm9yID0gMSwKKyAgICAgICAgU2VjdXJpdHlFcnJvciA9IDIsCisgICAgICAgIFJhbmdlRXJyb3Ig
PSAzLAorICAgICAgICBOb3RSZWFkYWJsZUVycm9yID0gNCwKKyAgICAgICAgTWV0aG9kTm90QWxs
b3dlZCA9IDUKKyAgICB9OworCisgICAgdm9pZCBjbGVhclN0cmVhbSgpOworICAgIHZvaWQgZ2V0
U2l6ZUZvck5leHQoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShFcnJvciA9IEVycm9y
OjpOb0Vycm9yKTsKKyAgICB2b2lkIHNlZWsoKTsKKyAgICB2b2lkIGNvbnN1bWVEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOworICAgIHZvaWQgcmVhZCgpOworICAgIHZvaWQg
cmVhZERhdGEoY29uc3QgV2ViQ29yZTo6QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCByZWFkRmls
ZShjb25zdCBXZWJDb3JlOjpCbG9iRGF0YUl0ZW0mKTsKKyAgICB2b2lkIGRvd25sb2FkKCk7Cisg
ICAgYm9vbCB3cml0ZURvd25sb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRlc1JlYWQpOwor
ICAgIHZvaWQgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkRmluaXNoRG93bmxv
YWQoKTsKKyAgICB2b2lkIGRpZEZhaWwoRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNoKCk7CisK
KyAgICBlbnVtIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkID0gLTEgfTsKKworICAgIFJlZlB0cjxX
ZWJDb3JlOjpCbG9iRGF0YT4gbV9ibG9iRGF0YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6QXN5bmNGaWxlU3RyZWFtPiBtX3N0cmVhbTsgLy8gRm9yIGFzeW5jaHJvbm91cyBsb2FkaW5n
LgorICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiBtX2l0
ZW1MZW5ndGhMaXN0OworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Cisg
ICAgbG9uZyBsb25nIG1fcmFuZ2VPZmZzZXQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgfTsKKyAg
ICBsb25nIGxvbmcgbV9yYW5nZUVuZCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9OworICAgIGxv
bmcgbG9uZyBtX3JhbmdlU3VmZml4TGVuZ3RoIHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07Cisg
ICAgbG9uZyBsb25nIG1fdG90YWxTaXplIHsgMCB9OworICAgIGxvbmcgbG9uZyBtX3RvdGFsUmVt
YWluaW5nU2l6ZSB7IDAgfTsKKyAgICBsb25nIGxvbmcgbV9jdXJyZW50SXRlbVJlYWRTaXplIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fc2l6ZUl0ZW1Db3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X3JlYWRJdGVtQ291bnQgeyAwIH07CisgICAgYm9vbCBtX2ZpbGVPcGVuZWQgeyBmYWxzZSB9Owor
ICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2Rvd25sb2FkRmlsZSB7IFdlYkNvcmU6
OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKKyAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lv
bj4gbV9zYW5kYm94RXh0ZW5zaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IDkwMzE1NjIuLmJjNGM0M2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTY3LDEwICs2Nyw2
IEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENsaWVudCYgY2xpZW50LCBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShw
YXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJhbWV0ZXJzLnJlcXVlc3Qp
CiB7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5yZXF1ZXN0LnVybCgpLnByb3RvY29sSXNCbG9iKCkp
IHsKLSAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG51bGxwdHIsIG1f
cGFyYW1ldGVycy5yZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZywgbV9w
YXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNvbnRlbnQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQogICAgIG1fdGFzayA9IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKG5l
dHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzLnJlcXVlc3QsIG1fcGFyYW1ldGVycy5h
bGxvd1N0b3JlZENyZWRlbnRpYWxzLCBtX3BhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5
LCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7
CiAgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZykKICAgICAgICAgbV90YXNrLT5y
ZXN1bWUoKTsKQEAgLTEwMSwxMiArOTcsMTQgQEAgTmV0d29ya0xvYWQ6On5OZXR3b3JrTG9hZCgp
CiAjZW5kaWYKICAgICBpZiAobV90YXNrKQogICAgICAgICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7
Ci0jZWxpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorI2Vsc2UKKyNpZiBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIGlmIChtX2hhbmRsZSAmJiBt
X3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Up
CiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UoZmFsc2UpOwogI2VuZGlmCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hh
bmRsZS0+Y2xlYXJDbGllbnQoKTsKKyNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtMb2FkOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTE4LDkgKzExNiwxMCBAQCB2b2lkIE5ldHdv
cmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwogICAgIH0KLSNlbmRpZgorI2Vsc2UKICAgICBpZiAo
bV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKQEAgLTEyOCw5ICsxMjcsMTAg
QEAgdm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2VsKCkKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
ICAgIGlmIChtX3Rhc2spCiAgICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7Ci0jZW5kaWYKKyNlbHNl
CiAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisjZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKQEAgLTE0MywyNyArMTQzLDIxIEBAIHZvaWQg
TmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmIG5ld1JlcXVlc3QpCiAjZW5kaWYKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGly
ZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOyAgICAKKyAgICBhdXRvIHJlZGlyZWN0Q29t
cGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxl
ciwgbnVsbHB0cik7CisgICAgaWYgKG1fY3VycmVudFJlcXVlc3QuaXNOdWxsKCkpCisgICAgICAg
IGRpZENvbXBsZXRlV2l0aEVycm9yKGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsK
ICAgICBBU1NFUlQocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcik7Ci0jZW5kaWYKLSAgICAKKyAg
ICBpZiAocmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlcihtX2N1cnJlbnRSZXF1ZXN0KTsKKyNlbHNlCiAgICAgaWYgKG1fY3VycmVudFJl
cXVlc3QuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1faGFuZGxlKQogICAgICAgICAgICAgbV9o
YW5kbGUtPmNhbmNlbCgpOwogICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxs
ZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAg
ICAgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICByZWRpcmVj
dENvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwogICAgIH0g
ZWxzZSBpZiAobV9oYW5kbGUpIHsKICAgICAgICAgYXV0byBjdXJyZW50UmVxdWVzdENvcHkgPSBt
X2N1cnJlbnRSZXF1ZXN0OwogICAgICAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVl
c3QoV1RGTW92ZShjdXJyZW50UmVxdWVzdENvcHkpKTsKICAgICB9Ci0KLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQotICAgIGlmIChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICBy
ZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKG1fY3VycmVudFJlcXVlc3QpOwogI2VuZGlmCiB9CiAK
QEAgLTE3MSwxMiArMTY1LDEzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIGlmIChtX3Jlc3Bv
bnNlQ29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgbV9yZXNwb25zZUNvbXBsZXRpb25IYW5k
bGVyKFBvbGljeVVzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9IG51
bGxwdHI7CisgICAgICAgIGF1dG8gcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhj
aGFuZ2UobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAgICAgICAgcmVz
cG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIH0KLSNlbmRpZgorI2Vsc2UK
ICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOworI2VuZGlmCiB9CiAKIE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrTG9hZDo6c2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNl
KFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkKQEAgLTI4NSw2ICsyODAsMjMgQEAgdm9pZCBO
ZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDaGFsbGVuZ2VDb21w
bGV0aW9uSGFuZGxlciYmIGMKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1
dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSht
X3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgKm1fY2hhbGxl
bmdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKKyNpZiBVU0UoUFJPVEVDVElP
Tl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQoreworICAgIEFTU0VS
VChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5k
bGVyID0gc3RkOjpleGNoYW5nZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAobV90YXNrICYmIG1fdGFzay0+YWxs
b3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2UpKQorICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6VXNlQ3JlZGVudGlhbCwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxsZW5nZSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsgfSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyNlbmRpZgorCiB2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNvdXJjZVJlc3BvbnNlJiYg
cmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMzYyLDggKzM3NCw4IEBAIHZvaWQg
TmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwoKQogewogICAgIG1fY2xpZW50LmRpZEZhaWxMb2Fk
aW5nKGNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9Ci0gICAgCi0jZW5k
aWYKKworI2Vsc2UKIAogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXNwb25zZSYmIHJlY2VpdmVkUmVzcG9u
c2UpCiB7CkBAIC00MTgsMzIgKzQzMCwxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgbV93
YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlID0g
dHJ1ZTsKLSNlbmRpZgogICAgIG1fY2xpZW50LmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VBc3luYyhwcm90ZWN0aW9uU3BhY2UpOwogfQotI2VuZGlmCiAKLSNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQogewotI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9oYW5kbGUs
ICJCbG9icyBzaG91bGQgbmV2ZXIgZ2l2ZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2VzIik7Ci0g
ICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwotICAgIGF1dG8gY29tcGxl
dGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIs
IG51bGxwdHIpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChtX3Rhc2sgJiYgbV90
YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KCptX2NoYWxsZW5nZSkp
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURp
c3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2ZXJUcnVzdENyZWRlbnRpYWwoKm1fY2hhbGxl
bmdlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZSwgeyB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbXBsZXRlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotI2Vsc2UKICAgICBtX3dhaXRp
bmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgPSBmYWxz
ZTsKLSNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwogfQpAQCAtNTE1
LDUgKzUwOCw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0CiAgICAgbV9oYW5kbGUtPmNhbmNl
bCgpOwogICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fY3VycmVu
dFJlcXVlc3QpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9h
ZC5oCmluZGV4IDI3ZDQzMTcuLjNmNjEzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtNDAsOSArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIE5ldHdvcmtMb2FkIGZpbmFsIDogcHJpdmF0ZSBXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUNsaWVudAorY2xhc3MgTmV0d29ya0xvYWQgZmluYWwgOgogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi0gICAgLCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudAorICAgIHByaXZh
dGUgTmV0d29ya0RhdGFUYXNrQ2xpZW50CisjZWxzZQorICAgIHByaXZhdGUgV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVDbGllbnQKICNlbmRpZgogewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtNjksNyArNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdWdnZXN0ZWRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZChQZW5kaW5nRG93
bmxvYWQmKTsKICAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElEKCkgeyByZXR1cm4gbV90
YXNrLT5wZW5kaW5nRG93bmxvYWRJRCgpOyB9Ci0jZW5kaWYKKyNlbHNlCisgICAgV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9
CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZvaWQgY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGU7CkBAIC04
NSwxNyArODgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikgb3ZlcnJpZGU7
CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCiAKICNpZiBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZvaWQgY29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlmCiAKLSAgICBX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUu
Z2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9pZCBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1
ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgLy8gUmVzb3VyY2VIYW5kbGVD
bGllbnQKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmJiByZWRpcmVjdFJlc3BvbnNlKSBmaW5hbDsKICAgICB2b2lkIGRpZFNlbmREYXRhKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgZmluYWw7CkBAIC0xMTEsOCArMTE0LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBmaW5h
bDsKICAgICBib29sIHVzZXNBc3luY0NhbGxiYWNrcygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIGZpbmFsIHsgcmV0dXJuIG1fY2xpZW50
LmlzU3luY2hyb25vdXMoKTsgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNlbHNlCiAg
ICAgLy8gTmV0d29ya0RhdGFUYXNrQ2xpZW50CiAgICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRp
cmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwogICAgIHZvaWQgZGlk
UmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYs
IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwpAQCAtMTQ2LDggKzE0OCw4IEBA
IHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBSZWZQdHI8UmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jZW5kaWYKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2VuZGlmCiAKICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRp
cmVjdHMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uY3BwCmluZGV4IDFmODE4MTkuLjFlNWUwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTgxLDYgKzgyLDEyIEBAIE5ldHdvcmtTZXNzaW9uOjp+TmV0
d29ya1Nlc3Npb24oKQogewogfQogCit2b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5k
Q2FuY2VsKCkKK3sKKyAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0KQorICAgICAg
ICB0YXNrLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IDk5ZDA5ODEuLmQ1YjAxNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAt
MjgsNiArMjgsNyBAQAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKICNpbmNsdWRlIDxXZWJD
b3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM4LDYgKzM5LDcgQEAg
Y2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IEN1c3RvbVByb3RvY29sTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsKIAogY2xhc3Mg
TmV0d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrU2Vzc2lvbj4gewogcHVi
bGljOgpAQCAtNDUsMTYgKzQ3LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Np
b24mIGRlZmF1bHRTZXNzaW9uKCk7CiAgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Npb24oKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ3JlZGVu
dGlhbHMoKSB7IH07CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCisgICAgdm9pZCByZWdpc3Rlck5l
dHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smIHRhc2spIHsgbV9kYXRhVGFza1NldC5hZGQo
JnRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRh
VGFzayYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7IH0KKwogcHJvdGVjdGVk
OgogICAgIE5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAKICAgICBXZWJDb3Jl
OjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisKKyAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFzayo+
IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29h
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5oCmluZGV4IDBhOGVkYmIuLjYzNDJlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApAQCAt
NjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlIHsgfQogICAgIE5ldHdvcmtEYXRh
VGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0UGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW0KaW5kZXggYmE2OTcxMS4uN2Q3NjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC00
NjYsNiArNDY2LDggQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNzaW9uQ29jb2Eo
KQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmludmFsaWRhdGVBbmRDYW5jZWwoKQogewor
ICAgIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisKICAgICBbbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwogICAgIFttX3Nl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNlbF07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMu
bW0KaW5kZXggMTVmYmI2ZC4uNjQ3NTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQpAQCAtMjYsNiArMjYsOCBAQAogI2lt
cG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJOZXR3b3JrTG9hZC5oIgogCisjaWYgIVVTRShORVRX
T1JLX1NFU1NJT04pCisKICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAKQEAgLTU0LDMgKzU2LDUgQEAgdm9pZCBOZXR3
b3JrTG9hZDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBO
U0NhY2hlZFVSTFJlc3AKICNlbmRpZiAvLyAhVVNFKENGVVJMQ09OTkVDVElPTikKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRh
VGFza1NvdXAuY3BwCmluZGV4IDE3NjM2NTIuLjFlOWVlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNw
cApAQCAtNTIsNyArNTIsNyBAQCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tT
b3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhcwogICAgICwgbV9zaG91
bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV90aW1lb3V0U291cmNl
KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtEYXRhVGFza1NvdXA6OnRpbWVvdXRGaXJl
ZCkKIHsKLSAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0
KCkpLnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBtX3Nlc3Npb24tPnJlZ2lz
dGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKICAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlw
ZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODAsNyArODAsNyBAQCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uLCBOZXR3b3JrRGF0YVRhcwogTmV0d29ya0RhdGFUYXNrU291cDo6fk5ldHdvcmtEYXRhVGFz
a1NvdXAoKQogewogICAgIGNsZWFyUmVxdWVzdCgpOwotICAgIHN0YXRpY19jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkudW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygq
dGhpcyk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsK
IH0KIAogU3RyaW5nIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN1Z2dlc3RlZEZpbGVuYW1lKCkgY29u
c3QKQEAgLTg2Myw3ICs4NjMsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRvd25sb2Fk
KCkKICAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVB
TShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CiAKICAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIg
PSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7Ci0gICAgYXV0
byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwg
bV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2Vz
dGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93
bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgKnRoaXMsIG1fc2Vz
c2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOwogICAgIGF1dG8qIGRvd25s
b2FkUHRyID0gZG93bmxvYWQuZ2V0KCk7CiAgICAgZG93bmxvYWRNYW5hZ2VyLmRhdGFUYXNrQmVj
YW1lRG93bmxvYWRUYXNrKG1fcGVuZGluZ0Rvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsK
ICAgICBkb3dubG9hZFB0ci0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9wZW5kaW5nRG93bmxvYWRM
b2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5oCmluZGV4IGM4ZmExYTIuLjBiZmU1OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFU
YXNrU291cC5oCkBAIC00MiwxNCArNDIsMTMgQEAgcHVibGljOgogCiAgICAgfk5ldHdvcmtEYXRh
VGFza1NvdXAoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOwotCiBwcml2YXRl
OgogICAgIE5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAgdm9pZCBzdXNwZW5k
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3Vt
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOwog
ICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IGFjODI4NzAuLjU5ZWY5MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5jcHAKQEAgLTI2LDEwICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxMCArNDcsNCBAQCBTb3VwU2Vz
c2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiAgICAgcmV0dXJu
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9u
KCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb25Tb3VwOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
LXsKLSAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0KQotICAgICAgICB0YXNrLT5p
bnZhbGlkYXRlQW5kQ2FuY2VsKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNv
dXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmgKaW5kZXggZDc1ZmI4OC4uYzVmY2ZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCkBAIC0yNiwxNCAr
MjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiB0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291
cFNlc3Npb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBOZXR3b3JrRGF0YVRhc2tT
b3VwOwotCiBjbGFzcyBOZXR3b3JrU2Vzc2lvblNvdXAgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nl
c3Npb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtNDQsMTUgKzQxLDggQEAgcHVibGljOgog
CiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlZ2lz
dGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFz
a1NldC5hZGQoJnRhc2spOyB9Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5l
dHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFza1NldC5yZW1vdmUoJnRhc2spOyB9
Ci0KIHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb25Tb3VwKFdlYkNvcmU6OlNlc3Npb25JRCk7
Ci0KLSAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKLQotICAgIEhhc2hT
ZXQ8TmV0d29ya0RhdGFUYXNrU291cCo+IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggN2Q5YTAzNi4uNTQ2ZTY1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTYsOCArNiw2IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2VmbC9Eb3du
bG9hZFNvdXBFcnJvcnNFZmwuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291
cC9Eb3dubG9hZFNvdXAuY3BwCi0KICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnNTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDc1OTU5YTMuLjg2YzU1NTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMyw4ICszMyw2IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2d0ay9Eb3du
bG9hZFNvdXBFcnJvcnNHdGsuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291
cC9Eb3dubG9hZFNvdXAuY3BwCi0KICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVDb2RlcnNTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURh
dGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5l
bFNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZWM4Y2UxYS4uZDFmMWJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0Myw2ICsxMDQzLDggQEAK
IAkJNTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZD
MDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTUxREJBRTcy
OTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3
b3JrU2Vzc2lvbkNvY29hLmggKi87IH07CiAJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBO
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0Nv
Y29hLmggKi87IH07CisJCTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRh
c2tCbG9iLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLzsg
fTsKKwkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ3MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi87IH07CiAJCTVDMDUyRjI2
MUM2RDNCRDMwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNBQjYw
MDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMxNDI2
RUMxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUy
MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
Ki87IH07CiAJCTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUMxNDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmggKi87IH07CkBAIC0zMTMxLDYgKzMxMzMsOCBAQAogCQk1MzIxNTk1MDFEQkFF
NkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNwcDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzMjE1OTUyMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0
YVRhc2tCbG9iLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdv
cmtEYXRhVGFza0Jsb2IuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
QmxvYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzOUVCNTQ3MURDMkVFNDAw
MDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0Jsb2IuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFza0Jsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc5RDE4
QjcxQ0NGRTM0QjAwQjE5NzRDIC8qIFBob3Rvc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaG90b3NT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwNTJGMjQxQzZEM0FCNjAwNzZF
OTE5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07IHBhdGgg
PSBBdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI2RTIxQzIzRjgwNTAwRDQxMTgzIC8qIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NjUsNiArNTQ2OSw4IEBACiAJCQkJNUNC
QzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovLAogCQkJCTgzOTkw
MUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8sCiAJCQkJODM5OTAxRkUx
QkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggKi8sCisJCQkJNTM5RUI1NDYxREMyRUU0
MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICovLAorCQkJCTUzOUVCNTQ3MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8sCiAJCQkJODNENDU0RDYx
QkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggKi8sCiAJCQkJODM5MTQ5NjMx
QkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovLAogCQkJCTUxMEND
N0RGMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAgKi8sCkBAIC03ODI3LDYg
Kzc4MzMsNyBAQAogCQkJCTFBMEVDNkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEVDNzVFMTI0QkM3QjIwMDdFRjRBNSAv
KiBQbHVnaW5Qcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzQjVFMTI0RDVF
OUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdp
blByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhG
RTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLApAQCAtOTMyMCw2ICs5MzI3LDcg
QEAKIAkJCQkxQTJEOTIyMTEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENjIyNzcxNzM5RDg2MzAw
NUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTNC
QTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM4Mjg0NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRy
eVBvaW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RkI3QUUxMUU2NEI2ODAwREIxMzcxIC8q
IFBsdWdpblZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4QzkyRjQxMkRCOUU3MTAwQ0Yy
QUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293876</attachid>
            <date>2016-11-04 03:06:02 -0700</date>
            <delta_ts>2016-11-04 03:06:02 -0700</delta_ts>
            <desc>Updated patch for landing</desc>
            <filename>wk2-network-data-blob.diff</filename>
            <type>text/plain</type>
            <size>86514</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDJhNDE0Li4yZTA3ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTYtMTEtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZv
ciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTWFyayBIVFRQUGFyc2Vycy5o
IGFuZCBBc3luY0ZpbGVTdHJlYW0uaCBhcyBwcml2YXRlLgorICAgICAgICAqIGZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmg6IEFkZCBXRUJDT1JFX0VYUE9SVCB0byBBc3luY0ZpbGVTdHJlYW0gY2xh
c3MuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oOiBBZGQgV0VCQ09SRV9F
WFBPUlQgdG8gbGVuZ3RoKCkuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vy
cy5oOiBBZGQgV0VCQ09SRV9FWFBPUlQgdG8gcGFyc2VSYW5nZSgpLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaDogQWRkIFdFQkNPUkVfRVhQT1JUIHRv
IHNldEhUVFBIZWFkZXJGaWVsZCgpLgorCiAyMDE2LTExLTAzICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmRleGVkREIgMi4wOiBIYW5kbGUgSURCSW5kZXgg
cmVuYW1lIGJlaGF2aW9yIHByb3Blcmx5IHdoZW4gdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24g
YWJvcnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDRhYTgyMDUuLmRjYWI2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNjEsNyArMjA2MSw3IEBACiAJ
CTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUIwQ0U5MjNBMTAwN0VGM0NEIC8q
IEZvcm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTE0Qzc2NzEwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjVDMENFOTIzQTEw
MDdFRjNDRCAvKiBIVFRQSGVhZGVyTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzIwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJz
ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NEM3NjVEMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5jcHAgKi87IH07Ci0JCTUxNEM3
NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFyc2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhU
VFBQYXJzZXJzLmggKi87IH07CisJCTUxNEM3NjczMENFOTIzQTEwMDdFRjNDRCAvKiBIVFRQUGFy
c2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0
Qzc2NUUwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBQYXJzZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NzQwQ0U5MjNBMTAwN0VGM0NE
IC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3NTBDRTkyM0ExMDA3RUYzQ0QgLyogUHJvdGVj
dGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRDNzY3
ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjMwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKQEAgLTYxODMsNyArNjE4Myw3IEBACiAJCUUxQ0E1
Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBNUNCQjBFOENEQ0FGMDBFOEVGOTAg
LyogSlNXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQlFMUNBQTVDNjBFOEJEMjM2MDBBNzNFQ0Eg
LyogSlNXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovOyB9OwogCQlFMUNE
RTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0RFOTFGMTUwMThFRDAwMDg2MkND
NSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovOyB9OwotCQlFMUNERTkyMjE1MDE5MTY5MDA4NjJD
QzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJRTFDREU5MjIxNTAx
OTE2OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5j
RmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFEMzFD
REExOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5jcHAgKi87IH07CiAJ
CUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRDMxQ0RCMTkxOTYw
MjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUUxQkYwMDExNUZGNkZCMDA2RjUyQ0Eg
LyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAvKiBXaW5kb3dzS2V5Ym9h
cmRDb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oIGIv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRleCAzNWU4NWE3Li5m
ODQ4YmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVh
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKQEAgLTQy
LDcgKzQyLDcgQEAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZpbGVTdHJlYW07CiBj
bGFzcyBVUkw7CiAKLWNsYXNzIEFzeW5jRmlsZVN0cmVhbSB7CitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBBc3luY0ZpbGVTdHJlYW0gewogcHVibGljOgogICAgIGV4cGxpY2l0IEFzeW5jRmlsZVN0cmVh
bShGaWxlU3RyZWFtQ2xpZW50Jik7CiAgICAgfkFzeW5jRmlsZVN0cmVhbSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggZTRhYzgwMi4uZWNiMGU2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTYtMTEtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0
aW9uIGZvciBibG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzOTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKwor
ICAgICAgICAqIFBPVEZJTEVTLmluOiBSZW1vdmUgRG93bmxvYWRTb3VwLmNwcAorCiAyMDE2LTEx
LTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODI5OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbiBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCA3ZmEyODI1Li5iNjVmYjhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCkBAIC0xLDcgKzEsNiBAQAogIyBM
aXN0IG9mIHNvdXJjZSBmaWxlcyB3aGljaCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgog
RXJyb3JzR3RrLmNwcAogTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKLS4uLy4uLy4uL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAogLi4vLi4vLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCiAu
Li8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaAppbmRleCBiMWZj
ZDljLi45MzJkNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0
YS5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBCbG9iRGF0YUZpbGVSZWZlcmVuY2Uq
IGZpbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGUuZ2V0KCk7IH0KIAogICAgIGxvbmcgbG9uZyBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgo
KSBjb25zdDsgLy8gQ29tcHV0ZXMgZmlsZSBsZW5ndGggaWYgaXQncyBub3Qga25vd24geWV0Lgor
ICAgIFdFQkNPUkVfRVhQT1JUIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdDsgLy8gQ29tcHV0ZXMg
ZmlsZSBsZW5ndGggaWYgaXQncyBub3Qga25vd24geWV0LgogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBCbG9iRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSFRUUFBhcnNlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuaAppbmRleCAxZjRhNTY2Li43ZjZiNDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCkBAIC04MSw3ICs4MSw3IEBAIEF0b21pY1N0
cmluZyBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5lKGNvbnN0IFN0cmluZyYp
OwogWEZyYW1lT3B0aW9uc0Rpc3Bvc2l0aW9uIHBhcnNlWEZyYW1lT3B0aW9uc0hlYWRlcihjb25z
dCBTdHJpbmcmKTsKIAogLy8gLTEgY291bGQgYmUgc2V0IHRvIG9uZSBvZiB0aGUgcmV0dXJuIHBh
cmFtZXRlcnMgdG8gaW5kaWNhdGUgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQuCi1ib29sIHBh
cnNlUmFuZ2UoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBsb25n
JiByYW5nZUVuZCwgbG9uZyBsb25nJiByYW5nZVN1ZmZpeExlbmd0aCk7CitXRUJDT1JFX0VYUE9S
VCBib29sIHBhcnNlUmFuZ2UoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwg
bG9uZyBsb25nJiByYW5nZUVuZCwgbG9uZyBsb25nJiByYW5nZVN1ZmZpeExlbmd0aCk7CiAKICNp
ZiBFTkFCTEUoTk9TTklGRikKIENvbnRlbnRUeXBlT3B0aW9uc0Rpc3Bvc2l0aW9uIHBhcnNlQ29u
dGVudFR5cGVPcHRpb25zSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApp
bmRleCA3ZDY4OTUxLi5kODk2NjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCkBAIC05OSw3ICs5OSw3IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcgaHR0cEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZSkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHNldEhU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwogCiAgICAgdm9pZCBhZGRIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgYWRkSFRUUEhlYWRlckZp
ZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IGYxNTZjYTQuLjg3MjY2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0x
ODEsNiArMTgxLDcgQEAgZW5kaWYgKCkKIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNF
UwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAog
ICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDM2ODg1ZWIuLjYyMmQ2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDQgQEAKKzIwMTYtMTEt
MDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAg
IE5ldHdvcmtTZXNzaW9uOiBBZGQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9uIGZvciBi
bG9icworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
OTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBB
ZGQgTmV0d29ya0RhdGFUYXNrQmxvYiB0byBoYW5kbGUgYmxvYnMgd2hlbiB1c2luZyBOZXR3b3Jr
U2Vzc2lvbiBpbnN0ZWFkIG9mIHVzaW5nIFJlc291cmNlSGFuZGxlLiBUaGlzIHBhdGNoCisgICAg
ICAgIGFkZHMgbW9yZSBVU0UoTkVUV09SS19TRVNTSU9OKSBpZmRlZnMgdG8gbm90IHVzZSBSZXNv
dXJjZUhhbmRsZSBpbiBEb3dubG9hZHMgYW5kIE5ldHdvcmtMb2FkIHdoZW4gTmV0d29ya1Nlc3Np
b24KKyAgICAgICAgaXMgZW5hYmxlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQg
bmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9CbG9iRG93bmxvYWRDbGllbnQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxv
YWQpOiBTcGxpdCB0aGUgY29uc3RydWN0b3IgYWdhaW4gYW5kIHJlbW92ZSB0aGUgUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWYKKyAgICAgICAgZGVmaW5pdGlvbnMuIE5vdyBDb2NvYSBzcGVjaWZpYyBj
b25zdHJ1Y3RvciByZWNlaXZlcyBhIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayBhbmQgdGhlIGdl
bmVyYWwgY29uc3RydWN0b3IKKyAgICAgICAgcmV2ZWljZXMgYSBOZXR3b3JrRGF0YVRhc2sgYW5k
IGlzIHVzZWQgYnkgU291cCBiYWNrZW5kIGFuZCBibG9icy4KKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6On5Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpzdGFydCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWRGaW5pc2gp
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1DYW5jZWxOZXR3b3JrTG9hZCk6
IFJlbmFtZSBjYW5jZWxOZXR3b3JrTG9hZCgpIGFzIHBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQo
KSBzaW5jZQorICAgICAgICB0aGlzIGlzIG5vdyB1c2VkIG9ubHkgYnkgQ29jb2EgcGxhdGZvcm0g
dG8gY2FuY2VsIHRoZSBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2suCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmg6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
OjpEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpzdWdnZXN0ZWROYW1lKToK
KyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnJlcXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQpOiBSZW1vdmUgYmxvYnMgc3BlY2lmaWMgY29k
ZSB3aGVuIHVzaW5nIE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1h
bmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24pOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKTogUmVtb3ZlIGJsb2JzIHNwZWNpZmlj
IGNvZGUgd2hlbgorICAgICAgICB1c2luZyBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6OmNyZWF0ZSk6IElmIHJlcXVlc3QgaXMgYSBibG9iLCBjcmVhdGUgYSBOZXR3b3Jr
RGF0YVRhc2tCbG9iLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5o
OiBBZGQgaW52YWxpZGF0ZUFuZENhbmNlbCBwdXJlIHZpcnR1YWwgbWV0aG9kLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6TmV0d29ya0RhdGFUYXNrQmxvYik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6On5OZXR3b3JrRGF0YVRhc2tCbG9iKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6Y2xlYXJTdHJlYW0pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZXN1bWUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFU
YXNrQmxvYjo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza0Jsb2I6OmdldFNpemVGb3JOZXh0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrQmxvYjo6ZGlkR2V0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a0Jsb2I6OnNlZWspOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRS
ZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6cmVhZERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkRmlsZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZE9wZW4pOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRSZWFkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQmxvYjo6Y29uc3VtZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tCbG9iOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza0Jsb2I6OnN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrQmxvYjo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tCbG9iOjp3cml0ZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQmxvYjo6Y2xlYW5Eb3dubG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmFpbERvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tCbG9iOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrQmxvYjo6ZGlkRmluaXNoKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2tCbG9iLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtM
b2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKTogUmVt
b3ZlIGJsb2JzIHNwZWNpZmljIGNvZGUgd2hlbiB1c2luZyBOZXR3b3JrU2Vzc2lvbi4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6On5OZXR3b3JrTG9hZCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0xvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjb250aW51ZVdp
bGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjb250aW51
ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5j
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwpOiBNb3ZlZCBmcm9tIE5ldHdvcmtTZXNzaW9u
U291cCwgc2luY2UgdGhpcyBpcyBub3cgdXNlZCBhbHNvIGJ5IGJsb2JzLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uOjpyZWdpc3Rlck5ldHdvcmtEYXRhVGFzayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbjo6dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzayk6IERpdHRvLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmg6IEFkZCBp
bnZhbGlkYXRlQW5kQ2FuY2VsKCkgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdGhpbmcKKyAg
ICAgICAgYmVjYXVzZSBpbiBDb2NvYSBhbGwgdGFza3MgYXJlIGludmFsaWRhdGVkIGFuZCBjYW5j
ZWxlZCBieSB0aGUgbmV0d29yayBzZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21h
Yy9OZXR3b3JrTG9hZE1hYy5tbToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtEYXRhVGFza1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpOZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
U291cDo6fk5ldHdvcmtEYXRhVGFza1NvdXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tTb3VwOjpkb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmg6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6IFJlbW92ZSBEb3dubG9h
ZFNvdXAuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6
IERpdHRvLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRk
IG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKwogMjAxNi0xMS0wMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgRG93bmxvYWRzIHN0YXJ0ZWQg
YnkgY29udGV4dCBtZW51IGFjdGlvbnMgc2hvdWxkIGFsc28gaGF2ZSBhIHdlYiB2aWV3IGFzc29j
aWF0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9CbG9iRG93bmxvYWRDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKaW5kZXggNzIxYjY0Yi4uYzMwNDM3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JE
b3dubG9hZENsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJCbG9iRG93bmxvYWRDbGllbnQuaCIKIAorI2lmICFVU0Uo
TkVUV09SS19TRVNTSU9OKQorCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUg
IkRvd25sb2FkLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCkBAIC05NywzICs5OSw1IEBAIHZv
aWQgQmxvYkRvd25sb2FkQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpCiB9CiAKIH0KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNT
SU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Jsb2JEb3dubG9hZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5oCmluZGV4IGRjYjg4OWQuLjRhM2U2M2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9CbG9iRG93bmxv
YWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
QmxvYkRvd25sb2FkQ2xpZW50LmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKwogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CkBAIC01NSwzICs1Nyw1IEBAIHByaXZhdGU6CiB9OwogCiB9CisKKyNl
bmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCmluZGV4IDY0OTQ4ZTIuLjAyMzc3
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkLmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotRG93bmxv
YWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElE
IGRvd25sb2FkSUQsIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIGRvd25sb2FkLCBjb25zdCBXZWJD
b3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQor
RG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3du
bG9hZElEIGRvd25sb2FkSUQsIE5ldHdvcmtEYXRhVGFzayYgZG93bmxvYWQsIGNvbnN0IFNlc3Np
b25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rv
d25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxv
YWRJRCkKLSAgICAsIG1fZG93bmxvYWQoZG93bmxvYWQpCisgICAgLCBtX2Rvd25sb2FkKCZkb3du
bG9hZCkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fc3VnZ2VzdGVkTmFt
ZShzdWdnZXN0ZWROYW1lKQogewpAQCAtNTYsOCArNTYsMjAgQEAgRG93bmxvYWQ6OkRvd25sb2Fk
KERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQs
IFBsYXQKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURvd25sb2FkKCk7CiB9Ci0j
ZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKK0Rvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElELCBOU1VSTFNlc3Np
b25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQorICAgIDogbV9kb3dubG9hZE1hbmFnZXIoZG93bmxv
YWRNYW5hZ2VyKQorICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQpCisgICAgLCBtX2Rvd25s
b2FkVGFzayhkb3dubG9hZCkKKyAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKKyAgICAsIG1f
c3VnZ2VzdGVkTmFtZShzdWdnZXN0ZWROYW1lKQoreworICAgIEFTU0VSVChtX2Rvd25sb2FkSUQu
ZG93bmxvYWRJRCgpKTsKIAorICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZENyZWF0ZURvd25sb2Fk
KCk7Cit9CisjZW5kaWYKKyNlbHNlCiBEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2Vy
JiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rv
d25sb2FkTWFuYWdlcihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxv
YWRJRCkKQEAgLTY4LDkgKzgwLDExIEBAIERvd25sb2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zCiAKICAgICBt
X2Rvd25sb2FkTWFuYWdlci5kaWRDcmVhdGVEb3dubG9hZCgpOwogfQorI2VuZGlmIC8vIFVTRShO
RVRXT1JLX1NFU1NJT04pCiAKIERvd25sb2FkOjp+RG93bmxvYWQoKQogeworI2lmICFVU0UoTkVU
V09SS19TRVNTSU9OKQogICAgIGlmIChtX3Jlc291cmNlSGFuZGxlKSB7CiAgICAgICAgIG1fcmVz
b3VyY2VIYW5kbGUtPmNsZWFyQ2xpZW50KCk7CiAgICAgICAgIG1fcmVzb3VyY2VIYW5kbGUtPmNh
bmNlbCgpOwpAQCAtNzksMTAgKzkzLDEyIEBAIERvd25sb2FkOjp+RG93bmxvYWQoKQogICAgIG1f
ZG93bmxvYWRDbGllbnQgPSBudWxscHRyOwogCiAgICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Cisj
ZW5kaWYKIAogICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQog
CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpzdGFydCgpCiB7CiAg
ICAgaWYgKG1fcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7CkBAIC05MiwxMSArMTA4
LDcgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0j
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNl
CiAgICAgc3RhcnROZXR3b3JrTG9hZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgRG93bmxvYWQ6OnN0
YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKQEAgLTEwOCwzNyArMTIwLDM5IEBAIHZvaWQgRG93bmxvYWQ6OnN0YXJ0
V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwotICAgIFVOVVNFRF9QQVJBTShyZXNwb25zZSk7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxzZQogICAgIHN0YXJ0TmV0d29ya0xvYWRXaXRo
SGFuZGxlKGhhbmRsZSwgcmVzcG9uc2UpOwotI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBEb3du
bG9hZDo6Y2FuY2VsKCkKIHsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIGlmIChtX2Rv
d25sb2FkKSB7CisgICAgICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgICAgICBkaWRDYW5j
ZWwoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlCiAgICAgaWYgKG1fcmVxdWVz
dC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7CiAgICAgICAgIGF1dG8gcmVzb3VyY2VIYW5kbGUg
PSBXVEZNb3ZlKG1fcmVzb3VyY2VIYW5kbGUpOwogICAgICAgICByZXNvdXJjZUhhbmRsZS0+Y2Fu
Y2VsKCk7CiAgICAgICAgIHN0YXRpY19jYXN0PEJsb2JEb3dubG9hZENsaWVudCo+KG1fZG93bmxv
YWRDbGllbnQuZ2V0KCkpLT5kaWRDYW5jZWwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBjYW5jZWxOZXR3b3JrTG9hZCgpOworI2VuZGlmCisgICAgcGxhdGZvcm1DYW5jZWxOZXR3b3Jr
TG9hZCgpOwogfQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIERvd25sb2FkOjpk
aWRTdGFydCgpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGlkU3RhcnQo
bV9yZXF1ZXN0LCBtX3N1Z2dlc3RlZE5hbWUpKTsKIH0KIAotI2lmICFVU0UoTkVUV09SS19TRVNT
SU9OKQogdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKIHsK
ICAgICBtX2Rvd25sb2FkTWFuYWdlci5kb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5k
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKnRoaXMsIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKTsKIH0KLSNlbmRpZgogCiB2b2lkIERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CkBAIC0xNDcsMTYgKzE2MSw2IEBA
IHZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZl
UmVzcG9uc2UocmVzcG9uc2UpKTsKIH0KIAotdm9pZCBEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEo
dWludDY0X3QgbGVuZ3RoKQotewotICAgIGlmICghbV9oYXNSZWNlaXZlZERhdGEpIHsKLSAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZURhdGE6IFN0YXJ0ZWQgcmVjZWl2
aW5nIGRhdGEgKGlkID0gJSIgUFJJdTY0ICIpIiwgZG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSk7
Ci0gICAgICAgIG1faGFzUmVjZWl2ZWREYXRhID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzZW5kKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRSZWNlaXZlRGF0YShsZW5ndGgpKTsKLX0KLQogYm9v
bCBEb3dubG9hZDo6c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKIHsKICAgICBib29sIHJlc3VsdDsKQEAgLTE2Niw4ICsxNzAsNiBAQCBib29s
IERvd25sb2FkOjpzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKLQogU3RyaW5nIERvd25sb2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSkKIHsK
ICAgICBTdHJpbmcgZGVzdGluYXRpb247CkBAIC0xODIsOCArMTg0LDYgQEAgU3RyaW5nIERvd25s
b2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLAogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIAotI2VuZGlmCi0KIHZvaWQg
RG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKGRv
d25sb2FkSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUpKTsKQEAgLTIwOSwxNyArMjA5LDMwIEBAIHZv
aWQgRG93bmxvYWQ6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICAgICBtX3Jlc291
cmNlSGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQorI2VuZGlmCiAKIHZv
aWQgRG93bmxvYWQ6OmRpZENyZWF0ZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRDcmVhdGVEZXN0aW5hdGlvbihw
YXRoKSk7CiB9CiAKK3ZvaWQgRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGxlbmd0
aCkKK3sKKyAgICBpZiAoIW1faGFzUmVjZWl2ZWREYXRhKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoImRpZFJlY2VpdmVEYXRhOiBTdGFydGVkIHJlY2VpdmluZyBkYXRhIChpZCA9
ICUiIFBSSXU2NCAiKSIsIGRvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpOworICAgICAgICBtX2hh
c1JlY2VpdmVkRGF0YSA9IHRydWU7CisgICAgfQorCisgICAgc2VuZChNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6RGlkUmVjZWl2ZURhdGEobGVuZ3RoKSk7Cit9CisKIHZvaWQgRG93bmxvYWQ6OmRp
ZEZpbmlzaCgpCiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkRmluaXNoOiAoaWQg
PSAlIiBQUkl1NjQgIikiLCBkb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKTsKIAorI2lmICFVU0Uo
TkVUV09SS19TRVNTSU9OKQogICAgIHBsYXRmb3JtRGlkRmluaXNoKCk7CisjZW5kaWYKIAogICAg
IHNlbmQoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6OkRpZEZpbmlzaCgpKTsKIApAQCAtMjc3LDQg
KzI5MCwxMCBAQCBib29sIERvd25sb2FkOjppc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSBjb25z
dAogI2VuZGlmCiB9CiAKKyNpZiAhUExBVEZPUk0oQ09DT0EpCit2b2lkIERvd25sb2FkOjpwbGF0
Zm9ybUNhbmNlbE5ldHdvcmtMb2FkKCkKK3sKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkLmgKaW5kZXggYzNmYmYwOS4uMjVjYmI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKQEAgLTQwLDEyICs0MCw2IEBA
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICNpZiBQTEFURk9STShDT0NPQSkKIE9CSkNfQ0xB
U1MgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrOwotdHlwZWRlZiBOU1VSTFNlc3Npb25Eb3dubG9h
ZFRhc2sqIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmOwotI2VsaWYgVVNFKFNPVVApCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLWNsYXNzIE5ldHdvcmtEYXRhVGFzazsKLX0KLXR5cGVkZWYgV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2sqIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmOwogI2VuZGlmCiAjZWxzZSAv
LyBVU0UoTkVUV09SS19TRVNTSU9OKQogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNzMsNiArNjcs
NyBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IERvd25sb2FkTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsKIGNsYXNzIE5ldHdvcmtT
ZXNzaW9uOwogY2xhc3MgV2ViUGFnZTsKIApAQCAtODAsMzkgKzc1LDQzIEBAIGNsYXNzIERvd25s
b2FkIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRG93bmxvYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQotICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2Fk
SUQsIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsgfSk7CisgICAgRG93
bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwgTmV0d29ya0RhdGFUYXNrJiwgY29u
c3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUgPSB7IH0pOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIERvd25sb2FkKERvd25s
b2FkTWFuYWdlciYsIERvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayosIGNvbnN0
IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVuYW1lID0geyB9KTsKICNlbmRpZgorI2Vsc2UKICAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lID0geyB9KTsKKyNlbmRpZgogCiAgICAgfkRvd25sb2Fk
KCk7CiAKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAg
dm9pZCBzdGFydFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisjZW5kaWYKICAgICB2b2lkIHJlc3VtZShjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAogICAgIERv
d25sb2FkSUQgZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRJRDsgfQogICAg
IGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGVk
TmFtZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAg
ICB2b2lkIHNldFNhbmRib3hFeHRlbnNpb24oUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+JiYgc2Fu
ZGJveEV4dGVuc2lvbikgeyBtX3NhbmRib3hFeHRlbnNpb24gPSBXVEZNb3ZlKHNhbmRib3hFeHRl
bnNpb24pOyB9CiAjZWxzZQorICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogICAgIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJik7Ci0jZW5kaWYKICAgICB2b2lkIGRpZFN0YXJ0KCk7CiAgICAgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKTsKICAgICBib29sIHNob3VsZERlY29kZVNvdXJj
ZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQogICAgIFN0cmluZyBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSk7Ci0jZW5k
aWYKICAgICB2b2lkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWREZWNpZGVEb3dubG9hZERlc3RpbmF0aW9uKGNv
bnN0IFN0cmluZyYgZGVzdGluYXRpb25QYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlKCk7CisgICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOworI2VuZGlmCiAgICAgdm9p
ZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKTsKICAgICB2b2lkIGRpZEZpbmlzaCgpOwotICAg
IHZvaWQgcGxhdGZvcm1EaWRGaW5pc2goKTsKICAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7
CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRh
KTsKIApAQCAtMTI0LDM3ICsxMjMsMzUgQEAgcHJpdmF0ZToKICNpZiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKICAgICB2b2lkIHN0YXJ0TmV0d29ya0xvYWQoKTsKICAgICB2b2lkIHN0YXJ0TmV0d29y
a0xvYWRXaXRoSGFuZGxlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYpOwotI2VuZGlmCi0gICAgdm9pZCBjYW5jZWxOZXR3b3JrTG9hZCgp
OwotCiAgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyNlbmRpZgorICAgIHZvaWQgcGxh
dGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpOwogCiAgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0Fs
bG93ZWQoKSBjb25zdDsKIAogICAgIERvd25sb2FkTWFuYWdlciYgbV9kb3dubG9hZE1hbmFnZXI7
CiAgICAgRG93bmxvYWRJRCBtX2Rvd25sb2FkSUQ7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IG1fcmVxdWVzdDsKIAogICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hF
eHRlbnNpb247CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+IG1fZG93bmxvYWQ7Ci0j
ZWxpZiBVU0UoU09VUCkKICAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX2Rvd25sb2FkOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRh
c2s+IG1fZG93bmxvYWRUYXNrOwogI2VuZGlmCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vz
c2lvbklEOwogI2Vsc2UgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0
cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7CiAgICAgUmV0YWluUHRyPFdLRG93bmxv
YWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlmCi0jZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKICNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQogICAgIFJldGFpblB0cjxDRlVSTERv
d25sb2FkUmVmPiBtX2Rvd25sb2FkOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIFJlZlB0cjxX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9yZXNvdXJjZUhhbmRsZTsKKyNlbmRpZiAvLyBVU0Uo
TkVUV09SS19TRVNTSU9OKQogICAgIFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CiAgICAgYm9vbCBt
X2hhc1JlY2VpdmVkRGF0YSB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAppbmRl
eCBiMmZkZmFhLi5iNDA2ZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcApAQCAtNDcsMjMgKzQ3
LDIxIEBAIERvd25sb2FkTWFuYWdlcjo6RG93bmxvYWRNYW5hZ2VyKENsaWVudCYgY2xpZW50KQog
dm9pZCBEb3dubG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQoU2Vzc2lvbklEIHNlc3Npb25JRCwg
RG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIGF1dG8q
IG5ldHdvcmtTZXNzaW9uID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25J
RCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Nlc3Npb24pCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJhbWV0
ZXJzLnNlc3Npb25JRCA9IHNlc3Npb25JRDsKLSAgICAgICAgcGFyYW1ldGVycy5yZXF1ZXN0ID0g
cmVxdWVzdDsKLSAgICAgICAgcGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID0gQ2xp
ZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHM7Ci0gICAgICAg
IG1fcGVuZGluZ0Rvd25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgc3RkOjptYWtlX3VuaXF1ZTxQZW5k
aW5nRG93bmxvYWQ+KFdURk1vdmUocGFyYW1ldGVycyksIGRvd25sb2FkSUQsICpuZXR3b3JrU2Vz
c2lvbiwgc3VnZ2VzdGVkTmFtZSkpOworICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gU2Vzc2lv
blRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgaWYgKCFuZXR3b3JrU2Vz
c2lvbikKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIE5ldHdvcmtMb2FkUGFy
YW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMuc2Vzc2lvbklEID0gc2Vzc2lvbklE
OworICAgIHBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgcGFyYW1ldGVycy5jbGll
bnRDcmVkZW50aWFsUG9saWN5ID0gQ2xpZW50Q3JlZGVudGlhbFBvbGljeTo6TWF5QXNrQ2xpZW50
Rm9yQ3JlZGVudGlhbHM7CisgICAgbV9wZW5kaW5nRG93bmxvYWRzLmFkZChkb3dubG9hZElELCBz
dGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdEb3dubG9hZD4oV1RGTW92ZShwYXJhbWV0ZXJzKSwgZG93
bmxvYWRJRCwgKm5ldHdvcmtTZXNzaW9uLCBzdWdnZXN0ZWROYW1lKSk7CisjZWxzZQogICAgIGF1
dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPigqdGhpcywgZG93bmxvYWRJ
RCwgcmVxdWVzdCwgc3VnZ2VzdGVkTmFtZSk7CiAgICAgZG93bmxvYWQtPnN0YXJ0KCk7CiAKICAg
ICBBU1NFUlQoIW1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKICAgICBtX2Rvd25s
b2Fkcy5hZGQoZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworI2VuZGlmCiB9CiAKICNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQpAQCAtOTksOCArOTcsNyBAQCB2b2lkIERvd25sb2FkTWFu
YWdlcjo6d2lsbERlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKE5ldHdvcmtEYXRhVGFz
ayYgbmV0dwogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kb3dubG9hZHNXYWl0aW5nRm9yRGVzdGlu
YXRpb24uc2V0KGRvd25sb2FkSUQsIHN0ZDo6bWFrZV9wYWlyPFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+LCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyPigmbmV0d29ya0RhdGFUYXNrLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSkpOwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CiB9Ci0jZW5kaWYKLQorI2Vsc2UKIHZvaWQgRG93bmxvYWRNYW5h
Z2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6
bWFrZV91bmlxdWU8RG93bmxvYWQ+KCp0aGlzLCBkb3dubG9hZElELCByZXF1ZXN0KTsKQEAgLTEw
OSw2ICsxMDYsNyBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udmVydEhhbmRsZVRvRG93bmxv
YWQoRG93bmxvYWRJRCBkb3dubG9hZElELCBSZXNvdXJjZUhhbgogICAgIEFTU0VSVCghbV9kb3du
bG9hZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogICAgIG1fZG93bmxvYWRzLmFkZChkb3dubG9h
ZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CiB9CisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lP
TikKIAogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2Fk
RGVzdGluYXRpb24oRG93bmxvYWRJRCBkb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9v
bCBhbGxvd092ZXJ3cml0ZSkKIHsKQEAgLTEzNCwxMSArMTMyLDExIEBAIHZvaWQgRG93bmxvYWRN
YW5hZ2VyOjpjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERvd25sb2Fk
SUQgZG93bmxvCiAKICAgICAgICAgQVNTRVJUKCFtX2Rvd25sb2Fkc0FmdGVyRGVzdGluYXRpb25E
ZWNpZGVkLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKICAgICAgICAgbV9kb3dubG9hZHNBZnRlckRl
c3RpbmF0aW9uRGVjaWRlZC5zZXQoZG93bmxvYWRJRCwgbmV0d29ya0RhdGFUYXNrKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSNlbmRpZgorI2Vsc2UKICAgICBpZiAoYXV0byogd2FpdGluZ0Rv
d25sb2FkID0gZG93bmxvYWQoZG93bmxvYWRJRCkpCiAgICAgICAgIHdhaXRpbmdEb3dubG9hZC0+
ZGlkRGVjaWRlRG93bmxvYWREZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUpOworI2VuZGlmCiB9CiAKIHZvaWQgRG93bmxvYWRNYW5h
Z2VyOjpyZXN1bWVEb3dubG9hZChTZXNzaW9uSUQsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZE1hbmFnZXIuaAppbmRleCAwNzFlYTllLi45MDYzZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5o
CkBAIC04MCw4ICs4MCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY29udGludWVXaWxs
U2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpOwogICAg
IHZvaWQgd2lsbERlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKE5ldHdvcmtEYXRhVGFz
ayYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJik7Ci0jZW5kaWYKKyNlbHNlCiAgICAgdm9p
ZCBjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmKTsKKyNlbmRpZgogICAgIHZvaWQgY29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbihEb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwogCiAgICAg
dm9pZCByZXN1bWVEb3dubG9hZChXZWJDb3JlOjpTZXNzaW9uSUQsIERvd25sb2FkSUQsIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9jb2NvYS9Eb3dubG9hZENvY29hLm1tIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0K
aW5kZXggZDMyMDlhZC4uODY4ZTExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2NvY29hL0Rvd25sb2FkQ29jb2EubW0KQEAg
LTM4LDEwICszOCwxMCBAQCB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KICAgICAKLXZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKK3ZvaWQg
RG93bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQogewotICAgIEFTU0VSVChtX2Rv
d25sb2FkKTsKLSAgICBbbV9kb3dubG9hZCBjYW5jZWxCeVByb2R1Y2luZ1Jlc3VtZURhdGE6IF4o
TlNEYXRhICogX051bGxhYmxlIHJlc3VtZURhdGEpCisgICAgQVNTRVJUKG1fZG93bmxvYWRUYXNr
KTsKKyAgICBbbV9kb3dubG9hZFRhc2sgY2FuY2VsQnlQcm9kdWNpbmdSZXN1bWVEYXRhOiBeKE5T
RGF0YSAqIF9OdWxsYWJsZSByZXN1bWVEYXRhKQogICAgIHsKICAgICAgICAgaWYgKHJlc3VtZURh
dGEgJiYgcmVzdW1lRGF0YS5ieXRlcyAmJiByZXN1bWVEYXRhLmxlbmd0aCkKICAgICAgICAgICAg
IGRpZENhbmNlbChJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4ocmVzdW1lRGF0YS5ieXRlcyksIHJlc3VtZURhdGEubGVuZ3RoKSk7CkBAIC01MCwxNSAr
NTAsNiBAQCB2b2lkIERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCiAgICAgfV07CiB9CiAK
LXZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQotewotfQotICAg
IAogfQogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1t
CmluZGV4IGYzMzhhYmMuLjUwMjRhZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbQpAQCAtMTQyLDcg
KzE0Miw3IEBAIHZvaWQgRG93bmxvYWQ6OnN0YXJ0TmV0d29ya0xvYWRXaXRoSGFuZGxlKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCiB9CiAKLXZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKK3ZvaWQgRG93
bmxvYWQ6OnBsYXRmb3JtQ2FuY2VsTmV0d29ya0xvYWQoKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvbWFjL0Rvd25sb2FkTWFjLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQppbmRleCBiYjNmZjJiLi45OWUzODgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2Fk
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9tYWMv
RG93bmxvYWRNYWMubW0KQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIERvd25sb2FkOjpyZXN1bWUo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgs
CiAgICAgW21fbnNVUkxEb3dubG9hZCBzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlOk5PXTsKIH0K
IAotdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQordm9pZCBEb3dubG9hZDo6cGxh
dGZvcm1DYW5jZWxOZXR3b3JrTG9hZCgpCiB7CiAgICAgW21fbnNVUkxEb3dubG9hZCBjYW5jZWxd
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
c291cC9Eb3dubG9hZFNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODJlOGM1Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdo
YW1Ad2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRvd25sb2FkLmgiCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgRG93
bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKLXsKLSAgICBtX2Rvd25s
b2FkLT5jYW5jZWwoKTsKLSAgICBkaWRDYW5jZWwoeyB9KTsKLX0KLQotdm9pZCBEb3dubG9hZDo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRG
aW5pc2goKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCAyNGUzZjQ5Li40MjE4M2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCkBAIC0yMDcsMTggKzIwNywxNiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoU2Vzc2lvbklECiAg
ICAgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAoIXJlcXVlc3QudXJsKCku
cHJvdG9jb2xJc0Jsb2IoKSkgewotICAgICAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCktPmNvbnZl
cnRUYXNrVG9Eb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAg
IGxvYWRlci0+ZGlkQ29udmVydFRvRG93bmxvYWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgorICAgIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+Y29udmVydFRhc2tUb0Rvd25sb2Fk
KGRvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBsb2FkZXItPmRpZENvbnZlcnRU
b0Rvd25sb2FkKCk7CisjZWxzZQogICAgIG5ldHdvcmtQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigp
LmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKGRvd25sb2FkSUQsIGxvYWRlci0+bmV0d29ya0xvYWQo
KS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKIAogICAgIC8vIFVuYmxvY2sgdGhlIFVS
TCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4KICAgICBsb2FkZXItPm5ldHdvcmtMb2FkKCkt
PmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogCiAgICAgbG9hZGVyLT5k
aWRDb252ZXJ0VG9Eb3dubG9hZCgpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNGb3JET00oU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgU3RyaW5nJiByZXN1bHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmNwcAppbmRleCA1
NGRhNGZiLi5kYmIwNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrRGF0YVRhc2suY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tCbG9iLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw2
ICs0NSw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBSZWY8TmV0d29ya0RhdGFUYXNrPiBOZXR3
b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFU
YXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91
bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCkKIHsKKyAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKQorICAgICAg
ICByZXR1cm4gTmV0d29ya0RhdGFUYXNrQmxvYjo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVx
dWVzdCwgc2hvdWxkQ29udGVudFNuaWZmKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJl
dHVybiBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVz
dCwgc3RvcmVkQ3JlZGVudGlhbHMsIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggNGRjMTI5MC4uNmRhNDFjMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgK
QEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpID0gMDsKIAog
ICAgIGVudW0gY2xhc3MgU3RhdGUgewogICAgICAgICBSdW5uaW5nLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjk2ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKQEAg
LTAsMCArMSw1ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tCbG9iLmgiCisKKyNpZiBVU0Uo
TkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IkRvd25sb2FkLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJXZWJFcnJvcnMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FzeW5jRmlsZVN0cmVhbS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvQmxvYkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JSZWdpc3RyeUltcGwuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTdHJlYW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFk
ZXJOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFBhcnNlcnMuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VF
cnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGJ1ZmZlclNpemUgPSA1MTIgKiAxMDI0OworCitzdGF0aWMgY29uc3QgaW50IGh0
dHBPSyA9IDIwMDsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cFBhcnRpYWxDb250ZW50ID0gMjA2Owor
c3RhdGljIGNvbnN0IGludCBodHRwTm90QWxsb3dlZCA9IDQwMzsKK3N0YXRpYyBjb25zdCBpbnQg
aHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7CitzdGF0aWMgY29uc3QgaW50
IGh0dHBJbnRlcm5hbEVycm9yID0gNTAwOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBPS1RleHQg
PSAiT0siOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBQYXJ0aWFsQ29udGVudFRleHQgPSAiUGFy
dGlhbCBDb250ZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwTm90QWxsb3dlZFRleHQgPSAi
Tm90IEFsbG93ZWQiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNh
dGlzZmlhYmxlVGV4dCA9ICJSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlzZmlhYmxlIjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBodHRwSW50ZXJuYWxFcnJvclRleHQgPSAiSW50ZXJuYWwgU2VydmVyIEVy
cm9yIjsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHdlYktpdEJsb2JSZXNvdXJjZURvbWFp
biA9ICJXZWJLaXRCbG9iUmVzb3VyY2UiOworCitOZXR3b3JrRGF0YVRhc2tCbG9iOjpOZXR3b3Jr
RGF0YVRhc2tCbG9iKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDb250ZW50U25pZmZp
bmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmKQorICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Np
b24sIGNsaWVudCwgcmVxdWVzdCwgRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBmYWxzZSkK
KyAgICAsIG1fYmxvYkRhdGEoc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5SW1wbCY+KGJsb2JSZWdp
c3RyeSgpKS5nZXRCbG9iRGF0YUZyb21VUkwocmVxdWVzdC51cmwoKSkpCisgICAgLCBtX3N0cmVh
bShzdGQ6Om1ha2VfdW5pcXVlPEFzeW5jRmlsZVN0cmVhbT4oKnRoaXMpKQoreworICAgIG1fc2Vz
c2lvbi0+cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworICAgIExPRyhOZXR3b3JrU2Vz
c2lvbiwgIiVwIC0gQ3JlYXRlZCBOZXR3b3JrRGF0YVRhc2tCbG9iIGZvciAlcyIsIHRoaXMsIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK05ldHdvcmtEYXRhVGFz
a0Jsb2I6On5OZXR3b3JrRGF0YVRhc2tCbG9iKCkKK3sKKyAgICBjbGVhclN0cmVhbSgpOworICAg
IG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQmxvYjo6Y2xlYXJTdHJlYW0oKQoreworICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q29tcGxldGVkOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICBtX2ZpbGVP
cGVuZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zdHJlYW0tPmNsb3NlKCk7CisgICAgfQorICAgIG1f
c3RyZWFtID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZXN1bWUo
KQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAg
aWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VS
VChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
bV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkgeworICAgICAgICAgICAg
Y2xlYXJTdHJlYW0oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9maXJzdFJlcXVlc3QuaHR0cE1l
dGhvZCgpLCAiZ2V0IikpIHsKKyAgICAgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok1ldGhvZE5vdEFs
bG93ZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
dGhlIGJsb2IgZGF0YSBpcyBub3QgZm91bmQsIGZhaWwgbm93LgorICAgICAgICBpZiAoIW1fYmxv
YkRhdGEpIHsKKyAgICAgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgdGhlICJSYW5n
ZSIgaGVhZGVyIHdlIGNhcmUgYWJvdXQuCisgICAgICAgIFN0cmluZyByYW5nZSA9IG1fZmlyc3RS
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6UmFuZ2UpOworICAgICAgICBp
ZiAoIXJhbmdlLmlzRW1wdHkoKSAmJiAhcGFyc2VSYW5nZShyYW5nZSwgbV9yYW5nZU9mZnNldCwg
bV9yYW5nZUVuZCwgbV9yYW5nZVN1ZmZpeExlbmd0aCkpIHsKKyAgICAgICAgICAgIGRpZFJlY2Vp
dmVSZXNwb25zZShFcnJvcjo6UmFuZ2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBnZXRTaXplRm9yTmV4dCgpOworICAgIH0pOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza0Jsb2I6OnN1c3BlbmQoKQoreworICAgIC8vIEZJWE1FOiBjYW4gdGhpcyBo
YXBwZW4/Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y2FuY2VsKCkKK3sKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBs
ZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7
CisKKyAgICBpZiAobV9maWxlT3BlbmVkKSB7CisgICAgICAgIG1fZmlsZU9wZW5lZCA9IGZhbHNl
OworICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICBpZiAoaXNEb3dubG9h
ZCgpKQorICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0
YVRhc2tCbG9iOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBjYW5jZWwoKTsKKyAgICBj
bGVhclN0cmVhbSgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmdldFNpemVGb3JO
ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRG8gd2UgZmlu
aXNoIHZhbGlkYXRpbmcgYW5kIGNvdW50aW5nIHNpemUgZm9yIGFsbCBpdGVtcz8KKyAgICBpZiAo
bV9zaXplSXRlbUNvdW50ID49IG1fYmxvYkRhdGEtPml0ZW1zKCkuc2l6ZSgpKSB7CisgICAgICAg
IHNlZWsoKTsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX2Jsb2JEYXRhLT5pdGVt
cygpLmF0KG1fc2l6ZUl0ZW1Db3VudCk7CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAg
IGNhc2UgQmxvYkRhdGFJdGVtOjpUeXBlOjpEYXRhOgorICAgICAgICBkaWRHZXRTaXplKGl0ZW0u
bGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6VHlwZTo6
RmlsZToKKyAgICAgICAgLy8gRmlsZXMga25vdyB0aGVpciBzaXplcywgYnV0IGFza2luZyB0aGUg
c3RyZWFtIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlIHdhc24ndCBtb2RpZmllZC4KKyAgICAgICAg
bV9zdHJlYW0tPmdldFNpemUoaXRlbS5maWxlKCktPnBhdGgoKSwgaXRlbS5maWxlKCktPmV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza0Jsb2I6OmRpZEdldFNpemUobG9uZyBsb25nIHNpemUpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghbV9jbGllbnQgJiYgIWlzRG93bmxvYWQoKSkp
IHsKKyAgICAgICAgY2xlYXJTdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIElmIHRoZSBzaXplIGlzIC0xLCBpdCBtZWFucyB0aGUgZmlsZSBoYXMgYmVlbiBtb3ZlZCBv
ciBjaGFuZ2VkLiBGYWlsIG5vdy4KKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAgICBkaWRG
YWlsKEVycm9yOjpOb3RGb3VuZEVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFRoZSBzaXplIHBhc3NlZCBiYWNrIGlzIHRoZSBzaXplIG9mIHRoZSB3aG9sZSBmaWxlLiBJ
ZiB0aGUgdW5kZXJseWluZyBpdGVtIGlzIGEgc2xpY2VkIGZpbGUsIHdlIG5lZWQgdG8gdXNlIHRo
ZSBzbGljZSBsZW5ndGguCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9ibG9iRGF0
YS0+aXRlbXMoKS5hdChtX3NpemVJdGVtQ291bnQpOworICAgIHNpemUgPSBpdGVtLmxlbmd0aCgp
OworCisgICAgLy8gQ2FjaGUgdGhlIHNpemUuCisgICAgbV9pdGVtTGVuZ3RoTGlzdC5hcHBlbmQo
c2l6ZSk7CisKKyAgICAvLyBDb3VudCB0aGUgc2l6ZS4KKyAgICBtX3RvdGFsU2l6ZSArPSBzaXpl
OworICAgIG1fdG90YWxSZW1haW5pbmdTaXplICs9IHNpemU7CisgICAgbV9zaXplSXRlbUNvdW50
Kys7CisKKyAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBuZXh0IGl0ZW0uCisgICAgZ2V0U2l6ZUZv
ck5leHQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpzZWVrKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gQ29udmVydCBmcm9tIHRoZSBzdWZmaXgg
bGVuZ3RoIHRvIHRoZSByYW5nZS4KKyAgICBpZiAobV9yYW5nZVN1ZmZpeExlbmd0aCAhPSBrUG9z
aXRpb25Ob3RTcGVjaWZpZWQpIHsKKyAgICAgICAgbV9yYW5nZU9mZnNldCA9IG1fdG90YWxSZW1h
aW5pbmdTaXplIC0gbV9yYW5nZVN1ZmZpeExlbmd0aDsKKyAgICAgICAgbV9yYW5nZUVuZCA9IG1f
cmFuZ2VPZmZzZXQgKyBtX3JhbmdlU3VmZml4TGVuZ3RoIC0gMTsKKyAgICB9CisKKyAgICAvLyBC
YWlsIG91dCBpZiB0aGUgcmFuZ2UgaXMgbm90IHByb3ZpZGVkLgorICAgIGlmIChtX3JhbmdlT2Zm
c2V0ID09IGtQb3NpdGlvbk5vdFNwZWNpZmllZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
U2tpcCB0aGUgaW5pdGlhbCBpdGVtcyB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlLgorICAgIGxv
bmcgbG9uZyBvZmZzZXQgPSBtX3JhbmdlT2Zmc2V0OworICAgIGZvciAobV9yZWFkSXRlbUNvdW50
ID0gMDsgbV9yZWFkSXRlbUNvdW50IDwgbV9ibG9iRGF0YS0+aXRlbXMoKS5zaXplKCkgJiYgb2Zm
c2V0ID49IG1faXRlbUxlbmd0aExpc3RbbV9yZWFkSXRlbUNvdW50XTsgKyttX3JlYWRJdGVtQ291
bnQpCisgICAgICAgIG9mZnNldCAtPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0ZW1Db3VudF07
CisKKyAgICAvLyBTZXQgdGhlIG9mZnNldCB0aGF0IG5lZWQgdG8ganVtcCB0byBmb3IgdGhlIGZp
cnN0IGl0ZW0gaW4gdGhlIHJhbmdlLgorICAgIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSA9IG9mZnNl
dDsKKworICAgIC8vIEFkanVzdCB0aGUgdG90YWwgcmVtYWluaW5nIHNpemUgaW4gb3JkZXIgbm90
IHRvIGdvIGJleW9uZCB0aGUgcmFuZ2UuCisgICAgaWYgKG1fcmFuZ2VFbmQgIT0ga1Bvc2l0aW9u
Tm90U3BlY2lmaWVkKSB7CisgICAgICAgIGxvbmcgbG9uZyByYW5nZVNpemUgPSBtX3JhbmdlRW5k
IC0gbV9yYW5nZU9mZnNldCArIDE7CisgICAgICAgIGlmIChtX3RvdGFsUmVtYWluaW5nU2l6ZSA+
IHJhbmdlU2l6ZSkKKyAgICAgICAgICAgIG1fdG90YWxSZW1haW5pbmdTaXplID0gcmFuZ2VTaXpl
OworICAgIH0gZWxzZQorICAgICAgICBtX3RvdGFsUmVtYWluaW5nU2l6ZSAtPSBtX3JhbmdlT2Zm
c2V0OworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZFJlY2VpdmVSZXNwb25zZShF
cnJvciBlcnJvckNvZGUpCit7CisgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJXAgLSBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpkaWRSZWNlaXZlUmVzcG9uc2UoJXUpIiwgdGhpcywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGVycm9yQ29kZSkpOworCisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Jsb2I+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UobV9maXJz
dFJlcXVlc3QudXJsKCksIGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvciA/ICJ0ZXh0L3BsYWlu
IiA6IG1fYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCksIGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJv
ciA/IDAgOiBtX3RvdGFsUmVtYWluaW5nU2l6ZSwgU3RyaW5nKCkpOworICAgIHN3aXRjaCAoZXJy
b3JDb2RlKSB7CisgICAgY2FzZSBFcnJvcjo6Tm9FcnJvcjogeworICAgICAgICBib29sIGlzUmFu
Z2VSZXF1ZXN0ID0gbV9yYW5nZU9mZnNldCAhPSBrUG9zaXRpb25Ob3RTcGVjaWZpZWQ7CisgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGlzUmFuZ2VSZXF1ZXN0ID8gaHR0cFBhcnRp
YWxDb250ZW50IDogaHR0cE9LKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQo
aXNSYW5nZVJlcXVlc3QgPyBodHRwUGFydGlhbENvbnRlbnRUZXh0IDogaHR0cE9LVGV4dCk7CisK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50VHlwZSwgbV9ibG9iRGF0YS0+Y29udGVudFR5cGUoKSk7CisgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCwgU3RyaW5nOjpu
dW1iZXIobV90b3RhbFJlbWFpbmluZ1NpemUpKTsKKworICAgICAgICBpZiAoaXNSYW5nZVJlcXVl
c3QpCisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRSYW5nZSwgUGFyc2VkQ29udGVudFJhbmdlKG1fcmFuZ2VPZmZzZXQsIG1fcmFu
Z2VFbmQsIG1fdG90YWxTaXplKS5oZWFkZXJWYWx1ZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IElm
IGEgcmVzb3VyY2UgaWRlbnRpZmllZCB3aXRoIGEgYmxvYjogVVJMIGlzIGEgRmlsZSBvYmplY3Qs
IHVzZXIgYWdlbnRzIG11c3QgdXNlIHRoYXQgZmlsZSdzIG5hbWUgYXR0cmlidXRlLAorICAgICAg
ICAvLyBhcyBpZiB0aGUgcmVzcG9uc2UgaGFkIGEgQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIg
d2l0aCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyIHNldCB0byB0aGUgRmlsZSdzIG5hbWUgYXR0cmli
dXRlLgorICAgICAgICAvLyBOb3RhYmx5LCB0aGlzIHdpbGwgYWZmZWN0IGEgbmFtZSBzdWdnZXN0
ZWQgaW4gIkZpbGUgU2F2ZSBBcyIuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEVy
cm9yOjpSYW5nZUVycm9yOgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRw
UmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBT
dGF0dXNUZXh0KGh0dHBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlVGV4dCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRXJyb3I6OlNlY3VyaXR5RXJyb3I6CisgICAgICAgIHJlc3BvbnNl
LnNldEhUVFBTdGF0dXNDb2RlKGh0dHBOb3RBbGxvd2VkKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0
SFRUUFN0YXR1c1RleHQoaHR0cE5vdEFsbG93ZWRUZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cEludGVybmFs
RXJyb3IpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwSW50ZXJuYWxF
cnJvclRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZXJyb3JDb2RlXShQb2xpY3lBY3Rp
b24gcG9saWN5QWN0aW9uKSB7CisgICAgICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0
d29ya0RhdGFUYXNrQmxvYjo6ZGlkUmVjZWl2ZVJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyICgl
dSkiLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9saWN5QWN0aW9uKSk7CisKKyAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpD
b21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyU3RyZWFtKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3JDb2RlICE9IEVycm9yOjpOb0Vycm9y
KSB7CisgICAgICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAocG9saWN5QWN0aW9uKSB7CisgICAgICAgIGNhc2UgUG9s
aWN5QWN0aW9uOjpQb2xpY3lVc2U6CisgICAgICAgICAgICBtX2J1ZmZlci5yZXNpemUoYnVmZmVy
U2l6ZSk7CisgICAgICAgICAgICByZWFkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeUlnbm9yZToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAgICBkb3du
bG9hZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSByZW1haW5pbmcgZGF0YSB0byByZWFk
LCB3ZSBhcmUgZG9uZS4KKyAgICBpZiAoIW1fdG90YWxSZW1haW5pbmdTaXplIHx8IG1fcmVhZEl0
ZW1Db3VudCA+PSBtX2Jsb2JEYXRhLT5pdGVtcygpLnNpemUoKSkgeworICAgICAgICBkaWRGaW5p
c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYg
aXRlbSA9IG1fYmxvYkRhdGEtPml0ZW1zKCkuYXQobV9yZWFkSXRlbUNvdW50KTsKKyAgICBpZiAo
aXRlbS50eXBlKCkgPT0gQmxvYkRhdGFJdGVtOjpUeXBlOjpEYXRhKQorICAgICAgICByZWFkRGF0
YShpdGVtKTsKKyAgICBlbHNlIGlmIChpdGVtLnR5cGUoKSA9PSBCbG9iRGF0YUl0ZW06OlR5cGU6
OkZpbGUpCisgICAgICAgIHJlYWRGaWxlKGl0ZW0pOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6cmVhZERhdGEo
Y29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtKQoreworICAgIEFTU0VSVChpdGVtLmRhdGEoKS5kYXRh
KCkpOworCisgICAgbG9uZyBsb25nIGJ5dGVzVG9SZWFkID0gaXRlbS5sZW5ndGgoKSAtIG1fY3Vy
cmVudEl0ZW1SZWFkU2l6ZTsKKyAgICBpZiAoYnl0ZXNUb1JlYWQgPiBtX3RvdGFsUmVtYWluaW5n
U2l6ZSkKKyAgICAgICAgYnl0ZXNUb1JlYWQgPSBtX3RvdGFsUmVtYWluaW5nU2l6ZTsKKyAgICBj
b25zdW1lRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpdGVtLmRhdGEoKS5kYXRh
KCktPmRhdGEoKSkgKyBpdGVtLm9mZnNldCgpICsgbV9jdXJyZW50SXRlbVJlYWRTaXplLCBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzVG9SZWFkKSk7CisgICAgbV9jdXJyZW50SXRlbVJlYWRTaXplID0g
MDsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9iOjpyZWFkRmlsZShjb25zdCBCbG9iRGF0
YUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBBU1NFUlQobV9zdHJl
YW0pOworCisgICAgaWYgKG1fZmlsZU9wZW5lZCkgeworICAgICAgICBtX3N0cmVhbS0+cmVhZCht
X2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBsb25nIGxvbmcgYnl0ZXNUb1JlYWQgPSBtX2l0ZW1MZW5ndGhMaXN0W21fcmVhZEl0
ZW1Db3VudF0gLSBtX2N1cnJlbnRJdGVtUmVhZFNpemU7CisgICAgaWYgKGJ5dGVzVG9SZWFkID4g
bV90b3RhbFJlbWFpbmluZ1NpemUpCisgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8
aW50PihtX3RvdGFsUmVtYWluaW5nU2l6ZSk7CisgICAgbV9zdHJlYW0tPm9wZW5Gb3JSZWFkKGl0
ZW0uZmlsZSgpLT5wYXRoKCksIGl0ZW0ub2Zmc2V0KCkgKyBtX2N1cnJlbnRJdGVtUmVhZFNpemUs
IGJ5dGVzVG9SZWFkKTsKKyAgICBtX2ZpbGVPcGVuZWQgPSB0cnVlOworICAgIG1fY3VycmVudEl0
ZW1SZWFkU2l6ZSA9IDA7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkT3Blbihi
b29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBt
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFtX2NsaWVudCAmJiAhaXNEb3dubG9hZCgp
KSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGRpZEZhaWwoRXJyb3I6Ok5vdFJlYWRhYmxlRXJy
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmPE5ldHdvcmtEYXRhVGFza0Js
b2I+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworICAgIHJlYWQoKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpkaWRSZWFkKGludCBieXRlc1JlYWQpCit7CisgICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgKCFt
X2NsaWVudCAmJiAhaXNEb3dubG9hZCgpKSkgeworICAgICAgICBjbGVhclN0cmVhbSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsKKyAgICAgICAg
ZGlkRmFpbChFcnJvcjo6Tm90UmVhZGFibGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrQmxvYj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Cisg
ICAgY29uc3VtZURhdGEobV9idWZmZXIuZGF0YSgpLCBieXRlc1JlYWQpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza0Jsb2I6OmNvbnN1bWVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBieXRl
c1JlYWQpCit7CisgICAgbV90b3RhbFJlbWFpbmluZ1NpemUgLT0gYnl0ZXNSZWFkOworCisgICAg
aWYgKGJ5dGVzUmVhZCkgeworICAgICAgICBpZiAobV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAgICAgICAgaWYgKCF3cml0ZURvd25sb2FkKGRhdGEs
IGJ5dGVzUmVhZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBieXRlc1JlYWQpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChtX2ZpbGVPcGVuZWQpIHsKKyAgICAgICAgLy8gV2hlbiB0
aGUgY3VycmVudCBpdGVtIGlzIGEgZmlsZSBpdGVtLCB0aGUgcmVhZGluZyBpcyBjb21wbGV0ZWQg
b25seSBpZiBieXRlc1JlYWQgaXMgMC4KKyAgICAgICAgaWYgKCFieXRlc1JlYWQpIHsKKyAgICAg
ICAgICAgIC8vIENsb3NlIHRoZSBmaWxlLgorICAgICAgICAgICAgbV9maWxlT3BlbmVkID0gZmFs
c2U7CisgICAgICAgICAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKKworICAgICAgICAgICAgLy8gTW92
ZSB0byB0aGUgbmV4dCBpdGVtLgorICAgICAgICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHJlYWQgdGhlIGN1
cnJlbnQgdGV4dCBpdGVtIGFzIGEgd2hvbGUgYW5kIG1vdmUgdG8gdGhlIG5leHQgaXRlbS4KKyAg
ICAgICAgbV9yZWFkSXRlbUNvdW50Kys7CisgICAgfQorCisgICAgcmVhZCgpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFza0Jsb2I6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKK3sKKyAgICBOZXR3b3JrRGF0YVRh
c2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZpbGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CisKKyAgICBBU1NFUlQoIW1fc2FuZGJveEV4dGVuc2lv
bik7CisgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNh
bmRib3hFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCisgICAg
ICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOworCisgICAgaWYgKGFsbG93T3Zlcndy
aXRlICYmIGZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbikpCisgICAgICAgIGRl
bGV0ZUZpbGUobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7Cit9CisKK1N0cmluZyBOZXR3b3Jr
RGF0YVRhc2tCbG9iOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N1
Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmls
ZW5hbWU7CisKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bmtub3duIik7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQmxvYjo6ZG93bmxvYWQoKQoreworICAgIEFTU0VSVChpc0Rvd25sb2Fk
KCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKKworICAgIExPRyhO
ZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNrQmxvYjo6ZG93bmxvYWQgdG8gJXMi
LCB0aGlzLCBtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
bV9kb3dubG9hZEZpbGUgPSBvcGVuRmlsZShtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uLCBPcGVu
Rm9yV3JpdGUpOworICAgIGlmIChtX2Rvd25sb2FkRmlsZSA9PSBpbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChjYW5jZWxsZWRFcnJvcihtX2ZpcnN0
UmVxdWVzdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgZG93bmxvYWRN
YW5hZ2VyID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwor
ICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1h
bmFnZXIsIG1fcGVuZGluZ0Rvd25sb2FkSUQsICp0aGlzLCBtX3Nlc3Npb24tPnNlc3Npb25JRCgp
LCBzdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICBhdXRvKiBkb3dubG9hZFB0ciA9IGRvd25sb2Fk
LmdldCgpOworICAgIGRvd25sb2FkTWFuYWdlci5kYXRhVGFza0JlY2FtZURvd25sb2FkVGFzayht
X3BlbmRpbmdEb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CisgICAgZG93bmxvYWRQdHIt
PmRpZENyZWF0ZURlc3RpbmF0aW9uKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworCisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQmVjb21lRG93bmxvYWQoKTsKKwor
ICAgIG1fYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKKyAgICByZWFkKCk7Cit9CisKK2Jvb2wg
TmV0d29ya0RhdGFUYXNrQmxvYjo6d3JpdGVEb3dubG9hZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
Ynl0ZXNSZWFkKQoreworICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOworICAgIGludCBieXRlc1dy
aXR0ZW4gPSB3cml0ZVRvRmlsZShtX2Rvd25sb2FkRmlsZSwgZGF0YSwgYnl0ZXNSZWFkKTsKKyAg
ICBpZiAoYnl0ZXNXcml0dGVuID09IC0xKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChjYW5j
ZWxsZWRFcnJvcihtX2ZpcnN0UmVxdWVzdCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUKGJ5dGVzV3JpdHRlbiA9PSBieXRlc1JlYWQpOworICAgIGF1dG8qIGRv
d25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRv
d25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAg
ZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6Y2xlYW5Eb3dubG9hZEZpbGVzKCkKK3sK
KyAgICBpZiAobV9kb3dubG9hZEZpbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgewor
ICAgICAgICBjbG9zZUZpbGUobV9kb3dubG9hZEZpbGUpOworICAgICAgICBtX2Rvd25sb2FkRmls
ZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQorICAgIGRlbGV0ZUZpbGUobV9w
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQmxvYjo6
ZGlkRmFpbERvd25sb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIExPRyhO
ZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlkRmFpbERvd25sb2Fk
IiwgdGhpcyk7CisKKyAgICBjbGVhclN0cmVhbSgpOworICAgIGNsZWFuRG93bmxvYWRGaWxlcygp
OworCisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikgeworICAgICAgICBtX3NhbmRib3hFeHRl
bnNpb24tPnJldm9rZSgpOworICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBudWxscHRyOwor
ICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRl
V2l0aEVycm9yKGVycm9yKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byogZG93bmxvYWQgPSBO
ZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9w
ZW5kaW5nRG93bmxvYWRJRCk7CisgICAgICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgICAgIGRv
d25sb2FkLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UoKSk7CisgICAgfQorfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaERvd25sb2FkKCkKK3sKKyAgICBM
T0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaERv
d25sb2FkIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNEb3dubG9hZCgpKTsKKyAgICBjbG9zZUZp
bGUobV9kb3dubG9hZEZpbGUpOworICAgIG1fZG93bmxvYWRGaWxlID0gaW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZTsKKworICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAgICAgbV9z
YW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsKKyAgICAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBjbGVhclN0cmVhbSgpOworICAgIGF1dG8qIGRvd25sb2Fk
ID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2Fk
KG1fcGVuZGluZ0Rvd25sb2FkSUQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93bmxv
YWQtPmRpZEZpbmlzaCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZhaWwo
RXJyb3IgZXJyb3JDb2RlKQoreworICAgIEFTU0VSVCghbV9zYW5kYm94RXh0ZW5zaW9uKTsKKwor
ICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tCbG9iPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBp
ZiAoaXNEb3dubG9hZCgpKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChSZXNvdXJjZUVycm9y
KHdlYktpdEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBt
X2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVwIC0gTmV0d29ya0RhdGFUYXNrQmxvYjo6ZGlk
RmFpbCIsIHRoaXMpOworCisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBBU1NFUlQobV9jbGllbnQp
OworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihSZXNvdXJjZUVycm9yKHdlYktp
dEJsb2JSZXNvdXJjZURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX2ZpcnN0
UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tCbG9i
OjpkaWRGaW5pc2goKQoreworICAgIGlmIChtX2Rvd25sb2FkRmlsZSAhPSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlKSB7CisgICAgICAgIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fc2FuZGJveEV4dGVuc2lvbik7CisKKyAgICBM
T0coTmV0d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtEYXRhVGFza0Jsb2I6OmRpZEZpbmlzaCIs
IHRoaXMpOworCisgICAgY2xlYXJTdHJlYW0oKTsKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAg
IG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2tCbG9iLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyNjM2MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaApAQCAtMCww
ICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3RyZWFtQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GaWxlU3lzdGVtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFzeW5jRmls
ZVN0cmVhbTsKK2NsYXNzIEJsb2JEYXRhOworY2xhc3MgQmxvYkRhdGFJdGVtOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrQmxvYiBmaW5hbCA6IHB1Ymxp
YyBOZXR3b3JrRGF0YVRhc2ssIHB1YmxpYyBXZWJDb3JlOjpGaWxlU3RyZWFtQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3kgc2hvdWxkQ29udGVudFNuaWZmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTmV0d29ya0RhdGFUYXNrQmxvYihzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHNob3VsZENv
bnRlbnRTbmlmZikpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tCbG9iKCk7CisKK3By
aXZhdGU6CisgICAgTmV0d29ya0RhdGFUYXNrQmxvYihOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OkNvbnRlbnRTbmlmZmluZ1BvbGljeSk7CisKKyAgICB2b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgTmV0d29ya0Rh
dGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KworICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92
ZXJyaWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgLy8gRmlsZVN0cmVhbUNsaWVudCBtZXRob2RzLgorICAgIHZvaWQgZGlkR2V0U2l6ZShs
b25nIGxvbmcpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkT3Blbihib29sKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZFJlYWQoaW50KSBvdmVycmlkZTsKKworICAgIGVudW0gY2xhc3MgRXJyb3Igewor
ICAgICAgICBOb0Vycm9yID0gMCwKKyAgICAgICAgTm90Rm91bmRFcnJvciA9IDEsCisgICAgICAg
IFNlY3VyaXR5RXJyb3IgPSAyLAorICAgICAgICBSYW5nZUVycm9yID0gMywKKyAgICAgICAgTm90
UmVhZGFibGVFcnJvciA9IDQsCisgICAgICAgIE1ldGhvZE5vdEFsbG93ZWQgPSA1CisgICAgfTsK
KworICAgIHZvaWQgY2xlYXJTdHJlYW0oKTsKKyAgICB2b2lkIGdldFNpemVGb3JOZXh0KCk7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoRXJyb3IgPSBFcnJvcjo6Tm9FcnJvcik7CisgICAg
dm9pZCBzZWVrKCk7CisgICAgdm9pZCBjb25zdW1lRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
Ynl0ZXNSZWFkKTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIHJlYWREYXRhKGNvbnN0IFdl
YkNvcmU6OkJsb2JEYXRhSXRlbSYpOworICAgIHZvaWQgcmVhZEZpbGUoY29uc3QgV2ViQ29yZTo6
QmxvYkRhdGFJdGVtJik7CisgICAgdm9pZCBkb3dubG9hZCgpOworICAgIGJvb2wgd3JpdGVEb3du
bG9hZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKTsKKyAgICB2b2lkIGNsZWFuRG93
bmxvYWRGaWxlcygpOworICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgdm9pZCBk
aWRGYWlsKEVycm9yKTsKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworCisgICAgZW51bSB7IGtQb3Np
dGlvbk5vdFNwZWNpZmllZCA9IC0xIH07CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGE+
IG1fYmxvYkRhdGE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bT4gbV9zdHJlYW07IC8vIEZvciBhc3luY2hyb25vdXMgbG9hZGluZy4KKyAgICBWZWN0b3I8Y2hh
cj4gbV9idWZmZXI7CisgICAgVmVjdG9yPGxvbmcgbG9uZz4gbV9pdGVtTGVuZ3RoTGlzdDsKKyAg
ICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAgIGxvbmcgbG9uZyBtX3Jh
bmdlT2Zmc2V0IHsga1Bvc2l0aW9uTm90U3BlY2lmaWVkIH07CisgICAgbG9uZyBsb25nIG1fcmFu
Z2VFbmQgeyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgfTsKKyAgICBsb25nIGxvbmcgbV9yYW5nZVN1
ZmZpeExlbmd0aCB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCB9OworICAgIGxvbmcgbG9uZyBtX3Rv
dGFsU2l6ZSB7IDAgfTsKKyAgICBsb25nIGxvbmcgbV90b3RhbFJlbWFpbmluZ1NpemUgeyAwIH07
CisgICAgbG9uZyBsb25nIG1fY3VycmVudEl0ZW1SZWFkU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX3NpemVJdGVtQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9yZWFkSXRlbUNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9maWxlT3BlbmVkIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgbV9kb3dubG9hZEZpbGUgeyBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlIH07CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVu
c2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdP
UktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcAppbmRleCA5MDMxNTYyLi4xMjY3NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC02NywxMCArNjcsNiBAQCBOZXR3b3JrTG9hZDo6
TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllbnQmIGNsaWVudCwgTmV0d29ya0xvYWRQYXJhbWV0
ZXJzJiYgcGFyYQogICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAg
LCBtX2N1cnJlbnRSZXF1ZXN0KG1fcGFyYW1ldGVycy5yZXF1ZXN0KQogewotICAgIGlmIChtX3Bh
cmFtZXRlcnMucmVxdWVzdC51cmwoKS5wcm90b2NvbElzQmxvYigpKSB7Ci0gICAgICAgIG1faGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShudWxscHRyLCBtX3BhcmFtZXRlcnMucmVxdWVz
dCwgdGhpcywgbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcsIG1fcGFyYW1ldGVycy5jb250ZW50
U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
ICAgICBtX3Rhc2sgPSBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShuZXR3b3JrU2Vzc2lvbiwgKnRo
aXMsIG1fcGFyYW1ldGVycy5yZXF1ZXN0LCBtX3BhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50
aWFscywgbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSwgbV9wYXJhbWV0ZXJzLnNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogICAgIGlmICghbV9wYXJh
bWV0ZXJzLmRlZmVyc0xvYWRpbmcpCiAgICAgICAgIG1fdGFzay0+cmVzdW1lKCk7CkBAIC0xMDEs
MTIgKzk3LDE0IEBAIE5ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQoKQogI2VuZGlmCiAgICAgaWYg
KG1fdGFzaykKICAgICAgICAgbV90YXNrLT5jbGVhckNsaWVudCgpOwotI2VsaWYgVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyNlbHNlCisjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykKICAgICBpZiAobV9oYW5kbGUgJiYgbV93YWl0aW5nRm9yQ29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKQogICAgICAgICBtX2hhbmRs
ZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsK
ICNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyhib29s
IGRlZmVycykKQEAgLTExOCw5ICsxMTYsMTAgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJz
TG9hZGluZyhib29sIGRlZmVycykKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV90YXNrLT5y
ZXN1bWUoKTsKICAgICB9Ci0jZW5kaWYKKyNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQogICAgICAg
ICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworI2VuZGlmCiB9CiAKIHZvaWQg
TmV0d29ya0xvYWQ6OmNhbmNlbCgpCkBAIC0xMjgsOSArMTI3LDEwIEBAIHZvaWQgTmV0d29ya0xv
YWQ6OmNhbmNlbCgpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBpZiAobV90YXNrKQog
ICAgICAgICBtX3Rhc2stPmNhbmNlbCgpOwotI2VuZGlmCisjZWxzZQogICAgIGlmIChtX2hhbmRs
ZSkKICAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29y
a0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
IG5ld1JlcXVlc3QpCkBAIC0xNDMsMjcgKzE0MywyNiBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0
KQogI2VuZGlmCiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1dG8gcmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9yZWRpcmVjdENvbXBsZXRpb25IYW5k
bGVyLCBudWxscHRyKTsgICAgCisgICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0g
c3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOwogICAg
IEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsKLSNlbmRpZgotICAgIAogICAgIGlm
IChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtX2hhbmRsZSkKLSAg
ICAgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgZGlkRmFpbChtX2hhbmRsZS5n
ZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwotI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCisgICAgICAgIGRpZENvbXBsZXRlV2l0aEVycm9yKGNhbmNlbGxlZEVycm9yKG1f
Y3VycmVudFJlcXVlc3QpKTsKICAgICAgICAgaWYgKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIp
CiAgICAgICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0jZW5kaWYKICAg
ICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAobV9oYW5kbGUpIHsKLSAgICAgICAgYXV0byBj
dXJyZW50UmVxdWVzdENvcHkgPSBtX2N1cnJlbnRSZXF1ZXN0OwotICAgICAgICBtX2hhbmRsZS0+
Y29udGludWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShjdXJyZW50UmVxdWVzdENvcHkpKTsKICAg
ICB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIGlmIChyZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKG1fY3VycmVudFJl
cXVlc3QpOworI2Vsc2UKKyAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051bGwoKSkgeworICAg
ICAgICBpZiAobV9oYW5kbGUpCisgICAgICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAg
ICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVl
c3QpKTsKKyAgICB9IGVsc2UgaWYgKG1faGFuZGxlKSB7CisgICAgICAgIGF1dG8gY3VycmVudFJl
cXVlc3RDb3B5ID0gbV9jdXJyZW50UmVxdWVzdDsKKyAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVl
V2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUoY3VycmVudFJlcXVlc3RDb3B5KSk7CisgICAgfQogI2Vu
ZGlmCiB9CiAKQEAgLTE3MSwxMiArMTcwLDEzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIGlm
IChtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpIHsKLSAgICAgICAgbV9yZXNwb25zZUNvbXBs
ZXRpb25IYW5kbGVyKFBvbGljeVVzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9
IHN0ZDo6ZXhjaGFuZ2UobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAg
ICAgICAgcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIH0KLSNlbmRp
ZgorI2Vsc2UKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSgpOworI2VuZGlmCiB9CiAKIE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91
bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrTG9hZDo6c2hhcmVkRGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkKQEAgLTI4NSw2ICsyODUsMjMg
QEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDaGFs
bGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGMKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmds
ZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwg
Km1fY2hhbGxlbmdlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKKyNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQordm9pZCBOZXR3b3JrTG9hZDo6Y29udGlu
dWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQorewor
ICAgIEFTU0VSVChtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBhdXRvIGNvbXBs
ZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX2NoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
LCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAobV90YXNrICYmIG1f
dGFzay0+YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCgqbV9jaGFsbGVuZ2Up
KQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKCptX2NoYWxs
ZW5nZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2UsIHsg
fSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb21wbGV0ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyNlbmRpZgorCiB2b2lk
IE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMzYyLDggKzM3OSw4
IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwoKQogewogICAgIG1fY2xpZW50LmRp
ZEZhaWxMb2FkaW5nKGNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CiB9Ci0g
ICAgCi0jZW5kaWYKKworI2Vsc2UKIAogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXNwb25zZSYmIHJlY2Vp
dmVkUmVzcG9uc2UpCiB7CkBAIC00MTgsMzIgKzQzNSwxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04p
CiAgICAgbV93YWl0aW5nRm9yQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlID0gdHJ1ZTsKLSNlbmRpZgogICAgIG1fY2xpZW50LmNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2VBc3luYyhwcm90ZWN0aW9uU3BhY2UpOwogfQotI2VuZGlmCiAKLSNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogdm9pZCBOZXR3b3JrTG9hZDo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0
KQogewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
bV9oYW5kbGUsICJCbG9icyBzaG91bGQgbmV2ZXIgZ2l2ZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVu
Z2VzIik7Ci0gICAgQVNTRVJUKG1fY2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwotICAgIGF1
dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fY2hhbGxlbmdlQ29tcGxldGlv
bkhhbmRsZXIsIG51bGxwdHIpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChtX3Rh
c2sgJiYgbV90YXNrLT5hbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KCptX2No
YWxsZW5nZSkpCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBzZXJ2ZXJUcnVzdENyZWRlbnRpYWwo
Km1fY2hhbGxlbmdlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25T
cGFjZSwgeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbXBsZXRlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotI2Vsc2UKICAg
ICBtX3dhaXRpbmdGb3JDb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UgPSBmYWxzZTsKLSNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUt
PmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwog
fQpAQCAtNTE1LDUgKzUxMyw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6OnJlY2VpdmVkQ2FuY2VsbGF0
aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0CiAgICAgbV9oYW5k
bGUtPmNhbmNlbCgpOwogICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9y
KG1fY3VycmVudFJlcXVlc3QpKTsKIH0KKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrTG9hZC5oCmluZGV4IDI3ZDQzMTcuLjNmNjEzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtNDAsOSArNDAsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIE5ldHdvcmtMb2FkIGZpbmFsIDogcHJpdmF0ZSBXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUNsaWVudAorY2xhc3MgTmV0d29ya0xvYWQgZmluYWwgOgogI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudAor
ICAgIHByaXZhdGUgTmV0d29ya0RhdGFUYXNrQ2xpZW50CisjZWxzZQorICAgIHByaXZhdGUgV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKICNlbmRpZgogewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpAQCAtNjksNyArNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdWdnZXN0
ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZChQ
ZW5kaW5nRG93bmxvYWQmKTsKICAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElEKCkgeyBy
ZXR1cm4gbV90YXNrLT5wZW5kaW5nRG93bmxvYWRJRCgpOyB9Ci0jZW5kaWYKKyNlbHNlCisgICAg
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxl
LmdldCgpOyB9CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAg
IHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJp
ZGU7CkBAIC04NSwxNyArODgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbENhY2hlUmVzcG9u
c2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikg
b3ZlcnJpZGU7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04p
CiAKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZvaWQgY29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOwogI2VuZGlm
CiAKLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGUuZ2V0KCk7IH0KLQogcHJpdmF0ZToKICAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hv
dWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9pZCBzaGFyZWRXaWxsU2VuZFJlZGly
ZWN0ZWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYpOwogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgLy8gUmVzb3Vy
Y2VIYW5kbGVDbGllbnQKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlKSBmaW5hbDsKICAgICB2b2lkIGRpZFNlbmRE
YXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgZmluYWw7CkBAIC0xMTEs
OCArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSBmaW5hbDsKICAgICBib29sIHVzZXNBc3luY0NhbGxiYWNrcygpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KICAgICBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIGZpbmFsIHsgcmV0dXJu
IG1fY2xpZW50LmlzU3luY2hyb25vdXMoKTsgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
KyNlbHNlCiAgICAgLy8gTmV0d29ya0RhdGFUYXNrQ2xpZW50CiAgICAgdm9pZCB3aWxsUGVyZm9y
bUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwogICAg
IHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwpAQCAtMTQ2LDgg
KzE0OCw4IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgbV93YWl0aW5nRm9yQ29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBSZWZQ
dHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jZW5kaWYK
ICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2VuZGlmCiAK
ICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRl
ZCBvbiByZWRpcmVjdHMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IDFmODE4MTkuLjFlNWUwMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTgxLDYgKzgyLDEyIEBAIE5ldHdvcmtTZXNz
aW9uOjp+TmV0d29ya1Nlc3Npb24oKQogewogfQogCit2b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZh
bGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0
KQorICAgICAgICB0YXNrLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IDk5ZDA5ODEuLmQ1
YjAxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKICNpbmNs
dWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM4LDYg
KzM5LDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlcjsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsK
IAogY2xhc3MgTmV0d29ya1Nlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrU2Vzc2lv
bj4gewogcHVibGljOgpAQCAtNDUsMTYgKzQ3LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTmV0
d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7CiAgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b24oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQ3JlZGVudGlhbHMoKSB7IH07CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KICAgICBXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCisgICAgdm9pZCBy
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smIHRhc2spIHsgbV9kYXRhVGFz
a1NldC5hZGQoJnRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5l
dHdvcmtEYXRhVGFzayYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7IH0KKwog
cHJvdGVjdGVkOgogICAgIE5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAKICAg
ICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisKKyAgICBIYXNoU2V0PE5ldHdvcmtE
YXRhVGFzayo+IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
RGF0YVRhc2tDb2NvYS5oCmluZGV4IDBhOGVkYmIuLjYzNDJlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3VtZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlIHsgfQogICAgIE5l
dHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Np
b25Db2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0KaW5kZXggYmE2OTcxMS4uN2Q3NjQ3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lm1tCkBAIC00NjYsNiArNDY2LDggQEAgTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNz
aW9uQ29jb2EoKQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmludmFsaWRhdGVBbmRDYW5j
ZWwoKQogeworICAgIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisKICAg
ICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwog
ICAgIFttX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNl
bF07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0
d29ya0xvYWRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29y
a0xvYWRNYWMubW0KaW5kZXggMTVmYmI2ZC4uNjQ3NTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQpAQCAtMjYsNiArMjYs
OCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJOZXR3b3JrTG9hZC5oIgogCisjaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCisKICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAKQEAgLTU0LDMgKzU2LDUgQEAg
dm9pZCBOZXR3b3JrTG9hZDo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBOU0NhY2hlZFVSTFJlc3AKICNlbmRpZiAvLyAhVVNFKENGVVJMQ09OTkVDVElPTikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lP
TikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtEYXRhVGFza1NvdXAuY3BwCmluZGV4IDE3NjM2NTIuLjFlOWVlNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRh
c2tTb3VwLmNwcApAQCAtNTIsNyArNTIsNyBAQCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3Jr
RGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhcwogICAg
ICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV90aW1l
b3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtEYXRhVGFza1NvdXA6OnRp
bWVvdXRGaXJlZCkKIHsKLSAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nl
c3Npb24uZ2V0KCkpLnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBtX3Nlc3Np
b24tPnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKICAgICBpZiAobV9zY2hlZHVsZWRG
YWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODAsNyArODAs
NyBAQCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhcwogTmV0d29ya0RhdGFUYXNrU291cDo6fk5ldHdv
cmtEYXRhVGFza1NvdXAoKQogewogICAgIGNsZWFyUmVxdWVzdCgpOwotICAgIHN0YXRpY19jYXN0
PE5ldHdvcmtTZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkudW5yZWdpc3Rlck5ldHdvcmtE
YXRhVGFzaygqdGhpcyk7CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNr
KCp0aGlzKTsKIH0KIAogU3RyaW5nIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN1Z2dlc3RlZEZpbGVu
YW1lKCkgY29uc3QKQEAgLTg2Myw3ICs4NjMsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OmRvd25sb2FkKCkKICAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfT1VU
UFVUX1NUUkVBTShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CiAKICAgICBhdXRvJiBkb3dubG9h
ZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7
Ci0gICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KGRvd25sb2Fk
TWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQo
KSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgKnRo
aXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dlc3RlZEZpbGVuYW1lKCkpOwogICAgIGF1
dG8qIGRvd25sb2FkUHRyID0gZG93bmxvYWQuZ2V0KCk7CiAgICAgZG93bmxvYWRNYW5hZ2VyLmRh
dGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKG1fcGVuZGluZ0Rvd25sb2FkSUQsIFdURk1vdmUoZG93
bmxvYWQpKTsKICAgICBkb3dubG9hZFB0ci0+ZGlkQ3JlYXRlRGVzdGluYXRpb24obV9wZW5kaW5n
RG93bmxvYWRMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCmluZGV4IGM4ZmExYTIuLjBiZmU1OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0Rh
dGFUYXNrU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5oCkBAIC00MiwxNCArNDIsMTMgQEAgcHVibGljOgogCiAgICAgfk5l
dHdvcmtEYXRhVGFza1NvdXAoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOwot
CiBwcml2YXRlOgogICAgIE5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAgdm9p
ZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlc3VtZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92
ZXJyaWRlOwogICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8p
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IGFjODI4NzAuLjU5ZWY5MWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtT
ZXNzaW9uU291cC5jcHAKQEAgLTI2LDEwICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRh
c2tTb3VwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxMCArNDcsNCBA
QCBTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiAg
ICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNv
dXBTZXNzaW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb25Tb3VwOjppbnZhbGlkYXRlQW5k
Q2FuY2VsKCkKLXsKLSAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0KQotICAgICAg
ICB0YXNrLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmgKaW5kZXggZDc1ZmI4OC4uYzVmY2ZkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCkBA
IC0yNiwxNCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Np
b24uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiB0eXBlZGVmIHN0cnVjdCBfU291cFNl
c3Npb24gU291cFNlc3Npb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBOZXR3b3Jr
RGF0YVRhc2tTb3VwOwotCiBjbGFzcyBOZXR3b3JrU2Vzc2lvblNvdXAgZmluYWwgOiBwdWJsaWMg
TmV0d29ya1Nlc3Npb24gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+
IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtNDQsMTUgKzQxLDggQEAg
cHVibGljOgogCiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CiAKLSAgICB2
b2lkIHJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsg
bV9kYXRhVGFza1NldC5hZGQoJnRhc2spOyB9Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0Rh
dGFUYXNrKE5ldHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFza1NldC5yZW1vdmUo
JnRhc2spOyB9Ci0KIHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb25Tb3VwKFdlYkNvcmU6OlNl
c3Npb25JRCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKLQot
ICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrU291cCo+IG1fZGF0YVRhc2tTZXQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZjEwZjJj
ZC4uNmU3N2VlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
KysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTYsOCArNiw2IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2VmbC9Eb3dubG9hZFNvdXBFcnJvcnNFZmwuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCi0KICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVDb2RlcnNTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUlPQ2hhbm5lbFNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDc1OTU5YTMu
Ljg2YzU1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zMyw4ICszMyw2IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCiAKLSAgICBOZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCi0KICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVDb2RlcnNTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUlPQ2hhbm5lbFNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWIyODY5MS4uMWE2MDY3OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0Myw2ICsx
MDQzLDggQEAKIAkJNTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1
MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5
NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEz
QyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87IH07CiAJCTUzMjE1OTU2MURCQUU3MkQwMDU0
QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtE
YXRhVGFza0NvY29hLmggKi87IH07CisJCTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmNwcCAqLzsgfTsKKwkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFz
a0Jsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
OUVCNTQ3MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi87IH07CiAJ
CTVDMDUyRjI2MUM2RDNCRDMwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0
MUM2RDNBQjYwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsK
IAkJNUMxNDI2RUMxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAgKi87IH07CiAJCTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUMxNDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07CkBAIC0zMTMzLDYgKzMxMzUsOCBAQAogCQk1MzIx
NTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNr
LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTUyMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3Jr
U2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
U2Vzc2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBO
ZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0RhdGFUYXNrQmxvYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzOUVCNTQ3
MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0Jsb2IuaDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTc5RDE4QjcxQ0NGRTM0QjAwQjE5NzRDIC8qIFBob3Rvc1NQSS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQaG90b3NTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwNTJGMjQxQzZE
M0FCNjAwNzZFOTE5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2Eu
bW07IHBhdGggPSBBdXRoZW50aWNhdGlvbi9jb2NvYS9BdXRoZW50aWNhdGlvbk1hbmFnZXJDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI2RTIxQzIzRjgwNTAwRDQx
MTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NjksNiArNTQ3Myw4IEBA
CiAJCQkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovLAog
CQkJCTgzOTkwMUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8sCiAJCQkJ
ODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggKi8sCisJCQkJNTM5RUI1
NDYxREMyRUU0MDAwOUQ0OENGIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwICovLAorCQkJCTUz
OUVCNTQ3MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8sCiAJCQkJ
ODNENDU0RDYxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggKi8sCiAJCQkJ
ODM5MTQ5NjMxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovLAog
CQkJCTUxMENDN0RGMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAgKi8sCkBA
IC03ODM0LDYgKzc4NDAsNyBAQAogCQkJCTFBMEVDNkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVn
aW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEVDNzVFMTI0QkM3QjIw
MDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQz
QjVFMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFz
a0Jsb2IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQ
bHVnaW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdG
IC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJC
ODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLApAQCAtOTMyNyw2
ICs5MzM0LDcgQEAKIAkJCQkxQTJEOTIyMTEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1
Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENjIyNzcx
NzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Mjg0NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNl
cnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RkI3QUUxMUU2NEI2ODAw
REIxMzcxIC8qIFBsdWdpblZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4QzkyRjQxMkRC
OUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>