<?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>61225</bug_id>
          
          <creation_ts>2011-05-20 16:43:57 -0700</creation_ts>
          <short_desc>Cache XHRs (and other ThreadableLoaderClients)</short_desc>
          <delta_ts>2011-10-25 12:49:43 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>61318</dependson>
    
    <dependson>65330</dependson>
    
    <dependson>66018</dependson>
    
    <dependson>69790</dependson>
    
    <dependson>70388</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>kbr</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>407398</commentid>
    <comment_count>0</comment_count>
      <attachid>94288</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-20 16:43:57 -0700</bug_when>
    <thetext>Created attachment 94288
work in progress

I&apos;ve been experimenting with making DocumentThreadableLoader a CachedResourceClient instead of a SubresourceLoaderClient.  I have a mostly-working patch (still failing a couple layout tests), but it at least outlines what I&apos;m thinking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407408</commentid>
    <comment_count>1</comment_count>
      <attachid>94288</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-20 16:51:16 -0700</bug_when>
    <thetext>Comment on attachment 94288
work in progress

Wow.  This patch does so many good things.  It&apos;s even got some useful infrastructure for Bug 61223.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449400</commentid>
    <comment_count>2</comment_count>
      <attachid>103534</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-08-10 14:31:11 -0700</bug_when>
    <thetext>Created attachment 103534
work in progress, Aug 10

I started looking at this again, here&apos;s what I have so far.

Note that this is refactor only, and any resource loaded through a DocumentThreadableLoader will always be reloaded.

Barring objections, I&apos;m going to start breaking pieces off of this WIP and get them properly reviewed in digestible chunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477895</commentid>
    <comment_count>3</comment_count>
      <attachid>109674</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-04 13:45:12 -0700</bug_when>
    <thetext>Created attachment 109674
First reviewable attempt

This handles the plumbing of making DocumentThreadableLoader a CachedResourceClient, but still always reloads from the network and ignores the MemoryCache.

I don&apos;t see any obvious ways to split this into smaller patches, but I would love to do so if someone else sees something self-contained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477897</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 13:47:19 -0700</bug_when>
    <thetext>Attachment 109674 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

Source/WebCore/loader/DocumentThreadableLoader.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477915</commentid>
    <comment_count>5</comment_count>
      <attachid>109674</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-04 14:00:14 -0700</bug_when>
    <thetext>Comment on attachment 109674
First reviewable attempt

Attachment 109674 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9958016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480213</commentid>
    <comment_count>6</comment_count>
      <attachid>110194</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-07 12:33:19 -0700</bug_when>
    <thetext>Created attachment 110194
patch - merged to trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480219</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 12:36:45 -0700</bug_when>
    <thetext>Attachment 110194 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

Source/WebCore/loader/DocumentThreadableLoader.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480259</commentid>
    <comment_count>8</comment_count>
      <attachid>110194</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-07 13:17:54 -0700</bug_when>
    <thetext>Comment on attachment 110194
patch - merged to trunk

Attachment 110194 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10000302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480286</commentid>
    <comment_count>9</comment_count>
      <attachid>110194</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 13:41:13 -0700</bug_when>
    <thetext>Comment on attachment 110194
patch - merged to trunk

Attachment 110194 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10005325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480288</commentid>
    <comment_count>10</comment_count>
      <attachid>110210</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-07 13:42:02 -0700</bug_when>
    <thetext>Created attachment 110210
Fix compile issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480290</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 13:45:34 -0700</bug_when>
    <thetext>Attachment 110210 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

Source/WebCore/loader/DocumentThreadableLoader.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480395</commentid>
    <comment_count>12</comment_count>
      <attachid>110210</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 16:57:15 -0700</bug_when>
    <thetext>Comment on attachment 110210
Fix compile issues

Attachment 110210 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10015182

New failing tests:
http/tests/media/remove-while-loading.html
http/tests/media/video-cancel-load.html
http/tests/media/video-play-progress.html
http/tests/media/reload-after-dialog.html
http/tests/media/video-error-abort.html
http/tests/media/video-cookie.html
http/tests/security/xssAuditor/cookie-injection.html
http/tests/media/video-served-as-text.html
fast/forms/input-spinbutton-capturing.html
fast/forms/input-number-large-padding.html
fast/forms/input-number-events.html
fast/forms/implicit-submission.html
http/tests/security/contentSecurityPolicy/media-src-allowed.html
http/tests/media/video-referer.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480720</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-09 10:49:14 -0700</bug_when>
    <thetext>Looks good to me. I&apos;m not at all familiar with DocumentThreadableLoader though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480722</commentid>
    <comment_count>14</comment_count>
      <attachid>110210</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-09 11:05:40 -0700</bug_when>
    <thetext>Comment on attachment 110210
Fix compile issues

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

&gt; Source/WebKit/chromium/ChangeLog:4
&gt; +        DocumentThreadableLoader no longer exposes setDefersLoading(),
&gt; +        so don&apos;t try to call it in AssociatedURLLoader.

Does that cause a problem for folks who use AssociatedURLLoader ?

&gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:541
&gt; +        RefPtr&lt;BlobResourceHandle&gt; protect(this);

Are all callers of this method aware that |this| can be deleted?

&gt; Source/WebCore/loader/chromium/CachedResourceRequestChromium.cpp:44
&gt; +void CachedResourceRequest::didDownloadData(SubresourceLoader* loader, int length)
&gt; +{
&gt; +    ASSERT_UNUSED(loader, loader == m_loader);
&gt; +    m_resource-&gt;didDownloadData(length);
&gt; +}
&gt; +

This is for Blob support in XHR?

&gt; Source/WebCore/loader/cache/CachedRawResource.h:45
&gt; +#if PLATFORM(CHROMIUM)
&gt; +    virtual void didDownloadData(int);
&gt; +#endif

I suspect this should have some sort of USE-guard, but that&apos;s something we can solve in a future patch.

&gt; Source/WebCore/loader/cache/CachedRawResource.h:53
&gt; +

nit: this line seems unneeded.

&gt; Source/WebCore/loader/cache/CachedResourceClient.h:62
&gt; +        virtual void dataSent(CachedResource*, unsigned long long /* bytesSent */, unsigned long long /* totalBytesToBeSent */) { }
&gt; +        virtual void responseReceived(CachedResource*, const ResourceResponse&amp;) { }
&gt; +        virtual void dataReceived(CachedResource*, const char* /* data */, int /* length */) { }
&gt; +        virtual void redirectReceived(CachedResource*, ResourceRequest&amp;, const ResourceResponse&amp;) { }
&gt; +#if PLATFORM(CHROMIUM)
&gt; +        virtual void dataDownloaded(CachedResource*, int) { }
&gt; +#endif

It seems slightly unfortunate to expose all this detailed information on CachedResourceClient.  It seems like lower-level stuff, somehow.  Maybe we should break it off into a separate interface?  I&apos;m not entirely sure.

I guess it&apos;s not entirely clear to me how these methods work on a cache hit.

&gt; Source/WebCore/loader/cache/CachedResourceRequest.cpp:251
&gt; +    if (!protect-&gt;isLoading())

Usually we&apos;d use m_resource here.

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:50
&gt; +        int previousDataLength = (m_options.shouldBufferData == BufferData) ? m_dataLength : 0;

lengths of buffers should be in size_t.  I&apos;m not sure if this is a pervasive problem in the loader.

&gt; LayoutTests/ChangeLog:6
&gt; +        Test update for https://bugs.webkit.org/show_bug.cgi?id=61225.
&gt; +        Due to changes in the implementation of DocumentThreadableLoader (and
&gt; +        therefore XHR), this test will have empty (rather than null) content
&gt; +        if we go over the length limit.

Is this just an internal data structure, or is this exposed to web sites?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480723</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-09 11:07:01 -0700</bug_when>
    <thetext>This is really cool.  My only concern is that we&apos;re exposing a bunch of seemingly low-level callbacks on CachedResourceClient.  Most clients won&apos;t care about that (e.g., if they just want to fetch images).  I guess they can ignore them...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480973</commentid>
    <comment_count>16</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 08:55:46 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; This is really cool.  My only concern is that we&apos;re exposing a bunch of seemingly low-level callbacks on CachedResourceClient.  Most clients won&apos;t care about that (e.g., if they just want to fetch images).  I guess they can ignore them...

Yeah, that&apos;s the main thing I didn&apos;t like about how I ended up writing this patch.  I hadn&apos;t thought about your concerns with callbacks in the case of a cache hit, so I&apos;ll need to look at that more.

If I can&apos;t figure out a way to work around adding these callbacks, maybe there should be something like a subclass CachedResourceClientWithLoadCallbacks (but with a better name)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480977</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-10 09:34:57 -0700</bug_when>
    <thetext>We should probably eliminate the general purpose CachedResourceClient (and perhaps make it the common base) and have subtype specific client interfaces instead. There is no point in having imageChanged() method in a CachedScript client…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481044</commentid>
    <comment_count>18</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-10 11:50:18 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; We should probably eliminate the general purpose CachedResourceClient (and perhaps make it the common base) and have subtype specific client interfaces instead. There is no point in having imageChanged() method in a CachedScript client…

I like this idea.  I&apos;m spending some time today experimenting with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481750</commentid>
    <comment_count>19</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 11:20:30 -0700</bug_when>
    <thetext>Some general replies to comments:

&gt; &gt; Source/WebCore/loader/chromium/CachedResourceRequestChromium.cpp:44
&gt; &gt; +void CachedResourceRequest::didDownloadData(SubresourceLoader* loader, int length)
&gt; &gt; +{
&gt; &gt; +    ASSERT_UNUSED(loader, loader == m_loader);
&gt; &gt; +    m_resource-&gt;didDownloadData(length);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; This is for Blob support in XHR?
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.h:45
&gt; &gt; +#if PLATFORM(CHROMIUM)
&gt; &gt; +    virtual void didDownloadData(int);
&gt; &gt; +#endif
&gt; 
&gt; I suspect this should have some sort of USE-guard, but that&apos;s something we can solve in a future patch.

This is for AssociatedURLLoader only for the foreseeable future, hence the chromium-specific #if and the file names ending in Chromium.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceRequest.cpp:251
&gt; &gt; +    if (!protect-&gt;isLoading())
&gt; 
&gt; Usually we&apos;d use m_resource here.

Unfortunately, protect needs to be used, because by the time this line is reached, this might be deleted.  I should probably comment this more. (This is a temporary and hideous hack until CachedResourceRequest and SubresourceLoader get merged, when we can just hold a local RefPtr).

&gt; &gt; LayoutTests/ChangeLog:6
&gt; &gt; +        Test update for https://bugs.webkit.org/show_bug.cgi?id=61225.
&gt; &gt; +        Due to changes in the implementation of DocumentThreadableLoader (and
&gt; &gt; +        therefore XHR), this test will have empty (rather than null) content
&gt; &gt; +        if we go over the length limit.
&gt; 
&gt; Is this just an internal data structure, or is this exposed to web sites?

It should be inspector-only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481764</commentid>
    <comment_count>20</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 11:36:23 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; This is really cool.  My only concern is that we&apos;re exposing a bunch of seemingly low-level callbacks on CachedResourceClient.  Most clients won&apos;t care about that (e.g., if they just want to fetch images).  I guess they can ignore them...
&gt; 
&gt; Yeah, that&apos;s the main thing I didn&apos;t like about how I ended up writing this patch.  I hadn&apos;t thought about your concerns with callbacks in the case of a cache hit, so I&apos;ll need to look at that more.

Re: the cache hits, here&apos;s what I&apos;m thinking:

dataSent() : If this is relevant, cache should be forbidden.
dataDownloaded() : This is only used by AssociatedURLLoader, which will never reuse cache entries from what I&apos;m told, so I think we can punt on this one.

responseReceived: Should be replayed for cache hit.
dataReceived: Should be replayed for cache hit (all at once, rather than incremental, of course).
notifyFinished: Should be replayed for cache hit (already done for all CachedResource types).

redirectReceived: This is the hard one.  Under the current behavior, the resource will be stored in MemoryCache with a key of its original url (i.e., the url before any redirects).  This means that DocumentThreadableLoader won&apos;t get a chance to do any meaningful redirect checks on the intermediate steps unless we replay all the redirects (not that DocumentThreadableLoader does proper redirect checking anyway).  I think this a reasonable case to wait on and figure out how to handle properly when we actually start reusing resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481803</commentid>
    <comment_count>21</comment_count>
      <attachid>110556</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 12:09:07 -0700</bug_when>
    <thetext>Created attachment 110556
Address comments + add a CachedRawResourceClient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481807</commentid>
    <comment_count>22</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 12:16:02 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/network/BlobResourceHandle.cpp:541
&gt; &gt; +        RefPtr&lt;BlobResourceHandle&gt; protect(this);
&gt; 
&gt; Are all callers of this method aware that |this| can be deleted?

Oops, forgot to comment on this one.....
I&apos;m pretty sure it&apos;s safe as-is.  It appears all callers either immediately exit the now-deleted object or are sync-specific (and this case is only dangerous for async loads).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481815</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-11 12:21:03 -0700</bug_when>
    <thetext>How do XHRs share the cache with document resources having the same URL? Will loading an image with XHR kick it from cache, making &lt;img&gt; reload it again next time?

See bug 51286 for one example of expected interaction between XHR and document resource cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481826</commentid>
    <comment_count>24</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 12:35:44 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; How do XHRs share the cache with document resources having the same URL? Will loading an image with XHR kick it from cache, making &lt;img&gt; reload it again next time?
&gt; 
&gt; See bug 51286 for one example of expected interaction between XHR and document resource cache.

Yes, I think it will kick the img from the cache.  Currently if you try to (In reply to comment #23)
&gt; How do XHRs share the cache with document resources having the same URL? Will loading an image with XHR kick it from cache, making &lt;img&gt; reload it again next time?
&gt; 
&gt; See bug 51286 for one example of expected interaction between XHR and document resource cache.

As written, this patch will evict the image.  So it will fix 51286, but it will be too aggressive in evicting.

This comes down to a known issue: We need to come up with a sane way to convert CachedResources between types.  I&apos;m inclined to say that refactoring the MemoryCache to handle this case is a separate yak shave, but I&apos;m willing to be convinced otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481829</commentid>
    <comment_count>25</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-11 12:37:17 -0700</bug_when>
    <thetext>&gt; &gt; How do XHRs share the cache with document resources having the same URL? Will loading an image with XHR kick it from cache, making &lt;img&gt; reload it again next time?
&gt; &gt; 
&gt; &gt; See bug 51286 for one example of expected interaction between XHR and document resource cache.
&gt; 
&gt; As written, this patch will evict the image.  So it will fix 51286, but it will be too aggressive in evicting.
&gt; 
&gt; This comes down to a known issue: We need to come up with a sane way to convert CachedResources between types.  I&apos;m inclined to say that refactoring the MemoryCache to handle this case is a separate yak shave, but I&apos;m willing to be convinced otherwise.

Sorry, I left some cruft in my previous comment.  The replied text in this post is what was intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482202</commentid>
    <comment_count>26</comment_count>
      <attachid>110556</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-11 21:53:16 -0700</bug_when>
    <thetext>Comment on attachment 110556
Address comments + add a CachedRawResourceClient

Attachment 110556 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10026777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484806</commentid>
    <comment_count>27</comment_count>
      <attachid>110556</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-16 13:11:40 -0700</bug_when>
    <thetext>Comment on attachment 110556
Address comments + add a CachedRawResourceClient

Attachment 110556 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10073737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484812</commentid>
    <comment_count>28</comment_count>
      <attachid>110556</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-10-16 13:47:41 -0700</bug_when>
    <thetext>Comment on attachment 110556
Address comments + add a CachedRawResourceClient

Attachment 110556 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/10079614</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485231</commentid>
    <comment_count>29</comment_count>
      <attachid>111278</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-17 09:58:11 -0700</bug_when>
    <thetext>Created attachment 111278
Another merge to trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485232</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 09:59:51 -0700</bug_when>
    <thetext>Attachment 111278 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485239</commentid>
    <comment_count>31</comment_count>
      <attachid>111278</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-17 10:07:54 -0700</bug_when>
    <thetext>Comment on attachment 111278
Another merge to trunk

r=me

The bot is whining something so cq-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485626</commentid>
    <comment_count>32</comment_count>
      <attachid>111346</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-17 16:42:43 -0700</bug_when>
    <thetext>Created attachment 111346
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485772</commentid>
    <comment_count>33</comment_count>
      <attachid>111346</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 20:56:47 -0700</bug_when>
    <thetext>Comment on attachment 111346
Patch for landing

Rejecting attachment 111346 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ce::didDownloadData(int)&apos;:
Source/WebCore/loader/chromium/CachedRawResourceChromium.cpp:41: error: missing template arguments before &apos;w&apos;
Source/WebCore/loader/chromium/CachedRawResourceChromium.cpp:41: error: expected &apos;;&apos; before &apos;w&apos;
Source/WebCore/loader/chromium/CachedRawResourceChromium.cpp:42: error: &apos;w&apos; was not declared in this scope
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/loader/chromium/CachedRawResourceChromium.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/10126088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486073</commentid>
    <comment_count>34</comment_count>
      <attachid>111448</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-18 08:49:03 -0700</bug_when>
    <thetext>Created attachment 111448
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486075</commentid>
    <comment_count>35</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-18 08:49:45 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=111448) [details]
&gt; Patch for landing

The only change between this and the previous patch is that this updates CachedRawResourceChromium.cpp to use a templated CachedResourceClientWalker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486092</commentid>
    <comment_count>36</comment_count>
      <attachid>111448</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 09:30:41 -0700</bug_when>
    <thetext>Comment on attachment 111448
Patch for landing

Clearing flags on attachment: 111448

Committed r97765: &lt;http://trac.webkit.org/changeset/97765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486093</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 09:30:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486319</commentid>
    <comment_count>38</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-10-18 14:39:15 -0700</bug_when>
    <thetext>It looks like this patch may have broken webkit_unit_tests?

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux/builds/15032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489660</commentid>
    <comment_count>39</comment_count>
      <attachid>112252</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-10-24 14:46:38 -0700</bug_when>
    <thetext>Created attachment 112252
Address issues from revert

Diff from last version:

CachedRawResources default to ResourceLoadPriorityMedium.  This matches the existing behavior for DocumentThreadableLoaders.

CachedRawResource::data() protects the CachedRawResource.  The crash described in https://bugs.webkit.org/show_bug.cgi?id=70388 was caused by the CachedRawResource being deleted prematurely by the dataReceived() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490188</commentid>
    <comment_count>40</comment_count>
      <attachid>112252</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-25 11:42:30 -0700</bug_when>
    <thetext>Comment on attachment 112252
Address issues from revert

I&apos;m mostly forwarding Antti&apos;s R+.  The change Nate has made to this patch since it landed last time sound correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490258</commentid>
    <comment_count>41</comment_count>
      <attachid>112252</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-25 12:49:34 -0700</bug_when>
    <thetext>Comment on attachment 112252
Address issues from revert

Clearing flags on attachment: 112252

Committed r98380: &lt;http://trac.webkit.org/changeset/98380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490259</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-25 12:49:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94288</attachid>
            <date>2011-05-20 16:43:57 -0700</date>
            <delta_ts>2011-08-10 14:31:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cachexhrs.txt</filename>
            <type>text/plain</type>
            <size>85506</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAkocmV2
aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTAgKzE1Nyw5IEBACiB2b2lkIEZpbGVSZWFkZXJM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQog
ewogICAgIEFTU0VSVChkYXRhKTsKLSAgICBBU1NFUlQoZGF0YUxlbmd0aCA+IDApOwogCiAgICAg
Ly8gQmFpbCBvdXQgaWYgd2UgYWxyZWFkeSBlbmNvdW50ZXJlZCBhbiBlcnJvci4KLSAgICBpZiAo
bV9lcnJvckNvZGUpCisgICAgaWYgKG1fZXJyb3JDb2RlIHx8IGRhdGFMZW5ndGggPD0gMCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaW50IGxlbmd0aCA9IGRhdGFMZW5ndGg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDggKzE3Miwx
MCBAQAogICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgbV9mYWlsU2lsZW50bHkgPSB0cnVlOwog
Ci0gICAgaWYgKG1fcmVxdWVzdEluRmxpZ2h0KQorICAgIGlmIChtX3JlcXVlc3RJbkZsaWdodCkg
ewogICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIGRpZEZhaWwoUmVzb3VyY2VF
cnJvcigpKTsKKyAgICB9CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEV2ZW50U291cmNl
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTIxNiw2ICsyMTgsOSBAQAogICAg
ICAgICBpZiAoc3RhdHVzQ29kZSA8PSAyMDAgfHwgc3RhdHVzQ29kZSA+IDI5OSkKICAgICAgICAg
ICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAg
ICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKKyAgICAgICAgZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24o
dHJ1ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3IpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmNwcAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5NiwxMiArNTk2LDE2
IEBACiBzdGF0aWMgdm9pZCBkb05vdGlmeUZpbmlzaCh2b2lkKiBjb250ZXh0KQogewogICAgIEJs
b2JSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8QmxvYlJlc291cmNlSGFuZGxl
Kj4oY29udGV4dCk7Ci0gICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkpCisgICAgaWYgKCFoYW5kbGUt
PmFib3J0ZWQoKSkKICAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyho
YW5kbGUsIDApOworICAgIGhhbmRsZS0+ZGVyZWYoKTsKIH0KIAogdm9pZCBCbG9iUmVzb3VyY2VI
YW5kbGU6Om5vdGlmeUZpbmlzaCgpCiB7CisgICAgLy8gQmFsYW5jZWQgaW4gZG9Ob3RpZnlGaW5p
c2goKQorICAgIHJlZigpOworICAgIAogICAgIGlmIChtX2FzeW5jKSB7CiAgICAgICAgIC8vIFNj
aGVkdWxlIHRvIG5vdGlmeSB0aGUgY2xpZW50IGZyb20gYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGJl
Y2F1c2UgdGhlIGNsaWVudCBtaWdodCBkaXNwb3NlIHRoZSBoYW5kbGUgaW1tZWRpYXRlbHkgZnJv
bSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICAgLy8gd2hpbGUgd2Ugc3RpbGwgaGF2ZSBC
bG9iUmVzb3VyY2VIYW5kbGUgY2FsbHMgaW4gdGhlIHN0YWNrLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5oCShyZXZp
c2lvbiA4Njk5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291
cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAKIAogICAgIHZvaWQg
c3RhcnQoKTsKICAgICBpbnQgcmVhZFN5bmMoY2hhciosIGludCk7CisgICAgCisgICAgYm9vbCBh
Ym9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV9hYm9ydGVkOyB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIHZvaWQgZGVsYXllZFN0YXJ0QmxvYlJlc291cmNlSGFuZGxlKHZvaWQqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDcgQEAKICAgICAgICAgICAgICdsb2Fk
ZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZVBvbGljeS5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgnLAog
ICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgnLApAQCAtMzM1NSw2ICszMzU2LDcgQEAK
ICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAnLAogICAgICAgICAgICAg
J2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNv
dXJjZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5j
cHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ci5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlz
aW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogICAgICAgICAvLyBMb2FkIHN0eWxl
c2hlZXRzIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yIHRoZSByZW5kZXJpbmcgaW1tZWRpYXRlbHkg
d2l0aCBsb3cgcHJpb3JpdHkuCiAgICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
ID0gYmxvY2tpbmcgPyBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQgOiBSZXNvdXJjZUxv
YWRQcmlvcml0eVZlcnlMb3c7Ci0gICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChtX3VybCwgY2hhcnNl
dCwgcHJpb3JpdHkpOworICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQoUmVzb3VyY2VSZXF1ZXN0KG1f
dXJsKSwgY2hhcnNldCwgcHJpb3JpdHkpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY2FjaGVk
U2hlZXQpCiAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0LT5hZGRDbGllbnQodGhpcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA4Njk5MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQxNiw2ICs1NDE2LDggQEAKIAkJRDBD
RTU4RjkxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBDRTU4RjcxMjVFNENDMjAw
RjNGMTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwRDE0MUIyMTJCMkJGNTIwMEUzOTYyMCAvKiBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDBEMTQxQjAxMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNl
UmVxdWVzdC5jcHAgKi87IH07CiAJCUQwRDE0MUIzMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwRDE0MUIxMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEMEVG
OUY4MDEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBFRjlGN0UxMzdCNTgxNDAwNEI2
MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLzsgfTsKKwkJRDBFRjlGODExMzdCNTgxNDAw
NEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEMEVGOUY3RjEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVkUmF3
UmVzb3VyY2UuaCAqLzsgfTsKIAkJRDBGRjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2Fk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBG
RjJBNUIxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwICovOyB9OwogCQlEMEZGMkE1
RTExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdM
b2FkZXIuaCAqLzsgfTsKIAkJRDIzQ0E1NUQwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNl
cHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQy
M0NBNTVDMEFCMEVBQUUwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmggKi87IH07CkBAIC0x
MTg5Miw2ICsxMTg5NCw4IEBACiAJCUQwQ0U1OEY3MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRDE0MUIw
MTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBEMTQxQjExMkIyQkY1MjAwRTM5NjIwIC8qIENh
Y2hlZFJlc291cmNlUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDBF
RjlGN0UxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDBFRjlGN0YxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hl
ZFJhd1Jlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJh
d1Jlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0
NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MEZGMkE1QzExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQaW5nTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUQyM0NBNTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFJhbmdlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE3MDQ1LDYgKzE3MDQ5LDggQEAKIAkJCQlCQzY0QjRDQTBDQjQyOTVEMDA1
RjJCNjIgLyogQ2FjaGVkRm9udC5oICovLAogCQkJCUJDQjE2QzAyMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRJbWFnZS5jcHAgKi8sCiAJCQkJQkNCMTZDMDMwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZEltYWdlLmggKi8sCisJCQkJRDBFRjlGN0UxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJh
d1Jlc291cmNlLmNwcCAqLywKKwkJCQlEMEVGOUY3RjEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVk
UmF3UmVzb3VyY2UuaCAqLywKIAkJCQlCQ0IxNkMwNjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVk
UmVzb3VyY2UuY3BwICovLAogCQkJCUJDQjE2QzA3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRS
ZXNvdXJjZS5oICovLAogCQkJCUJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNv
dXJjZUNsaWVudC5oICovLApAQCAtMTk4ODMsNiArMTk4ODksNyBAQAogCQkJCTUxQ0JGQzk5MEQx
MEU0ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNCMTZDMUMwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZEltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTAxODQ2OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDBFRjlGODExMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2Fj
aGVkUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkIyRTVFMDk3OUU0NjQwMEJBNzAz
RCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjIw
OTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1NTAyLDYgKzI1NTA5LDcgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJG
MEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Mzcz
NTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQw
RUY5RjgwMTM3QjU4MTQwMDRCNjExNiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAg
Q29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmF3UmVzb3VyY2VfaAorI2RlZmluZSBD
YWNoZWRSYXdSZXNvdXJjZV9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKKworY2xhc3MgQ2Fj
aGVkUmF3UmVzb3VyY2UgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENh
Y2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYpOworICAgIH5DYWNoZWRSYXdSZXNvdXJj
ZSgpIHt9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IENhY2hlZFJlc291cmNlOjpsb2FkKGNhY2hlZFJlc291
cmNlTG9hZGVyLCB0cnVlLCBEb1NlY3VyaXR5Q2hlY2ssIHRydWUpOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgdmlydHVhbCB2
b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlnbm9yZUZvclJlcXVlc3RDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1Jl
bW92ZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIG5vdGlmeU9ic2VydmVycygp
OworCisgICAgYm9vbCBtX2ZpbmlzaGluZzsKK307CisKK30KKworI2VuZGlmIC8vIENhY2hlZFJh
d1Jlc291cmNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dC5jcHAJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBTdHJpbmcgJnVybCkK
LSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgRm9udFJlc291cmNlKQorQ2FjaGVkRm9udDo6Q2Fj
aGVkRm9udChSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICA6IENhY2hlZFJl
c291cmNlKHJlc291cmNlUmVxdWVzdCwgRm9udFJlc291cmNlKQogICAgICwgbV9mb250RGF0YSgw
KQogICAgICwgbV9sb2FkSW5pdGlhdGVkKGZhbHNlKQogewpAQCAtOTcsNyArOTcsNyBAQAogewog
ICAgIGlmICghbV9sb2FkSW5pdGlhdGVkKSB7CiAgICAgICAgIG1fbG9hZEluaXRpYXRlZCA9IHRy
dWU7Ci0gICAgICAgIGRsLT5sb2FkKHRoaXMsIGZhbHNlKTsKKyAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2U6OmxvYWQoZGwpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA4Njk5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQg
OiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkQ1NT
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAg
ICAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpOwogICAgICAgICB2aXJ0dWFsIH5DYWNoZWRDU1NTdHlsZVNoZWV0KCk7CiAKICAg
ICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUs
IGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUgPSAwKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBACiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgICAgICBDYWNoZWRTY3JpcHQoUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICAgICAgdmlydHVhbCB+Q2Fj
aGVkU2NyaXB0KCk7CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24gODY5OTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBACiAKIGNsYXNzIENhY2hlZEZvbnQgOiBwdWJsaWMgQ2FjaGVkUmVz
b3VyY2UgewogcHVibGljOgotICAgIENhY2hlZEZvbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IENhY2hlZEZvbnQoUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdmlydHVhbCB+Q2FjaGVkRm9udCgp
OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDg2OTkyKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNp
bmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVx
dWVzdC5oIgogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNhY2hlZFhTTFN0
eWxlU2hlZXQuaCIKQEAgLTU1LDI0ICs1NiwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCitzdGF0aWMg
Q2FjaGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUs
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UodXJsLnN0cmluZygpKTsKKyAgICAgICAg
cmV0dXJuIG5ldyBDYWNoZWRJbWFnZShyZXF1ZXN0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQo
dXJsLnN0cmluZygpLCBjaGFyc2V0KTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRDU1NTdHls
ZVNoZWV0KHJlcXVlc3QsIGNoYXJzZXQpOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0cmluZygpLCBjaGFyc2V0
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQocmVxdWVzdCwgY2hhcnNldCk7CiAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3
IENhY2hlZEZvbnQodXJsLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRGb250
KHJlcXVlc3QpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgICAg
ICByZXR1cm4gbmV3IENhY2hlZFJhd1Jlc291cmNlKHJlcXVlc3QpOwogI2lmIEVOQUJMRShYU0xU
KQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldCh1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
bmV3IENhY2hlZFhTTFN0eWxlU2hlZXQocmVxdWVzdCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoTElO
S19QUkVGRVRDSCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UodXJsLnN0cmluZygpLCBDYWNoZWRSZXNvdXJj
ZTo6TGlua1Jlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShyZXF1
ZXN0LCBDYWNoZWRSZXNvdXJjZTo6TGlua1Jlc291cmNlKTsKICNlbmRpZgogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyMCw3ICsxMjMsNyBAQAogICAgIHJldHVybiBtX2Rv
Y3VtZW50ID8gbV9kb2N1bWVudC0+ZnJhbWUoKSA6IDA7CiB9CiAKLUNhY2hlZEltYWdlKiBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVk
SW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0SW1hZ2UoUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QpCiB7CiAgICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkgewogICAgICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBmLT5zZXR0aW5ncygpOwpAQCAtMTI4LDQwICsxMzEsNDEgQEAKICAg
ICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGlmIChmLT5sb2FkZXIoKS0+cGFnZURpc21p
c3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkpIHsKLSAgICAgICAgICAgIEtVUkwgY29tcGxldGVV
UkwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmwpOworICAgICAgICAgICAgS1VSTCBjb21w
bGV0ZVVSTCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlcXVlc3QudXJsKCkpOwogICAgICAg
ICAgICAgaWYgKGNvbXBsZXRlVVJMLmlzVmFsaWQoKSAmJiBjYW5SZXF1ZXN0KENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlLCBjb21wbGV0ZVVSTCkpCiAgICAgICAgICAgICAgICAgUGluZ0xv
YWRlcjo6bG9hZEltYWdlKGYsIGNvbXBsZXRlVVJMKTsKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9CiAgICAgfQotICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0
PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291
cmNlLCB1cmwsIFN0cmluZygpKSk7Ci0gICAgaWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3Vy
Y2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKLSAgICAgICAgcmVzb3VyY2UtPnNl
dExvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGxvYWQocmVzb3VyY2UsIHRydWUpOwotICAgIH0KKyAg
ICBDYWNoZWRJbWFnZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5n
KCkpKTsKKyAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+
c3RpbGxOZWVkc0xvYWQoKSkKKyAgICAgICAgcmVzb3VyY2UtPmxvYWQodGhpcyk7CiAgICAgcmV0
dXJuIHJlc291cmNlOwogfQogCi1DYWNoZWRGb250KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdEZvbnQoY29uc3QgU3RyaW5nJiB1cmwpCitDYWNoZWRGb250KiBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6cmVxdWVzdEZvbnQoUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PENhY2hlZEZvbnQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OkZvbnRSZXNvdXJjZSwgdXJsLCBTdHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
YWNoZWRGb250Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2Us
IHJlcXVlc3QsIFN0cmluZygpKSk7CiB9CiAKLUNhY2hlZENTU1N0eWxlU2hlZXQqIENhY2hlZFJl
c291cmNlTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK0NhY2hl
ZENTU1N0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVl
dChSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVk
Q1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCwgdXJsLCBjaGFyc2V0LCBwcmlvcml0eSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
YWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0LCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSkpOwogfQogCi1DYWNoZWRDU1NT
dHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0
KGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorQ2FjaGVk
Q1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVT
aGVldChSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewot
ICAgIEtVUkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVl
ZGVkKEtVUkwoS1VSTCgpLCByZXF1ZXN0VVJMKSk7CisgICAgS1VSTCB1cmwgPSBNZW1vcnlDYWNo
ZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQoS1VSTChLVVJMKCksIHJlcXVlc3Qu
dXJsKCkpKTsKIAogICAgIGlmIChDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBtZW1vcnlDYWNo
ZSgpLT5yZXNvdXJjZUZvclVSTCh1cmwpKSB7CiAgICAgICAgIGlmIChleGlzdGluZy0+dHlwZSgp
ID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hlZXQqPihleGlzdGluZyk7CiAgICAgICAgIG1lbW9y
eUNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7CiAgICAgfQotICAgIENhY2hlZENTU1N0eWxlU2hl
ZXQqIHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVybCwgY2hhcnNldCk7Cisg
ICAgaWYgKHVybC5zdHJpbmcoKSAhPSByZXF1ZXN0LnVybCgpKQorICAgICAgICByZXF1ZXN0LnNl
dFVSTCh1cmwpOworCisgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNoZWV0ID0gbmV3IENh
Y2hlZENTU1N0eWxlU2hlZXQocmVxdWVzdCwgY2hhcnNldCk7CiAgICAgCiAgICAgYm9vbCBpbkNh
Y2hlID0gbWVtb3J5Q2FjaGUoKS0+YWRkKHVzZXJTaGVldCk7CiAgICAgaWYgKCFpbkNhY2hlKQpA
QCAtMTc1LDI2ICsxNzksMzEgQEAKICAgICByZXR1cm4gdXNlclNoZWV0OwogfQogCi1DYWNoZWRT
Y3JpcHQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCitDYWNoZWRTY3JpcHQqIENhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0U2NyaXB0KFJlc291cmNlUmVxdWVzdCByZXF1ZXN0LCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCB1cmwsIGNoYXJzZXQpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpTY3JpcHQsIHJlcXVlc3QsIGNoYXJzZXQpKTsKIH0KIAogI2lmIEVOQUJMRShY
U0xUKQotQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RY
U0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Kj4o
cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0LCB1cmwsIFN0cmlu
ZygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1
ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmlu
ZygpKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotQ2FjaGVkUmVz
b3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0TGlua1Jlc291cmNlKGNvbnN0IFN0
cmluZyYgdXJsLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK0NhY2hlZFJlc291cmNl
KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgQVNTRVJU
KGZyYW1lKCkpOwotICAgIHJldHVybiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6Okxp
bmtSZXNvdXJjZSwgdXJsLCBTdHJpbmcoKSwgcHJpb3JpdHkpOworICAgIHJldHVybiByZXF1ZXN0
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkxpbmtSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCks
IHByaW9yaXR5KTsKIH0KICNlbmRpZgogCitDYWNoZWRSYXdSZXNvdXJjZSogQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgYm9v
bCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgYmxvY2tDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2UqPihyZXF1ZXN0UmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlLCByZXF1ZXN0LCBTdHJpbmcoKSwgUmVzb3VyY2VM
b2FkUHJpb3JpdHlVbnJlc29sdmVkLCBmYWxzZSwgc2hvdWxkQ29udGVudFNuaWZmLCBibG9ja0Ny
ZWRlbnRpYWxTdG9yYWdlKSk7Cit9CisKIGJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJl
cXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZv
clByZWxvYWQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5E
aXNwbGF5KHVybCkpIHsKQEAgLTIxMiw2ICsyMjEsOCBAQAogICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICAvLyBSYXdSZXNvdXJjZXMg
YXJlIGFscmVhZHkgdmV0dGVkIGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkK
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUmVzb3VyY2U6CiAjZW5kaWYKQEAgLTI1OSwx
MSArMjcwLDEyIEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQog
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtSZXNvdXJjZToKICAgICAgICAgLy8gUHJlZmV0
Y2ggY2Fubm90IGFmZmVjdCB0aGUgY3VycmVudCBkb2N1bWVudC4KKyNlbmRpZgogICAgICAgICBi
cmVhazsKLSNlbmRpZgogICAgIH0KICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbGV0dGluZyB0aGUg
ZW1iZWRkZXIgYmxvY2sgbWl4ZWQgY29udGVudCBsb2Fkcy4KIApAQCAtMjg4LDE4ICszMDAsMTkg
QEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgogI2lmIEVOQUJMRShMSU5LX1BSRUZF
VENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtSZXNvdXJjZToKKyNlbmRpZgogICAg
ICAgICBicmVhazsKLSNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1DYWNo
ZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29sIGZvclByZWxv
YWQpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGJvb2wg
Zm9yUHJlbG9hZCwgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgYmxvY2tDcmVkZW50aWFs
U3RvcmFnZSkKIHsKLSAgICBLVVJMIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlc291
cmNlVVJMKTsKKyAgICBLVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7CiAgICAgCiAgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UgJyVz
JywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5zdHJpbmco
KS5sYXRpbjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCBwcmlvcml0eSwgZm9y
UHJlbG9hZCk7CiAgICAgCkBAIC0zMjMsMTMgKzMzNiwxNiBAQAogICAgIC8vIFNlZSBpZiB3ZSBj
YW4gdXNlIGFuIGV4aXN0aW5nIHJlc291cmNlIGZyb20gdGhlIGNhY2hlLgogICAgIENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCk7CiAK
LSAgICBzd2l0Y2ggKGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCBmb3JQcmVsb2Fk
LCByZXNvdXJjZSkpIHsKKyAgICBpZiAocmVxdWVzdC51cmwoKSAhPSB1cmwpCisgICAgICAgIHJl
cXVlc3Quc2V0VVJMKHVybCk7CisKKyAgICBzd2l0Y2ggKGRldGVybWluZVJldmFsaWRhdGlvblBv
bGljeSh0eXBlLCBmb3JQcmVsb2FkLCByZXNvdXJjZSwgcmVxdWVzdCkpIHsKICAgICBjYXNlIExv
YWQ6Ci0gICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCwg
cHJpb3JpdHkpOworICAgICAgICByZXNvdXJjZSA9IGxvYWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0
LCBjaGFyc2V0LCBwcmlvcml0eSwgc2hvdWxkQ29udGVudFNuaWZmLCBibG9ja0NyZWRlbnRpYWxT
dG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWxvYWQ6CiAgICAgICAgIG1lbW9y
eUNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7Ci0gICAgICAgIHJlc291cmNlID0gbG9hZFJlc291
cmNlKHR5cGUsIHVybCwgY2hhcnNldCwgcHJpb3JpdHkpOworICAgICAgICByZXNvdXJjZSA9IGxv
YWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSwgc2hvdWxkQ29udGVu
dFNuaWZmLCBibG9ja0NyZWRlbnRpYWxTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBSZXZhbGlkYXRlOgogICAgICAgICByZXNvdXJjZSA9IHJldmFsaWRhdGVSZXNvdXJjZShyZXNv
dXJjZSwgcHJpb3JpdHkpOwpAQCAtMzU5LDcgKzM3NSw3IEBACiAgICAgCiAgICAgLy8gQ29weSB0
aGUgVVJMIG91dCBvZiB0aGUgcmVzb3VyY2UgdG8gYmUgcmV2YWxpZGF0ZWQgaW4gY2FzZSBpdCBn
ZXRzIGRlbGV0ZWQgYnkgdGhlIHJlbW92ZSgpIGNhbGwgYmVsb3cuCiAgICAgU3RyaW5nIHVybCA9
IHJlc291cmNlLT51cmwoKTsKLSAgICBDYWNoZWRSZXNvdXJjZSogbmV3UmVzb3VyY2UgPSBjcmVh
dGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwg
cmVzb3VyY2UtPmVuY29kaW5nKCkpOworICAgIENhY2hlZFJlc291cmNlKiBuZXdSZXNvdXJjZSA9
IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5yZXNvdXJjZVJlcXVl
c3QoKSwgcmVzb3VyY2UtPmVuY29kaW5nKCkpOwogICAgIAogICAgIExPRyhSZXNvdXJjZUxvYWRp
bmcsICJSZXNvdXJjZSAlcCBjcmVhdGVkIHRvIHJldmFsaWRhdGUgJXAiLCBuZXdSZXNvdXJjZSwg
cmVzb3VyY2UpOwogICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShyZXNv
dXJjZSk7CkBAIC0zNzQsMTMgKzM5MCwxMyBAQAogICAgIHJldHVybiBuZXdSZXNvdXJjZTsKIH0K
IAotQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQorQ2FjaGVkUmVzb3VyY2UqIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlw
ZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBi
bG9ja0NyZWRlbnRpYWxTdG9yYWdlKQogewotICAgIEFTU0VSVCghbWVtb3J5Q2FjaGUoKS0+cmVz
b3VyY2VGb3JVUkwodXJsKSk7CisgICAgQVNTRVJUKCFtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZv
clVSTChyZXF1ZXN0LnVybCgpKSk7CiAgICAgCi0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkxv
YWRpbmcgQ2FjaGVkUmVzb3VyY2UgZm9yICclcycuIiwgdXJsLnN0cmluZygpLmxhdGluMSgpLmRh
dGEoKSk7CisgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkxvYWRpbmcgQ2FjaGVkUmVzb3VyY2Ug
Zm9yICclcycuIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwogICAg
IAotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVy
bCwgY2hhcnNldCk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY3JlYXRlUmVzb3Vy
Y2UodHlwZSwgcmVxdWVzdCwgY2hhcnNldCk7CiAgICAgCiAgICAgYm9vbCBpbkNhY2hlID0gbWVt
b3J5Q2FjaGUoKS0+YWRkKHJlc291cmNlKTsKICAgICAKQEAgLTM5MCw2ICs0MDYsOCBAQAogICAg
ICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVlKTsKICAgICAKICAgICByZXNvdXJjZS0+c2V0
TG9hZFByaW9yaXR5KHByaW9yaXR5KTsKKyAgICByZXNvdXJjZS0+c2hvdWxkQ29udGVudFNuaWZm
KHNob3VsZENvbnRlbnRTbmlmZik7CisgICAgcmVzb3VyY2UtPmJsb2NrQ3JlZGVudGlhbFN0b3Jh
Z2UoYmxvY2tDcmVkZW50aWFsU3RvcmFnZSk7CiAgICAgcmVzb3VyY2UtPmxvYWQodGhpcyk7CiAg
ICAgCiAgICAgaWYgKCFpbkNhY2hlKSB7CkBAIC00MDYsMTEgKzQyNCwxMSBAQAogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBtX3ZhbGlkYXRlZFVSTHMuYWRkKHVybC5zdHJpbmcoKSk7
CisgICAgbV92YWxpZGF0ZWRVUkxzLmFkZChyZXF1ZXN0LnVybCgpKTsKICAgICByZXR1cm4gcmVz
b3VyY2U7CiB9CiAKLUNhY2hlZFJlc291cmNlTG9hZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNv
dXJjZTo6VHlwZSB0eXBlLCBib29sIGZvclByZWxvYWQsIENhY2hlZFJlc291cmNlKiBleGlzdGlu
Z1Jlc291cmNlKSBjb25zdAorQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OlJldmFsaWRhdGlvblBvbGlj
eSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENhY2hl
ZFJlc291cmNlOjpUeXBlIHR5cGUsIGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4
aXN0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgY29uc3QK
IHsKICAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBMb2FkOwpAQCAt
NDQzLDggKzQ2MSwxMyBAQAogICAgICAgICByZXR1cm4gUmVsb2FkOwogICAgIH0KIAorICAgIGlm
ICghZXhpc3RpbmdSZXNvdXJjZS0+YWxsb3dSZXVzZU9mUmVxdWVzdChtX2RvY3VtZW50LCBuZXdS
ZXF1ZXN0KSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxvYWRpbmcgZHVlIHRvIFJlc291
cmNlUmVxdWVzdCBpbmNvbXBhdGFiaWxpdHkiKTsKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKyAg
ICB9CisKICAgICAvLyBBdm9pZCBsb2FkaW5nIHRoZSBzYW1lIHJlc291cmNlIG11bHRpcGxlIHRp
bWVzIGZvciBhIHNpbmdsZSBkb2N1bWVudCwgZXZlbiBpZiB0aGUgY2FjaGUgcG9saWNpZXMgd291
bGQgdGVsbCB1cyB0by4KLSAgICBpZiAobV92YWxpZGF0ZWRVUkxzLmNvbnRhaW5zKGV4aXN0aW5n
UmVzb3VyY2UtPnVybCgpKSkKKyAgICBpZiAodHlwZSAhPSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVz
b3VyY2UgJiYgbV92YWxpZGF0ZWRVUkxzLmNvbnRhaW5zKGV4aXN0aW5nUmVzb3VyY2UtPnVybCgp
KSkKICAgICAgICAgcmV0dXJuIFVzZTsKICAgICAKICAgICAvLyBDYWNoZVBvbGljeVJlbG9hZCBh
bHdheXMgcmVsb2FkcwpAQCAtNTE2LDcgKzUzOSw3IEBACiAgICAgICAgICAgICBDYWNoZWRJbWFn
ZSogaW1hZ2UgPSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2Fj
aGVkSW1hZ2UqPihyZXNvdXJjZSkpOwogCiAgICAgICAgICAgICBpZiAoaW1hZ2UtPnN0aWxsTmVl
ZHNMb2FkKCkpCi0gICAgICAgICAgICAgICAgbG9hZChpbWFnZSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgaW1hZ2UtPmxvYWQodGhpcyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01MzYsMTMg
KzU1OSwxMSBAQAogICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlLT51cmwo
KSk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWQoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OmxvYWRTdGFydGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUGFzc1JlZlB0
cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+IHJlcXVlc3QpCiB7CisgICAgQVNTRVJUKHJlcXVlc3Qp
OwogICAgIGluY3JlbWVudFJlcXVlc3RDb3VudChyZXNvdXJjZSk7Ci0KLSAgICBSZWZQdHI8Q2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojpsb2Fk
KHRoaXMsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNl
TG9hZENhbGxiYWNrcyk7Ci0gICAgaWYgKHJlcXVlc3QpCi0gICAgICAgIG1fcmVxdWVzdHMuYWRk
KHJlcXVlc3QpOworICAgIG1fcmVxdWVzdHMuYWRkKHJlcXVlc3QpOwogfQogCiB2b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpsb2FkRG9uZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QqIHJlcXVlc3Qp
CkBAIC01OTksNyArNjIwLDcgQEAKIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6aW5jcmVt
ZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlKiByZXMpCiB7Ci0gICAgaWYgKHJl
cy0+aXNMaW5rUmVzb3VyY2UoKSkKKyAgICBpZiAocmVzLT5pZ25vcmVGb3JSZXF1ZXN0Q291bnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgKyttX3JlcXVlc3RDb3VudDsKQEAgLTYwNyw3ICs2
MjgsNyBAQAogCiB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1lbnRSZXF1ZXN0Q291
bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKIHsKLSAgICBpZiAocmVzLT5pc0xpbmtSZXNv
dXJjZSgpKQorICAgIGlmIChyZXMtPmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAtLW1fcmVxdWVzdENvdW50OwpAQCAtNjU3LDcgKzY3OCw4IEBACiAgICAg
aWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0KQogICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgp
ID8gbV9kb2N1bWVudC0+Y2hhcnNldCgpIDogY2hhcnNldDsKIAotICAgIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5nLCBSZXNvdXJj
ZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQsIHRydWUpOworICAgIFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybCkpOworICAgIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBlbmNvZGluZywgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkLCB0cnVlKTsKICAgICBpZiAoIXJlc291cmNlIHx8ICht
X3ByZWxvYWRzICYmIG1fcHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNlKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICByZXNvdXJjZS0+aW5jcmVhc2VQcmVsb2FkQ291bnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhT
TFN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBACiAKICNpZiBF
TkFCTEUoWFNMVCkKIAotQ2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5bGVTaGVldChj
b25zdCBTdHJpbmcgJnVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgWFNMU3R5bGVTaGVl
dCkKK0NhY2hlZFhTTFN0eWxlU2hlZXQ6OkNhY2hlZFhTTFN0eWxlU2hlZXQoUmVzb3VyY2VSZXF1
ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVl
c3QsIFhTTFN0eWxlU2hlZXQpCiAgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKCJ0ZXh0L3hzbCIpKQogewogICAgIC8vIEl0J3MgWE1MIHdlIHdhbnQuCkBAIC00OSw3
ICs0OSw3IEBACiB2b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYykKIHsgIAogICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGMt
PnNldFhTTFN0eWxlU2hlZXQobV91cmwsIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOworICAg
ICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3Bv
bnNlLnVybCgpLCBtX3NoZWV0KTsKIH0KIAogdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRF
bmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAKICAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CiAgICAgd2hpbGUgKENhY2hl
ZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPnNldFhTTFN0eWxlU2hl
ZXQobV91cmwsIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOworICAgICAgICBjLT5zZXRYU0xT
dHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3No
ZWV0KTsKIH0KIAogdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjplcnJvcihDYWNoZWRSZXNvdXJj
ZTo6U3RhdHVzIHN0YXR1cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmNwcAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0
cmluZyYgdXJsKQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBJbWFnZVJlc291cmNlKQorQ2Fj
aGVkSW1hZ2U6OkNhY2hlZEltYWdlKFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQor
ICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBJbWFnZVJlc291cmNlKQogICAg
ICwgbV9pbWFnZSgwKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNh
Y2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxk
UGFpbnRCcm9rZW5JbWFnZSh0cnVlKQpAQCAtNjIsNyArNjIsNyBAQAogfQogCiBDYWNoZWRJbWFn
ZTo6Q2FjaGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQotICAgIDogQ2FjaGVkUmVzb3VyY2UoU3RyaW5n
KCksIEltYWdlUmVzb3VyY2UpCisgICAgOiBDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3Qo
KSwgSW1hZ2VSZXNvdXJjZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2RlY29kZWRE
YXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRlY29kZWREYXRhRGVsZXRpb25U
aW1lckZpcmVkKQogICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCkBAIC0yMjUs
NyArMjI1LDcgQEAKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3No
b3VsZFBhaW50QnJva2VuSW1hZ2UgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5zaG91bGRQ
YWludEJyb2tlbkltYWdlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3VybCkpOworICAgIG1fc2hv
dWxkUGFpbnRCcm9rZW5JbWFnZSA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZFBh
aW50QnJva2VuSW1hZ2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIG1fcmVzb3VyY2VSZXF1ZXN0LnVy
bCgpKSk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lv
biA4Njk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiBjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIENhY2hlZEltYWdlOworY2xhc3Mg
Q2FjaGVkUmF3UmVzb3VyY2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBD
YWNoZWRTY3JpcHQ7CiBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0OwpAQCAtNTksMTggKzYwLDE5
IEBACiBwdWJsaWM6CiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnQqKTsKICAgICB+
Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAKKyAgICBDYWNoZWRJbWFnZSogcmVxdWVzdElt
YWdlKFJlc291cmNlUmVxdWVzdCk7CisgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdENT
U1N0eWxlU2hlZXQoUmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVk
KTsKKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoUmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIENhY2hlZFNjcmlwdCog
cmVxdWVzdFNjcmlwdChSZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7Cisg
ICAgQ2FjaGVkRm9udCogcmVxdWVzdEZvbnQoUmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBDYWNoZWRS
YXdSZXNvdXJjZSogcmVxdWVzdFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCwgYm9vbCBzaG91
bGRDb250ZW50U25pZmYgPSB0cnVlLCBib29sIGJsb2NrQ3JlZGVudGlhbFN0b3JhZ2UgPSBmYWxz
ZSk7CiAKLSAgICBDYWNoZWRJbWFnZSogcmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKTsK
LSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCk7Ci0gICAgQ2FjaGVkQ1NTU3R5
bGVTaGVldCogcmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIENhY2hlZFNjcmlwdCogcmVxdWVzdFNjcmlwdChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICBDYWNoZWRGb250KiBy
ZXF1ZXN0Rm9udChjb25zdCBTdHJpbmcmIHVybCk7Ci0KICNpZiBFTkFCTEUoWFNMVCkKLSAgICBD
YWNoZWRYU0xTdHlsZVNoZWV0KiByZXF1ZXN0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVy
bCk7CisgICAgQ2FjaGVkWFNMU3R5bGVTaGVldCogcmVxdWVzdFhTTFN0eWxlU2hlZXQoUmVzb3Vy
Y2VSZXF1ZXN0KTsKICNlbmRpZgogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIENhY2hl
ZFJlc291cmNlKiByZXF1ZXN0TGlua1Jlc291cmNlKGNvbnN0IFN0cmluZyAmdXJsLCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCk7
CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RMaW5rUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5y
ZXNvbHZlZCk7CiAjZW5kaWYKIAogICAgIC8vIExvZ3MgYW4gYWNjZXNzIGRlbmllZCBtZXNzYWdl
IHRvIHRoZSBjb25zb2xlIGZvciB0aGUgc3BlY2lmaWVkIFVSTC4KQEAgLTkyLDcgKzk0LDcgQEAK
IAogICAgIHZvaWQgcmVtb3ZlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKSBjb25zdDsK
IAotICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwgPSBmYWxz
ZSwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7CisgICAgdm9pZCBsb2FkU3RhcnRlZChDYWNoZWRSZXNv
dXJjZSosIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Pik7CiAgICAgdm9pZCBsb2Fk
RmluaXNoaW5nKCkgeyBtX2xvYWRGaW5pc2hpbmcgPSB0cnVlOyB9CiAgICAgdm9pZCBsb2FkRG9u
ZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QqKTsKICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKCk7CkBA
IC0xMDgsMTMgKzExMCwxMyBAQAogICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKICAgICAK
IHByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2
ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOworICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxv
YWRQcmlvcml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmID0gdHJ1ZSwgYm9vbCBibG9ja0NyZWRlbnRpYWxTdG9yYWdlID0gZmFsc2Up
OwogICAgIENhY2hlZFJlc291cmNlKiByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2Uq
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIGxv
YWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpOworICAgIENhY2hlZFJl
c291cmNlKiBsb2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHks
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIGJsb2NrQ3JlZGVudGlhbFN0b3JhZ2VlKTsK
ICAgICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKIAogICAgIGVudW0gUmV2YWxpZGF0aW9u
UG9saWN5IHsgVXNlLCBSZXZhbGlkYXRlLCBSZWxvYWQsIExvYWQgfTsKLSAgICBSZXZhbGlkYXRp
b25Qb2xpY3kgZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBl
LCBib29sIGZvclByZWxvYWQsIENhY2hlZFJlc291cmNlKiBleGlzdGluZ1Jlc291cmNlKSBjb25z
dDsKKyAgICBSZXZhbGlkYXRpb25Qb2xpY3kgZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KENh
Y2hlZFJlc291cmNlOjpUeXBlLCBib29sIGZvclByZWxvYWQsIENhY2hlZFJlc291cmNlKiBleGlz
dGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKICAgICAKICAgICB2
b2lkIG5vdGlmeUxvYWRlZEZyb21NZW1vcnlDYWNoZShDYWNoZWRSZXNvdXJjZSopOwogICAgIGJv
b2wgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGJvb2wgZm9y
UHJlbG9hZCA9IGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRYU0xTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBACiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2xhc3MgQ2FjaGVkWFNMU3R5
bGVTaGVldCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiAgICAgcHVibGljOgotICAgICAgICBD
YWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICAgICAgQ2FjaGVkWFNM
U3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgICAgICBjb25zdCBTdHJpbmcmIHNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA4Njk5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBACiAgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOwogCiBwdWJsaWM6
Ci0gICAgQ2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIENhY2hlZEltYWdlKFJl
c291cmNlUmVxdWVzdCYpOwogICAgIENhY2hlZEltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB+
Q2FjaGVkSW1hZ2UoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5o
IgorI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBA
IC02MCw2ICs2MSw3IEBACiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJj
ZToKICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKICAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlMb3c7CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkxpbmtSZXNvdXJjZToKQEAgLTc0LDggKzc2LDggQEAKIHN0YXRpYyBSZWZD
b3VudGVkTGVha0NvdW50ZXIgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlcigiQ2FjaGVkUmVzb3Vy
Y2UiKTsKICNlbmRpZgogCi1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3Ry
aW5nJiB1cmwsIFR5cGUgdHlwZSkKLSAgICA6IG1fdXJsKHVybCkKK0NhY2hlZFJlc291cmNlOjpD
YWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgVHlwZSB0eXBlKQorICAgIDog
bV9yZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkKICAgICAsIG1fcmVxdWVzdCgwKQogICAgICwgbV9s
b2FkUHJpb3JpdHkoZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKHR5cGUpKQogICAgICwg
bV9yZXNwb25zZVRpbWVzdGFtcChjdXJyZW50VGltZSgpKQpAQCAtODksNiArOTEsOCBAQAogICAg
ICwgbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGVk
RnJvbU5ldHdvcmtpbmdMYXllcihmYWxzZSkKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyh0cnVlKQorICAgICwgbV9zaG91bGRDb250ZW50U25pZmYodHJ1ZSkKKyAgICAsIG1fYmxv
Y2tDcmVkZW50aWFsU3RvcmFnZShmYWxzZSkKICAgICAsIG1faW5DYWNoZShmYWxzZSkKICAgICAs
IG1fbG9hZGluZyhmYWxzZSkKICAgICAsIG1fdHlwZSh0eXBlKQpAQCAtMTMwLDggKzEzNCwxMCBA
QAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2Vj
dXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAg
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWQodGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hl
Y2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIFBhc3NSZWZQdHI8Q2FjaGVkUmVz
b3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojpsb2FkKGNhY2hl
ZFJlc291cmNlTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcywgbV9zaG91bGRDb250ZW50U25pZmYsIG1fYmxvY2tDcmVkZW50
aWFsU3RvcmFnZSk7CiAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKKyAgICBpZiAocmVxdWVzdCkKKyAg
ICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRTdGFydGVkKHRoaXMsIHJlcXVlc3QpOwog
fQogCiB2b2lkIENhY2hlZFJlc291cmNlOjpjaGVja05vdGlmeSgpCkBAIC0yNDQsNiArMjUwLDEy
IEBACiAgICAgcmV0dXJuIG1fY2FjaGVkTWV0YWRhdGEuZ2V0KCk7CiB9CiAKKwordm9pZCBDYWNo
ZWRSZXNvdXJjZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKQoreyAgICAKKyAgICBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIg
PSB0cnVlOworfQorCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0KENhY2hlZFJlc291
cmNlUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVzdCAmJiAhbV9yZXF1ZXN0KQpA
QCAtMjYxLDYgKzI3MywyNiBAQAogICAgICAgICBkZWxldGUgdGhpczsKIH0KIAorc3RhdGljIGJv
b2wgcmV1c2VSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBp
ZiAoIXJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIikuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcXVlc3QuaHR0cE1ldGhvZCgp
ICE9ICJHRVQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisgICAgCitib29sIENhY2hlZFJlc291cmNlOjphbGxvd1JldXNlT2ZSZXF1ZXN0KERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdAorewor
ICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbjsKKyAgICBpZiAoIW1fcmVz
cG9uc2UuaXNOdWxsKCkgJiYgZG9jdW1lbnQgJiYgIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayht
X3Jlc3BvbnNlLCAhbV9ibG9ja0NyZWRlbnRpYWxTdG9yYWdlLCBkb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gcmV1c2VSZXF1ZXN0KHJlcXVlc3QpICYmIHJldXNlUmVxdWVz
dChtX3Jlc291cmNlUmVxdWVzdCk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVu
dChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQogewogICAgIGFkZENsaWVudFRvU2V0KGNs
aWVudCk7CkBAIC0zMDgsNyArMzQwLDkgQEAKICAgICAgICAgICAgIC8vIFdlIGFsbG93IG5vbi1z
ZWN1cmUgY29udGVudCB0byBiZSByZXVzZWQgaW4gaGlzdG9yeSwgYnV0IHdlIGRvIG5vdCBhbGxv
dyBzZWN1cmUgY29udGVudCB0byBiZSByZXVzZWQuCiAgICAgICAgICAgICBpZiAocHJvdG9jb2xJ
cyh1cmwoKSwgImh0dHBzIikpCiAgICAgICAgICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3Zl
KHRoaXMpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIGlmICghYWxsb3dSZXVzZU9m
UmVxdWVzdCgpKQorICAgICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOworICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtZW1vcnlDYWNoZSgpLT5wcnVuZSgpOwogICAgIH0KICAg
ICAvLyBUaGlzIG9iamVjdCBtYXkgYmUgZGVhZCBoZXJlLgpAQCAtNTEwLDcgKzU0NCw3IEBACiAg
ICAgaWYgKG1fbG9hZGluZyB8fCBlcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQor
ICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpIHx8ICFhbGxv
d1JldXNlT2ZSZXF1ZXN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9y
ZXNwb25zZS5oYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgJKHJldmlzaW9u
IDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAKICAgICBjbGFzcyBJbWFnZTsK
ICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogICAgIC8qKgogICAgICAqIEBpbnRl
cm5hbApAQCAtNTAsNiArNTIsMTAgQEAKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNh
Y2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50
KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5z
aWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBTaGFyZWRCdWZmZXIqKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
LCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KKwogICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBm
cmFtZSBvZiBhbiBpbWFnZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRh
IGZyb20gdGhlIG5ldHdvcmsgb3IKICAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgYW5pbWF0aW5n
LiBJZiBub3QgbnVsbCwgdGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1h
Z2UuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBJbnRSZWN0KiA9IDApIHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA4Njk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJQdXJnZVByaW9yaXR5
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQ2LDYgKzQ3
LDggQEAKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBQdXJn
ZWFibGVCdWZmZXI7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENsYXNzZXMg
d2hvIHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKIC8vIGZyb20gQ2FjaGVk
UmVzb3VyY2VDbGllbnQsIHRvIGdldCB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gY2FzZSB0aGUgcmVx
dWVzdGVkIGRhdGEgaGFzIGFycml2ZWQuCkBAIC02MCw3ICs2Myw4IEBACiAgICAgICAgIEltYWdl
UmVzb3VyY2UsCiAgICAgICAgIENTU1N0eWxlU2hlZXQsCiAgICAgICAgIFNjcmlwdCwKLSAgICAg
ICAgRm9udFJlc291cmNlCisgICAgICAgIEZvbnRSZXNvdXJjZSwKKyAgICAgICAgUmF3UmVzb3Vy
Y2UKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgLCBYU0xTdHlsZVNoZWV0CiAjZW5kaWYKQEAg
LTczLDE1ICs3NywxNiBAQAogICAgICAgICBVbmtub3duLCAgICAgIC8vIGxldCBjYWNoZSBkZWNp
ZGUgd2hhdCB0byBkbyB3aXRoIGl0CiAgICAgICAgIFBlbmRpbmcsICAgICAgLy8gb25seSBwYXJ0
aWFsbHkgbG9hZGVkCiAgICAgICAgIENhY2hlZCwgICAgICAgLy8gcmVndWxhciBjYXNlCisgICAg
ICAgIENhbmNlbGxlZCwKICAgICAgICAgTG9hZEVycm9yLAogICAgICAgICBEZWNvZGVFcnJvcgog
ICAgIH07CiAKLSAgICBDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSk7Cisg
ICAgQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0LCBUeXBlKTsKICAgICB2aXJ0dWFsIH5D
YWNoZWRSZXNvdXJjZSgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcikgIHsgbG9hZChjYWNoZWRSZXNvdXJjZUxv
YWRlciwgZmFsc2UsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7IH0KLSAgICB2b2lkIGxvYWQoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5
LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIHZvaWQgbG9hZChDYWNoZWRS
ZXNvdXJjZUxvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJv
b2wgc2VuZFJlc291cmNlTG9hZENsbGJhY2tzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNv
ZGluZyhjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CkBAIC05MCw3ICs5NSw5IEBACiAKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgY29uc3QgU3RyaW5nICZ1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQorICAgIFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNv
dXJjZVJlcXVlc3Q7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb3VyY2VSZXF1ZXN0LnVybCgpO30KKyAgICBib29sIGFsbG93UmV1c2VPZlJlcXVlc3QoRG9j
dW1lbnQqID0gMCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiA9IFJlc291cmNlUmVxdWVzdCgpKSBj
b25zdDsKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPiht
X3R5cGUpOyB9CiAgICAgCiAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2FkUHJpb3JpdHk7IH0KQEAgLTEwOCw3ICsxMTUsNiBAQAogICAg
ICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKICAgICB9OwogICAgIFByZWxvYWRS
ZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByZWxvYWRS
ZXN1bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KLSAgICB2b2lkIHNldFJlcXVlc3RlZEZyb21OZXR3
b3JraW5nTGF5ZXIoKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9IHRydWU7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KQEAgLTEyOSw3ICsxMzUs
NyBAQAogICAgIHZvaWQgc2V0TG9hZGluZyhib29sIGIpIHsgbV9sb2FkaW5nID0gYjsgfQogCiAg
ICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgaXNMaW5rUmVzb3VyY2UoKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBpZ25vcmVGb3JSZXF1
ZXN0Q291bnQoKSBjb25zdAogICAgIHsKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBMaW5rUmVzb3VyY2U7CkBAIC0xNTksNiArMTY1LDcgQEAKIAog
ICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKCFtX3B1cmdlYWJsZURhdGEp
OyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lk
IHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KIApAQCAt
MTgyLDYgKzE4OSw3IEBACiAgICAgU3RyaW5nIGFjY2VwdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNj
ZXB0OyB9CiAgICAgdm9pZCBzZXRBY2NlcHQoY29uc3QgU3RyaW5nJiBhY2NlcHQpIHsgbV9hY2Nl
cHQgPSBhY2NlcHQ7IH0KIAorICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3QgeyByZXR1cm4gc3Rh
dHVzKCkgPT0gQ2FuY2VsbGVkOyB9CiAgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyBy
ZXR1cm4gKHN0YXR1cygpID09IExvYWRFcnJvciB8fCBzdGF0dXMoKSA9PSBEZWNvZGVFcnJvcik7
IH0KIAogICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQpAQCAtMjE2LDYgKzIyNCwxMCBAQAogICAg
IHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogICAgIHZvaWQgdXBkYXRlUmVzcG9u
c2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVz
cG9uc2UpOwogCisgICAgdm9pZCBzaG91bGRDb250ZW50U25pZmYoYm9vbCBzaG91bGRDb250ZW50
U25pZmYpIHsgbV9zaG91bGRDb250ZW50U25pZmYgPSBzaG91bGRDb250ZW50U25pZmY7IH0KKyAg
ICB2b2lkIGJsb2NrQ3JlZGVudGlhbFN0b3JhZ2UoYm9vbCBibG9jaykgeyBtX2Jsb2NrQ3JlZGVu
dGlhbFN0b3JhZ2UgPSBibG9jazsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNp
Z25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogdG90
YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3Rp
ZnkoKTsKIApAQCAtMjI3LDcgKzIzOSw3IEBACiAgICAgCiAgICAgSGFzaENvdW50ZWRTZXQ8Q2Fj
aGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudHM7CiAKLSAgICBTdHJpbmcgbV91cmw7CisgICAg
UmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIFN0cmluZyBtX2FjY2VwdDsK
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QqIG1fcmVxdWVzdDsKICAgICBSZXNvdXJjZUxvYWRQ
cmlvcml0eSBtX2xvYWRQcmlvcml0eTsKQEAgLTI2MSw2ICsyNzMsOCBAQAogICAgIGJvb2wgbV9p
bkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCA6IDE7CiAgICAgYm9vbCBtX3JlcXVlc3RlZEZyb21O
ZXR3b3JraW5nTGF5ZXIgOiAxOwogICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
IDogMTsKKyAgICBib29sIG1fc2hvdWxkQ29udGVudFNuaWZmIDogMTsKKyAgICBib29sIG1fYmxv
Y2tDcmVkZW50aWFsU3RvcmFnZSA6IDE7CiAKICAgICBib29sIG1faW5DYWNoZSA6IDE7CiAgICAg
Ym9vbCBtX2xvYWRpbmcgOiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAJKHJldmlzaW9uIDg2OTkyKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CkBAIC02Miw2ICs2Myw4IEBACiAgICAgICAgIHJldHVybiBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6CiAgICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElz
SW1hZ2U7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJl
dHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7ICAgIAogI2lmIEVOQUJM
RShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtSZXNvdXJjZToK
ICAgICAgICAgaWYgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5TG93ZXN0KQpAQCAt
NzMsMTAgKzc2LDExIEBACiAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdWJy
ZXNvdXJjZTsKIH0KIAotQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpDYWNoZWRSZXNvdXJjZVJlcXVl
c3QoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwpCitDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6
OkNhY2hlZFJlc291cmNlUmVxdWVzdChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwgYm9v
bCBibG9ja0NyZWRlbnRpYWxTdG9yYWdlKQogICAgIDogbV9jYWNoZWRSZXNvdXJjZUxvYWRlcihj
YWNoZWRSZXNvdXJjZUxvYWRlcikKICAgICAsIG1fcmVzb3VyY2UocmVzb3VyY2UpCiAgICAgLCBt
X2luY3JlbWVudGFsKGluY3JlbWVudGFsKQorICAgICwgbV9ibG9ja0NyZWRlbnRpYWxTdG9yYWdl
KGJsb2NrQ3JlZGVudGlhbFN0b3JhZ2UpCiAgICAgLCBtX211bHRpcGFydChmYWxzZSkKICAgICAs
IG1fZmluaXNoaW5nKGZhbHNlKQogewpAQCAtODgsMTEgKzkyLDExIEBACiAgICAgbV9yZXNvdXJj
ZS0+c2V0UmVxdWVzdCgwKTsKIH0KIAotUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+
IENhY2hlZFJlc291cmNlUmVxdWVzdDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRh
bCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MpCitQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlUmVxdWVzdD4gQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0Ojpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0
eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cywgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgYmxvY2tDcmVkZW50aWFsU3RvcmFnZSkK
IHsKLSAgICBSZWZQdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRSZWYo
bmV3IENhY2hlZFJlc291cmNlUmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2Us
IGluY3JlbWVudGFsKSk7CisgICAgUmVmUHRyPENhY2hlZFJlc291cmNlUmVxdWVzdD4gcmVxdWVz
dCA9IGFkb3B0UmVmKG5ldyBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgYmxvY2tDcmVkZW50aWFsU3RvcmFnZSkpOwogCi0g
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChyZXNvdXJjZS0+dXJsKCkpOworICAg
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0ID0gcmVzb3VyY2UtPnJlc291cmNlUmVx
dWVzdCgpOwogICAgIHJlc291cmNlUmVxdWVzdC5zZXRUYXJnZXRUeXBlKGNhY2hlZFJlc291cmNl
VHlwZVRvVGFyZ2V0VHlwZShyZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+bG9hZFByaW9yaXR5
KCkpKTsKIAogICAgIGlmICghcmVzb3VyY2UtPmFjY2VwdCgpLmlzRW1wdHkoKSkKQEAgLTEyNCwy
NSArMTI4LDIyIEBACiAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldFByaW9yaXR5KHByaW9yaXR5KTsK
IAogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLT5k
b2N1bWVudCgpLT5mcmFtZSgpLAotICAgICAgICByZXF1ZXN0LmdldCgpLCByZXNvdXJjZVJlcXVl
c3QsIHByaW9yaXR5LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsK
KyAgICAgICAgcmVxdWVzdC5nZXQoKSwgcmVzb3VyY2VSZXF1ZXN0LCBwcmlvcml0eSwgc2VjdXJp
dHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKTsK
ICAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZyYW1lcyB3ZXJlIHdh
aXRpbmcgZm9yIHRoaXMgcmV2YWxpZGF0aW9uPwogICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5k
YXRhKCkpOwotICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KHJlc291cmNlKTsKLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5pc2hp
bmcoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKSAKICAg
ICAgICAgICAgIG1lbW9yeUNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7IAog
ICAgICAgICByZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Ci0gICAg
ICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRG9uZSgwKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIHJlcXVlc3QtPm1fbG9hZGVyID0gbG9hZGVyOwogICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OndpbGxTZW5k
UmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKQordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OndpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbV9yZXNvdXJjZS0+c2V0UmVxdWVzdGVk
RnJvbU5ldHdvcmtpbmdMYXllcigpOworICAgIG1fcmVzb3VyY2UtPndpbGxTZW5kUmVxdWVzdChy
ZXF1ZXN0LCByZXNwb25zZSk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRG
aW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSkKQEAgLTI2NCw5
ICsyNjUsOCBAQAogICAgIGlmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3Jlc291cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2Rl
KCkgPj0gNDAwKSB7Ci0gICAgICAgIGlmICghbV9yZXNvdXJjZS0+c2hvdWxkSWdub3JlSFRUUFN0
YXR1c0NvZGVFcnJvcnMoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJl
c291cmNlOjpMb2FkRXJyb3IpOworICAgIGlmIChtX3Jlc291cmNlLT5yZXNwb25zZSgpLmh0dHBT
dGF0dXNDb2RlKCkgPj0gNDAwICYmICFtX3Jlc291cmNlLT5zaG91bGRJZ25vcmVIVFRQU3RhdHVz
Q29kZUVycm9ycygpKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNl
OjpMb2FkRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODYsNCArMjg2LDM5
IEBACiAgICAgbV9yZXNvdXJjZS0+c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGRhdGEsIHNp
emUpOwogfQogCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkU2VuZERhdGEoU3VicmVz
b3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIG1fcmVzb3VyY2UtPmRpZFNlbmREYXRh
KGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3Q6OmdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVy
KiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCit7CisgICAgaWYgKG1fYmxvY2tD
cmVkZW50aWFsU3RvcmFnZSkgeworICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA9
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSkKK3sKKyAgICBpZiAobV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChLVVJMKFBhcnNlZFVSTFN0cmluZywg
bV9yZXNvdXJjZS0+dXJsKCkpKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKSB8fCBVU0UoQ1VSTCkKKyAgICBtX2xvYWRlci0+aGFuZGxlKCkt
PnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwor
I2Vsc2UKKyAgICAvLyBUaGVzZSBwbGF0Zm9ybXMgZG9uJ3QgcHJvdmlkZSBhIHdheSB0byBjb250
aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzLCBjYW5jZWwgdGhlIGxvYWQgYWx0b2dldGhlci4KKyAg
ICBVTlVTRURfUEFSQU0oY2hhbGxlbmdlKTsKKyAgICBkaWRGYWlsKGZhbHNlKTsKKyNlbmRpZgor
fQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
KQoreworICAgICBtX3Jlc291cmNlLT5zZXRSZXNwb25zZShjaGFsbGVuZ2UuZmFpbHVyZVJlc3Bv
bnNlKCkpOworICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9y
KTsKKyAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZERvbmUodGhpcyk7Cit9CisKIH0g
Ly9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0
aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53
ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZFJhd1Jlc291cmNlOjpDYWNo
ZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICA6IENh
Y2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgUmF3UmVzb3VyY2UpCisgICAgLCBtX2Zpbmlz
aGluZyhmYWxzZSkKK3sKK30KKworCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBp
ZiAoYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICBtX2ZpbmlzaGluZyA9IHRydWU7CisgICAgbV9k
YXRhID0gZGF0YTsKKyAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICBDYWNoZWRSZXNvdXJjZTo6
ZGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNl
OjplcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzIHN0YXR1cykKK3sKKyAgICBtX2ZpbmlzaGlu
ZyA9IHRydWU7CisgICAgc2V0U3RhdHVzKHN0YXR1cyk7CisgICAgbV9kYXRhLmNsZWFyKCk7Cisg
ICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgY2hlY2tO
b3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hl
ZFJlc291cmNlQ2xpZW50KiBjKQoreworICAgIGlmIChtX2RhdGEpCisgICAgICAgIGMtPmRhdGFS
ZWNlaXZlZCh0aGlzLCBtX2RhdGEuZ2V0KCkpOworCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFk
ZENsaWVudChjKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6bm90aWZ5T2JzZXJ2ZXJz
KCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAg
d2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmRh
dGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEuZ2V0KCkpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291
cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisgICAgaWYgKCFtX3JlcXVlc3QgfHwgbV9maW5p
c2hpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIg
PSBtX3JlcXVlc3QtPmxvYWRlcigpOworICAgIG1fcmVxdWVzdC0+ZGlkRmFpbCh0cnVlKTsKKyAg
ICBsb2FkZXItPmNhbmNlbCgpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjp3aWxsU2Vu
ZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICBpZiAoIXJlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICAgICAgd2hpbGUgKENh
Y2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAgICBjLT5yZWRpcmVj
dFJlY2VpdmVkKHRoaXMsIHJlcXVlc3QpOworICAgIH0KKworICAgIENhY2hlZFJlc291cmNlOjp3
aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOworfQorCit2b2lkIENhY2hlZFJhd1Jl
c291cmNlOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YVNlbnQodGhpcywgYnl0ZXNTZW50LCB0b3Rh
bEJ5dGVzVG9CZVNlbnQpOworfQorCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENT
U1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogQ2FjaGVk
UmVzb3VyY2UodXJsLCBDU1NTdHlsZVNoZWV0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVk
Q1NTU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBDU1NT
dHlsZVNoZWV0KQogICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgi
dGV4dC9jc3MiLCBjaGFyc2V0KSkKIHsKICAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFjY2Vw
dCBhbnkgdHlwZSAoZGVsbC5jb20gc2VydmVzIGEgc3R5bGVzaGVldApAQCAtNTMsNyArNTMsNyBA
QAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQgKmMpCiB7CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAgICAgYy0+c2V0Q1NTU3R5
bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5h
bWUoKSwgdGhpcyk7CisgICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVl
c3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCks
IHRoaXMpOwogfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmFsbENsaWVudHNSZW1vdmVk
KCkKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIg
dyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4
dCgpKQotICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgp
LCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKKyAgICAgICAgYy0+c2V0Q1NT
U3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9k
ZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24gODY5
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNh
Y2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFNjcmlwdCkKK0NhY2hlZFNjcmlw
dDo6Q2FjaGVkU2NyaXB0KFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFNj
cmlwdCkKICAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiLCBjaGFyc2V0KSkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlv
blRpbWVyKHRoaXMsICZDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVk
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAgICAgY2xhc3MgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTQwLDE0ICs0MSwx
NSBAQAogCiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVu
dCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJj
ZVJlcXVlc3Q+IGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJv
b2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlUmVx
dWVzdD4gbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBp
bmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBibG9ja0NyZWRlbnRpYWxTdG9y
YWdlKTsKICAgICAgICAgfkNhY2hlZFJlc291cmNlUmVxdWVzdCgpOwogICAgICAgICB2b2lkIGRp
ZEZhaWwoYm9vbCBjYW5jZWxsZWQgPSBmYWxzZSk7CiAKKyAgICAgICAgU3VicmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZGVyLmdldCgpOyB9CiAgICAgICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENhY2hl
ZFJlc291cmNlUmVxdWVzdChDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKiwg
Ym9vbCBpbmNyZW1lbnRhbCk7CisgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChDYWNoZWRS
ZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBi
bG9ja0NyZWRlbnRpYWxTdG9yYWdlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVx
dWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGlu
dCk7CkBAIC01NSwxMCArNTcsMTYgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRl
c1RvQmVTZW50Ki8pOworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCiAgICAgICAgIFJlZlB0
cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9y
ZXNvdXJjZTsKICAgICAgICAgYm9vbCBtX2luY3JlbWVudGFsOworICAgICAgICBib29sIG1fYmxv
Y2tDcmVkZW50aWFsU3RvcmFnZTsKICAgICAgICAgYm9vbCBtX211bHRpcGFydDsKICAgICAgICAg
Ym9vbCBtX2ZpbmlzaGluZzsKICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDkgKzg0LDkgQEAKIH0KIAogUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSogZnJhbWUs
IFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIFNlY3VyaXR5Q2hlY2tQb2xp
Y3kgc2VjdXJpdHlDaGVjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgY29uc3QgU3RyaW5nJiBvcHRp
b25hbE91dGdvaW5nUmVmZXJyZXIsIGJvb2wgc2hvdWxkQnVmZmVyRGF0YSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRl
bnRTbmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRhKQogewotICAgIFJlZlB0cjxTdWJyZXNvdXJj
ZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50
LCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91
bGRDb250ZW50U25pZmYsIG9wdGlvbmFsT3V0Z29pbmdSZWZlcnJlciwgc2hvdWxkQnVmZmVyRGF0
YSk7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxv
YWRlcjo6Y3JlYXRlKGZyYW1lLCBjbGllbnQsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQnVmZmVyRGF0
YSk7CiAgICAgaWYgKGxvYWRlcikKICAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSwg
cHJpb3JpdHkpOwogICAgIHJldHVybiBsb2FkZXIucmVsZWFzZSgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gODY5OTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAKIHB1YmxpYzoKICAgICBmcmllbmQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAotICAgIFBhc3NSZWZQdHI8
U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiwgU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRQ
cmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5TG93LCBTZWN1cml0eUNoZWNrUG9saWN5ID0g
RG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBi
b29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxPdXRn
b2luZ1JlZmVycmVyID0gU3RyaW5nKCksIGJvb2wgc2hvdWxkQnVmZmVyRGF0YSA9IHRydWUpOwor
ICAgIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2Fk
KEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5TG93LCBTZWN1cml0
eUNoZWNrUG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUsIGJvb2wgc2hvdWxk
QnVmZmVyRGF0YSA9IHRydWUpOwogICAgIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdm9pZCBhZGRN
YWluUmVzb3VyY2VMb2FkKFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCByZW1vdmUoUmVzb3Vy
Y2VMb2FkZXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSw4IEBACiAjaWZuZGVmIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcl9oCiAjZGVmaW5lIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcl9oCiAKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxv
YWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ3LDE1ICs0NywxNCBA
QAogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50OwogCi0gICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2Fk
ZXIsIHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKKyAgICBjbGFzcyBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNs
aWVudCAgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsT3V0Z29pbmdSZWZlcnJlciA9IFN0cmluZygpKTsK
ICAgICAgICAgdmlydHVhbCB+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGNhbmNlbCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9h
ZGluZyhib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpIHsgY2FuY2VsKHRydWUp
OyB9CiAKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+
OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Pjo6ZGVyZWY7CkBAIC03MCwyMiArNjksMjAgQEAKICAgICAgICAgICAgIExvYWRBc3luY2hyb25v
dXNseQogICAgICAgICB9OwogCi0gICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1
bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYsIGNvbnN0IFN0
cmluZyYgb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKTsKKyAgICAgICAgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIEJsb2NraW5nQmVo
YXZpb3IsIGNvbnN0IEtVUkwmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYsIGNvbnN0
IFN0cmluZyYgb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAg
ICAgICB2b2lkIHN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2b2lkIGNh
bmNlbChib29sIGNsZWFyQ2xpZW50KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBjaGFyKiwgaW50IGRhdGFMZW5ndGgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBk
YXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVz
b3VyY2VMb2FkZXIqLCBkb3VibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgYm9vbCBkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlcios
IGJvb2wmIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJik7CisgICAgICAgIC8vIENhY2hlZFJlc291cmNlQ2xpZW50CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkYXRhU2VudChDYWNoZWRSZXNvdXJjZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgU2hhcmVkQnVmZmVy
KiBkYXRhKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVz
b3VyY2UqLCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAKLSAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2
b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKICAgICAgICAg
dm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAg
dm9pZCBwcmVmbGlnaHRTdWNjZXNzKCk7CkBAIC05NCwxMyArOTEsMTUgQEAKICAgICAgICAgdm9p
ZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNrUG9saWN5
KTsKICAgICAgICAgYm9vbCBpc0FsbG93ZWRSZWRpcmVjdChjb25zdCBLVVJMJik7CiAKLSAgICAg
ICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIG1fcmVzb3VyY2U7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIG1fY2xp
ZW50OwogICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICAgICAgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnMgbV9vcHRpb25zOwogICAgICAgICBTdHJpbmcgbV9vcHRpb25hbE91dGdvaW5n
UmVmZXJyZXI7CiAgICAgICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKICAgICAgICAgYm9v
bCBtX2FzeW5jOworICAgICAgICBib29sIG1fcmVzcG9uc2VSZWNlaXZlZDsKKyAgICAgICAgaW50
IG1fZGF0YUxlbmd0aDsKICAgICAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxS
ZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVj
a3MKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDg2OTkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogI2VuZGlm
CiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlD
aGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiwgY29uc3QgU3RyaW5nJiBvcHRpb25hbE91dGdvaW5nUmVmZXJyZXIsIGJvb2wgc2hvdWxk
QnVmZmVyRGF0YSkKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9h
ZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2Vj
dXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZiwgYm9vbCBzaG91bGRCdWZmZXJEYXRhKQogewogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtODMsMTEgKzgzLDExIEBACiAKICAgICBTdHJpbmcgb3V0Z29p
bmdSZWZlcnJlcjsKICAgICBTdHJpbmcgb3V0Z29pbmdPcmlnaW47Ci0gICAgaWYgKG9wdGlvbmFs
T3V0Z29pbmdSZWZlcnJlci5pc051bGwoKSkgeworICAgIGlmIChyZXF1ZXN0Lmh0dHBSZWZlcnJl
cigpLmlzTnVsbCgpKSB7CiAgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBmbC0+b3V0Z29pbmdS
ZWZlcnJlcigpOwogICAgICAgICBvdXRnb2luZ09yaWdpbiA9IGZsLT5vdXRnb2luZ09yaWdpbigp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSBvcHRpb25hbE91dGdv
aW5nUmVmZXJyZXI7CisgICAgICAgIG91dGdvaW5nUmVmZXJyZXIgPSByZXF1ZXN0Lmh0dHBSZWZl
cnJlcigpOwogICAgICAgICBvdXRnb2luZ09yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKG91dGdvaW5nUmVmZXJyZXIpLT50b1N0cmluZygpOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiA4Njk5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsOCBAQAogICAgICAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKICAgICAgICAgICAg
IGJvb2wgYXV0b0xvYWRPdGhlckltYWdlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5hdXRvTG9hZEltYWdlcygpOwogICAgICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld0lt
YWdlID0gbmV3IENhY2hlZEltYWdlKHNvdXJjZVVSSShhdHRyKSk7CisgICAgICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdChkb2N1bWVudC0+Y29tcGxldGVV
Ukwoc291cmNlVVJJKGF0dHIpKSk7CisgICAgICAgICAgICBuZXdJbWFnZSA9IG5ldyBDYWNoZWRJ
bWFnZShyZXF1ZXN0KTsKICAgICAgICAgICAgIG5ld0ltYWdlLT5zZXRMb2FkaW5nKHRydWUpOwog
ICAgICAgICAgICAgbmV3SW1hZ2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKGRvY3Vt
ZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICAgICAgICAgIGRvY3VtZW50LT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLT5tX2RvY3VtZW50UmVzb3VyY2VzLnNldChuZXdJbWFnZS0+dXJs
KCksIG5ld0ltYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA4Njk5MikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxOCArMzEsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2lu
Y2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1
ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgogCkBAIC01MSwzMSArNDksMzkgQEAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIC8vIFRoZSBs
b2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBleGl0cy4KLSAg
ICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCAmY2xpZW50LCBMb2FkU3luY2hyb25v
dXNseSwgcmVxdWVzdCwgb3B0aW9ucywgU3RyaW5nKCkpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyKGRvY3VtZW50LCAmY2xpZW50LCBMb2FkU3luY2hyb25vdXNseSwgcmVxdWVzdC51cmwo
KSwgb3B0aW9ucywgU3RyaW5nKCkpKTsKKyAgICBsb2FkZXItPnN0YXJ0KHJlcXVlc3QpOwogICAg
IEFTU0VSVChsb2FkZXItPmhhc09uZVJlZigpKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25z
LCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsT3V0Z29pbmdSZWZlcnJlcikKIHsKLSAgICBSZWZQdHI8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNseSwgcmVx
dWVzdCwgb3B0aW9ucywgb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKSk7Ci0gICAgaWYgKCFsb2Fk
ZXItPm1fbG9hZGVyKQorICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRl
ciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsIGNsaWVu
dCwgTG9hZEFzeW5jaHJvbm91c2x5LCByZXF1ZXN0LnVybCgpLCBvcHRpb25zLCBvcHRpb25hbE91
dGdvaW5nUmVmZXJyZXIpKTsKKyAgICBsb2FkZXItPnN0YXJ0KHJlcXVlc3QpOworICAgIGlmICgh
bG9hZGVyLT5tX3Jlc291cmNlKQogICAgICAgICBsb2FkZXIgPSAwOwogICAgIHJldHVybiBsb2Fk
ZXIucmVsZWFzZSgpOwogfQogCi1Eb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcihEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
IGNsaWVudCwgQmxvY2tpbmdCZWhhdmlvciBibG9ja2luZ0JlaGF2aW9yLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25z
LCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsT3V0Z29pbmdSZWZlcnJlcikKLSAgICA6IG1fY2xpZW50
KGNsaWVudCkKK0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBC
bG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxP
dXRnb2luZ1JlZmVycmVyKQorICAgIDogbV9yZXNvdXJjZSgwKQorICAgICwgbV9jbGllbnQoY2xp
ZW50KQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25z
KQogICAgICwgbV9vcHRpb25hbE91dGdvaW5nUmVmZXJyZXIob3B0aW9uYWxPdXRnb2luZ1JlZmVy
cmVyKQotICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKKyAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3Qo
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkKICAgICAsIG1fYXN5
bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9ub3VzbHkpCisgICAgLCBtX3Jlc3Bv
bnNlUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFMZW5ndGgoMCkKIHsKICAgICBBU1NFUlQo
ZG9jdW1lbnQpOwogICAgIEFTU0VSVChjbGllbnQpOwogICAgIC8vIFNldHRpbmcgYW4gb3V0Z29p
bmcgcmVmZXJlciBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgYXN5bmMgY29kZSBwYXRoLgogICAg
IEFTU0VSVChtX2FzeW5jIHx8IG1fb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyLmlzRW1wdHkoKSk7
Cit9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpzdGFydChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CiAgICAgaWYgKG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9v
cHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVz
dHMpIHsKICAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgRG9TZWN1cml0eUNoZWNrKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTYsNyArMTAyLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgbV9h
Y3R1YWxSZXF1ZXN0ID0gY3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbGVhc2UoKTsKIAotICAgICAgICBp
ZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZs
aWdodChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1
ZXN0LT51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fYWN0dWFsUmVxdWVzdC0+
aHR0cE1ldGhvZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAg
ICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lw
UHJlZmxpZ2h0KG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0
dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2FjdHVhbFJl
cXVlc3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KQogICAgICAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCgqbV9hY3R1YWxS
ZXF1ZXN0KTsKQEAgLTEyNSw2MCArMTMxLDMyIEBACiAKIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCiB7Ci0gICAgaWYgKG1fbG9hZGVyKQotICAg
ICAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQoKTsKKyAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAg
ICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogfQogCi12b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpj
YW5jZWwoYm9vbCBjbGVhckNsaWVudCkKIHsKLSAgICBpZiAoIW1fbG9hZGVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0gICAgbV9sb2FkZXItPmNsZWFyQ2xp
ZW50KCk7Ci0gICAgbV9sb2FkZXIgPSAwOwotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCB2YWx1ZSkKLXsK
LSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHZh
bHVlKTsKLX0KLQotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKG1f
Y2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsK
LQotICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLSAgICAgICAg
bV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7Ci0gICAgICAgIHJlcXVlc3QgPSBSZXNv
dXJjZVJlcXVlc3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9jbGllbnQtPmlzRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQqPihtX2NsaWVudCktPndpbGxTZW5kUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICBtX3Jlc3BvbnNlUmVjZWl2ZWQgPSBm
YWxzZTsKKyAgICBtX2RhdGFMZW5ndGggPSAwOworICAgIGlmIChtX3Jlc291cmNlKSB7CisgICAg
ICAgIG1fcmVzb3VyY2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9
IDA7CiAgICAgfQotfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkU2VuZERh
dGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKLXsKLSAgICBBU1NFUlQo
bV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwotCi0gICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVT
ZW50KTsKKyAgICBpZiAoY2xlYXJDbGllbnQpCisgICAgICAgIG1fY2xpZW50ID0gMDsKIH0KIAot
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNv
dXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK2Jv
b2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQoIW1f
cmVzcG9uc2VSZWNlaXZlZCk7CiAKICAgICBTdHJpbmcgYWNjZXNzQ29udHJvbEVycm9yRGVzY3Jp
cHRpb247CiAgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nlc0Fj
Y2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1f
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9u
KSkgeworICAgICAgICBpZiAoIXJlc3BvbnNlLnVybCgpLmlzRW1wdHkoKSAmJiAhcGFzc2VzQWNj
ZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9k
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24p
KSB7CiAgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKHJlc3BvbnNlLnVybCgpLCBhY2Nlc3ND
b250cm9sRXJyb3JEZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdCA9IGFkb3B0UHRyKG5ldyBD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbShtX29wdGlvbnMuYWxsb3dDcmVkZW50
aWFscykpOwpAQCAtMTg2LDEwOCArMTY0LDk1IEBACiAgICAgICAgICAgICB8fCAhcHJlZmxpZ2h0
UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbk1ldGhvZChtX2FjdHVhbFJlcXVlc3QtPmh0dHBNZXRo
b2QoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pCiAgICAgICAgICAgICB8fCAhcHJl
ZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMobV9hY3R1YWxSZXF1ZXN0LT5o
dHRwSGVhZGVyRmllbGRzKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgewogICAg
ICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZShyZXNwb25zZS51cmwoKSwgYWNjZXNzQ29udHJvbEVy
cm9yRGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50cnkobV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgcHJlZmxpZ2h0UmVzdWx0LnJlbGVh
c2UoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYm
IG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCkg
eworICAgICAgICBpZiAoIXJlc3BvbnNlLnVybCgpLmlzRW1wdHkoKSAmJiAhbV9zYW1lT3JpZ2lu
UmVxdWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vz
c0NvbnRyb2wpIHsKICAgICAgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJl
c3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVy
bmFsLCAwLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiAgICAgfQorCisgICAgbV9jbGllbnQtPmRpZFJl
Y2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV9yZXNwb25zZVJlY2VpdmVkID0gdHJ1ZTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRhdGFTZW50
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBBU1NFUlQobV9j
bGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwor
ICAgIEFTU0VSVChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKKyAgICBtX2NsaWVudC0+ZGlkU2Vu
ZERhdGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworfQogCi0gICAgLy8gUHJlZmxp
Z2h0IGRhdGEgc2hvdWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIFNo
YXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7
CisKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgZGF0YUxlbmd0aCk7Ci19CisgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBpZiAoIW1fcmVzcG9u
c2VSZWNlaXZlZCAmJiAhZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc291cmNlID8gcmVzb3VyY2UtPnJl
c3BvbnNlKCkgOiBSZXNvdXJjZVJlc3BvbnNlKCkpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCi17
Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICAvLyBUaGUgcmVxdWVzdCBtaWdodCBoYXZlIGJlZW4gY2FuY2Vs
bGVkIGR1cmluZyBkaWRSZWNlaXZlUmVzcG9uc2UoKS4KKyAgICBpZiAoIW1fY2xpZW50KQorICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBQcmVmbGlnaHQgZGF0YSBzaG91bGQgYmUgaW52aXNpYmxl
IHRvIGNsaWVudHMuCi0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgaWYgKHJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoIiIsIDApOwogICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBkYXRhTGVu
Z3RoKTsKLX0KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS0+c2l6ZSgpIC0gbV9kYXRhTGVuZ3RoOwor
ICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IGRvdWJsZSBmaW5pc2hUaW1lKQotewotICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwot
ICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50
aWZpZXIoKSwgZmluaXNoVGltZSk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEt
PmRhdGEoKSArIG1fZGF0YUxlbmd0aCwgbGVuZ3RoKTsKKyAgICBtX2RhdGFMZW5ndGggKz0gbGVu
Z3RoOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewot
ICAgICAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotICAgICAgICBBU1NFUlQobV9v
cHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKLSAg
ICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKLX0KKyAgICBpZiAoaXNB
bGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsK
LSAgICAvLyBtX2xvYWRlciBtYXkgYmUgbnVsbCBpZiB3ZSBhcnJpdmUgaGVyZSB2aWEgU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSBpbiB0aGUgY3RvcgotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVy
LCBsb2FkZXIgPT0gbV9sb2FkZXIgfHwgIW1fbG9hZGVyKTsKLQotICAgIG1fY2xpZW50LT5kaWRG
YWlsKGVycm9yKTsKKyAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgbV9jbGll
bnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiB9CiAKLWJvb2wgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3ZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Up
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9s
b2FkZXIpOworICAgIEFTU0VSVChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAotICAgIGlmICgh
bV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpIHsKLSAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3Jlc3Bv
bnNlUmVjZWl2ZWQpIHsKKyAgICAgICAgaWYgKCFkaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNvdXJj
ZSA/IG1fcmVzb3VyY2UtPnJlc3BvbnNlKCkgOiBSZXNvdXJjZVJlc3BvbnNlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsgLy8gT25seSBGcmFtZUxv
YWRlckNsaWVudCBjYW4gdWx0aW1hdGVseSBwZXJtaXQgY3JlZGVudGlhbCB1c2UuCisgICAgaWYg
KHJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJl
c291cmNlRXJyb3IoIk5ldHdvcmsgUmVxdWVzdCBGYWlsZWQiLCAwLCByZXNvdXJjZS0+dXJsKCks
ICJSZXNvdXJjZSBmYWlsZWQgdG8gbG9hZCIpKTsKKyAgICBlbHNlCisgICAgICAgIGRpZEZpbmlz
aExvYWRpbmcoMCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK3ZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikK
IHsKLSAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICAvLyBVc2VycyBhcmUgbm90
IHByb21wdGVkIGZvciBjcmVkZW50aWFscyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLgotICAg
IGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCkgewotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENG
TkVUV09SSykgfHwgVVNFKENVUkwpCi0gICAgICAgIGxvYWRlci0+aGFuZGxlKCktPnJlY2VpdmVk
UmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotI2Vsc2UKLSAg
ICAgICAgLy8gVGhlc2UgcGxhdGZvcm1zIGRvbid0IHByb3ZpZGUgYSB3YXkgdG8gY29udGludWUg
d2l0aG91dCBjcmVkZW50aWFscywgY2FuY2VsIHRoZSBsb2FkIGFsdG9nZXRoZXIuCi0gICAgICAg
IFVOVVNFRF9QQVJBTShjaGFsbGVuZ2UpOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChsb2Fk
ZXItPmJsb2NrZWRFcnJvcigpKTsKLSAgICAgICAgY2FuY2VsKCk7Ci0jZW5kaWYKLSAgICB9Cisg
ICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJl
cXVlc3QpOworICAgICAgICBBU1NFUlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKKyAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOworICAg
IH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsK
IH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9u
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VE
KGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKSk7Ci19
Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKCkKIHsK
ICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OwpAQCAtMjk1LDYgKzI2
MCw4IEBACiAKICAgICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogCisgICAgY2FuY2VsKGZhbHNlKTsKKwogICAg
IC8vIEl0IHNob3VsZCBiZSBvayB0byBza2lwIHRoZSBzZWN1cml0eSBjaGVjayBzaW5jZSB3ZSBh
bHJlYWR5IGFza2VkIGFib3V0IHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KICAgICBsb2FkUmVxdWVz
dCgqYWN0dWFsUmVxdWVzdCwgU2tpcFNlY3VyaXR5Q2hlY2spOwogfQpAQCAtMzA1LDcgKzI3Miw3
IEBACiAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktp
dEludGVybmFsLCAwLCB1cmwsIGVycm9yRGVzY3JpcHRpb24pKTsKIH0KIAotdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrKQordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgU2VjdXJpdHlDaGVja1BvbGljeSkKIHsKICAgICAvLyBBbnkgY3JlZGVudGlhbCBzaG91bGQg
aGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY3Jvc3Mtc2l0ZSByZXF1ZXN0cy4KICAgICBjb25z
dCBLVVJMJiByZXF1ZXN0VVJMID0gcmVxdWVzdC51cmwoKTsKQEAgLTMxMywxNiArMjgwLDE0IEBA
CiAgICAgQVNTRVJUKG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgcmVxdWVzdFVSTC5wYXNzKCkuaXNF
bXB0eSgpKTsKIAogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIC8vIERvbid0IHNuaWZmIGNv
bnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0Lgot
ICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJh
Y2tzICYmICFtX2FjdHVhbFJlcXVlc3Q7Ci0gICAgICAgIGJvb2wgc25pZmZDb250ZW50ID0gbV9v
cHRpb25zLnNuaWZmQ29udGVudCAmJiAhbV9hY3R1YWxSZXF1ZXN0OwotICAgICAgICAvLyBLZWVw
IGJ1ZmZlcmluZyB0aGUgZGF0YSBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgICAgICBi
b29sIHNob3VsZEJ1ZmZlckRhdGEgPSBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSB8fCBtX2Fj
dHVhbFJlcXVlc3Q7Ci0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBj
YWxsYmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhl
IG9sZCBsb2FkZXIuCi0gICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQobV9kb2N1bWVu
dC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0sIHNl
Y3VyaXR5Q2hlY2ssIHNlbmRMb2FkQ2FsbGJhY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlmZkNvbnRlbnQs
IG1fb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyLCBzaG91bGRCdWZmZXJEYXRhKTsKKyAgICAgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgICAgICBjYW5jZWwoZmFsc2UpOworICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgaWYgKCFtX29wdGlvbmFs
T3V0Z29pbmdSZWZlcnJlci5pc051bGwoKSkKKyAgICAgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRU
UFJlZmVycmVyKG1fb3B0aW9uYWxPdXRnb2luZ1JlZmVycmVyKTsKKyAgICAgICAgbV9yZXNvdXJj
ZSA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RSYXdSZXNvdXJj
ZShuZXdSZXF1ZXN0LCBtX29wdGlvbnMuc25pZmZDb250ZW50LCAhbV9vcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMpOworICAgICAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAgICAgICAgIG1fcmVzb3Vy
Y2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTM1
MSwxMyArMzE2LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkaWRSZWNlaXZl
UmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotCi0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBsZW4gPSBzdGF0aWNfY2Fz
dDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsK
LQotICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllciwgMC4wKTsKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGRhdGEpOworICAg
IGlmICghbV9yZXNwb25zZVJlY2VpdmVkKQorICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UocmVz
cG9uc2UpOworICAgIGRhdGFSZWNlaXZlZCgwLCBidWZmZXIuZ2V0KCkpOworICAgIGRpZEZpbmlz
aExvYWRpbmcoaWRlbnRpZmllcik7CiB9CiAKIGJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojppc0FsbG93ZWRSZWRpcmVjdChjb25zdCBLVVJMJiB1cmwpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gODY5OTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsNyBAQAogICAgIAogICAgIGNsYXNzIFN1YnJlc291cmNlTG9hZGVyIDogcHVibGljIFJl
c291cmNlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmID0gdHJ1ZSwgY29uc3QgU3RyaW5nJiBvcHRpb25hbE91dGdvaW5nUmVmZXJy
ZXIgPSBTdHJpbmcoKSwgYm9vbCBzaG91bGRCdWZmZXJEYXRhID0gdHJ1ZSk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQ
b2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9
IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSwgYm9vbCBzaG91bGRCdWZmZXJE
YXRhID0gdHJ1ZSk7CiAKICAgICAgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAw
OyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103534</attachid>
            <date>2011-08-10 14:31:11 -0700</date>
            <delta_ts>2011-10-04 13:45:12 -0700</delta_ts>
            <desc>work in progress, Aug 10</desc>
            <filename>cachexhr_0810_wip.txt</filename>
            <type>text/plain</type>
            <size>53775</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCShyZXZpc2lvbiA5Mjc3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjksNiArMTI5LDkgQEAKIAogICAgIG1fcmVxdWVzdEluRmxpZ2h0ID0gZmFsc2U7CiAKKyAgICBp
ZiAobV9zdGF0ZSA9PSBPUEVOKQorICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworCiAgICAgaWYg
KCFtX2ZhaWxTaWxlbnRseSkKICAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIApAQCAtMTczLDcgKzE3Niw3
IEBACiAgICAgbV9mYWlsU2lsZW50bHkgPSB0cnVlOwogCiAgICAgaWYgKG1fcmVxdWVzdEluRmxp
Z2h0KQotICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIGNhbmNlbCgpOwogfQog
CiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0CkBAIC0yMTUsNyArMjE4LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoc3RhdHVzQ29kZSA8PSAyMDAgfHwgc3RhdHVzQ29kZSA+IDI5OSkKICAgICAgICAgICAgIG1f
c3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgY2Fu
Y2VsKCk7CiAgICAgfQogfQogCkBAIC0yMzUsMTcgKzIzOCwyMSBAQAogICAgIGVuZFJlcXVlc3Qo
KTsKIH0KIAotdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7
Ci0gICAgaW50IGNhbmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKLSAgICBpZiAoKCht
X3N0YXRlID09IENPTk5FQ1RJTkcpICYmICFjYW5jZWxlZCkgfHwgKChtX3N0YXRlID09IE9QRU4p
ICYmIGNhbmNlbGVkKSkKLSAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBtX3N0YXRlID0g
Q0xPU0VEOwogICAgIGVuZFJlcXVlc3QoKTsKIH0KIAogdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKQogewogICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgY2FuY2VsKCk7
Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmNhbmNlbCgpCit7CisgICAgZW5kUmVxdWVzdCgpOwog
ICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuaAkocmV2aXNpb24gOTI3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAKIAogICAgICAgICB2b2lkIGNvbm5l
Y3QoKTsKICAgICAgICAgdm9pZCBlbmRSZXF1ZXN0KCk7CisgICAgICAgIHZvaWQgY2FuY2VsKCk7
CiAgICAgICAgIHZvaWQgc2NoZWR1bGVSZWNvbm5lY3QoKTsKICAgICAgICAgdm9pZCByZWNvbm5l
Y3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopOwogICAgICAgICB2b2lkIHBhcnNlRXZl
bnRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
c291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDkyNzc3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MzgsNiArNTM4LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
ZXJyb3JDb2RlKSB7CisgICAgICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+IHByb3RlY3Qo
dGhpcyk7CiAgICAgICAgIG5vdGlmeVJlc3BvbnNlT25FcnJvcigpOwogICAgICAgICBub3RpZnlG
aW5pc2goKTsKICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDkyNzc3
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01ODYs
NiArNTg2LDcgQEAKICAgICAgICAgICAgICdsb2FkZXIvYXJjaGl2ZS9taHRtbC9NSFRNTFBhcnNl
ci5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
Q2xpZW50LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oJywKQEAgLTI4MDUsNiArMjgwNiw3IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oJywK
ICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwJywKKyAgICAgICAgICAg
ICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5Mjc3NykK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTQ1Myw2ICs1NDUzLDggQEAKIAkJRDBDRTU4RjkxMjVFNENDMjAwRjNG
MTk5IC8qIFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDBDRTU4RjcxMjVFNENDMjAwRjNGMTk5IC8qIFJlc291cmNl
TG9hZFNjaGVkdWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUQwRDE0MUIyMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBE
MTQxQjAxMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAgKi87IH07
CiAJCUQwRDE0MUIzMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRDE0MUIxMTJC
MkJGNTIwMEUzOTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEMEVGOUY4MDEzN0I1ODE0MDA0QjYx
MTYgLyogQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDBFRjlGN0UxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jl
c291cmNlLmNwcCAqLzsgfTsKKwkJRDBFRjlGODExMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJh
d1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEMEVGOUY3RjEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVkUmF3UmVzb3VyY2UuaCAqLzsgfTsK
IAkJRDBGRjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUIxMUY4QzQ1QTAwN0U3
NEUwIC8qIFBpbmdMb2FkZXIuY3BwICovOyB9OwogCQlEMEZGMkE1RTExRjhDNDVBMDA3RTc0RTAg
LyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLzsgfTsKIAkJ
RDIzQ0E1NUQwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyM0NBNTVDMEFCMEVBQUUwMDUx
MDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmggKi87IH07CkBAIC0xMjE4Miw2ICsxMjE4NCw4IEBA
CiAJCUQwQ0U1OEY3MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRDE0MUIwMTJCMkJGNTIwMEUzOTYyMCAv
KiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDBEMTQxQjExMkIyQkY1MjAwRTM5NjIwIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDBFRjlGN0UxMzdCNTgxNDAwNEI2
MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRDBFRjlGN0YxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJhd1Jlc291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5n
TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2Fk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEZGMkE1QzExRjhDNDVBMDA3
RTc0RTAgLyogUGluZ0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
aW5nTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyM0NBNTQ4MEFCMEU5
ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJhbmdlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTE4
LDYgKzE3NTIyLDggQEAKIAkJCQlCQzY0QjRDQTBDQjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9u
dC5oICovLAogCQkJCUJDQjE2QzAyMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5jcHAg
Ki8sCiAJCQkJQkNCMTZDMDMwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZEltYWdlLmggKi8sCisJ
CQkJRDBFRjlGN0UxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCAqLywK
KwkJCQlEMEVGOUY3RjEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVkUmF3UmVzb3VyY2UuaCAqLywK
IAkJCQlCQ0IxNkMwNjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuY3BwICovLAog
CQkJCUJDQjE2QzA3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5oICovLAogCQkJ
CUJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oICovLApA
QCAtMjA0OTgsNiArMjA1MDQsNyBAQAogCQkJCTUxQ0JGQzk5MEQxMEU0ODMwMDJEQkY1MSAvKiBD
YWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMUMwOTc5
QzNCRDAwNDY3NzQxIC8qIENhY2hlZEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxODQ2
OTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDBF
RjlGODExMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0IxNkMyMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRkIyRTVFMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJj
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjIwOTc5QzNCRDAwNDY3NzQxIC8q
IENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODA3LDYg
KzIzODE0LDcgQEAKIAkJCQk1MUMwQUE0MTBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMUIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDE4NDZBMEIwODYwMkEwMDRBODI1RiAv
KiBDYWNoZWRQYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQwRUY5RjgwMTM3QjU4MTQwMDRC
NjExNiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMx
RjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNCMTZDMjEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0N0I0QkU5MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25v
bGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
Q2FjaGVkUmF3UmVzb3VyY2VfaAorI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9oCisKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKKworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2UgOiBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVx
dWVzdCYpOworICAgIAorcHJpdmF0ZTogICAgCisgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IENhY2hlZFJlc291cmNlOjps
b2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCB0cnVlLCBEb1NlY3VyaXR5Q2hlY2spOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAg
dmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVz
Q29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWxs
Q2xpZW50c1JlbW92ZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKK307CisKK30KKworI2VuZGlmIC8vIENhY2hlZFJh
d1Jlc291cmNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gOTI3NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IkNhY2hlZFJhd1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIgpAQCAtNjYsNiArNjcsOCBAQAogICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNjcmlwdChy
ZXF1ZXN0LCBjaGFyc2V0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6
CiAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkRm9udChyZXF1ZXN0KTsKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpSYXdSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSYXdSZXNv
dXJjZShyZXF1ZXN0KTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpYU0xTdHlsZVNoZWV0OgogICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhTTFN0eWxlU2hlZXQo
cmVxdWVzdCk7CkBAIC0xNzAsOSArMTczLDEwIEBACiAgICAgYm9vbCBpbkNhY2hlID0gbWVtb3J5
Q2FjaGUoKS0+YWRkKHVzZXJTaGVldCk7CiAgICAgaWYgKCFpbkNhY2hlKQogICAgICAgICB1c2Vy
U2hlZXQtPnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAgCi0gICAgdXNlclNoZWV0LT5sb2FkKHRoaXMs
IC8qaW5jcmVtZW50YWwqLyBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ssIC8qc2VuZFJlc291cmNl
TG9hZENhbGxiYWNrcyovIGZhbHNlKTsKIAorICAgIHVzZXJTaGVldC0+c2V0U2VuZFJlc291cmNl
TG9hZENhbGxiYWNrcyhmYWxzZSk7CisgICAgdXNlclNoZWV0LT5sb2FkKHRoaXMsIC8qaW5jcmVt
ZW50YWwqLyBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2spOworCiAgICAgaWYgKCFpbkNhY2hlKQog
ICAgICAgICB1c2VyU2hlZXQtPnNldEluQ2FjaGUoZmFsc2UpOwogICAgIApAQCAtMjAwLDYgKzIw
NCwxMSBAQAogfQogI2VuZGlmCiAKK0NhY2hlZFJhd1Jlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBz
ZW5kTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJl
c291cmNlOjpSYXdSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCksIFJlc291cmNlTG9hZFByaW9y
aXR5VW5yZXNvbHZlZCwgZmFsc2UsIHNlbmRMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25p
ZmYpKTsKK30KKwogYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3VyZUNvbnRl
bnQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsKSBjb25zdAogewog
ICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMjI0LDEzICsyMzMsMTQgQEAKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6
CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZWZldGNoOgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVyZW5kZXI6CiAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgogICAgICAgICAvLyBQcmVmZXRj
aCBjYW5ub3QgYWZmZWN0IHRoZSBjdXJyZW50IGRvY3VtZW50LgorI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjUyLDYgKzI2Miw4
IEBACiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQ6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlOgorICAgIC8vIFJhd1Jlc291cmNlcyBhcmUgYWxyZWFkeSB2ZXR0ZWQgYnkgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgog
I2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQ
cmVmZXRjaDoKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlcmVuZGVyOgpAQCAtMzAw
LDE4ICszMTIsMTkgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgogI2lmIEVOQUJM
RShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoK
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlcmVuZGVyOgogICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKKyNlbmRpZgogICAgICAgICBicmVhazsKLSNlbmRp
ZgogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBl
LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGJvb2wgZm9yUHJlbG9hZCkKK0NhY2hlZFJlc291cmNl
KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlIHR5cGUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgYm9vbCBmb3JQcmVsb2FkLCBib29sIHNl
bmRMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKICAgICBLVVJMIHVy
bCA9IHJlcXVlc3QudXJsKCk7CiAgICAgCkBAIC0zNDIsMTEgKzM1NSwxMSBAQAogCiAgICAgc3dp
dGNoIChkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kodHlwZSwgcmVxdWVzdCwgZm9yUHJlbG9h
ZCwgcmVzb3VyY2UpKSB7CiAgICAgY2FzZSBMb2FkOgotICAgICAgICByZXNvdXJjZSA9IGxvYWRS
ZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSk7CisgICAgICAgIHJlc291
cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHJlcXVlc3QsIGNoYXJzZXQsIHByaW9yaXR5LCBzZW5k
TG9hZENhbGxiYWNrcywgc2hvdWxkQ29udGVudFNuaWZmKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBSZWxvYWQ6CiAgICAgICAgIG1lbW9yeUNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7Ci0g
ICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHJlcXVlc3QsIGNoYXJzZXQsIHBy
aW9yaXR5KTsKKyAgICAgICAgcmVzb3VyY2UgPSBsb2FkUmVzb3VyY2UodHlwZSwgcmVxdWVzdCwg
Y2hhcnNldCwgcHJpb3JpdHksIHNlbmRMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJldmFsaWRhdGU6CiAgICAgICAgIHJlc291cmNl
ID0gcmV2YWxpZGF0ZVJlc291cmNlKHJlc291cmNlLCBwcmlvcml0eSk7CkBAIC0zOTMsNyArNDA2
LDcgQEAKICAgICByZXR1cm4gbmV3UmVzb3VyY2U7CiB9CiAKLUNhY2hlZFJlc291cmNlKiBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6bG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUs
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK0NhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6bG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0
eSBwcmlvcml0eSwgYm9vbCBzZW5kTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpCiB7CiAgICAgQVNTRVJUKCFtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZvclVSTChyZXF1ZXN0
LnVybCgpKSk7CiAgICAgCkBAIC00MDksNiArNDIyLDggQEAKICAgICAgICAgcmVzb3VyY2UtPnNl
dEluQ2FjaGUodHJ1ZSk7CiAgICAgCiAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0eShwcmlv
cml0eSk7CisgICAgcmVzb3VyY2UtPnNob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25p
ZmYpOworICAgIHJlc291cmNlLT5zZXRTZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRMb2Fk
Q2FsbGJhY2tzKTsKICAgICByZXNvdXJjZS0+bG9hZCh0aGlzKTsKICAgICAKICAgICBpZiAoIWlu
Q2FjaGUpIHsKQEAgLTQ0NSw2ICs0NjAsOSBAQAogICAgICAgICByZXR1cm4gUmVsb2FkOwogICAg
IH0KICAgICAKKyAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291
cmNlOjpSYXdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKyAgICAKICAgICAvLyBE
b24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBhc3RpbmcuCiAgICAgaWYgKG1fYWxsb3dTdGFs
ZVJlc291cmNlcykKICAgICAgICAgcmV0dXJuIFVzZTsKQEAgLTYxOSw3ICs2MzcsNyBAQAogCiB2
b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjppbmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2Fj
aGVkUmVzb3VyY2UqIHJlcykKIHsKLSAgICBpZiAocmVzLT5pc0xpbmtSZXNvdXJjZSgpKQorICAg
IGlmIChyZXMtPmlnbm9yZUZvclJlcXVlc3RDb3VudCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICArK21fcmVxdWVzdENvdW50OwpAQCAtNjI3LDcgKzY0NSw3IEBACiAKIHZvaWQgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSog
cmVzKQogewotICAgIGlmIChyZXMtPmlzTGlua1Jlc291cmNlKCkpCisgICAgaWYgKHJlcy0+aWdu
b3JlRm9yUmVxdWVzdENvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC0tbV9yZXF1ZXN0
Q291bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAJKHJldmlzaW9uIDkyNzc3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQAogdm9pZCBDYWNoZWRJ
bWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCiB7
CiAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZUxvYWRlciB8fCBjYWNoZWRSZXNvdXJjZUxvYWRlci0+
YXV0b0xvYWRJbWFnZXMoKSkKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVz
b3VyY2VMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7CisgICAgICAgIENhY2hl
ZFJlc291cmNlOjpsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCB0cnVlLCBEb1NlY3VyaXR5Q2hl
Y2spOwogICAgIGVsc2UKICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAko
cmV2aXNpb24gOTI3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogY2xhc3MgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFzcyBDYWNoZWRJbWFnZTsK
K2NsYXNzIENhY2hlZFJhd1Jlc291cmNlOwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ2Fj
aGVkWFNMU3R5bGVTaGVldDsKIGNsYXNzIERvY3VtZW50OwpAQCAtNjQsNiArNjUsNyBAQAogICAg
IENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIENhY2hlZFNjcmlwdCogcmVxdWVz
dFNjcmlwdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIENh
Y2hlZEZvbnQqIHJlcXVlc3RGb250KFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJhd1Jl
c291cmNlKiByZXF1ZXN0UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTG9h
ZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpOwogCiAjaWYgRU5BQkxFKFhTTFQp
CiAgICAgQ2FjaGVkWFNMU3R5bGVTaGVldCogcmVxdWVzdFhTTFN0eWxlU2hlZXQoUmVzb3VyY2VS
ZXF1ZXN0Jik7CkBAIC0xMDcsMTAgKzEwOSwxMCBAQAogICAgIGJvb2wgY2hlY2tJbnNlY3VyZUNv
bnRlbnQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmKSBjb25zdDsKICAgICAKIHBy
aXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCwgYm9vbCBpc1By
ZWxvYWQgPSBmYWxzZSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGVSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSosIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KTsKLSAgICBDYWNo
ZWRSZXNvdXJjZSogbG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5KTsKLSAg
ICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJlcXVl
c3QmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVx
dWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJp
b3JpdHlVbnJlc29sdmVkLCBib29sIGlzUHJlbG9hZCA9IGZhbHNlLCBib29sIHNlbmRMb2FkQ2Fs
bGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICBDYWNo
ZWRSZXNvdXJjZSogcmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VM
b2FkUHJpb3JpdHkpOworICAgIENhY2hlZFJlc291cmNlKiBsb2FkUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHksIGJvb2wgc2VuZExvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKTsKKyAgICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBl
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogCiAgICAgZW51bSBS
ZXZhbGlkYXRpb25Qb2xpY3kgeyBVc2UsIFJldmFsaWRhdGUsIFJlbG9hZCwgTG9hZCB9OwogICAg
IFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVz
b3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVz
b3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5Mjc3NykKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJl
c291cmNlOgogICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOwog
ICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKICAgICAgICAgICAgIHJldHVybiBSZXNvdXJj
ZUxvYWRQcmlvcml0eUxvdzsKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgpAQCAtOTMsNiArOTQsNyBAQAogICAgICwg
bV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGVkRnJv
bU5ldHdvcmtpbmdMYXllcihmYWxzZSkKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cyh0cnVlKQorICAgICwgbV9zaG91bGRDb250ZW50U25pZmYodHJ1ZSkKICAgICAsIG1faW5DYWNo
ZShmYWxzZSkKICAgICAsIG1fbG9hZGluZyhmYWxzZSkKICAgICAsIG1fdHlwZSh0eXBlKQpAQCAt
MTMxLDExICsxMzMsMTAgQEAKICAgICAgICAgbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlci0+
cmVtb3ZlQ2FjaGVkUmVzb3VyY2UodGhpcyk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6Omxv
YWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBib29sIGluY3Jl
bWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0
eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2spCiB7Ci0gICAgbV9zZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzID0gc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKICAgICBtX2xvYWRpbmcgPSB0cnVl
OwotICAgIG1fcmVxdWVzdCA9IENhY2hlZFJlc291cmNlUmVxdWVzdDo6bG9hZChjYWNoZWRSZXNv
dXJjZUxvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpOworICAgIG1fcmVxdWVzdCA9IENhY2hlZFJlc291cmNlUmVxdWVzdDo6
bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hl
Y2ssIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgbV9zaG91bGRDb250ZW50U25pZmYpOwog
ICAgIGlmIChtX3JlcXVlc3QpIHsKICAgICAgICAgbV9zdGF0dXMgPSBQZW5kaW5nOwogICAgICAg
ICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+aW5jcmVtZW50UmVxdWVzdENvdW50KHRoaXMpOwpAQCAt
MjI0LDEwICsyMjUsMTQgQEAKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJj
ZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitib29sIENh
Y2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKIHsKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgbV9yZXNwb25zZVRpbWVzdGFt
cCA9IGN1cnJlbnRUaW1lKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2Ns
aWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQor
ICAgICAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOworICAgIHJldHVy
biBtX3JlcXVlc3Q7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFNlcmlhbGl6ZWRDYWNo
ZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKQEAgLTI1OCw2ICsyNjMs
MTYgQEAKICAgICByZXR1cm4gbV9jYWNoZWRNZXRhZGF0YS5nZXQoKTsKIH0KIAordW5zaWduZWQg
bG9uZyBDYWNoZWRSZXNvdXJjZTo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cmVxdWVzdCA/IG1fcmVxdWVzdC0+aWRlbnRpZmllcigpIDogMDsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQoreyAgICAKKyAgICBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0
cnVlOworfQorCiB2b2lkIENhY2hlZFJlc291cmNlOjpzdG9wTG9hZGluZygpCiB7CiAgICAgQVNT
RVJUKG1fcmVxdWVzdCk7ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAkocmV2aXNpb24gOTI3NzcpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOSBAQAogICAgIGNsYXNzIEltYWdlOwogICAgIGNsYXNz
IEludFJlY3Q7CiAgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Cisg
ICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICAg
ICAvKioKICAgICAgKiBAaW50ZXJuYWwKQEAgLTUwLDYgKzUzLDExIEBACiAgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQogCisgICAgICAgIHZp
cnR1YWwgdm9pZCBkYXRhU2VudChDYWNoZWRSZXNvdXJjZSosIHVuc2lnbmVkIGxvbmcgbG9uZyAv
KiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQg
Ki8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNv
dXJjZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIFNoYXJlZEJ1ZmZlciopIHsgfQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNl
UmVxdWVzdCYpIHsgfQorCiAgICAgICAgIC8vIENhbGxlZCB3aGVuZXZlciBhIGZyYW1lIG9mIGFu
IGltYWdlIGNoYW5nZXMsIGVpdGhlciBiZWNhdXNlIHdlIGdvdCBtb3JlIGRhdGEgZnJvbSB0aGUg
bmV0d29yayBvcgogICAgICAgICAvLyBiZWNhdXNlIHdlIGFyZSBhbmltYXRpbmcuIElmIG5vdCBu
dWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCByZWN0IG9mIHRoZSBpbWFnZS4KICAgICAg
ICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3Qq
ID0gMCkgeyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmgJKHJldmlzaW9uIDkyNzc3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAKICAgICAg
ICAgSW1hZ2VSZXNvdXJjZSwKICAgICAgICAgQ1NTU3R5bGVTaGVldCwKICAgICAgICAgU2NyaXB0
LAotICAgICAgICBGb250UmVzb3VyY2UKKyAgICAgICAgRm9udFJlc291cmNlLAorICAgICAgICBS
YXdSZXNvdXJjZQogI2lmIEVOQUJMRShYU0xUKQogICAgICAgICAsIFhTTFN0eWxlU2hlZXQKICNl
bmRpZgpAQCAtODUsOCArODYsOCBAQAogICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFR5cGUpOwogICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlKCk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyKSAgeyBsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBmYWxzZSwgRG9TZWN1cml0eUNo
ZWNrLCB0cnVlKTsgfQotICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciosIGJvb2wg
aW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcyk7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyKSAgeyBsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBmYWxzZSwg
RG9TZWN1cml0eUNoZWNrKTsgfQorICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlcios
IGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGVu
Y29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KQEAgLTExNCw3ICsxMTUsNiBAQAog
ICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKICAgICB9OwogICAgIFByZWxv
YWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByZWxv
YWRSZXN1bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KLSAgICB2b2lkIHNldFJlcXVlc3RlZEZyb21O
ZXR3b3JraW5nTGF5ZXIoKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9IHRydWU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
KTsKICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KQEAgLTEzNSwxMyAr
MTM1LDE1IEBACiAgICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wgYikgeyBtX2xvYWRpbmcgPSBiOyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgYm9vbCBpc0xpbmtSZXNvdXJjZSgpIGNvbnN0CisgICAgYm9vbCBpZ25vcmVGb3JSZXF1ZXN0
Q291bnQoKSBjb25zdAogICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBSYXdSZXNvdXJj
ZQogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgICAgICByZXR1cm4gdHlwZSgpID09IExp
bmtQcmVmZXRjaCB8fCB0eXBlKCkgPT0gTGlua1ByZXJlbmRlciB8fCB0eXBlKCkgPT0gTGlua1N1
YnJlc291cmNlOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfHwg
dHlwZSgpID09IExpbmtQcmVmZXRjaAorICAgICAgICAgICAgfHwgdHlwZSgpID09IExpbmtQcmVy
ZW5kZXIKKyAgICAgICAgICAgIHx8IHR5cGUoKSA9PSBMaW5rU3VicmVzb3VyY2UKICNlbmRpZgor
ICAgICAgICAgICAgOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGFjY2Vzc0NvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hY2Nlc3NDb3VudDsgfQpAQCAtMTY3LDcgKzE2OSw4IEBACiAKICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFibGVEYXRhKTsgcmV0dXJu
IG1fZGF0YS5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgYm9vbCBzZXRSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAKICAgICAvLyBTZXRzIHRoZSBzZXJp
YWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRoZSBwbGF0Zm9ybSdzIGNhY2hlLgpAQCAt
MTk0LDYgKzE5Nyw3IEBACiAgICAgYm9vbCB3YXNDYW5jZWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdHVzID09IENhbmNlbGVkOyB9CiAgICAgYm9vbCBlcnJvck9jY3VycmVkKCkgY29uc3QgeyBy
ZXR1cm4gKG1fc3RhdHVzID09IExvYWRFcnJvciB8fCBtX3N0YXR1cyA9PSBEZWNvZGVFcnJvcik7
IH0KIAorICAgIHZvaWQgc2V0U2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhib29sIHNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MpIHsgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrczsgfQogICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KQEAgLTIyNiw2ICsyMzAs
MTMgQEAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAgICB2b2lkIHVw
ZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFs
aWRhdGluZ1Jlc3BvbnNlKTsKIAorICAgIHZvaWQgc2hvdWxkQ29udGVudFNuaWZmKGJvb2wgc2hv
dWxkQ29udGVudFNuaWZmKSB7IG1fc2hvdWxkQ29udGVudFNuaWZmID0gc2hvdWxkQ29udGVudFNu
aWZmOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9C
ZVNlbnQgKi8pIHsgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIElu
cHNlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBpbiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuIEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KKyAgICB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKIApA
QCAtMjcxLDYgKzI4Miw3IEBACiAgICAgYm9vbCBtX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0
IDogMTsKICAgICBib29sIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA6IDE7CiAgICAg
Ym9vbCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgOiAxOworICAgIGJvb2wgbV9zaG91bGRD
b250ZW50U25pZmYgOiAxOwogCiAgICAgYm9vbCBtX2luQ2FjaGUgOiAxOwogICAgIGJvb2wgbV9s
b2FkaW5nIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiA5Mjc3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgpAQCAtNjAsNiArNjEsOCBAQAogICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0
OjpUYXJnZXRJc0ZvbnRSZXNvdXJjZTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJl
c291cmNlOgogICAgICAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ltYWdlOwor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgICAgICByZXR1cm4gUmVz
b3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOyAgICAKICNpZiBFTkFCTEUoTElOS19Q
UkVGRVRDSCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6CiAgICAgICAg
IHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzUHJlZmV0Y2g7CkBAIC04NSwxMyArODgs
MTUgQEAKIAogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp+Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KCkK
IHsKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOwog
fQogCi1QYXNzT3duUHRyPENhY2hlZFJlc291cmNlUmVxdWVzdD4gQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0Ojpsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9s
aWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK1Bhc3NP
d25QdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmxvYWQo
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJp
dHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRl
bnRTbmlmZikKIHsKICAgICBPd25QdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0g
YWRvcHRQdHIobmV3IENhY2hlZFJlc291cmNlUmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlciwg
cmVzb3VyY2UsIGluY3JlbWVudGFsKSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VS
ZXF1ZXN0ID0gcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpOworICAgIFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0ID0gcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgpOwogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIHJlc291cmNlUmVxdWVzdC5zZXRUYXJnZXRUeXBlKGNhY2hl
ZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZShyZXNvdXJjZS0+dHlwZSgpKSk7CiAjZW5kaWYKQEAg
LTEyNSw3ICsxMzAsNyBAQAogICAgIHJlc291cmNlUmVxdWVzdC5zZXRQcmlvcml0eShwcmlvcml0
eSk7CiAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IHJlc291cmNlTG9h
ZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNoZWRSZXNvdXJjZUxvYWRl
ci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwKLSAgICAgICAgcmVxdWVzdC5nZXQoKSwgcmVzb3VyY2VS
ZXF1ZXN0LCBwcmlvcml0eSwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cyk7CisgICAgICAgIHJlcXVlc3QuZ2V0KCksIHJlc291cmNlUmVxdWVzdCwgcHJpb3JpdHksIHNl
Y3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENvbnRlbnRTbmlm
Zik7CiAgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291cmNlcyBpbiBvdGhlciBmcmFtZXMgd2Vy
ZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8KICAgICAgICAgTE9HKFJlc291cmNlTG9h
ZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5nICclcyciLCByZXNvdXJjZS0+dXJsKCkuc3RyaW5n
KCkubGF0aW4xKCkuZGF0YSgpKTsKQEAgLTEzOCwxNSArMTQzLDI3IEBACiAgICAgcmV0dXJuIHJl
cXVlc3QucmVsZWFzZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6d2lsbFNl
bmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVx
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp3
aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0
JiByZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmICghbV9j
YWNoZWRSZXNvdXJjZUxvYWRlci0+Y2hlY2tJbnNlY3VyZUNvbnRlbnQobV9yZXNvdXJjZS0+dHlw
ZSgpLCByZXEudXJsKCkpKSB7CiAgICAgICAgIGxvYWRlci0+Y2FuY2VsKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgbV9yZXNvdXJjZS0+c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdM
YXllcigpOworICAgIG1fcmVzb3VyY2UtPndpbGxTZW5kUmVxdWVzdChyZXEsIHJlc3BvbnNlKTsK
IH0KIAordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmNhbmNlbCgpCit7CisgICAgaWYgKG1f
ZmluaXNoaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9sb2FkZXItPmNhbmNlbCgpOworfQor
Cit1bnNpZ25lZCBsb25nIENhY2hlZFJlc291cmNlUmVxdWVzdDo6aWRlbnRpZmllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7Cit9CisKIHZvaWQgQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGRvdWJsZSkKIHsKICAgICBpZiAobV9maW5pc2hpbmcpCkBAIC0yMjgsNyArMjQ1LDkgQEAK
ICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmV2YWxpZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwog
ICAgIH0KIAotICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJjZT4gcHJvdGVjdChtX3Jlc291cmNlKTsKKyAg
ICBpZiAoIW1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOwog
ICAgIGlmICghZW5jb2RpbmcuaXNOdWxsKCkpCkBAIC0yNjAsOSArMjc5LDggQEAKICAgICBpZiAo
bV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9yZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAg
ICBpZiAoIW1fcmVzb3VyY2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0g
ICAgICAgICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsK
KyAgICBpZiAobV9yZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCAm
JiAhbV9yZXNvdXJjZS0+c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSkgeworICAg
ICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjgxLDcgKzI5OSwxMiBAQAogICAgIEFTU0VSVCghbV9y
ZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRvcigpKTsKICAgICBtX3Jlc291cmNlLT5zZXRTZXJpYWxp
emVkQ2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSk7CiB9Ci0gICAgCisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0OjpkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
Cit7CisgICAgbV9yZXNvdXJjZS0+ZGlkU2VuZERhdGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9C
ZVNlbnQpOworfQorCiB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZW5kKCkKIHsKICAgICBt
X2NhY2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRG9uZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRv
IEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKworI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVz
b3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisgICAgOiBDYWNoZWRSZXNv
dXJjZShyZXNvdXJjZVJlcXVlc3QsIFJhd1Jlc291cmNlKQoreworfQorCit2b2lkIENhY2hlZFJh
d1Jlc291cmNlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIENhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIG1fZGF0YS5nZXQo
KSk7CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30K
Kwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjKQoreworICAgIGlmIChtX2RhdGEpIHsKKyAgICAgICAgYy0+cmVzcG9uc2VSZWNlaXZl
ZCh0aGlzLCBtX3Jlc3BvbnNlKTsKKyAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIG1fZGF0
YS5nZXQoKSk7CisgICAgfQorCisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsK
K30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQoreworICAg
IGlmIChtX3JlcXVlc3QpIHsKKyAgICAgICAgbV9yZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSh0aGlzKTsKKyAgICAgICAgbV9yZXF1ZXN0LT5jYW5j
ZWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OndpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIGlmICghcmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAgICAgICB3aGlsZSAoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgIGMtPnJlZGlyZWN0UmVjZWl2
ZWQodGhpcywgcmVxdWVzdCk7CisgICAgfQorCisgICAgQ2FjaGVkUmVzb3VyY2U6OndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIgdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcu
bmV4dCgpKQorICAgICAgICBjLT5kYXRhU2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNU
b0JlU2VudCk7Cit9CisKK30gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNp
b24gOTI3NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSwxNSBAQAogCiAgICAgY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0IDogcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCB7
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q+IGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wg
aW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcyk7CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFJlc291cmNlUmVxdWVz
dD4gbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNy
ZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CiAgICAgICAgIH5DYWNoZWRSZXNvdXJjZVJl
cXVlc3QoKTsKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOyB9CisgICAgICAg
IHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklYTUU6IExpa2UgQ2FjaGVkUmVzb3VyY2U6
OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFjayBmb3IgcHJlZmxpZ2h0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuCisgICAgICAgIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAgICAg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVkUmVzb3Vy
Y2UqLCBib29sIGluY3JlbWVudGFsKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVx
dWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKQEAgLTU2LDYgKzYwLDggQEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZv
aWQgZW5kKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKTsKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IG1fbG9hZGVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbV9jYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci5oCShyZXZpc2lvbiA5Mjc3NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOSBAQAogI2lmbmRl
ZiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXJfaAogI2RlZmluZSBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXJfaAogCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNp
bmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVM
b2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KQEAgLTQyLDEzICs0MywxNCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2U7CiAgICAg
Y2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudDsKIAotICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9h
ZGVyLCBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CisgICAgY2xhc3MgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VD
bGllbnQgIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgog
ICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJik7CkBAIC01Niw3ICs1OCw2IEBACiAgICAgICAgIHZpcnR1
YWwgfkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWwoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAK
ICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+OjpyZWY7
CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPjo6ZGVy
ZWY7CkBAIC03MywyMCArNzQsMTkgQEAKIAogICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgQmxvY2tpbmdCZWhhdmlvciwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsK
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVy
KiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bEJ5dGVzVG9CZVNlbnQpOworICAgICAgICB2b2lkIHN0YXJ0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOworICAgICAgICB2b2lkIGNsZWFyUmVzb3VyY2UoKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGRhdGFMZW5ndGgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
Y2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAg
ICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50
KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNw
b25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgU2hhcmVk
QnVmZmVyKiBkYXRhKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2Fj
aGVkUmVzb3VyY2UqLCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGdl
dFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVyKiwgYm9vbCYgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKTsKLQogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAg
ICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91Ymxl
IGZpbmlzaFRpbWUpOworICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5B
Y2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
OwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nlc3MoKTsKQEAgLTk3LDEyICs5NywxMyBAQAog
CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCi0gICAg
ICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNlOwogICAgICAgICBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICAgICAg
Ym9vbCBtX3NhbWVPcmlnaW5SZXF1ZXN0OwogICAgICAgICBib29sIG1fYXN5bmM7CisgICAgICAg
IGludCBtX2RhdGFMZW5ndGg7CiAgICAgICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IG1fYWN0
dWFsUmVxdWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBwcmVmbGlnaHQg
Y2hlY2tzCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDkyNzc3
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE5ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgogCi0jaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3VicmVz
b3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC01NiwyNCArNTUsMjggQEAKIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50JiBjbGllbnQsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewog
ICAgIC8vIFRoZSBsb2FkZXIgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMgdGhpcyBmdW5jdGlv
biBleGl0cy4KLSAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBh
ZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCAmY2xpZW50LCBM
b2FkU3luY2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOworICAgIFJlZlB0cjxEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIExvYWRTeW5jaHJvbm91c2x5LCByZXF1ZXN0LnVy
bCgpLCBvcHRpb25zKSk7CisgICAgbG9hZGVyLT5zdGFydChyZXF1ZXN0KTsKICAgICBBU1NFUlQo
bG9hZGVyLT5oYXNPbmVSZWYoKSk7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25v
dXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKKyAg
ICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25v
dXNseSwgcmVxdWVzdC51cmwoKSwgb3B0aW9ucykpOworICAgIGxvYWRlci0+c3RhcnQocmVxdWVz
dCk7CisgICAgaWYgKCFsb2FkZXItPm1fcmVzb3VyY2UpCiAgICAgICAgIGxvYWRlciA9IDA7CiAg
ICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogY2xpZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3Is
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMmIG9wdGlvbnMpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgOiBtX3Jlc291cmNl
KDApCisgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkpCiAgICAgLCBtX2FzeW5jKGJs
b2NraW5nQmVoYXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQorICAgICwgbV9kYXRhTGVuZ3Ro
KDApCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAsIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50
aWZpZXIoMCkKICNlbmRpZgpAQCAtODIsNyArODUsMTAgQEAKICAgICBBU1NFUlQoY2xpZW50KTsK
ICAgICAvLyBTZXR0aW5nIGFuIG91dGdvaW5nIHJlZmVyZXIgaXMgb25seSBzdXBwb3J0ZWQgaW4g
dGhlIGFzeW5jIGNvZGUgcGF0aC4KICAgICBBU1NFUlQobV9hc3luYyB8fCByZXF1ZXN0Lmh0dHBS
ZWZlcnJlcigpLmlzRW1wdHkoKSk7Cit9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpzdGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CiAgICAgaWYgKG1fc2Ft
ZU9yaWdpblJlcXVlc3QgfHwgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBB
bGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMpIHsKICAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwg
RG9TZWN1cml0eUNoZWNrKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyLDYwICsxMzgsMzMgQEAK
IAogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkK
IHsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOwor
ICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhp
cyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAg
IGlmICghbV9sb2FkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwo
KTsKLSAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQoKTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAg
Y2xlYXJSZXNvdXJjZSgpOwogICAgIG1fY2xpZW50ID0gMDsKIH0KIAotdm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCB2YWx1ZSkKK3ZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpjbGVhclJlc291cmNlKCkKIHsKLSAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHZhbHVlKTsKLX0KLQotdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLQotICAgIGlmICghaXNBbGxv
d2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLSAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxS
ZWRpcmVjdENoZWNrKCk7Ci0gICAgICAgIHJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAobV9jbGllbnQtPmlzRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudFRocmVhZGFibGVM
b2FkZXJDbGllbnQqPihtX2NsaWVudCktPndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVj
dFJlc3BvbnNlKTsKKyAgICBtX2RhdGFMZW5ndGggPSAwOworICAgIGlmIChtX3Jlc291cmNlKSB7
CisgICAgICAgIG1fcmVzb3VyY2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9yZXNv
dXJjZSA9IDA7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
U2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJU
KG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVy
KTsKLQotICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0Jl
U2VudCk7CisgICAgQVNTRVJUKHJlc291cmNlID09IG1fcmVzb3VyY2UpOworICAgIGRpZFJlY2Vp
dmVSZXNwb25zZShyZXNvdXJjZS0+aWRlbnRpZmllcigpLCByZXNwb25zZSk7CiB9CiAKLXZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAg
QVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7Ci0gICAgZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRl
ci0+aWRlbnRpZmllcigpLCByZXNwb25zZSk7Ci19Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwot
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRp
ZmllcikgewogICAgICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9kb2N1bWVudC0+ZnJh
bWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CkBAIC0xOTYsNyArMTc1LDcgQEAKIAog
ICAgIFN0cmluZyBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbjsKICAgICBpZiAobV9hY3R1
YWxSZXF1ZXN0KSB7Ci0gICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3Bv
bnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNz
Q29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CisgICAgICAgIGlmICghcmVzcG9uc2UudXJsKCku
aXNFbXB0eSgpICYmICFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nlc3NDb250cm9sRXJyb3JE
ZXNjcmlwdGlvbikpIHsKICAgICAgICAgICAgIHByZWZsaWdodEZhaWx1cmUocmVzcG9uc2UudXJs
KCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjExLDIyICsxOTAsMzggQEAKIAogICAgICAgICBDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5hcHBlbmRFbnRyeShzZWN1cml0eU9yaWdpbigp
LT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVs
ZWFzZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3Qg
JiYgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9s
KSB7CisgICAgICAgIGlmICghcmVzcG9uc2UudXJsKCkuaXNFbXB0eSgpICYmICFtX3NhbWVPcmln
aW5SZXF1ZXN0ICYmIG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNj
ZXNzQ29udHJvbCkgewogICAgICAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2so
cmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBzZWN1cml0eU9yaWdpbigpLCBh
Y2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIHJl
c3BvbnNlLnVybCgpLnN0cmluZygpLCBhY2Nlc3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAgICAg
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVzcG9uc2UpOwog
ICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVu
Z3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRhdGFTZW50KENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAg
IEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOworICAgIG1fY2xpZW50LT5k
aWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CiAKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwg
cmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIENhY2hlZFJlc291cmNlcyByZWNlaXZlIGEgU2hhcmVkQnVmZmVyIG9mIHRo
ZSBlbnRpcmUgZGF0YSwgcmF0aGVyIHRoYW4ganVzdCB0aGUKKyAgICAvLyBuZXcgaW5jcmVtZW50
YWwgZGF0YS4gVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgZXhwZWN0IGp1c3QgdGhlIGluY3JlbWVu
dGFsIGJpdHMsCisgICAgLy8gc28gd2UgZG8gdGhlIGNvbnZlcnNpb24gaGVyZS4KKyAgICAvLyBG
SVhNRTogQ2FuIHdlIHN0YW5kYXJkaXplIHRoaXM/CisgICAgaW50IGRhdGFMZW5ndGggPSBkYXRh
LT5zaXplKCkgLSBtX2RhdGFMZW5ndGg7CisgICAgQVNTRVJUKGRhdGFMZW5ndGggPj0gMCk7Cisg
ICAgaWYgKCFkYXRhTGVuZ3RoKQorICAgICAgICByZXR1cm47CisKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgIGlmIChtX3ByZWZsaWdodFJlcXVlc3RJZGVudGlmaWVyKQogICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVEYXRhKG1fZG9jdW1lbnQtPmZyYW1lKCks
IG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIsIDAsIDAsIGRhdGFMZW5ndGgpOwpAQCAtMjM2
LDI4ICsyMzEsMzIgQEAKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEtPmRhdGEoKSArIG1fZGF0YUxlbmd0aCwgZGF0
YUxlbmd0aCk7CisgICAgbV9kYXRhTGVuZ3RoICs9IGRhdGFMZW5ndGg7CiB9CiAKLXZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCit2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cmVkaXJlY3RSZWNlaXZlZChDYWNoZWRSZXNvdXJj
ZSosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwot
ICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCi0gICAgLy8g
UHJlZmxpZ2h0IGRhdGEgc2hvdWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgotICAgIGlmICht
X2FjdHVhbFJlcXVlc3QpCisgICAgaWYgKGlzQWxsb3dlZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkp
KQogICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFk
YXRhKGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICAKKyAgICByZXF1ZXN0ID0gUmVzb3VyY2VS
ZXF1ZXN0KCk7CisgICAgbV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiB9Ci0KLXZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQorICAgIAordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkK
IHsKLSAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9jbGllbnQp
OwotICAgIGRpZEZpbmlzaExvYWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCksIGZpbmlzaFRpbWUp
OworICAgIEFTU0VSVChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKKyAgICAgICAgCisgICAgaWYg
KHJlc291cmNlICYmIChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpIHx8IHJlc291cmNlLT53YXND
YW5jZWxlZCgpKSkgeworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKCJOZXR3b3JrIFJlcXVl
c3QgRmFpbGVkIiwgMCwgcmVzb3VyY2UtPnVybCgpLCAiUmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQi
KTsKKyAgICAgICAgaWYgKHJlc291cmNlLT53YXNDYW5jZWxlZCgpKQorICAgICAgICAgICAgZXJy
b3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3IpOworICAg
IH0gZWxzZQorICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKHJlc291cmNlLT5pZGVudGlmaWVyKCks
IGN1cnJlbnRUaW1lKCkpOwogfQotCisgICAgCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5p
c2hUaW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0yNzMsNDkgKzI3MiwxNSBAQAog
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1l
KTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
IHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIC8vIG1fbG9hZGVyIG1heSBiZSBudWxsIGlm
IHdlIGFycml2ZSBoZXJlIHZpYSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIGluIHRoZSBjdG9y
Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9sb2Fk
ZXIpOwotCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0
SWRlbnRpZmllcikKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9h
ZGluZyhtX2RvY3VtZW50LT5mcmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKSwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgZXJyb3IpOwog
I2VuZGlmCi0KICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CiB9CiAKLWJvb2wgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNv
dXJjZUxvYWRlciogbG9hZGVyLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyIHx8ICFtX2xvYWRl
cik7Ci0KLSAgICBpZiAoIW1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSB7Ci0gICAgICAgIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsgLy8gT25seSBGcmFtZUxvYWRlckNsaWVudCBjYW4g
dWx0aW1hdGVseSBwZXJtaXQgY3JlZGVudGlhbCB1c2UuCi19Ci0KLXZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSkKLXsKLSAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICAvLyBVc2VycyBhcmUg
bm90IHByb21wdGVkIGZvciBjcmVkZW50aWFscyBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLgot
ICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCkgewotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNF
KENGTkVUV09SSykgfHwgVVNFKENVUkwpCi0gICAgICAgIGxvYWRlci0+aGFuZGxlKCktPnJlY2Vp
dmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotI2Vsc2UK
LSAgICAgICAgLy8gVGhlc2UgcGxhdGZvcm1zIGRvbid0IHByb3ZpZGUgYSB3YXkgdG8gY29udGlu
dWUgd2l0aG91dCBjcmVkZW50aWFscywgY2FuY2VsIHRoZSBsb2FkIGFsdG9nZXRoZXIuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShjaGFsbGVuZ2UpOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChs
b2FkZXItPmJsb2NrZWRFcnJvcigpKTsKLSAgICAgICAgY2FuY2VsKCk7Ci0jZW5kaWYKLSAgICB9
Ci19Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKCkK
IHsKICAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OwpAQCAtMzIzLDYg
KzI4OCw4IEBACiAKICAgICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3JpZ2luKHNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCkpOwogCisgICAgY2xlYXJSZXNvdXJjZSgpOworCiAgICAgLy8gSXQg
c2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5IGNoZWNrIHNpbmNlIHdlIGFscmVhZHkg
YXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0LgogICAgIGxvYWRSZXF1ZXN0KCphY3R1
YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CiB9CkBAIC0zMzAsMTAgKzI5NywxMCBAQAog
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnByZWZsaWdodEZhaWx1cmUoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZXJyb3JEZXNjcmlwdGlvbikKIHsKICAgICBtX2FjdHVh
bFJlcXVlc3QgPSBudWxscHRyOyAvLyBQcmV2ZW50IGRpZEZpbmlzaExvYWRpbmcoKSBmcm9tIGJ5
cGFzc2luZyBhY2Nlc3MgY2hlY2suCi0gICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCB1cmwsIGVycm9yRGVzY3JpcHRpb24pKTsK
KyAgICBkaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwg
dXJsLCBlcnJvckRlc2NyaXB0aW9uKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5
Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaykKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hl
Y2tQb2xpY3kpCiB7CiAgICAgLy8gQW55IGNyZWRlbnRpYWwgc2hvdWxkIGhhdmUgYmVlbiByZW1v
dmVkIGZyb20gdGhlIGNyb3NzLXNpdGUgcmVxdWVzdHMuCiAgICAgY29uc3QgS1VSTCYgcmVxdWVz
dFVSTCA9IHJlcXVlc3QudXJsKCk7CkBAIC0zNDEsMTIgKzMwOCw5IEBACiAgICAgQVNTRVJUKG1f
c2FtZU9yaWdpblJlcXVlc3QgfHwgcmVxdWVzdFVSTC5wYXNzKCkuaXNFbXB0eSgpKTsKIAogICAg
IGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBs
b2FkIGNhbGxiYWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgogICAgICAgICBib29sIHNl
bmRMb2FkQ2FsbGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2FjdHVh
bFJlcXVlc3Q7CiAgICAgICAgIGJvb2wgc25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29u
dGVudCAmJiAhbV9hY3R1YWxSZXF1ZXN0OwotICAgICAgICAvLyBLZWVwIGJ1ZmZlcmluZyB0aGUg
ZGF0YSBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgotICAgICAgICBib29sIHNob3VsZEJ1ZmZl
ckRhdGEgPSBtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSB8fCBtX2FjdHVhbFJlcXVlc3Q7Ci0K
KyAgICAgICAgCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgaWYgKG1fYWN0dWFsUmVx
dWVzdCkgewogICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QocmVxdWVzdCk7
CkBAIC0zNTYsMTEgKzMyMCwxMiBAQAogICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsU2VuZFJlcXVlc3QobV9kb2N1bWVudC0+ZnJhbWUoKSwgbV9wcmVmbGlnaHRSZXF1
ZXN0SWRlbnRpZmllciwgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgICB9CiAjZW5kaWYK
LQotICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9t
IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4K
LSAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNj
aGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0
aGlzLCByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSwgc2VjdXJpdHlDaGVjaywg
c2VuZExvYWRDYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaWZmQ29udGVudCwgc2hvdWxkQnVmZmVy
RGF0YSk7CisgICAgICAgIEFTU0VSVCghbV9yZXNvdXJjZSk7CisgICAgICAgIFJlc291cmNlUmVx
dWVzdCBuZXdSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBuZXdSZXF1ZXN0LnNldEFsbG93Q29v
a2llcyhtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisgICAgICAgIG1fcmVzb3VyY2UgPSBt
X2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0UmF3UmVzb3VyY2UobmV3
UmVxdWVzdCwgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CisgICAgICAgIGlmICht
X3Jlc291cmNlKQorICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzg5LDEzICszNTQsMTAgQEAKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CiAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50
aWZpZXIsIHJlc3BvbnNlKTsKLQotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50
PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7Ci0KLSAg
ICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIDAuMCk7CisgICAgZGF0YVJlY2VpdmVkKDAs
IGJ1ZmZlci5nZXQoKSk7CisgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBjdXJyZW50
VGltZSgpKTsKIH0KIAogYm9vbCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmlzQWxsb3dlZFJl
ZGlyZWN0KGNvbnN0IEtVUkwmIHVybCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109674</attachid>
            <date>2011-10-04 13:45:12 -0700</date>
            <delta_ts>2011-10-07 12:33:19 -0700</delta_ts>
            <desc>First reviewable attempt</desc>
            <filename>cachexhr.txt</filename>
            <type>text/plain</type>
            <size>56638</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1j
b250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFj
ZW1lbnQteGhyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTY1OTkpCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14
aHItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDExICsyLDExIEBACiBUZXN0cyBO
ZXR3b3JrUmVzb3VyY2VzRGF0YSBsb2dpYyBmb3IgWEhSIGNvbnRlbnQgcmVwbGFjZW1lbnQuCiAK
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3Vy
Y2UucGhwP3NpemU9MjAwCi1yZXNvdXJjZS5jb250ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50
OiAKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVz
b3VyY2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9y
L25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTIwMQotcmVzb3VyY2UuY29udGVu
dDogbnVsbAorcmVzb3VyY2UuY29udGVudDogCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVj
dG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTEwMAogcmVzb3VyY2UuY29u
dGVudDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA5NjU5OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEwLTAzICBOYXRlIENoYXBpbiAgPGphcGhldEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVzdCB1cGRhdGUgZm9yIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIyNS4KKyAgICAgICAgRHVlIHRvIGNoYW5nZXMgaW4g
dGhlIGltcGxlbWVudGF0aW9uIG9mIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciAoYW5kCisgICAg
ICAgIHRoZXJlZm9yZSBYSFIpLCB0aGlzIHRlc3Qgd2lsbCBoYXZlIGVtcHR5IChyYXRoZXIgdGhh
biBudWxsKSBjb250ZW50CisgICAgICAgIGlmIHdlIGdvIG92ZXIgdGhlIGxlbmd0aCBsaW1pdC4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1l
eHBlY3RlZC50eHQ6CisKIDIwMTEtMTAtMDQgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIGh0dHAvdGVzdHMvaW5z
cGVjdG9yL25ldHdvcmsvZGlzYWJsZWQtY2FjaGUtY3Jhc2guaHRtbC4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCShyZXZp
c2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMTAgKzI5OCw0IEBACiAgICAgICAgIG1f
bG9hZGVyLT5jYW5jZWwoKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJMTG9hZGVyOjpzZXREZWZl
cnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKLXsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29j
aWF0ZWRVUkxMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHJldmlzaW9uIDk2NTk5KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KGNvbnN0IFdl
YlVSTFJlcXVlc3QmLCBXZWJVUkxSZXNwb25zZSYsIFdlYlVSTEVycm9yJiwgV2ViRGF0YSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVxdWVzdCYs
IFdlYlVSTExvYWRlckNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RGVmZXJzTG9hZGluZyhib29sKSB7IH0KIAogcHJpdmF0ZToKIApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NTk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0wMyAgTmF0
ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBubyBsb25nZXIgZXhwb3NlcyBzZXREZWZlcnNMb2FkaW5nKCksCisgICAgICAg
IHNvIGRvbid0IHRyeSB0byBjYWxsIGl0IGluIEFzc29jaWF0ZWRVUkxMb2FkZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIyNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0Fzc29jaWF0ZWRV
UkxMb2FkZXIuY3BwOgorICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmg6CisgICAg
ICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcpOgorCiAy
MDExLTEwLTA0ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gV2ViIEluc3BlY3Rvcjogc2F2ZSBpbnNwZWN0b3Igc3RhdGUgaW50byBz
aW5nbGUgc3RyaW5nIGluc3RlYWQgb2Ygc3RyaW5nIG1hcApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTgsNiArMjA5OCw4IEBACiAJU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaCBcCiAJU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDk2NTk5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTg2OCw2ICs4NjgsNyBAQAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmNwcCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIFwKICAgICBsb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIFwKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3Bw
IFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIFwKICAgICBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU2IEBACisyMDExLTEwLTAzICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgTWFrZSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgYSBDYWNoZWRS
ZXNvdXJjZUNsaWVudC4KKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNhY2hlIFRocmVh
ZGFibGVMb2FkZXJDbGllbnRzIGFzCisgICAgICAgIGFwcHJvcHJpYXRlIGluIGEgbGF0ZXIgcGF0
Y2guCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIy
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgc2luY2UgdGhpcyBzaG91bGQgYmUgcmVmYWN0b3Igb25seS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bm90aWZ5
RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qgc2VuZCBzZXBhcmF0ZSBjYWxs
YmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRpZEZpbmlzaExvYWRpbmcoKSwg
c28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2FsbCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAgIGluc3RlYWQgb2YgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9hZCgpLgorICAgICAgICAqIGxv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmF3UmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJh
d1Jlc291cmNlOjpkYXRhKTogSGFuZGxlIHRoZSBjb21wbGV4aXR5IG9mIHNvbWUgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudHMgc2V0dGluZworICAgICAgICAgICAgRG9Ob3RCdWZmZXJEYXRhIGluIFJl
c291cmVMb2FkZXJPcHRpb25zLiBJZiB0aGUgRGF0YUJ1ZmZlcmluZ1BvbGljeSBpcyBCdWZmZXJE
YXRhLCB0aGVuIHRoZQorICAgICAgICAgICAgJ2RhdGEnIGlucHV0IHBhcmFtZXRlciB3aWxsIGNv
bnRhaW4gYWxsIGRhdGEgcmVjZWl2ZWQgc28gZmFyLCBhbmQgd2UgbmVlZCB0byBkZXRlcm1pbmUg
dGhlCisgICAgICAgICAgICBpbmNyZW1lbnRhbCBkYXRhIHRvIGZvcndhcmQgdG8gdGhlIGNsaWVu
dHMuIElmIHRoZSBwb2xpY3kgaXMgRG9Ob3RCdWZmZXJEYXRhLCAnZGF0YScgaXMganVzdAorICAg
ICAgICAgICAgdGhlIGluY3JlbWVudGFsIGRhdGEuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aWdub3JlRm9yUmVxdWVzdENvdW50KTog
UmVuYW1lIGlzTGlua1Jlc291cmNlKCkgYW5kIGdlbmVyYWxpemUgdG8gaW5kaWNhdGUKKyAgICAg
ICAgICAgIHdoZXRoZXIgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Om1fcmVxdWVzdENvdW50IHNob3Vs
ZCBpbmNsdWRlIHRoaXMgQ2FjaGVkUmVzb3VyY2UgKHNpbmNlIHRoaXMgaXMKKyAgICAgICAgICAg
IHRoZSBvbmx5IHRoaW5nIGlzTGlua1Jlc291cmNlKCkgd2FzIHVzZWQgZm9yIHByZXZpb3VzbHkp
LgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oOiBBZGQgc2V2
ZXJhbCBuZXcgY2FsbGJhY2tzIG5lZWRlZCBieSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xp
Y3kpOiBBbHdheXMgcmVsb2FkIFJhd1Jlc291cmNlcyBmb3Igbm93ICh0aGV5CisgICAgICAgICAg
ICB3aWxsIGJlIGNhY2hlYWJsZSBsYXRlciwgdGhpcyBwYXRjaCBpcyByZXdpcmluZyBvbmx5KS4K
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVz
b3VyY2U6OnNldFJlc3BvbnNlKCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1
ZXN0LCBzbyBwcm90ZWN0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKTogTXVsdGlwYXJ0IGNvbnRlbnQgaXMgbm8g
bG9uZ2VyIHRoZSBvbmx5IHJlYXNvbgorICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
IHdvdWxkIGNob29zZSBub3QgdG8gdXNlIFJlc291cmNlTG9hZGVyOjpyZXNvdXJjZURhdGEoKSB0
byBnZXQgYSBTaGFyZWRCdWZmZXIKKyAgICAgICAgICAgIGZvciB0aGUgZGF0YS4gSGFuZGxlIHRo
ZSBwb3NzaWJpbGl0eSB0aGF0IERvTm90QnVmZmVyRGF0YSB3YXMgc2V0IGFzIHRoZSBEYXRhQnVm
ZmVyaW5nUG9saWN5LgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3QuaDoKKyAgICAgICAgKiBsb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1
bS5jcHA6IEFkZGVkIChwbHVtYiBkaWREb3dubG9hZERhdGEoKSB0byBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIpLgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3RDaHJvbWl1bS5jcHA6IEFkZGVkIChwbHVtYiBkaWREb3dubG9hZERhdGEoKSB0byBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIpLgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlc291cmNlSGFu
ZGxlOjpub3RpZnlSZXNwb25zZSk6IFByb3RlY3QgYmVmb3JlIHNldHRpbmcgcmVzcG9uc2UsIHNp
bmNlIGl0IG1pZ2h0IGtpbGwgdXMuCisKIDIwMTEtMTAtMDQgIE1pa2hhaWwgTmFnYW5vdiAgPG1u
YWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGYWN0b3Igb3V0
IG9iamVjdCBwcm9wZXJ0aWVzIHBvcHVwLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDk2NTk5KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NTk3
LDYgKzI2NTk3LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmF3UmVzb3VyY2UuY3BwIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNh
Y2hlXENhY2hlZFJhd1Jlc291cmNlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2UuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTY1OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1MzgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9lcnJvckNvZGUpIHsKKyAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4g
cHJvdGVjdCh0aGlzKTsKICAgICAgICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAgICAg
IG5vdGlmeUZpbmlzaCgpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gOTY1OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTU4OSw2ICs1ODksNyBAQAogICAgICAgICAgICAgJ2xvYWRlci9hcmNoaXZlL21odG1sL01I
VE1MUGFyc2VyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oJywK
ICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCcsCisgICAgICAgICAgICAn
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlSGFuZGxlLmgnLApAQCAtMjgxOCw2ICsyODE5LDcgQEAKICAgICAgICAgICAgICdsb2FkZXIv
Y2FjaGUvQ2FjaGVkRm9udC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRG
b250LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAnLAorICAg
ICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAnLAogICAgICAgICAgICAgJ2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oJywKQEAgLTI4MzAsNiArMjgz
Miw4IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKKyAgICAgICAgICAgICdsb2Fk
ZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAg
J2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1
bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVy
Q2hyb21pdW0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NjU5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDIs
NiArOTQyLDcgQEAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKICAg
ICBsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAogICAgIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuY3BwCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxl
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gOTY1OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0OTMsNiArNTQ5Myw4
IEBACiAJCUQwQ0U1OEY5MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQ0U1OEY3
MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEQxNDFCMjEyQjJCRjUyMDBF
Mzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRDE0MUIwMTJCMkJGNTIwMEUzOTYyMCAvKiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuY3BwICovOyB9OwogCQlEMEQxNDFCMzEyQjJCRjUyMDBFMzk2MjAg
LyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMEQxNDFCMTEyQjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRDBFRjlGODAxMzdCNTgxNDAwNEI2MTE2IC8qIENhY2hlZFJhd1Jlc291cmNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRUY5RjdFMTM3
QjU4MTQwMDRCNjExNiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgKi87IH07CisJCUQwRUY5Rjgx
MTM3QjU4MTQwMDRCNjExNiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBFRjlGN0YxMzdCNTgxNDAwNEI2MTE2IC8q
IENhY2hlZFJhd1Jlc291cmNlLmggKi87IH07CiAJCUQwRkYyQTVEMTFGOEM0NUEwMDdFNzRFMCAv
KiBQaW5nTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAqLzsgfTsK
IAkJRDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRkYyQTVDMTFGOEM0NUEwMDdFNzRF
MCAvKiBQaW5nTG9hZGVyLmggKi87IH07CiAJCUQyM0NBNTVEMEFCMEVBQUUwMDUxMDhBNSAvKiBK
U1JhbmdlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMjNDQTU1QzBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlvbi5oICov
OyB9OwpAQCAtMTIyNzYsNiArMTIyNzgsOCBAQAogCQlEMENFNThGNzEyNUU0Q0MyMDBGM0YxOTkg
LyogUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEMEQxNDFCMDEyQjJCRjUyMDBFMzk2MjAgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291cmNlUmVxdWVz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwRDE0MUIxMTJCMkJGNTIwMEUz
OTYyMCAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUQwRUY5RjdFMTM3QjU4MTQwMDRCNjExNiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSYXdSZXNvdXJjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRUY5RjdGMTM3QjU4MTQwMDRCNjEx
NiAvKiBDYWNoZWRSYXdSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRSYXdSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMEZG
MkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQaW5nTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGluZ0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24u
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSYW5nZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzYzNiw2ICsxNzY0MCw4IEBACiAJCQkJQkM2NEI0Q0Ew
Q0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuaCAqLywKIAkJCQlCQ0IxNkMwMjA5NzlDM0JE
MDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuY3BwICovLAogCQkJCUJDQjE2QzAzMDk3OUMzQkQwMDQ2
Nzc0MSAvKiBDYWNoZWRJbWFnZS5oICovLAorCQkJCUQwRUY5RjdFMTM3QjU4MTQwMDRCNjExNiAv
KiBDYWNoZWRSYXdSZXNvdXJjZS5jcHAgKi8sCisJCQkJRDBFRjlGN0YxMzdCNTgxNDAwNEI2MTE2
IC8qIENhY2hlZFJhd1Jlc291cmNlLmggKi8sCiAJCQkJQkNCMTZDMDYwOTc5QzNCRDAwNDY3NzQx
IC8qIENhY2hlZFJlc291cmNlLmNwcCAqLywKIAkJCQlCQ0IxNkMwNzA5NzlDM0JEMDA0Njc3NDEg
LyogQ2FjaGVkUmVzb3VyY2UuaCAqLywKIAkJCQlCQ0ZCMkU1RDA5NzlFNDY0MDBCQTcwM0QgLyog
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCAqLywKQEAgLTIwNjYyLDYgKzIwNjY4LDcgQEAKIAkJCQk1
MUNCRkM5OTBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDQjE2QzFDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTg0NjkwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBh
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUQwRUY5RjgxMTM3QjU4MTQwMDRCNjExNiAvKiBDYWNo
ZWRSYXdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjAwOTc5QzNCRDAwNDY3
NzQxIC8qIENhY2hlZFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZCMkU1RTA5NzlF
NDY0MDBCQTcwM0QgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQjE2QzIyMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDAwMiw2ICsyNDAwOSw3IEBACiAJCQkJNTFDMEFBNDEwRjJB
QTE1RTAwMTY0OEMyIC8qIENhY2hlZEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQjE2
QzFCMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTAxODQ2QTBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlEMEVGOUY4MDEzN0I1ODE0MDA0QjYxMTYgLyogQ2FjaGVkUmF3UmVzb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMUYwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJl
c291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQjE2QzIxMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDdC
NEJFOTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDk2NTk5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmgiCiAKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlN1YnJl
c291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRE
b3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGRhdGFMZW5ndGgpCit2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YURvd25sb2FkZWQoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwot
ICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogICAgIEFTU0VSVCgh
bV9hY3R1YWxSZXF1ZXN0KTsKIAogICAgIG1fY2xpZW50LT5kaWREb3dubG9hZERhdGEoZGF0YUxl
bmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKworI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkRG93bmxv
YWREYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBsZW5ndGgpCit7CisgICAgQVNT
RVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgbV9yZXNvdXJjZS0+
ZGlkRG93bmxvYWREYXRhKGxlbmd0aCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2Fj
aGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDYWNoZWRS
YXdSZXNvdXJjZTo6ZGlkRG93bmxvYWREYXRhKGludCBkYXRhTGVuZ3RoKQoreworICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YURvd25sb2FkZWQodGhp
cywgZGF0YUxlbmd0aCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1w
aS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vp
bmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmF3UmVz
b3VyY2VfaAorI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9oCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFJhd1Jlc291
cmNlIDogcHVibGljIENhY2hlZFJlc291cmNlIHsKK3B1YmxpYzoKKyAgICBDYWNoZWRSYXdSZXNv
dXJjZShSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBk
YXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVk
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEo
dW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0
ZXNUb0JlU2VudCk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRp
ZERvd25sb2FkRGF0YShpbnQpOworI2VuZGlmCisKKyAgICBpbnQgbV9kYXRhTGVuZ3RoOworfTsK
KworfQorCisjZW5kaWYgLy8gQ2FjaGVkUmF3UmVzb3VyY2VfaApJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZp
c2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
YWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgogI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNp
bmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCkBAIC02Niw2ICs2Nyw4IEBACiAgICAgICAg
IHJldHVybiBuZXcgQ2FjaGVkU2NyaXB0KHJlcXVlc3QsIGNoYXJzZXQpOwogICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRGb250
KHJlcXVlc3QpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgICAg
ICByZXR1cm4gbmV3IENhY2hlZFJhd1Jlc291cmNlKHJlcXVlc3QpOwogI2lmIEVOQUJMRShYU0xU
KQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldChyZXF1ZXN0KTsKQEAgLTIwMiw2ICsyMDUsMTEgQEAK
IH0KICNlbmRpZgogCitDYWNoZWRSYXdSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVk
UmF3UmVzb3VyY2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNl
LCByZXF1ZXN0LCBTdHJpbmcoKSwgb3B0aW9ucywgUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29s
dmVkLCBmYWxzZSkpOworfQorCiBib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2Vj
dXJlQ29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwpIGNv
bnN0CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yMjYsMTMgKzIzNCwxNCBAQAogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdS
ZXNvdXJjZToKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rUHJlZmV0Y2g6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZXJlbmRl
cjoKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CiAgICAgICAgIC8v
IFByZWZldGNoIGNhbm5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgZG9jdW1lbnQuCisjZW5kaWYKICAg
ICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNTQs
NiArMjYzLDggQEAKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpG
b250UmVzb3VyY2U6CisgICAgLy8gUmF3UmVzb3VyY2VzIGFyZSBhbHJlYWR5IHZldHRlZCBieSBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVz
b3VyY2U6CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6TGlua1ByZWZldGNoOgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVyZW5kZXI6
CkBAIC0zMDgsMTIgKzMxOSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICB9CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAj
aWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1By
ZWZldGNoOgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVyZW5kZXI6CiAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgorI2VuZGlmCiAgICAgICAgIGJyZWFr
OwotI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTIsNiArNDY0LDExIEBA
CiAgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0
ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBkdWUgdG8gdHlwZSBtaXNtYXRjaC4i
KTsKICAgICAgICAgcmV0dXJuIFJlbG9hZDsKICAgICB9CisKKyAgICAvLyBGSVhNRTogQ3VycmVu
dGx5LCBhbGwgQ2FjaGVkUmF3UmVzb3VyY2VzIChpLmUuLCBsb2FkcyB0aHJvdWdoIGEgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyKQorICAgIC8vIGFyZSBhbHdheXMgcmVsb2FkZWQuIFNvbWUgb2Yg
dGhlbSBzaG91bGQgYmUgY2FjaGVhYmxlLgorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlKQorICAgICAgICByZXR1cm4gUmVsb2Fk
OwogICAgIAogICAgIC8vIERvbid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZy4KICAg
ICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQpAQCAtNjI3LDcgKzY0NCw3IEBACiAKIHZvaWQg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRS
ZXNvdXJjZSogcmVzKQogewotICAgIGlmIChyZXMtPmlzTGlua1Jlc291cmNlKCkpCisgICAgaWYg
KHJlcy0+aWdub3JlRm9yUmVxdWVzdENvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgICsr
bV9yZXF1ZXN0Q291bnQ7CkBAIC02MzUsNyArNjUyLDcgQEAKIAogdm9pZCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6ZGVjcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlKiByZXMp
CiB7Ci0gICAgaWYgKHJlcy0+aXNMaW5rUmVzb3VyY2UoKSkKKyAgICBpZiAocmVzLT5pZ25vcmVG
b3JSZXF1ZXN0Q291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLS1tX3JlcXVlc3RDb3Vu
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5oCShyZXZpc2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBACiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNz
IENhY2hlZEltYWdlOworY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2U7CiBjbGFzcyBDYWNoZWRTY3Jp
cHQ7CiBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0OwogY2xhc3MgRG9jdW1lbnQ7CkBAIC02NCw2
ICs2NSw3IEBACiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdFVzZXJDU1NTdHlsZVNo
ZWV0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CiAgICAgQ2FjaGVk
U2NyaXB0KiByZXF1ZXN0U2NyaXB0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCk7CiAgICAgQ2FjaGVkRm9udCogcmVxdWVzdEZvbnQoUmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgQ2FjaGVkUmF3UmVzb3VyY2UqIHJlcXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKIAogI2lmIEVOQUJMRShYU0xUKQogICAg
IENhY2hlZFhTTFN0eWxlU2hlZXQqIHJlcXVlc3RYU0xTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVz
dCYpOwpAQCAtMTA3LDggKzEwOSw2IEBACiAgICAgYm9vbCBjYW5SZXF1ZXN0KENhY2hlZFJlc291
cmNlOjpUeXBlLCBjb25zdCBLVVJMJiwgYm9vbCBmb3JQcmVsb2FkID0gZmFsc2UpOwogICAgIAog
cHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFJlc291cmNlTG9h
ZGVyT3B0aW9ucyB3aWxsIGFsd2F5cyBiZSB1c2VkIGN1cnJlbnRseS4KLSAgICAvLyBJdCBpcyBw
bHVtYmVkIGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIyNSAu
CiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlw
ZSwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMmLCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9y
aXR5VW5yZXNvbHZlZCwgYm9vbCBpc1ByZWxvYWQgPSBmYWxzZSk7CiAgICAgQ2FjaGVkUmVzb3Vy
Y2UqIHJldmFsaWRhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlTG9hZFByaW9y
aXR5LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKICAgICBDYWNoZWRSZXNvdXJjZSog
bG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTY1OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAg
ICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKICAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmF3UmVzb3VyY2U6CiAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7
CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkxpbmtQcmVmZXRjaDoKQEAgLTg0LDYgKzg1LDcgQEAKICAgICAsIG1fbG9hZFByaW9yaXR5KGRl
ZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0eXBlKSkKICAgICAsIG1fcmVzcG9uc2VUaW1l
c3RhbXAoY3VycmVudFRpbWUoKSkKICAgICAsIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCisg
ICAgLCBtX2xvYWRGaW5pc2hUaW1lKDApCiAgICAgLCBtX2VuY29kZWRTaXplKDApCiAgICAgLCBt
X2RlY29kZWRTaXplKDApCiAgICAgLCBtX2FjY2Vzc0NvdW50KDApCkBAIC0yMjcsNiArMjI5LDkg
QEAKIHsKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgbV9yZXNwb25zZVRpbWVzdGFt
cCA9IGN1cnJlbnRUaW1lKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2Ns
aWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQor
ICAgICAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVzcG9uc2UpOwogfQogCiB2b2lk
IENhY2hlZFJlc291cmNlOjpzZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpCkBAIC0yNTcsNiArMjYyLDE2IEBACiAgICAgcmV0dXJuIG1fY2Fj
aGVkTWV0YWRhdGEuZ2V0KCk7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmVzb3VyY2U6Omlk
ZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcXVlc3QgPyBtX3JlcXVlc3QtPmlk
ZW50aWZpZXIoKSA6IDA7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OndpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sgICAgCisgICAg
bV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsKK30KKwogdm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c3RvcExvYWRpbmcoKQogewogICAgIEFTU0VSVChtX3JlcXVlc3QpOyAgICAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlQ2xpZW50LmgJKHJldmlzaW9uIDk2NTk5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDkgQEAKICAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIEtV
Ukw7CisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7CisgICAgY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAgICAgLyoqCiAgICAgICogQGludGVybmFs
CkBAIC01MCw2ICs1MywxNCBAQAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2FjaGVk
UmVzb3VyY2VDbGllbnQoKSB7IH0KIAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YVNlbnQoQ2Fj
aGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNTZW50ICovLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJikgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVz
b3VyY2UqLCBjb25zdCBjaGFyKiAvKiBkYXRhICovLCBpbnQgLyogbGVuZ3RoICovKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNv
dXJjZSosIGludCkgeyB9CisjZW5kaWYKKwogICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBm
cmFtZSBvZiBhbiBpbWFnZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRh
IGZyb20gdGhlIG5ldHdvcmsgb3IKICAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgYW5pbWF0aW5n
LiBJZiBub3QgbnVsbCwgdGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1h
Z2UuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBJbnRSZWN0KiA9IDApIHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4
IEBACiAgICAgICAgIEltYWdlUmVzb3VyY2UsCiAgICAgICAgIENTU1N0eWxlU2hlZXQsCiAgICAg
ICAgIFNjcmlwdCwKLSAgICAgICAgRm9udFJlc291cmNlCisgICAgICAgIEZvbnRSZXNvdXJjZSwK
KyAgICAgICAgUmF3UmVzb3VyY2UKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgLCBYU0xTdHls
ZVNoZWV0CiAjZW5kaWYKQEAgLTExNCw3ICsxMTUsNiBAQAogICAgICAgICBQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlQ29tcGxldGUKICAgICB9OwogICAgIFByZWxvYWRSZXN1bHQgcHJlbG9hZFJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByZWxvYWRSZXN1bHQ+KG1fcHJlbG9hZFJl
c3VsdCk7IH0KLSAgICB2b2lkIHNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKSB7IG1f
cmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9IHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KQEAgLTEzNSwxMyArMTM1LDE1IEBACiAgICAgdm9pZCBz
ZXRMb2FkaW5nKGJvb2wgYikgeyBtX2xvYWRpbmcgPSBiOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc0xpbmtSZXNvdXJj
ZSgpIGNvbnN0CisgICAgYm9vbCBpZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSBjb25zdAogICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlCiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgICAg
IHJldHVybiB0eXBlKCkgPT0gTGlua1ByZWZldGNoIHx8IHR5cGUoKSA9PSBMaW5rUHJlcmVuZGVy
IHx8IHR5cGUoKSA9PSBMaW5rU3VicmVzb3VyY2U7Ci0jZWxzZQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB8fCB0eXBlKCkgPT0gTGlua1ByZWZldGNoCisgICAgICAgICAgICB8
fCB0eXBlKCkgPT0gTGlua1ByZXJlbmRlcgorICAgICAgICAgICAgfHwgdHlwZSgpID09IExpbmtT
dWJyZXNvdXJjZQogI2VuZGlmCisgICAgICAgICAgICB8fCB0eXBlKCkgPT0gUmF3UmVzb3VyY2U7
CiAgICAgfQogCiAgICAgdW5zaWduZWQgYWNjZXNzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Fj
Y2Vzc0NvdW50OyB9CkBAIC0xNjcsNiArMTY5LDcgQEAKIAogICAgIFNoYXJlZEJ1ZmZlciogZGF0
YSgpIGNvbnN0IHsgQVNTRVJUKCFtX3B1cmdlYWJsZURhdGEpOyByZXR1cm4gbV9kYXRhLmdldCgp
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KIApAQCAtMjI1LDcgKzIyOCwxOCBAQAogICAg
IHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwogICAgIHZvaWQgY2xl
YXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogICAgIHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJl
dmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLyog
Ynl0ZXNTZW50ICovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICov
KSB7IH0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxv
YWREYXRhKGludCkgeyB9CisjZW5kaWYKIAorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9zZWQg
Zm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCisgICAgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldExvYWRGaW5pc2hUaW1lKGRv
dWJsZSBmaW5pc2hUaW1lKSB7IG1fbG9hZEZpbmlzaFRpbWUgPSBmaW5pc2hUaW1lOyB9CisgICAg
ZG91YmxlIGxvYWRGaW5pc2hUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkRmluaXNoVGltZTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjaGVja05vdGlmeSgpOwogCkBAIC0yNjAsNiArMjc0
LDcgQEAKICAgICBSZWZQdHI8Q2FjaGVkTWV0YWRhdGE+IG1fY2FjaGVkTWV0YWRhdGE7CiAKICAg
ICBkb3VibGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMgYSAidGhyYXNoIGd1
YXJkIiBpbiB0aGUgY2FjaGUKKyAgICBkb3VibGUgbV9sb2FkRmluaXNoVGltZTsKIAogICAgIHVu
c2lnbmVkIG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJl
cXVlc3QuY3BwCShyZXZpc2lvbiA5NjU5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw4
IEBACiAgICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNl
OwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgIHJldHVy
biBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2U7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6UmF3UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElz
U3VicmVzb3VyY2U7ICAgIAogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKICAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0SXNQcmVmZXRjaDsKQEAgLTg0LDYgKzg2LDggQEAKIAogQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0Ojp+Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0KCkKIHsKKyAgICBpZiAobV9sb2FkZXIpCisg
ICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOwogfQogCiBQYXNzT3duUHRyPENhY2hlZFJl
c291cmNlUmVxdWVzdD4gQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojpsb2FkKENhY2hlZFJlc291cmNl
TG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCkBAIC0xMzYsMjAgKzE0MCwzMiBA
QAogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNv
dXJjZVJlcXVlc3QmIHJlcSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIENhY2hlZFJl
c291cmNlUmVxdWVzdDo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IFJlc291cmNlUmVxdWVzdCYgcmVxLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKICAgICBpZiAoIW1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNhblJlcXVlc3QobV9yZXNvdXJj
ZS0+dHlwZSgpLCByZXEudXJsKCkpKSB7CiAgICAgICAgIGxvYWRlci0+Y2FuY2VsKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9yZXNvdXJjZS0+c2V0UmVxdWVzdGVkRnJvbU5ldHdv
cmtpbmdMYXllcigpOworICAgIG1fcmVzb3VyY2UtPndpbGxTZW5kUmVxdWVzdChyZXEsIHJlc3Bv
bnNlKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmco
U3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgZG91YmxlKQordm9pZCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OmNhbmNlbCgpCiB7CiAgICAgaWYgKG1fZmluaXNoaW5nKQogICAgICAgICByZXR1cm47
CisgICAgbV9sb2FkZXItPmNhbmNlbCgpOworfQogCit1bnNpZ25lZCBsb25nIENhY2hlZFJlc291
cmNlUmVxdWVzdDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9hZGVyLT5p
ZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hM
b2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQorewor
ICAgIGlmIChtX2ZpbmlzaGluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlci5nZXQoKSk7CiAgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5yZXNvdXJjZVRv
UmV2YWxpZGF0ZSgpKTsKICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVjZWl2ZWQgJyVzJy4i
LCBtX3Jlc291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwpAQCAtMTY1LDYg
KzE4MSw3IEBACiAgICAgLy8gZXJyb3IsIHNvIHdlIGNhbid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwg
ZGF0YSgpIGFuZCBmaW5pc2goKSBjYWxsYmFja3MuCiAgICAgaWYgKCFtX3Jlc291cmNlLT5lcnJv
ck9jY3VycmVkKCkpIHsKICAgICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZEZpbmlz
aGluZygpOworICAgICAgICBtX3Jlc291cmNlLT5zZXRMb2FkRmluaXNoVGltZShmaW5pc2hUaW1l
KTsKICAgICAgICAgbV9yZXNvdXJjZS0+ZGF0YShsb2FkZXItPnJlc291cmNlRGF0YSgpLCB0cnVl
KTsKICAgICAgICAgaWYgKCFtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgICAg
ICBtX3Jlc291cmNlLT5maW5pc2goKTsKQEAgLTIyNiw3ICsyNDMsMTMgQEAKICAgICAgICAgbWVt
b3J5Q2FjaGUoKS0+cmV2YWxpZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogICAgIH0KIAorICAg
IC8vIHNldFJlc3BvbnNlKCkgbWlnaHQgY2FuY2VsIHRoZSByZXF1ZXN0LCBzbyB3ZSBuZWVkIHRv
IGtlZXAgb3Vyc2VsdmVzIGFsaXZlLiBVbmZvcnR1bmF0ZWx5LAorICAgIC8vIHdlIGNhbid0IHBy
b3RlY3QgYSBDYWNoZWRSZXNvdXJjZVJlcXVlc3QsIGJ1dCB3ZSBjYW4gcHJvdGVjdCBtX3Jlc291
cmNlLCB3aGljaCBoYXMgdGhlCisgICAgLy8gcG93ZXIgdG8ga2lsbCB0aGUgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0IChhbmQgd2lsbCBzd2l0Y2ggaXNMb2FkaW5nKCkgdG8gZmFsc2UgaWYgaXQgZG9l
cyBzbykuCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3Qo
bV9yZXNvdXJjZSk7CiAgICAgbV9yZXNvdXJjZS0+c2V0UmVzcG9uc2UocmVzcG9uc2UpOworICAg
IGlmICghcHJvdGVjdC0+aXNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFN0cmlu
ZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKICAgICBpZiAoIWVuY29k
aW5nLmlzTnVsbCgpKQpAQCAtMjU4LDIwICsyODEsMTcgQEAKICAgICBpZiAobV9yZXNvdXJjZS0+
ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXNvdXJjZS0+
cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIW1fcmVz
b3VyY2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0gICAgICAgICAgICBt
X3Jlc291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKKyAgICBpZiAobV9y
ZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCAmJiAhbV9yZXNvdXJj
ZS0+c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSkgeworICAgICAgICBtX3Jlc291
cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIFNldCB0aGUgZGF0YS4KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAg
ICAgICAgLy8gVGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBzZWN0
aW9uIGFsbCBhdCBvbmNlLCBzZW5kIGVvZi4KLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRhdGEg
d2lsbCBjaGFuZ2UgYXMgdGhlIG5leHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5lZWQgdG8gbWFr
ZSBhIGNvcHkuCi0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvcGllZERhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKTsKLSAgICAgICAgbV9yZXNvdXJjZS0+ZGF0YShj
b3BpZWREYXRhLnJlbGVhc2UoKSwgdHJ1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzb3Vy
Y2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOworICAgIC8vIFRoZXJlIGFy
ZSB0d28gY2FzZXMgd2hlcmUgd2UgbWlnaHQgbmVlZCB0byBjcmVhdGUgb3VyIG93biBTaGFyZWRC
dWZmZXIgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBvbmUgaW4gUmVzb3VyY2VMb2FkZXIuCisgICAg
Ly8gKDEpIE11bHRpcGFydCBjb250ZW50OiBUaGUgbG9hZGVyIGRlbGl2ZXJzIHRoZSBkYXRhIGlu
IGEgbXVsdGlwYXJ0IHNlY3Rpb24gYWxsIGF0IG9uY2UsIHRoZW4gc2VuZHMgZW9mLgorICAgIC8v
ICAgICBUaGUgcmVzb3VyY2UgZGF0YSB3aWxsIGNoYW5nZSBhcyB0aGUgbmV4dCBwYXJ0IGlzIGxv
YWRlZCwgc28gd2UgbmVlZCB0byBtYWtlIGEgY29weS4KKyAgICAvLyAoMikgT3VyIGNsaWVudCBy
ZXF1ZXN0ZWQgdGhhdCB0aGUgZGF0YSBub3QgYmUgYnVmZmVyZWQgYXQgdGhlIFJlc291cmNlTG9h
ZGVyIGxldmVsIHZpYSBSZXNvdXJjZUxvYWRlck9wdGlvbnMuCisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyID0gKGxvYWRlci0+cmVzb3VyY2VEYXRhKCkgJiYgIW1fbXVsdGlwYXJ0KSA/
IGxvYWRlci0+cmVzb3VyY2VEYXRhKCkgOiAgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgc2l6
ZSk7CisgICAgbV9yZXNvdXJjZS0+ZGF0YShidWZmZXIucmVsZWFzZSgpLCBtX211bHRpcGFydCk7
CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKQEAgLTI3
OSw3ICsyOTksMTIgQEAKICAgICBBU1NFUlQoIW1fcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3Io
KSk7CiAgICAgbV9yZXNvdXJjZS0+c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGRhdGEsIHNp
emUpOwogfQotICAgIAorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkU2VuZERhdGEo
U3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIG1fcmVzb3VyY2UtPmRpZFNl
bmREYXRhKGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwogdm9pZCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OmVuZCgpCiB7CiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9h
ZERvbmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNl
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NhY2hlZFJhd1Jlc291cmNlOjpDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVz
dCwgUmF3UmVzb3VyY2UpCisgICAgLCBtX2RhdGFMZW5ndGgoMCkKK3sKK30KKwordm9pZCBDYWNo
ZWRSYXdSZXNvdXJjZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJl
IGJ1ZmZlcmluZyBkYXRhLCB0aGVuIHdlIGFyZSBzYXZpbmcgdGhlIGJ1ZmZlciBpbiBtX2RhdGEg
YW5kIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBpbmNyZW1lbnRh
bCBkYXRhLiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmluZywgdGhlbiBtX2RhdGEgd2lsbCBiZSBudWxs
IGFuZAorICAgICAgICAvLyB0aGUgYnVmZmVyIGNvbnRhaW5zIG9ubHkgdGhlIGluY3JlbWVudGFs
IGRhdGEuCisgICAgICAgIGludCBwcmV2aW91c0RhdGFMZW5ndGggPSAobV9vcHRpb25zLnNob3Vs
ZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgPyBtX2RhdGFMZW5ndGggOiAwOworICAgICAgICBj
b25zdCBjaGFyKiBpbmNyZW1lbnRhbERhdGEgPSBkYXRhLT5kYXRhKCkgKyBwcmV2aW91c0RhdGFM
ZW5ndGg7CisgICAgICAgIGludCBpbmNyZW1lbnRhbERhdGFMZW5ndGggPSBkYXRhLT5zaXplKCkg
LSBwcmV2aW91c0RhdGFMZW5ndGg7CisKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudGFsRGF0YUxl
bmd0aCA+PSAwKTsKKyAgICAgICAgaWYgKGluY3JlbWVudGFsRGF0YUxlbmd0aCkgeworICAgICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAgICAgICAg
ICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAg
ICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIGluY3JlbWVudGFsRGF0YSwgaW5jcmVtZW50YWxE
YXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV9vcHRpb25zLnNo
b3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgeworICAgICAgICBtX2RhdGFMZW5ndGggPSBk
YXRhID8gZGF0YS0+c2l6ZSgpIDogMDsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsKKyAgICB9Cisg
ICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2
b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGMpCit7CisgICAgaWYgKG1fZGF0YSkgeworICAgICAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRo
aXMsIG1fcmVzcG9uc2UpOworICAgICAgICBjLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFk
ZENsaWVudChjKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92
ZWQoKQoreworICAgIGlmIChtX3JlcXVlc3QpCisgICAgICAgIG1fcmVxdWVzdC0+Y2FuY2VsKCk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IGlmICghcmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIgdyhtX2NsaWVudHMpOworICAgICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
IGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgIGMtPnJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVx
dWVzdCwgcmVzcG9uc2UpOworICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6d2lsbFNlbmRSZXF1
ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlk
U2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3
KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0
KCkpCisgICAgICAgIGMtPmRhdGFTZW50KHRoaXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVT
ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24g
OTY1OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDExIEBACiAgICAgICAgIH5DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QoKTsKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOyB9
CisgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklYTUU6IExpa2UgQ2FjaGVk
UmVzb3VyY2U6OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFjayBmb3IgcHJlZmxpZ2h0
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuCisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2UqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJy
ZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKQEAgLTU4LDYgKzYyLDExIEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGVuZCgp
OwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0
b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQpOworI2Vu
ZGlmCisKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgICAg
IENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTY1OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
X2gKICNkZWZpbmUgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MiwxMyArNDMsMTQgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIENhY2hlZFJhd1Jlc291cmNlOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNz
IEtVUkw7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFNlY3VyaXR5T3Jp
Z2luOwogICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAKLSAgICBjbGFzcyBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxv
YWRlckNsaWVudCAgeworICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxl
TG9hZGVyLCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50ICB7CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJl
c291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpA
QCAtNTYsNyArNTgsNiBAQAogICAgICAgICB2aXJ0dWFsIH5Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPjo6cmVmOwogICAgICAgICB1c2luZyBSZWZDb3VudGVk
PERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj46OmRlcmVmOwpAQCAtNzMsMjEgKzc0LDIxIEBACiAK
ICAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAgICAgICAg
dm9pZCBjbGVhclJlc291cmNlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgZGF0
YUxlbmd0aCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291
cmNlTG9hZGVyKiwgZG91YmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KKyAgICAgICAgLy8gQ2FjaGVk
UmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJlc291
cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChD
YWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7
CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9h
ZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSosIGludCk7CiAjZW5kaWYKIAog
ICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2
b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1ha2VTaW1w
bGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdo
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdo
dFN1Y2Nlc3MoKTsKQEAgLTk4LDcgKzk5LDcgQEAKIAogICAgICAgICBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2Fk
ZXI+IG1fbG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNv
dXJjZT4gbV9yZXNvdXJjZTsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogbV9jbGll
bnQ7CiAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyBtX29wdGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gOTY1OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTkgKzMxLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wu
aCIKICNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRl
ci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKQEAgLTYzLDcgKzYzLDcgQEAKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihu
ZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hy
b25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikK
KyAgICBpZiAoIWxvYWRlci0+bV9yZXNvdXJjZSkKICAgICAgICAgbG9hZGVyID0gMDsKICAgICBy
ZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KQEAgLTEzMywzMSArMTMzLDMzIEBACiAKIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCiB7Ci0gICAg
aWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQoKTsKKyAgICBpZiAo
bV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogfQog
CiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1f
bG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0gICAg
bV9sb2FkZXItPmNsZWFyQ2xpZW50KCk7Ci0gICAgbV9sb2FkZXIgPSAwOworICAgIGlmIChtX2Ns
aWVudCkgeworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50
ZXJuYWwsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiTG9hZCBjYW5jZWxsZWQiKTsKKyAgICAgICAg
ZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3IpOwor
ICAgIH0KKyAgICBjbGVhclJlc291cmNlKCk7CiAgICAgbV9jbGllbnQgPSAwOwogfQogCi12b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIHZhbHVlKQor
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNsZWFyUmVzb3VyY2UoKQogewotICAgIGlm
IChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOwor
ICAgIGlmIChtX3Jlc291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPnJlbW92ZUNsaWVudCh0
aGlzKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQogfQogCi12b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpyZWRpcmVjdFJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIEFTU0VS
VChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRl
cik7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7
CiAKICAgICBpZiAoIWlzQWxsb3dlZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAg
IFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CkBAIC0xNjks
MTggKzE3MSwxNyBAQAogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VO
VVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KKyAgICBBU1NFUlRfVU5VU0VEKHJl
c291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKICAgICBtX2NsaWVudC0+ZGlkU2VuZERh
dGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogfQogCi12b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBBU1NFUlQobG9hZGVyID09
IG1fbG9hZGVyKTsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5pZGVudGlmaWVyKCks
IHJlc3BvbnNlKTsKKyAgICBBU1NFUlQocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKHJlc291cmNlLT5pZGVudGlmaWVyKCksIHJlc3BvbnNlKTsKIH0KIAog
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAt
MjIzLDEwICsyMjQsMTAgQEAKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
YXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVT
RUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3Vy
Y2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKQEAgLTI0MCwyNSArMjQxLDIwIEBA
CiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCi12
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1
YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3Ro
KQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCi0gICAgLy8gUHJlZmxpZ2h0IGRh
dGEgc2hvdWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgotICAgIGlmIChtX2FjdHVhbFJlcXVl
c3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKHJlc291cmNlID09IG1fcmVzb3Vy
Y2UpOworICAgICAgICAKKyAgICBpZiAocmVzb3VyY2UgJiYgKHJlc291cmNlLT5lcnJvck9jY3Vy
cmVkKCkgfHwgcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpKSB7CisgICAgICAgIFJlc291cmNlRXJy
b3IgZXJyb3IoIk5ldHdvcmsgUmVxdWVzdCBGYWlsZWQiLCAwLCByZXNvdXJjZS0+dXJsKCksICJS
ZXNvdXJjZSBmYWlsZWQgdG8gbG9hZCIpOworICAgICAgICBpZiAocmVzb3VyY2UtPndhc0NhbmNl
bGVkKCkpCisgICAgICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAg
ICAgZGlkRmFpbChlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmco
cmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgcmVzb3VyY2UtPmxvYWRGaW5pc2hUaW1lKCkpOwogfQog
Ci12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNv
dXJjZUxvYWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKLXsKLSAgICBBU1NFUlQobG9h
ZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIGRpZEZpbmlzaExv
YWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCksIGZpbmlzaFRpbWUpOwotfQotCiB2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0y
NzQsMTIgKzI3MCw4IEBACiAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50
aWZpZXIsIGZpbmlzaFRpbWUpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgLy8gbV9sb2Fk
ZXIgbWF5IGJlIG51bGwgaWYgd2UgYXJyaXZlIGhlcmUgdmlhIFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUgaW4gdGhlIGN0b3IKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1f
bG9hZGVyIHx8ICFtX2xvYWRlcik7Ci0KICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmICht
X3ByZWZsaWdodFJlcXVlc3RJZGVudGlmaWVyKQogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEZhaWxMb2FkaW5nKG1fZG9jdW1lbnQtPmZyYW1lKCksIG1fZG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLCBtX3ByZWZsaWdodFJlcXVlc3RJZGVu
dGlmaWVyLCBlcnJvcik7CkBAIC0yOTUsNiArMjg3LDggQEAKIAogICAgIGFjdHVhbFJlcXVlc3Qt
PnNldEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKKyAgICBjbGVh
clJlc291cmNlKCk7CisKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUgc2VjdXJp
dHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0IHJlcXVl
c3QuCiAgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNoZWNrKTsK
IH0KQEAgLTMyNCwxOSArMzE4LDE5IEBACiAgICAgICAgICAgICBvcHRpb25zLnNob3VsZEJ1ZmZl
ckRhdGEgPSBCdWZmZXJEYXRhOwogICAgICAgICB9CiAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
IG5ld1JlcXVlc3QocmVxdWVzdCk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgaWYg
KG1fYWN0dWFsUmVxdWVzdCkgewotICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVl
c3QocmVxdWVzdCk7CiAgICAgICAgICAgICAvLyBCZWNhdXNlIHdpbGxTZW5kUmVxdWVzdCBvbmx5
IGdldHMgY2FsbGVkIGR1cmluZyByZWRpcmVjdHMsIHdlIGluaXRpYWxpemUgdGhlIGlkZW50aWZp
ZXIgYW5kIHRoZSBmaXJzdCB3aWxsU2VuZFJlcXVlc3QgaGVyZS4KICAgICAgICAgICAgIG1fcHJl
ZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5wYWdlKCktPnBy
b2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UoKTsKICAgICAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KG1fZG9jdW1lbnQt
PmZyYW1lKCksIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIsIG1fZG9jdW1lbnQtPmZyYW1l
KCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3Bv
bnNlKTsKICAgICAgICAgfQogI2VuZGlmCi0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBz
byB0aGF0IGFueSBjYWxsYmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwg
bm90IGhhdmUgdGhlIG9sZCBsb2FkZXIuCi0gICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAg
bV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxv
YWQobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHlNZWRpdW0sIG9wdGlvbnMpOworICAgICAgICBBU1NFUlQoIW1fcmVzb3VyY2UpOworICAgICAg
ICBtX3Jlc291cmNlID0gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVz
dFJhd1Jlc291cmNlKG5ld1JlcXVlc3QsIG9wdGlvbnMpOworICAgICAgICBpZiAobV9yZXNvdXJj
ZSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTM2Nyw3ICszNjEsNyBAQAogCiAgICAgY29uc3QgY2hhciog
Ynl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwogICAgIGludCBs
ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgw
LCBieXRlcywgbGVuKTsKKyAgICBkYXRhUmVjZWl2ZWQoMCwgYnl0ZXMsIGxlbik7CiAKICAgICBk
aWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIDAuMCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="106966"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110194</attachid>
            <date>2011-10-07 12:33:19 -0700</date>
            <delta_ts>2011-10-07 13:42:02 -0700</delta_ts>
            <desc>patch - merged to trunk</desc>
            <filename>cachexhr2.txt</filename>
            <type>text/plain</type>
            <size>38466</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuY3BwCShyZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMTAgKzI5OCw0
IEBACiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKLXsKLSAgICBpZiAo
bV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRp
bmcpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHJldmlzaW9uIDk2OTY1KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGxvYWRTeW5jaHJv
bm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmLCBXZWJVUkxSZXNwb25zZSYsIFdlYlVSTEVycm9y
JiwgV2ViRGF0YSYpOwogICAgIHZpcnR1YWwgdm9pZCBsb2FkQXN5bmNocm9ub3VzbHkoY29uc3Qg
V2ViVVJMUmVxdWVzdCYsIFdlYlVSTExvYWRlckNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWwoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKSB7IH0KIAogcHJpdmF0ZToKIApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMS0xMC0wMyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBubyBsb25nZXIgZXhwb3NlcyBzZXREZWZlcnNMb2Fk
aW5nKCksCisgICAgICAgIHNvIGRvbid0IHRyeSB0byBjYWxsIGl0IGluIEFzc29jaWF0ZWRVUkxM
b2FkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MTIyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJM
TG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcpOgorCiAyMDExLTEwLTA3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgRml4IGNocm9taXVtIGNvbXBpbGUgd2hlbiB1c2luZyB0aGUgY29tcG9uZW50
cyBidWlsZC4gIFRoaXMgdGVzdApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY5NjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NiBAQAor
MjAxMS0xMC0wNyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IE1ha2UgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIGEgQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisg
ICAgICAgIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWNoZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
cyBhcworICAgICAgICBhcHByb3ByaWF0ZSBpbiBhIGxhdGVyIHBhdGNoLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMjUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0
aW9uYWxpdHkgY2hhbmdlIGludGVuZGVkLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6IENhY2hlZFJl
c291cmNlQ2xpZW50cyBkb24ndCBzZW5kIHNlcGFyYXRlIGNhbGxiYWNrcworICAgICAgICAgICAg
Zm9yIGRpZEZhaWwoKSBhbmQgZGlkRmluaXNoTG9hZGluZygpLCBzbyB3ZSBuZWVkIHRvIGRpZmZl
cmVudGlhdGUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlcXVlc3QpOiBDYWxsIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmF3UmVz
b3VyY2UoKQorICAgICAgICAgICAgaW5zdGVhZCBvZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlU3VicmVzb3VyY2VMb2FkKCkuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6ZGF0YSk6IEhhbmRsZSB0
aGUgY29tcGxleGl0eSBvZiBzb21lIFRocmVhZGFibGVMb2FkZXJDbGllbnRzIHNldHRpbmcKKyAg
ICAgICAgICAgIERvTm90QnVmZmVyRGF0YSBpbiBSZXNvdXJlTG9hZGVyT3B0aW9ucy4gSWYgdGhl
IERhdGFCdWZmZXJpbmdQb2xpY3kgaXMgQnVmZmVyRGF0YSwgdGhlbiB0aGUKKyAgICAgICAgICAg
ICdkYXRhJyBpbnB1dCBwYXJhbWV0ZXIgd2lsbCBjb250YWluIGFsbCBkYXRhIHJlY2VpdmVkIHNv
IGZhciwgYW5kIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgICAgaW5jcmVtZW50
YWwgZGF0YSB0byBmb3J3YXJkIHRvIHRoZSBjbGllbnRzLiBJZiB0aGUgcG9saWN5IGlzIERvTm90
QnVmZmVyRGF0YSwgJ2RhdGEnIGlzIGp1c3QKKyAgICAgICAgICAgIHRoZSBpbmNyZW1lbnRhbCBk
YXRhLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
cHJlbG9hZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6ZGlkU2Vu
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZERvd25sb2FkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZEZpbmlzaFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmxvYWRGaW5pc2hUaW1lKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaDogQWRkIHNldmVyYWwg
bmV3IGNhbGxiYWNrcyBuZWVkZWQgYnkgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBDYWNoZWRS
ZXNvdXJjZTo6c2V0UmVzcG9uc2UoKSBjYW4gbm93IGNhbmNlbAorICAgICAgICAgICAgdGhlIHJl
cXVlc3QsIHNvIHByb3RlY3QgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hl
ZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwOiBBZGRlZCAocGx1bWIgZGlkRG93bmxvYWREYXRhKCkg
dG8gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKS4KKyAgICAgICAgKiBsb2FkZXIvY2hyb21pdW0v
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Q2hyb21pdW0uY3BwOiBBZGRlZCAocGx1bWIgZGlkRG93bmxv
YWREYXRhKCkgdG8gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKS4KKyAgICAgICAgKiBsb2FkZXIv
Y2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2UpOiBQcm90ZWN0IGJlZm9yZSBz
ZXR0aW5nIHJlc3BvbnNlLCBzaW5jZSBpdCBtaWdodCBraWxsIHVzLgorCiAyMDExLTEwLTA3ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IHJlLW9y
Z2FuaXplIGZha2UgZWxlbWVudHMgdG8gdXNlIG5ldyBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
c291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
OCw2ICs1MzgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lcnJvckNvZGUpIHsK
KyAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCh0aGlzKTsKICAgICAg
ICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAgICAgIG5vdGlmeUZpbmlzaCgpOwogICAg
IH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4NDEsNiArMjg0MSw4IEBA
CiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hy
b21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVyQ2hyb21p
dW0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcAkocmV2
aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEs
MTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaCIKIAotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmF3UmVzb3VyY2UuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBpbnQgZGF0YUxlbmd0aCkK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UsIGludCBkYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNT
RVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAgICAgQVNTRVJU
KCFtX2FjdHVhbFJlcXVlc3QpOwogCiAgICAgbV9jbGllbnQtPmRpZERvd25sb2FkRGF0YShkYXRh
TGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWREb3du
bG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBtX3Jlc291cmNl
LT5kaWREb3dubG9hZERhdGEobGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9t
aXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9D
YWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIK
KworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjpkaWREb3dubG9hZERhdGEoaW50IGRhdGFMZW5ndGgpCit7CisgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5kYXRhRG93bmxvYWRlZCh0
aGlzLCBkYXRhTGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwyMiBAQAogICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVz
dCYpOwogICAgIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hl
ZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKGludCk7
CisjZW5kaWYKKworICAgIGludCBtX2RhdGFMZW5ndGg7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBD
YWNoZWRSYXdSZXNvdXJjZV9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2
ICs4Myw3IEBACiAgICAgLCBtX2xvYWRQcmlvcml0eShkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJj
ZVR5cGUodHlwZSkpCiAgICAgLCBtX3Jlc3BvbnNlVGltZXN0YW1wKGN1cnJlbnRUaW1lKCkpCiAg
ICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQorICAgICwgbV9sb2FkRmluaXNoVGltZSgw
KQogICAgICwgbV9lbmNvZGVkU2l6ZSgwKQogICAgICwgbV9kZWNvZGVkU2l6ZSgwKQogICAgICwg
bV9hY2Nlc3NDb3VudCgwKQpAQCAtMjI2LDYgKzIyNyw5IEBACiB7CiAgICAgbV9yZXNwb25zZSA9
IHJlc3BvbnNlOwogICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworICAg
IENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+cmVzcG9uc2VSZWNl
aXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0U2Vy
aWFsaXplZENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQpAQCAt
MjU2LDYgKzI2MCwxNiBAQAogICAgIHJldHVybiBtX2NhY2hlZE1ldGFkYXRhLmdldCgpOwogfQog
Cit1bnNpZ25lZCBsb25nIENhY2hlZFJlc291cmNlOjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXF1ZXN0ID8gbV9yZXF1ZXN0LT5pZGVudGlmaWVyKCkgOiAwOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpCit7ICAgIAorICAgIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllciA9IHRydWU7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN0b3BMb2FkaW5nKCkK
IHsKICAgICBBU1NFUlQobV9yZXF1ZXN0KTsgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCShyZXZpc2lv
biA5Njk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBACiAgICAgY2xhc3MgSW1hZ2U7
CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIAogICAgIC8qKgogICAgICAqIEBpbnRlcm5hbApAQCAtNTAsNiArNTMsMTQgQEAKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CiAK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQg
bG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0
ZXNUb0JlU2VudCAqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogLyog
ZGF0YSAqLywgaW50IC8qIGxlbmd0aCAqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRp
cmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIHsgfQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGF0YURvd25sb2FkZWQoQ2FjaGVkUmVzb3VyY2UqLCBpbnQpIHsgfQorI2VuZGlm
CisKICAgICAgICAgLy8gQ2FsbGVkIHdoZW5ldmVyIGEgZnJhbWUgb2YgYW4gaW1hZ2UgY2hhbmdl
cywgZWl0aGVyIGJlY2F1c2Ugd2UgZ290IG1vcmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG9yCiAg
ICAgICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGFuaW1hdGluZy4gSWYgbm90IG51bGwsIHRoZSBJbnRS
ZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGltYWdlLgogICAgICAgICB2aXJ0dWFsIHZv
aWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50UmVjdCogPSAwKSB7IH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2
aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw2IEBACiAgICAgICAgIFByZWxvYWRS
ZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQogICAgIH07CiAgICAgUHJlbG9hZFJlc3VsdCBwcmVsb2Fk
UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVs
b2FkUmVzdWx0KTsgfQotICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigp
IHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIHZpcnR1YWwg
dm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQpAQCAtMTcwLDYgKzE2OSw3IEBACiAKICAgICBT
aGFyZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFibGVEYXRhKTsgcmV0
dXJuIG1fZGF0YS5nZXQoKTsgfQogCisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBzZXRS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAKQEAgLTIyOCw3
ICsyMjgsMTggQEAKICAgICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2Uo
KTsKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAgICB2b2lkIHVwZGF0
ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRh
dGluZ1Jlc3BvbnNlKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFs
Qnl0ZXNUb0JlU2VudCAqLykgeyB9CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVh
bCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpIHsgfQorI2VuZGlmCiAKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9ySW5zdHJ1bWVudGF0aW9uIGZvciBwcmVm
bGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4gSXQncyBhbHNvIHJlYWxseSBsYW1l
LgorICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCisgICAgdm9pZCBzZXRM
b2FkRmluaXNoVGltZShkb3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmlu
aXNoVGltZTsgfQorICAgIGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9hZEZpbmlzaFRpbWU7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsK
IApAQCAtMjYzLDYgKzI3NCw3IEBACiAgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBtX2NhY2hl
ZE1ldGFkYXRhOwogCiAgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2Vk
IGFzIGEgInRocmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisgICAgZG91YmxlIG1fbG9hZEZpbmlz
aFRpbWU7CiAKICAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwogICAgIHVuc2lnbmVkIG1fZGVj
b2RlZFNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsNiArODYsOCBAQAogCiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNv
dXJjZVJlcXVlc3QoKQogeworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPmNs
ZWFyQ2xpZW50KCk7CiB9CiAKIFBhc3NPd25QdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucykKQEAgLTEzOCwxMyArMTQwLDEzIEBACiAgICAgcmV0dXJuIHJlcXVl
c3QucmVsZWFzZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6d2lsbFNlbmRS
ZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp3aWxs
U2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmICghbV9jYWNo
ZWRSZXNvdXJjZUxvYWRlci0+Y2FuUmVxdWVzdChtX3Jlc291cmNlLT50eXBlKCksIHJlcS51cmwo
KSkpIHsKICAgICAgICAgbG9hZGVyLT5jYW5jZWwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX3Jlc291cmNlLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CisgICAg
bV9yZXNvdXJjZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcSwgcmVzcG9uc2UpOwogfQogCiB2b2lkIENh
Y2hlZFJlc291cmNlUmVxdWVzdDo6Y2FuY2VsKCkKQEAgLTE1NCw4ICsxNTYsMTMgQEAKICAgICBt
X2xvYWRlci0+Y2FuY2VsKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRG
aW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSkKK3Vuc2lnbmVk
IGxvbmcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjppZGVudGlmaWVyKCkgY29uc3QKIHsKKyAgICBy
ZXR1cm4gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgZG91Ymxl
IGZpbmlzaFRpbWUpCit7CiAgICAgaWYgKG1fZmluaXNoaW5nKQogICAgICAgICByZXR1cm47CiAK
QEAgLTE3NCw2ICsxODEsNyBAQAogICAgIC8vIGVycm9yLCBzbyB3ZSBjYW4ndCBzZW5kIHRoZSBz
dWNjZXNzZnVsIGRhdGEoKSBhbmQgZmluaXNoKCkgY2FsbGJhY2tzLgogICAgIGlmICghbV9yZXNv
dXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CiAgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmxvYWRGaW5pc2hpbmcoKTsKKyAgICAgICAgbV9yZXNvdXJjZS0+c2V0TG9hZEZpbmlzaFRpbWUo
ZmluaXNoVGltZSk7CiAgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURh
dGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlmICghbV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQog
ICAgICAgICAgICAgbV9yZXNvdXJjZS0+ZmluaXNoKCk7CkBAIC0yMzUsNyArMjQzLDEzIEBACiAg
ICAgICAgIG1lbW9yeUNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChtX3Jlc291cmNlKTsKICAg
ICB9CiAKKyAgICAvLyBzZXRSZXNwb25zZSgpIG1pZ2h0IGNhbmNlbCB0aGUgcmVxdWVzdCwgc28g
d2UgbmVlZCB0byBrZWVwIG91cnNlbHZlcyBhbGl2ZS4gVW5mb3J0dW5hdGVseSwKKyAgICAvLyB3
ZSBjYW4ndCBwcm90ZWN0IGEgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LCBidXQgd2UgY2FuIHByb3Rl
Y3QgbV9yZXNvdXJjZSwgd2hpY2ggaGFzIHRoZQorICAgIC8vIHBvd2VyIHRvIGtpbGwgdGhlIENh
Y2hlZFJlc291cmNlUmVxdWVzdCAoYW5kIHdpbGwgc3dpdGNoIGlzTG9hZGluZygpIHRvIGZhbHNl
IGlmIGl0IGRvZXMgc28pLgorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
PiBwcm90ZWN0KG1fcmVzb3VyY2UpOwogICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKyAgICBpZiAoIXByb3RlY3QtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBTdHJpbmcgZW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CiAgICAg
aWYgKCFlbmNvZGluZy5pc051bGwoKSkKQEAgLTI2NywxNiArMjgxLDE3IEBACiAgICAgaWYgKG1f
cmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAg
aWYgKCFtX3Jlc291cmNlLT5zaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpKQotICAg
ICAgICAgICAgbV9yZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Cisg
ICAgaWYgKG1fcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDAgJiYg
IW1fcmVzb3VyY2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpIHsKKyAgICAg
ICAgbV9yZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAvLyBTZXQgdGhlIGRhdGEuCi0gICAgaWYgKG1fbXVsdGlw
YXJ0KSB7Ci0gICAgICAgIC8vIFRoZSBsb2FkZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0
aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgc2VuZCBlb2YuCi0gICAgICAgIC8vIFRoZSByZXNv
dXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRoZSBuZXh0IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBu
ZWVkIHRvIG1ha2UgYSBjb3B5LgorICAgIC8vIFRoZXJlIGFyZSB0d28gY2FzZXMgd2hlcmUgd2Ug
bWlnaHQgbmVlZCB0byBjcmVhdGUgb3VyIG93biBTaGFyZWRCdWZmZXIgaW5zdGVhZCBvZiBjb3B5
aW5nIHRoZSBvbmUgaW4gUmVzb3VyY2VMb2FkZXIuCisgICAgLy8gKDEpIE11bHRpcGFydCBjb250
ZW50OiBUaGUgbG9hZGVyIGRlbGl2ZXJzIHRoZSBkYXRhIGluIGEgbXVsdGlwYXJ0IHNlY3Rpb24g
YWxsIGF0IG9uY2UsIHRoZW4gc2VuZHMgZW9mLgorICAgIC8vICAgICBUaGUgcmVzb3VyY2UgZGF0
YSB3aWxsIGNoYW5nZSBhcyB0aGUgbmV4dCBwYXJ0IGlzIGxvYWRlZCwgc28gd2UgbmVlZCB0byBt
YWtlIGEgY29weS4KKyAgICAvLyAoMikgT3VyIGNsaWVudCByZXF1ZXN0ZWQgdGhhdCB0aGUgZGF0
YSBub3QgYmUgYnVmZmVyZWQgYXQgdGhlIFJlc291cmNlTG9hZGVyIGxldmVsIHZpYSBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMuIEluIHRoaXMgY2FzZSwKKyAgICAvLyAgICAgUmVzb3VyY2VMb2FkZXI6
OnJlc291cmNlRGF0YSgpIHdpbGwgYmUgbnVsbC4KKyAgICBpZiAobV9tdWx0aXBhcnQgfHwgIW1f
cmVzb3VyY2UtPnJlc291cmNlRGF0YSgpKSB7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGNvcGllZERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKTsKICAgICAgICAg
bV9yZXNvdXJjZS0+ZGF0YShjb3BpZWREYXRhLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgfSBlbHNl
CkBAIC0yODgsNyArMzAzLDEyIEBACiAgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5pc0NhY2hlVmFs
aWRhdG9yKCkpOwogICAgIG1fcmVzb3VyY2UtPnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShk
YXRhLCBzaXplKTsKIH0KLSAgICAKKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZFNl
bmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBtX3Jlc291cmNl
LT5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKIHZvaWQg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjplbmQoKQogewogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2Fk
ZXItPmxvYWREb25lKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTkgKzM3LDY1IEBACiAKIENhY2hlZFJhd1Jlc291cmNlOjpDYWNoZWRSYXdSZXNvdXJjZShS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKICAgICA6IENhY2hlZFJlc291cmNlKHJl
c291cmNlUmVxdWVzdCwgUmF3UmVzb3VyY2UpCisgICAgLCBtX2RhdGFMZW5ndGgoMCkKIHsKIH0K
IAogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgbV9kYXRhID0gZGF0YTsKKyAgICBp
ZiAoZGF0YSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUgYnVmZmVyaW5nIGRhdGEsIHRoZW4gd2Ug
YXJlIHNhdmluZyB0aGUgYnVmZmVyIGluIG1fZGF0YSBhbmQgbmVlZCB0byBtYW51YWxseQorICAg
ICAgICAvLyBjYWxjdWxhdGUgdGhlIGluY3JlbWVudGFsIGRhdGEuIElmIHdlIGFyZSBub3QgYnVm
ZmVyaW5nLCB0aGVuIG1fZGF0YSB3aWxsIGJlIG51bGwgYW5kCisgICAgICAgIC8vIHRoZSBidWZm
ZXIgY29udGFpbnMgb25seSB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgaW50IHByZXZp
b3VzRGF0YUxlbmd0aCA9IChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJEYXRh
KSA/IG1fZGF0YUxlbmd0aCA6IDA7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0
YSA9IGRhdGEtPmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICAgICAgaW50IGluY3Jl
bWVudGFsRGF0YUxlbmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKwor
ICAgICAgICBBU1NFUlQoaW5jcmVtZW50YWxEYXRhTGVuZ3RoID49IDApOworICAgICAgICBpZiAo
aW5jcmVtZW50YWxEYXRhTGVuZ3RoKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgICAgICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgICAgICBjLT5kYXRhUmVjZWl2ZWQodGhp
cywgaW5jcmVtZW50YWxEYXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGlmIChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJE
YXRhKSB7CisgICAgICAgIG1fZGF0YUxlbmd0aCA9IGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwOwor
ICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgIH0KICAgICBDYWNoZWRSZXNvdXJjZTo6ZGF0YSht
X2RhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRp
ZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAobV9kYXRhKSB7
CisgICAgICAgIGMtPnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7CisgICAgICAg
IGMtPmRhdGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwor
ICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworfQorCiB2b2lkIENh
Y2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCiB7CiAgICAgaWYgKG1fcmVxdWVz
dCkKICAgICAgICAgbV9yZXF1ZXN0LT5jYW5jZWwoKTsKIH0KIAordm9pZCBDYWNoZWRSYXdSZXNv
dXJjZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKCFyZXNwb25zZS5pc051bGwoKSkg
eworICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAg
ICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICAg
ICAgYy0+cmVkaXJlY3RSZWNlaXZlZCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgfQor
ICAgIENhY2hlZFJlc291cmNlOjp3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwor
fQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQorewor
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YVNlbnQo
dGhpcywgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksOSBAQAogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOyB9CiAgICAg
ICAgIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklYTUU6IExpa2UgQ2FjaGVkUmVzb3Vy
Y2U6OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFjayBmb3IgcHJlZmxpZ2h0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuCisgICAgICAg
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVkUmVz
b3VyY2UqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJj
ZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKQEAg
LTU5LDYgKzYyLDExIEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGVuZCgpOwogCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2ln
bmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5
dGVzVG9CZVNlbnQqLyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQpOworI2VuZGlmCisK
ICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgICAgIENhY2hl
ZFJlc291cmNlKiBtX3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKICNk
ZWZpbmUgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MiwxMyArNDMsMTQgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IENhY2hlZFJhd1Jlc291cmNlOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEtVUkw7
CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwog
ICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAKLSAgICBjbGFzcyBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNs
aWVudCAgeworICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVy
LCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50ICB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNl
U3luY2hyb25vdXNseShEb2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpAQCAtNTYs
NyArNTgsNiBAQAogICAgICAgICB2aXJ0dWFsIH5Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIoKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyPjo6cmVmOwogICAgICAgICB1c2luZyBSZWZDb3VudGVkPERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcj46OmRlcmVmOwpAQCAtNzMsMjEgKzc0LDIxIEBACiAKICAgICAg
ICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5k
UmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAgICAgICAgdm9pZCBj
bGVhclJlc291cmNlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNo
ZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgZGF0YUxlbmd0
aCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9h
ZGVyKiwgZG91YmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KKyAgICAgICAgLy8gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwg
dW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0
ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENhY2hl
ZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRh
dGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChDYWNoZWRS
ZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEo
U3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSosIGludCk7CiAjZW5kaWYKIAogICAgICAg
ICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAg
ICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nl
c3MoKTsKQEAgLTk4LDcgKzk5LDcgQEAKIAogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4oKSBjb25zdDsKIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1f
bG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4g
bV9yZXNvdXJjZTsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyBtX29wdGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTkgKzMxLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKICNp
bmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKQEAgLTYzLDcgKzYzLDcgQEAKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBS
ZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNs
eSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKKyAgICBp
ZiAoIWxvYWRlci0+bV9yZXNvdXJjZSkKICAgICAgICAgbG9hZGVyID0gMDsKICAgICByZXR1cm4g
bG9hZGVyLnJlbGVhc2UoKTsKIH0KQEAgLTEzMywzMSArMTMzLDMzIEBACiAKIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCiB7Ci0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQoKTsKKyAgICBpZiAobV9yZXNv
dXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogfQogCiB2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fbG9hZGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0gICAgbV9sb2Fk
ZXItPmNsZWFyQ2xpZW50KCk7Ci0gICAgbV9sb2FkZXIgPSAwOworICAgIGlmIChtX2NsaWVudCkg
eworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWws
IDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiTG9hZCBjYW5jZWxsZWQiKTsKKyAgICAgICAgZXJyb3Iu
c2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3IpOworICAgIH0K
KyAgICBjbGVhclJlc291cmNlKCk7CiAgICAgbV9jbGllbnQgPSAwOwogfQogCi12b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIHZhbHVlKQordm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNsZWFyUmVzb3VyY2UoKQogewotICAgIGlmIChtX2xv
YWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOworICAgIGlm
IChtX3Jlc291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPnJlbW92ZUNsaWVudCh0aGlzKTsK
KyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpyZWRpcmVjdFJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIEFTU0VSVChtX2Ns
aWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKICAg
ICBpZiAoIWlzQWxsb3dlZFJlZGlyZWN0KHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgIFJlZlB0
cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CkBAIC0xNjksMTggKzE3
MSwxNyBAQAogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFNl
bmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KQogewogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChs
b2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNl
LCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKICAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEoYnl0
ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBBU1NFUlQobG9hZGVyID09IG1fbG9h
ZGVyKTsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5pZGVudGlmaWVyKCksIHJlc3Bv
bnNlKTsKKyAgICBBU1NFUlQocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKHJlc291cmNlLT5pZGVudGlmaWVyKCksIHJlc3BvbnNlKTsKIH0KIAogdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMjIzLDEw
ICsyMjQsMTAgQEAKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVj
ZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0
YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9h
ZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJl
c291cmNlID09IG1fcmVzb3VyY2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKQEAgLTI0MCwyNSArMjQxLDIwIEBACiAgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291
cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQo
bG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCi0gICAgLy8gUHJlZmxpZ2h0IGRhdGEgc2hv
dWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgotICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEo
ZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUKHJlc291cmNlID09IG1fcmVzb3VyY2UpOwor
ICAgICAgICAKKyAgICBpZiAocmVzb3VyY2UgJiYgKHJlc291cmNlLT5lcnJvck9jY3VycmVkKCkg
fHwgcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpKSB7CisgICAgICAgIFJlc291cmNlRXJyb3IgZXJy
b3IoIk5ldHdvcmsgUmVxdWVzdCBGYWlsZWQiLCAwLCByZXNvdXJjZS0+dXJsKCksICJSZXNvdXJj
ZSBmYWlsZWQgdG8gbG9hZCIpOworICAgICAgICBpZiAocmVzb3VyY2UtPndhc0NhbmNlbGVkKCkp
CisgICAgICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlk
RmFpbChlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmcocmVzb3Vy
Y2UtPmlkZW50aWZpZXIoKSwgcmVzb3VyY2UtPmxvYWRGaW5pc2hUaW1lKCkpOwogfQogCi12b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKLXsKLSAgICBBU1NFUlQobG9hZGVyID09
IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIGRpZEZpbmlzaExvYWRpbmco
bG9hZGVyLT5pZGVudGlmaWVyKCksIGZpbmlzaFRpbWUpOwotfQotCiB2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGRvdWJsZSBmaW5pc2hUaW1lKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0yNzQsMTIg
KzI3MCw4IEBACiAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIs
IGZpbmlzaFRpbWUpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFp
bChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgLy8gbV9sb2FkZXIgbWF5
IGJlIG51bGwgaWYgd2UgYXJyaXZlIGhlcmUgdmlhIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUg
aW4gdGhlIGN0b3IKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVy
IHx8ICFtX2xvYWRlcik7Ci0KICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtX3ByZWZs
aWdodFJlcXVlc3RJZGVudGlmaWVyKQogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZEZhaWxMb2FkaW5nKG1fZG9jdW1lbnQtPmZyYW1lKCksIG1fZG9jdW1lbnQtPmZyYW1lKCkt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLCBtX3ByZWZsaWdodFJlcXVlc3RJZGVudGlmaWVy
LCBlcnJvcik7CkBAIC0yOTUsNiArMjg3LDggQEAKIAogICAgIGFjdHVhbFJlcXVlc3QtPnNldEhU
VFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKKyAgICBjbGVhclJlc291
cmNlKCk7CisKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUgc2VjdXJpdHkgY2hl
Y2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCiAg
ICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNoZWNrKTsKIH0KQEAg
LTMyNCwxOSArMzE4LDE5IEBACiAgICAgICAgICAgICBvcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEg
PSBCdWZmZXJEYXRhOwogICAgICAgICB9CiAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1Jl
cXVlc3QocmVxdWVzdCk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAgICAgaWYgKG1fYWN0
dWFsUmVxdWVzdCkgewotICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QocmVx
dWVzdCk7CiAgICAgICAgICAgICAvLyBCZWNhdXNlIHdpbGxTZW5kUmVxdWVzdCBvbmx5IGdldHMg
Y2FsbGVkIGR1cmluZyByZWRpcmVjdHMsIHdlIGluaXRpYWxpemUgdGhlIGlkZW50aWZpZXIgYW5k
IHRoZSBmaXJzdCB3aWxsU2VuZFJlcXVlc3QgaGVyZS4KICAgICAgICAgICAgIG1fcHJlZmxpZ2h0
UmVxdWVzdElkZW50aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5wYWdlKCktPnByb2dyZXNz
KCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UgcmVkaXJlY3RSZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UoKTsKICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KG1fZG9jdW1lbnQtPmZyYW1l
KCksIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIsIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLCBuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsK
ICAgICAgICAgfQogI2VuZGlmCi0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0
IGFueSBjYWxsYmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhh
dmUgdGhlIG9sZCBsb2FkZXIuCi0gICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2Fk
ZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQobV9k
b2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRp
dW0sIG9wdGlvbnMpOworICAgICAgICBBU1NFUlQoIW1fcmVzb3VyY2UpOworICAgICAgICBtX3Jl
c291cmNlID0gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFJhd1Jl
c291cmNlKG5ld1JlcXVlc3QsIG9wdGlvbnMpOworICAgICAgICBpZiAobV9yZXNvdXJjZSkKKyAg
ICAgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKQEAgLTM2Nyw3ICszNjEsNyBAQAogCiAgICAgY29uc3QgY2hhciogYnl0ZXMg
PSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwogICAgIGludCBsZW4gPSBz
dGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRl
cywgbGVuKTsKKyAgICBkYXRhUmVjZWl2ZWQoMCwgYnl0ZXMsIGxlbik7CiAKICAgICBkaWRGaW5p
c2hMb2FkaW5nKGlkZW50aWZpZXIsIDAuMCk7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDk2OTY1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29y
ay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMiwxMSArMiwxMSBAQAogVGVzdHMgTmV0d29ya1Jlc291cmNlc0RhdGEgbG9naWMg
Zm9yIFhIUiBjb250ZW50IHJlcGxhY2VtZW50LgogCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5z
cGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTIwMAotcmVzb3VyY2Uu
Y29udGVudDogbnVsbAorcmVzb3VyY2UuY29udGVudDogCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAv
aW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTEwMAogcmVzb3Vy
Y2UuY29udGVudDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog
aHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJj
ZS5waHA/c2l6ZT0yMDEKLXJlc291cmNlLmNvbnRlbnQ6IG51bGwKK3Jlc291cmNlLmNvbnRlbnQ6
IAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNv
dXJjZS5waHA/c2l6ZT0xMDAKIHJlc291cmNlLmNvbnRlbnQ6ICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTY5NjUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
MS0xMC0wMyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRl
c3QgdXBkYXRlIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEy
MjUuCisgICAgICAgIER1ZSB0byBjaGFuZ2VzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIgKGFuZAorICAgICAgICB0aGVyZWZvcmUgWEhSKSwgdGhpcyB0
ZXN0IHdpbGwgaGF2ZSBlbXB0eSAocmF0aGVyIHRoYW4gbnVsbCkgY29udGVudAorICAgICAgICBp
ZiB3ZSBnbyBvdmVyIHRoZSBsZW5ndGggbGltaXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25l
dHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0OgorCiAyMDExLTEwLTA3
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04o
cjk2MjU3KTogZmFzdC9yZXBhaW50L3NlbGVjdGlvbi1jbGVhci5odG1sIGZhaWwK
</data>
<flag name="commit-queue"
          id="107637"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110210</attachid>
            <date>2011-10-07 13:42:02 -0700</date>
            <delta_ts>2011-10-11 12:09:07 -0700</delta_ts>
            <desc>Fix compile issues</desc>
            <filename>cachexhr2.txt</filename>
            <type>text/plain</type>
            <size>38462</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxM
b2FkZXIuY3BwCShyZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsMTAgKzI5OCw0
IEBACiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKIH0KIAotdm9pZCBBc3NvY2lhdGVkVVJM
TG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykKLXsKLSAgICBpZiAo
bV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRp
bmcpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmgJKHJldmlzaW9uIDk2OTY1KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGxvYWRTeW5jaHJv
bm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmLCBXZWJVUkxSZXNwb25zZSYsIFdlYlVSTEVycm9y
JiwgV2ViRGF0YSYpOwogICAgIHZpcnR1YWwgdm9pZCBsb2FkQXN5bmNocm9ub3VzbHkoY29uc3Qg
V2ViVVJMUmVxdWVzdCYsIFdlYlVSTExvYWRlckNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWwoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKSB7IH0KIAogcHJpdmF0ZToKIApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMS0xMC0wMyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBubyBsb25nZXIgZXhwb3NlcyBzZXREZWZlcnNMb2Fk
aW5nKCksCisgICAgICAgIHNvIGRvbid0IHRyeSB0byBjYWxsIGl0IGluIEFzc29jaWF0ZWRVUkxM
b2FkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MTIyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3JjL0Fzc29jaWF0ZWRVUkxMb2FkZXIuY3BwOgorICAgICAgICAqIHNyYy9Bc3NvY2lhdGVkVVJM
TG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6OkFzc29jaWF0ZWRVUkxMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcpOgorCiAyMDExLTEwLTA3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgRml4IGNocm9taXVtIGNvbXBpbGUgd2hlbiB1c2luZyB0aGUgY29tcG9uZW50
cyBidWlsZC4gIFRoaXMgdGVzdApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY5NjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NiBAQAor
MjAxMS0xMC0wNyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IE1ha2UgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIGEgQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisg
ICAgICAgIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWNoZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
cyBhcworICAgICAgICBhcHByb3ByaWF0ZSBpbiBhIGxhdGVyIHBhdGNoLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMjUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGZ1bmN0
aW9uYWxpdHkgY2hhbmdlIGludGVuZGVkLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6IENhY2hlZFJl
c291cmNlQ2xpZW50cyBkb24ndCBzZW5kIHNlcGFyYXRlIGNhbGxiYWNrcworICAgICAgICAgICAg
Zm9yIGRpZEZhaWwoKSBhbmQgZGlkRmluaXNoTG9hZGluZygpLCBzbyB3ZSBuZWVkIHRvIGRpZmZl
cmVudGlhdGUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlcXVlc3QpOiBDYWxsIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmF3UmVz
b3VyY2UoKQorICAgICAgICAgICAgaW5zdGVhZCBvZiBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlU3VicmVzb3VyY2VMb2FkKCkuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6ZGF0YSk6IEhhbmRsZSB0
aGUgY29tcGxleGl0eSBvZiBzb21lIFRocmVhZGFibGVMb2FkZXJDbGllbnRzIHNldHRpbmcKKyAg
ICAgICAgICAgIERvTm90QnVmZmVyRGF0YSBpbiBSZXNvdXJlTG9hZGVyT3B0aW9ucy4gSWYgdGhl
IERhdGFCdWZmZXJpbmdQb2xpY3kgaXMgQnVmZmVyRGF0YSwgdGhlbiB0aGUKKyAgICAgICAgICAg
ICdkYXRhJyBpbnB1dCBwYXJhbWV0ZXIgd2lsbCBjb250YWluIGFsbCBkYXRhIHJlY2VpdmVkIHNv
IGZhciwgYW5kIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgICAgaW5jcmVtZW50
YWwgZGF0YSB0byBmb3J3YXJkIHRvIHRoZSBjbGllbnRzLiBJZiB0aGUgcG9saWN5IGlzIERvTm90
QnVmZmVyRGF0YSwgJ2RhdGEnIGlzIGp1c3QKKyAgICAgICAgICAgIHRoZSBpbmNyZW1lbnRhbCBk
YXRhLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
cHJlbG9hZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6ZGlkU2Vu
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZERvd25sb2FkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZEZpbmlzaFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmxvYWRGaW5pc2hUaW1lKToKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaDogQWRkIHNldmVyYWwg
bmV3IGNhbGxiYWNrcyBuZWVkZWQgYnkgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBDYWNoZWRS
ZXNvdXJjZTo6c2V0UmVzcG9uc2UoKSBjYW4gbm93IGNhbmNlbAorICAgICAgICAgICAgdGhlIHJl
cXVlc3QsIHNvIHByb3RlY3QgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hl
ZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwOiBBZGRlZCAocGx1bWIgZGlkRG93bmxvYWREYXRhKCkg
dG8gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKS4KKyAgICAgICAgKiBsb2FkZXIvY2hyb21pdW0v
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Q2hyb21pdW0uY3BwOiBBZGRlZCAocGx1bWIgZGlkRG93bmxv
YWREYXRhKCkgdG8gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKS4KKyAgICAgICAgKiBsb2FkZXIv
Y2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2JSZXNvdXJjZUhhbmRsZTo6bm90aWZ5UmVzcG9uc2UpOiBQcm90ZWN0IGJlZm9yZSBz
ZXR0aW5nIHJlc3BvbnNlLCBzaW5jZSBpdCBtaWdodCBraWxsIHVzLgorCiAyMDExLTEwLTA3ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IHJlLW9y
Z2FuaXplIGZha2UgZWxlbWVudHMgdG8gdXNlIG5ldyBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
c291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
OCw2ICs1MzgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lcnJvckNvZGUpIHsK
KyAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCh0aGlzKTsKICAgICAg
ICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAgICAgIG5vdGlmeUZpbmlzaCgpOwogICAg
IH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI4NDEsNiArMjg0MSw4IEBA
CiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnbG9h
ZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2hy
b21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVyQ2hyb21p
dW0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcAkocmV2
aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEs
MTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaCIKIAotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmF3UmVzb3VyY2UuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBpbnQgZGF0YUxlbmd0aCkK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UsIGludCBkYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNT
RVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAgICAgQVNTRVJU
KCFtX2FjdHVhbFJlcXVlc3QpOwogCiAgICAgbV9jbGllbnQtPmRpZERvd25sb2FkRGF0YShkYXRh
TGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVl
c3RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWREb3du
bG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aCkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBtX3Jlc291cmNl
LT5kaWREb3dubG9hZERhdGEobGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9t
aXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9D
YWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIK
KworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjpkaWREb3dubG9hZERhdGEoaW50IGRhdGFMZW5ndGgpCit7CisgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5kYXRhRG93bmxvYWRlZCh0
aGlzLCBkYXRhTGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwyMiBAQAogICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVz
dCYpOwogICAgIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hl
ZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKGludCk7
CisjZW5kaWYKKworICAgIGludCBtX2RhdGFMZW5ndGg7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBD
YWNoZWRSYXdSZXNvdXJjZV9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2
ICs4Myw3IEBACiAgICAgLCBtX2xvYWRQcmlvcml0eShkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJj
ZVR5cGUodHlwZSkpCiAgICAgLCBtX3Jlc3BvbnNlVGltZXN0YW1wKGN1cnJlbnRUaW1lKCkpCiAg
ICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQorICAgICwgbV9sb2FkRmluaXNoVGltZSgw
KQogICAgICwgbV9lbmNvZGVkU2l6ZSgwKQogICAgICwgbV9kZWNvZGVkU2l6ZSgwKQogICAgICwg
bV9hY2Nlc3NDb3VudCgwKQpAQCAtMjI2LDYgKzIyNyw5IEBACiB7CiAgICAgbV9yZXNwb25zZSA9
IHJlc3BvbnNlOwogICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworICAg
IENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+cmVzcG9uc2VSZWNl
aXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0U2Vy
aWFsaXplZENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQpAQCAt
MjU2LDYgKzI2MCwxNiBAQAogICAgIHJldHVybiBtX2NhY2hlZE1ldGFkYXRhLmdldCgpOwogfQog
Cit1bnNpZ25lZCBsb25nIENhY2hlZFJlc291cmNlOjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXF1ZXN0ID8gbV9yZXF1ZXN0LT5pZGVudGlmaWVyKCkgOiAwOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpCit7ICAgIAorICAgIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllciA9IHRydWU7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnN0b3BMb2FkaW5nKCkK
IHsKICAgICBBU1NFUlQobV9yZXF1ZXN0KTsgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCShyZXZpc2lv
biA5Njk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBACiAgICAgY2xhc3MgSW1hZ2U7
CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIAogICAgIC8qKgogICAgICAqIEBpbnRlcm5hbApAQCAtNTAsNiArNTMsMTQgQEAKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CiAK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQg
bG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0
ZXNUb0JlU2VudCAqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogLyog
ZGF0YSAqLywgaW50IC8qIGxlbmd0aCAqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRp
cmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIHsgfQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGF0YURvd25sb2FkZWQoQ2FjaGVkUmVzb3VyY2UqLCBpbnQpIHsgfQorI2VuZGlm
CisKICAgICAgICAgLy8gQ2FsbGVkIHdoZW5ldmVyIGEgZnJhbWUgb2YgYW4gaW1hZ2UgY2hhbmdl
cywgZWl0aGVyIGJlY2F1c2Ugd2UgZ290IG1vcmUgZGF0YSBmcm9tIHRoZSBuZXR3b3JrIG9yCiAg
ICAgICAgIC8vIGJlY2F1c2Ugd2UgYXJlIGFuaW1hdGluZy4gSWYgbm90IG51bGwsIHRoZSBJbnRS
ZWN0IGlzIHRoZSBjaGFuZ2VkIHJlY3Qgb2YgdGhlIGltYWdlLgogICAgICAgICB2aXJ0dWFsIHZv
aWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50UmVjdCogPSAwKSB7IH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2
aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw2IEBACiAgICAgICAgIFByZWxvYWRS
ZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQogICAgIH07CiAgICAgUHJlbG9hZFJlc3VsdCBwcmVsb2Fk
UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVs
b2FkUmVzdWx0KTsgfQotICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigp
IHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIHZpcnR1YWwg
dm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQpAQCAtMTcwLDYgKzE2OSw3IEBACiAKICAgICBT
aGFyZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFibGVEYXRhKTsgcmV0
dXJuIG1fZGF0YS5nZXQoKTsgfQogCisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBzZXRS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAKQEAgLTIyOCw3
ICsyMjgsMTggQEAKICAgICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2Uo
KTsKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAgICB2b2lkIHVwZGF0
ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRh
dGluZ1Jlc3BvbnNlKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFs
Qnl0ZXNUb0JlU2VudCAqLykgeyB9CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVh
bCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpIHsgfQorI2VuZGlmCiAKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9ySW5zdHJ1bWVudGF0aW9uIGZvciBwcmVm
bGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4gSXQncyBhbHNvIHJlYWxseSBsYW1l
LgorICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCisgICAgdm9pZCBzZXRM
b2FkRmluaXNoVGltZShkb3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmlu
aXNoVGltZTsgfQorICAgIGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9hZEZpbmlzaFRpbWU7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsK
IApAQCAtMjYzLDYgKzI3NCw3IEBACiAgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBtX2NhY2hl
ZE1ldGFkYXRhOwogCiAgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2Vk
IGFzIGEgInRocmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisgICAgZG91YmxlIG1fbG9hZEZpbmlz
aFRpbWU7CiAKICAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwogICAgIHVuc2lnbmVkIG1fZGVj
b2RlZFNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsNiArODYsOCBAQAogCiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6On5DYWNoZWRSZXNv
dXJjZVJlcXVlc3QoKQogeworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPmNs
ZWFyQ2xpZW50KCk7CiB9CiAKIFBhc3NPd25QdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucykKQEAgLTEzOCwxMyArMTQwLDEzIEBACiAgICAgcmV0dXJuIHJlcXVl
c3QucmVsZWFzZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6d2lsbFNlbmRS
ZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp3aWxs
U2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmICghbV9jYWNo
ZWRSZXNvdXJjZUxvYWRlci0+Y2FuUmVxdWVzdChtX3Jlc291cmNlLT50eXBlKCksIHJlcS51cmwo
KSkpIHsKICAgICAgICAgbG9hZGVyLT5jYW5jZWwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBtX3Jlc291cmNlLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CisgICAg
bV9yZXNvdXJjZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcSwgcmVzcG9uc2UpOwogfQogCiB2b2lkIENh
Y2hlZFJlc291cmNlUmVxdWVzdDo6Y2FuY2VsKCkKQEAgLTE1NCw4ICsxNTYsMTMgQEAKICAgICBt
X2xvYWRlci0+Y2FuY2VsKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRG
aW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSkKK3Vuc2lnbmVk
IGxvbmcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjppZGVudGlmaWVyKCkgY29uc3QKIHsKKyAgICBy
ZXR1cm4gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVJl
cXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgZG91Ymxl
IGZpbmlzaFRpbWUpCit7CiAgICAgaWYgKG1fZmluaXNoaW5nKQogICAgICAgICByZXR1cm47CiAK
QEAgLTE3NCw2ICsxODEsNyBAQAogICAgIC8vIGVycm9yLCBzbyB3ZSBjYW4ndCBzZW5kIHRoZSBz
dWNjZXNzZnVsIGRhdGEoKSBhbmQgZmluaXNoKCkgY2FsbGJhY2tzLgogICAgIGlmICghbV9yZXNv
dXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CiAgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmxvYWRGaW5pc2hpbmcoKTsKKyAgICAgICAgbV9yZXNvdXJjZS0+c2V0TG9hZEZpbmlzaFRpbWUo
ZmluaXNoVGltZSk7CiAgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURh
dGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlmICghbV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQog
ICAgICAgICAgICAgbV9yZXNvdXJjZS0+ZmluaXNoKCk7CkBAIC0yMzUsNyArMjQzLDEzIEBACiAg
ICAgICAgIG1lbW9yeUNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChtX3Jlc291cmNlKTsKICAg
ICB9CiAKKyAgICAvLyBzZXRSZXNwb25zZSgpIG1pZ2h0IGNhbmNlbCB0aGUgcmVxdWVzdCwgc28g
d2UgbmVlZCB0byBrZWVwIG91cnNlbHZlcyBhbGl2ZS4gVW5mb3J0dW5hdGVseSwKKyAgICAvLyB3
ZSBjYW4ndCBwcm90ZWN0IGEgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LCBidXQgd2UgY2FuIHByb3Rl
Y3QgbV9yZXNvdXJjZSwgd2hpY2ggaGFzIHRoZQorICAgIC8vIHBvd2VyIHRvIGtpbGwgdGhlIENh
Y2hlZFJlc291cmNlUmVxdWVzdCAoYW5kIHdpbGwgc3dpdGNoIGlzTG9hZGluZygpIHRvIGZhbHNl
IGlmIGl0IGRvZXMgc28pLgorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
PiBwcm90ZWN0KG1fcmVzb3VyY2UpOwogICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKyAgICBpZiAoIXByb3RlY3QtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBTdHJpbmcgZW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CiAgICAg
aWYgKCFlbmNvZGluZy5pc051bGwoKSkKQEAgLTI2NywxNiArMjgxLDE3IEBACiAgICAgaWYgKG1f
cmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAg
aWYgKCFtX3Jlc291cmNlLT5zaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpKQotICAg
ICAgICAgICAgbV9yZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7Cisg
ICAgaWYgKG1fcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDAgJiYg
IW1fcmVzb3VyY2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpIHsKKyAgICAg
ICAgbV9yZXNvdXJjZS0+ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OkxvYWRFcnJvcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICAvLyBTZXQgdGhlIGRhdGEuCi0gICAgaWYgKG1fbXVsdGlw
YXJ0KSB7Ci0gICAgICAgIC8vIFRoZSBsb2FkZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0
aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgc2VuZCBlb2YuCi0gICAgICAgIC8vIFRoZSByZXNv
dXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRoZSBuZXh0IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBu
ZWVkIHRvIG1ha2UgYSBjb3B5LgorICAgIC8vIFRoZXJlIGFyZSB0d28gY2FzZXMgd2hlcmUgd2Ug
bWlnaHQgbmVlZCB0byBjcmVhdGUgb3VyIG93biBTaGFyZWRCdWZmZXIgaW5zdGVhZCBvZiBjb3B5
aW5nIHRoZSBvbmUgaW4gUmVzb3VyY2VMb2FkZXIuCisgICAgLy8gKDEpIE11bHRpcGFydCBjb250
ZW50OiBUaGUgbG9hZGVyIGRlbGl2ZXJzIHRoZSBkYXRhIGluIGEgbXVsdGlwYXJ0IHNlY3Rpb24g
YWxsIGF0IG9uY2UsIHRoZW4gc2VuZHMgZW9mLgorICAgIC8vICAgICBUaGUgcmVzb3VyY2UgZGF0
YSB3aWxsIGNoYW5nZSBhcyB0aGUgbmV4dCBwYXJ0IGlzIGxvYWRlZCwgc28gd2UgbmVlZCB0byBt
YWtlIGEgY29weS4KKyAgICAvLyAoMikgT3VyIGNsaWVudCByZXF1ZXN0ZWQgdGhhdCB0aGUgZGF0
YSBub3QgYmUgYnVmZmVyZWQgYXQgdGhlIFJlc291cmNlTG9hZGVyIGxldmVsIHZpYSBSZXNvdXJj
ZUxvYWRlck9wdGlvbnMuIEluIHRoaXMgY2FzZSwKKyAgICAvLyAgICAgUmVzb3VyY2VMb2FkZXI6
OnJlc291cmNlRGF0YSgpIHdpbGwgYmUgbnVsbC4KKyAgICBpZiAobV9tdWx0aXBhcnQgfHwgIWxv
YWRlci0+cmVzb3VyY2VEYXRhKCkpIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29w
aWVkRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIHNpemUpOwogICAgICAgICBtX3Jl
c291cmNlLT5kYXRhKGNvcGllZERhdGEucmVsZWFzZSgpLCB0cnVlKTsKICAgICB9IGVsc2UKQEAg
LTI4OCw3ICszMDMsMTIgQEAKICAgICBBU1NFUlQoIW1fcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0
b3IoKSk7CiAgICAgbV9yZXNvdXJjZS0+c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGRhdGEs
IHNpemUpOwogfQotICAgIAorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkU2VuZERh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQoreworICAgIG1fcmVzb3VyY2UtPmRp
ZFNlbmREYXRhKGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwogdm9pZCBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OmVuZCgpCiB7CiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+
bG9hZERvbmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJhd1Jlc291cmNlLmNwcAkocmV2aXNpb24gOTY5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
OSArMzcsNjUgQEAKIAogQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJhd1Jlc291cmNlKFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQogICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3Vy
Y2VSZXF1ZXN0LCBSYXdSZXNvdXJjZSkKKyAgICAsIG1fZGF0YUxlbmd0aCgwKQogewogfQogCiB2
b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBtX2RhdGEgPSBkYXRhOworICAgIGlmIChk
YXRhKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBidWZmZXJpbmcgZGF0YSwgdGhlbiB3ZSBhcmUg
c2F2aW5nIHRoZSBidWZmZXIgaW4gbV9kYXRhIGFuZCBuZWVkIHRvIG1hbnVhbGx5CisgICAgICAg
IC8vIGNhbGN1bGF0ZSB0aGUgaW5jcmVtZW50YWwgZGF0YS4gSWYgd2UgYXJlIG5vdCBidWZmZXJp
bmcsIHRoZW4gbV9kYXRhIHdpbGwgYmUgbnVsbCBhbmQKKyAgICAgICAgLy8gdGhlIGJ1ZmZlciBj
b250YWlucyBvbmx5IHRoZSBpbmNyZW1lbnRhbCBkYXRhLgorICAgICAgICBpbnQgcHJldmlvdXNE
YXRhTGVuZ3RoID0gKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09IEJ1ZmZlckRhdGEpID8g
bV9kYXRhTGVuZ3RoIDogMDsKKyAgICAgICAgY29uc3QgY2hhciogaW5jcmVtZW50YWxEYXRhID0g
ZGF0YS0+ZGF0YSgpICsgcHJldmlvdXNEYXRhTGVuZ3RoOworICAgICAgICBpbnQgaW5jcmVtZW50
YWxEYXRhTGVuZ3RoID0gZGF0YS0+c2l6ZSgpIC0gcHJldmlvdXNEYXRhTGVuZ3RoOworCisgICAg
ICAgIEFTU0VSVChpbmNyZW1lbnRhbERhdGFMZW5ndGggPj0gMCk7CisgICAgICAgIGlmIChpbmNy
ZW1lbnRhbERhdGFMZW5ndGgpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyIHcobV9jbGllbnRzKTsKKyAgICAgICAgICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVu
dCogYyA9IHcubmV4dCgpKQorICAgICAgICAgICAgICAgIGMtPmRhdGFSZWNlaXZlZCh0aGlzLCBp
bmNyZW1lbnRhbERhdGEsIGluY3JlbWVudGFsRGF0YUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID09IEJ1ZmZlckRhdGEp
IHsKKyAgICAgICAgbV9kYXRhTGVuZ3RoID0gZGF0YSA/IGRhdGEtPnNpemUoKSA6IDA7CisgICAg
ICAgIG1fZGF0YSA9IGRhdGE7CisgICAgfQogICAgIENhY2hlZFJlc291cmNlOjpkYXRhKG1fZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkQWRk
Q2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoreworICAgIGlmIChtX2RhdGEpIHsKKyAg
ICAgICAgYy0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKKyAgICAgICAgYy0+
ZGF0YVJlY2VpdmVkKHRoaXMsIG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAg
fQorICAgIENhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQoYyk7Cit9CisKIHZvaWQgQ2FjaGVk
UmF3UmVzb3VyY2U6OmFsbENsaWVudHNSZW1vdmVkKCkKIHsKICAgICBpZiAobV9yZXF1ZXN0KQog
ICAgICAgICBtX3JlcXVlc3QtPmNhbmNlbCgpOwogfQogCit2b2lkIENhY2hlZFJhd1Jlc291cmNl
Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAoIXJlc3BvbnNlLmlzTnVsbCgpKSB7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICAgICAg
d2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAgICBj
LT5yZWRpcmVjdFJlY2VpdmVkKHRoaXMsIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9CisgICAg
Q2FjaGVkUmVzb3VyY2U6OndpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisK
K3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNo
ZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5kYXRhU2VudCh0aGlz
LCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJl
cXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSw5IEBACiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KICAgICAgICAg
dm9pZCBjYW5jZWwoKTsKIAorICAgICAgICAvLyBGSVhNRTogTGlrZSBDYWNoZWRSZXNvdXJjZTo6
aWRlbnRpZmllcigpLCB0aGlzIGlzIGEgbGFtZSBoYWNrIGZvciBwcmVmbGlnaHQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisKICAgICBwcml2YXRlOgogICAgICAgICBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBDYWNoZWRSZXNvdXJj
ZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9h
ZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpAQCAtNTks
NiArNjIsMTEgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgZW5kKCk7CiAKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWduZWQg
bG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNU
b0JlU2VudCovKTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGludCk7CisjZW5kaWYKKwogICAg
ICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOwogICAgICAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsKICAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIG1fcmVzb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsOCArMzEsOSBAQAogI2lmbmRlZiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXJfaAogI2RlZmlu
ZSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXJfaAogCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQyLDEzICs0MywxNCBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ2Fj
aGVkUmF3UmVzb3VyY2U7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgS1VSTDsKICAg
ICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAgICAg
Y2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVudDsKIAotICAgIGNsYXNzIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4s
IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50
ICB7CisgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHBy
aXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CkBAIC01Niw3ICs1
OCw2IEBACiAgICAgICAgIHZpcnR1YWwgfkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERl
ZmVyc0xvYWRpbmcoYm9vbCk7CiAKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI+OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyPjo6ZGVyZWY7CkBAIC03MywyMSArNzQsMjEgQEAKIAogICAgICAgICBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiwgQmxvY2tpbmdCZWhhdmlvciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1
ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVu
c2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgICAgICB2b2lkIGNsZWFy
UmVzb3VyY2UoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwg
aW50IGRhdGFMZW5ndGgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
LCBkb3VibGUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQorICAgICAgICAvLyBDYWNoZWRSZXNvdXJjZUNs
aWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNp
Z25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1Rv
QmVTZW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVz
b3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
YXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxl
bmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291
cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKICNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIGludCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRh
dGFEb3dubG9hZGVkKENhY2hlZFJlc291cmNlKiwgaW50KTsKICNlbmRpZgogCiAgICAgICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHZvaWQgZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAg
ICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2Vzcygp
OwpAQCAtOTgsNyArOTksNyBAQAogCiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2Fk
ZXI7CisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jl
c291cmNlOwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25z
IG1fb3B0aW9uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxOSArMzEsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2luY2x1
ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQpAQCAtNjMsNyArNjMsNyBAQAogUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIFJlZlB0
cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsIGNsaWVudCwgTG9hZEFzeW5jaHJvbm91c2x5LCBy
ZXF1ZXN0LCBvcHRpb25zKSk7Ci0gICAgaWYgKCFsb2FkZXItPm1fbG9hZGVyKQorICAgIGlmICgh
bG9hZGVyLT5tX3Jlc291cmNlKQogICAgICAgICBsb2FkZXIgPSAwOwogICAgIHJldHVybiBsb2Fk
ZXIucmVsZWFzZSgpOwogfQpAQCAtMTMzLDMxICsxMzMsMzMgQEAKIAogRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9sb2Fk
ZXIpCi0gICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOworICAgIGlmIChtX3Jlc291cmNl
KQorICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAgIGlmICghbV9sb2FkZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICBtX2xvYWRlci0+
Y2xlYXJDbGllbnQoKTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAgaWYgKG1fY2xpZW50KSB7Cisg
ICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwg
bV9yZXNvdXJjZS0+dXJsKCksICJMb2FkIGNhbmNlbGxlZCIpOworICAgICAgICBlcnJvci5zZXRJ
c0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJvcik7CisgICAgfQorICAg
IGNsZWFyUmVzb3VyY2UoKTsKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKLXZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCit2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZSgpCiB7Ci0gICAgaWYgKG1fbG9hZGVy
KQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAgaWYgKG1f
cmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAg
ICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50
KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAogICAgIGlm
ICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAgICAgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAgLTE2OSwxOCArMTcxLDE3
IEBACiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkU2VuZERh
dGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkYXRhU2VudChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2ln
bmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9C
ZVNlbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRl
ciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLQorICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJl
c291cmNlID09IG1fcmVzb3VyY2UpOwogICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YShieXRlc1Nl
bnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIp
OwotICAgIGRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPmlkZW50aWZpZXIoKSwgcmVzcG9uc2Up
OworICAgIEFTU0VSVChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKKyAgICBkaWRSZWNlaXZlUmVz
cG9uc2UocmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgcmVzcG9uc2UpOwogfQogCiB2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0yMjMsMTAgKzIy
NCwxMCBAQAogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRhdGFSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVu
Z3RoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIs
IGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3Vy
Y2UgPT0gbV9yZXNvdXJjZSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChtX3By
ZWZsaWdodFJlcXVlc3RJZGVudGlmaWVyKQpAQCAtMjQwLDI1ICsyNDEsMjAgQEAKICAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgZGF0YUxlbmd0aCk7CiB9CiAKLXZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCit2b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2Fk
ZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KLSAgICAvLyBQcmVmbGlnaHQgZGF0YSBzaG91bGQg
YmUgaW52aXNpYmxlIHRvIGNsaWVudHMuCi0gICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRh
LCBkYXRhTGVuZ3RoKTsKKyAgICBBU1NFUlQocmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAg
ICAgIAorICAgIGlmIChyZXNvdXJjZSAmJiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSB8fCBy
ZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkpIHsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigi
TmV0d29yayBSZXF1ZXN0IEZhaWxlZCIsIDAsIHJlc291cmNlLT51cmwoKSwgIlJlc291cmNlIGZh
aWxlZCB0byBsb2FkIik7CisgICAgICAgIGlmIChyZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkKKyAg
ICAgICAgICAgIGVycm9yLnNldElzQ2FuY2VsbGF0aW9uKHRydWUpOworICAgICAgICBkaWRGYWls
KGVycm9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGlkRmluaXNoTG9hZGluZyhyZXNvdXJjZS0+
aWRlbnRpZmllcigpLCByZXNvdXJjZS0+bG9hZEZpbmlzaFRpbWUoKSk7CiB9CiAKLXZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVy
KiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQotewotICAgIEFTU0VSVChsb2FkZXIgPT0gbV9s
b2FkZXIpOwotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgZGlkRmluaXNoTG9hZGluZyhsb2Fk
ZXItPmlkZW50aWZpZXIoKSwgZmluaXNoVGltZSk7Ci19Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91
YmxlIGZpbmlzaFRpbWUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKQEAgLTI3NCwxMiArMjcw
LDggQEAKICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllciwgZmlu
aXNoVGltZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKFN1
YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICAvLyBtX2xvYWRlciBtYXkgYmUg
bnVsbCBpZiB3ZSBhcnJpdmUgaGVyZSB2aWEgU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSBpbiB0
aGUgY3RvcgotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIgfHwg
IW1fbG9hZGVyKTsKLQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1fcHJlZmxpZ2h0
UmVxdWVzdElkZW50aWZpZXIpCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RmFpbExvYWRpbmcobV9kb2N1bWVudC0+ZnJhbWUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIsIGVy
cm9yKTsKQEAgLTI5NSw2ICsyODcsOCBAQAogCiAgICAgYWN0dWFsUmVxdWVzdC0+c2V0SFRUUE9y
aWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKIAorICAgIGNsZWFyUmVzb3VyY2Uo
KTsKKwogICAgIC8vIEl0IHNob3VsZCBiZSBvayB0byBza2lwIHRoZSBzZWN1cml0eSBjaGVjayBz
aW5jZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0IHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KICAgICBs
b2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgU2tpcFNlY3VyaXR5Q2hlY2spOwogfQpAQCAtMzI0
LDE5ICszMTgsMTkgQEAKICAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9IEJ1
ZmZlckRhdGE7CiAgICAgICAgIH0KIAorICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVz
dChyZXF1ZXN0KTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAobV9hY3R1YWxS
ZXF1ZXN0KSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0
KTsKICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2lsbFNlbmRSZXF1ZXN0IG9ubHkgZ2V0cyBjYWxs
ZWQgZHVyaW5nIHJlZGlyZWN0cywgd2UgaW5pdGlhbGl6ZSB0aGUgaWRlbnRpZmllciBhbmQgdGhl
IGZpcnN0IHdpbGxTZW5kUmVxdWVzdCBoZXJlLgogICAgICAgICAgICAgbV9wcmVmbGlnaHRSZXF1
ZXN0SWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+
Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZWRpcmVjdFJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QobV9kb2N1bWVudC0+ZnJhbWUoKSwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
ICAgICB9CiAjZW5kaWYKLQotICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55
IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0
aGUgb2xkIGxvYWRlci4KLSAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChtX2RvY3Vt
ZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSwg
b3B0aW9ucyk7CisgICAgICAgIEFTU0VSVCghbV9yZXNvdXJjZSk7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0UmF3UmVzb3Vy
Y2UobmV3UmVxdWVzdCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChtX3Jlc291cmNlKQorICAgICAg
ICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApAQCAtMzY3LDcgKzM2MSw3IEBACiAKICAgICBjb25zdCBjaGFyKiBieXRlcyA9IHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7CiAgICAgaW50IGxlbiA9IHN0YXRp
Y19jYXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGRpZFJlY2VpdmVEYXRhKDAsIGJ5dGVzLCBs
ZW4pOworICAgIGRhdGFSZWNlaXZlZCgwLCBieXRlcywgbGVuKTsKIAogICAgIGRpZEZpbmlzaExv
YWRpbmcoaWRlbnRpZmllciwgMC4wKTsKIH0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0
d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gOTY5NjUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25l
dHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yLDExICsyLDExIEBACiBUZXN0cyBOZXR3b3JrUmVzb3VyY2VzRGF0YSBsb2dpYyBmb3Ig
WEhSIGNvbnRlbnQgcmVwbGFjZW1lbnQuCiAKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0
b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MjAwCi1yZXNvdXJjZS5jb250
ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50OiAKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNw
ZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5j
b250ZW50OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBo
cD9zaXplPTIwMQotcmVzb3VyY2UuY29udGVudDogbnVsbAorcmVzb3VyY2UuY29udGVudDogCiBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNl
LnBocD9zaXplPTEwMAogcmVzb3VyY2UuY29udGVudDogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Njk2NSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEw
LTAzICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVzdCB1
cGRhdGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIyNS4K
KyAgICAgICAgRHVlIHRvIGNoYW5nZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlciAoYW5kCisgICAgICAgIHRoZXJlZm9yZSBYSFIpLCB0aGlzIHRlc3Qg
d2lsbCBoYXZlIGVtcHR5IChyYXRoZXIgdGhhbiBudWxsKSBjb250ZW50CisgICAgICAgIGlmIHdl
IGdvIG92ZXIgdGhlIGxlbmd0aCBsaW1pdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29y
ay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQ6CisKIDIwMTEtMTAtMDcgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyOTYy
NTcpOiBmYXN0L3JlcGFpbnQvc2VsZWN0aW9uLWNsZWFyLmh0bWwgZmFpbAo=
</data>
<flag name="commit-queue"
          id="107658"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110556</attachid>
            <date>2011-10-11 12:09:07 -0700</date>
            <delta_ts>2011-10-17 09:58:11 -0700</delta_ts>
            <desc>Address comments + add a CachedRawResourceClient</desc>
            <filename>cachexhr3.txt</filename>
            <type>text/plain</type>
            <size>37789</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMDcgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBhIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgdXMgdG8gY2FjaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgYXMKKyAgICAgICAgYXBwcm9w
cmlhdGUgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxMjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBpbnRl
bmRlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qg
c2VuZCBzZXBhcmF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRp
ZEZpbmlzaExvYWRpbmcoKSwgc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2Fs
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAg
IGluc3RlYWQgb2YgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCgpLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEpOiBIYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29t
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50cyBzZXR0aW5nCisgICAgICAgICAgICBEb05vdEJ1ZmZl
ckRhdGEgaW4gUmVzb3VyZUxvYWRlck9wdGlvbnMuIElmIHRoZSBEYXRhQnVmZmVyaW5nUG9saWN5
IGlzIEJ1ZmZlckRhdGEsIHRoZW4gdGhlCisgICAgICAgICAgICAnZGF0YScgaW5wdXQgcGFyYW1l
dGVyIHdpbGwgY29udGFpbiBhbGwgZGF0YSByZWNlaXZlZCBzbyBmYXIsIGFuZCB3ZSBuZWVkIHRv
IGRldGVybWluZSB0aGUKKyAgICAgICAgICAgIGluY3JlbWVudGFsIGRhdGEgdG8gZm9yd2FyZCB0
byB0aGUgY2xpZW50cy4gSWYgdGhlIHBvbGljeSBpcyBEb05vdEJ1ZmZlckRhdGEsICdkYXRhJyBp
cyBqdXN0CisgICAgICAgICAgICB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnByZWxvYWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldExvYWRGaW5pc2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpsb2FkRmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6IEFkZCBzZXZlcmFsIG5ldyBjYWxsYmFja3MgbmVlZGVk
IGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1ZXN0LCBzbyBwcm90ZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oOgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6Om5vdGlmeVJlc3BvbnNlKTogUHJvdGVjdCBiZWZvcmUgc2V0dGluZyByZXNwb25zZSwgc2lu
Y2UgaXQgbWlnaHQga2lsbCB1cy4KKwogMjAxMS0xMC0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBFeHRlbnNpb25z
IGNvbXBvbmVudCBjb21waWxlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTcxNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1MzgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9lcnJvckNvZGUpIHsKKyAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4g
cHJvdGVjdCh0aGlzKTsKICAgICAgICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAgICAg
IG5vdGlmeUZpbmlzaCgpOwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTI4NDYsNiArMjg0Niw4IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhT
TFN0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKKyAg
ICAgICAgICAgICdsb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAn
LAorICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNv
dXJjZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1
YnJlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNSArMzEsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKIAotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKICNpbmNsdWRlICJUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9h
ZGVyLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRh
RG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGludCBkYXRhTGVuZ3RoKQogewog
ICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9
PSBtX2xvYWRlcik7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9y
ZXNvdXJjZSk7CiAgICAgQVNTRVJUKCFtX2FjdHVhbFJlcXVlc3QpOwogCiAgICAgbV9jbGllbnQt
PmRpZERvd25sb2FkRGF0YShkYXRhTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENo
cm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1
bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
UmVxdWVzdC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0OjpkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
aW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9h
ZGVyKTsKKyAgICBtX3Jlc291cmNlLT5kaWREb3dubG9hZERhdGEobGVuZ3RoKTsKK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9D
YWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmF3UmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWREb3dubG9hZERhdGEoaW50IGRh
dGFMZW5ndGgpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMp
OworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAg
ICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5kYXRhRG93bmxvYWRl
ZCh0aGlzLCBkYXRhTGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDk3MTUyKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDIwICsyNCw1MyBAQAogI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9oCiAKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2UgOiBw
dWJsaWMgQ2FjaGVkUmVzb3VyY2UgewogcHVibGljOgogICAgIENhY2hlZFJhd1Jlc291cmNlKFJl
c291cmNlUmVxdWVzdCYpOworCisgICAgLy8gRklYTUU6IEFzc29jaWF0ZWRVUkxMb2FkZXIgc2hv
dWxkbid0IGJlIGEgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIGFuZCB0aGVyZWZvcmUgc2hvdWxk
bid0CisgICAgLy8gdXNlIENhY2hlZFJhd1Jlc291cmNlLiBIb3dldmVyLCBpdCBpcywgYW5kIGl0
IG5lZWRzIHRvIGJlIGFibGUgdG8gZGVmZXIgbG9hZGluZy4KKyAgICAvLyBUaGlzIGNhbiBiZSBm
aXhlZCBieSBzcGxpdHRpbmcgQ09SUyBwcmVmbGlnaHRpbmcgb3V0IG9mIERvY3VtZW50VGhyZWFj
YWJsZUxvYWRlci4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAg
ICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9ySW5zdHJ1
bWVudGF0aW9uIGZvciBwcmVmbGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4gSXQn
cyBhbHNvIHJlYWxseSBsYW1lLgorICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0
OworCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CisgICAgdmlydHVhbCB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisjaWYgUExBVEZPUk0o
Q0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpOworI2VuZGlm
CisKKyAgICBzaXplX3QgbV9kYXRhTGVuZ3RoOwogfTsKIAorCitjbGFzcyBDYWNoZWRSYXdSZXNv
dXJjZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQoKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0
ZXNTZW50ICovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgaW50IC8qIGxlbmd0aCAq
LykgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRhdGFEb3dubG9hZGVkKENhY2hlZFJl
c291cmNlKiwgaW50KSB7IH0KKyNlbmRpZgorfTsKKwogfQogCiAjZW5kaWYgLy8gQ2FjaGVkUmF3
UmVzb3VyY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAK
ICAgICAsIG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0eXBl
KSkKICAgICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoY3VycmVudFRpbWUoKSkKICAgICAsIG1fbGFz
dERlY29kZWRBY2Nlc3NUaW1lKDApCisgICAgLCBtX2xvYWRGaW5pc2hUaW1lKDApCiAgICAgLCBt
X2VuY29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRTaXplKDApCiAgICAgLCBtX2FjY2Vzc0Nv
dW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw2IEBACiAgICAgICAg
IFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQogICAgIH07CiAgICAgUHJlbG9hZFJlc3Vs
dCBwcmVsb2FkUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJlc3Vs
dD4obV9wcmVsb2FkUmVzdWx0KTsgfQotICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcigpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAg
IHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQpAQCAtMTcwLDcgKzE2OSw4IEBA
CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFibGVE
YXRhKTsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyBtX3JlcXVlc3RlZEZy
b21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KIAogICAgIC8vIFNldHMgdGhl
IHNlcmlhbGl6ZWQgbWV0YWRhdGEgcmV0cmlldmVkIGZyb20gdGhlIHBsYXRmb3JtJ3MgY2FjaGUu
CkBAIC0yMjgsNyArMjI4LDE1IEBACiAgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRl
ZFJlc291cmNlKCk7CiAgICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CiAgICAg
dm9pZCB1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmRE
YXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9u
ZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsgfQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoaW50KSB7IH0KKyNlbmRpZgogCisgICAg
dm9pZCBzZXRMb2FkRmluaXNoVGltZShkb3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hU
aW1lID0gZmluaXNoVGltZTsgfQorICAgIGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tO
b3RpZnkoKTsKIApAQCAtMjYzLDYgKzI3MSw3IEBACiAgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRh
PiBtX2NhY2hlZE1ldGFkYXRhOwogCiAgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1l
OyAvLyBVc2VkIGFzIGEgInRocmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisgICAgZG91YmxlIG1f
bG9hZEZpbmlzaFRpbWU7CiAKICAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwogICAgIHVuc2ln
bmVkIG1fZGVjb2RlZFNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTcxNTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6On5D
YWNoZWRSZXNvdXJjZVJlcXVlc3QoKQogeworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9s
b2FkZXItPmNsZWFyQ2xpZW50KCk7CiB9CiAKIFBhc3NPd25QdHI8Q2FjaGVkUmVzb3VyY2VSZXF1
ZXN0PiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291
cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKQEAgLTEzOCwxMyArMTQwLDEzIEBACiAgICAgcmV0
dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6
d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVz
dCYgcmVxLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0Ojp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VS
ZXF1ZXN0JiByZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlm
ICghbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+Y2FuUmVxdWVzdChtX3Jlc291cmNlLT50eXBlKCks
IHJlcS51cmwoKSkpIHsKICAgICAgICAgbG9hZGVyLT5jYW5jZWwoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBtX3Jlc291cmNlLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVy
KCk7CisgICAgbV9yZXNvdXJjZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcSwgcmVzcG9uc2UpOwogfQog
CiB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Y2FuY2VsKCkKQEAgLTE1NCw4ICsxNTYsMTkg
QEAKICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSkK
K3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjppZGVudGlmaWVyKCkgY29uc3QK
IHsKKyAgICByZXR1cm4gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAgaWYg
KG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNv
dXJjZUxvYWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKK3sKICAgICBpZiAobV9maW5p
c2hpbmcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTc0LDYgKzE4Nyw3IEBACiAgICAgLy8gZXJy
b3IsIHNvIHdlIGNhbid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwgZGF0YSgpIGFuZCBmaW5pc2goKSBj
YWxsYmFja3MuCiAgICAgaWYgKCFtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKICAgICAg
ICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZEZpbmlzaGluZygpOworICAgICAgICBtX3Jl
c291cmNlLT5zZXRMb2FkRmluaXNoVGltZShmaW5pc2hUaW1lKTsKICAgICAgICAgbV9yZXNvdXJj
ZS0+ZGF0YShsb2FkZXItPnJlc291cmNlRGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFtX3Jl
c291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgICAgICBtX3Jlc291cmNlLT5maW5pc2go
KTsKQEAgLTIzNSw3ICsyNDksMTMgQEAKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmV2YWxpZGF0
aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogICAgIH0KIAorICAgIC8vIHNldFJlc3BvbnNlKCkgbWln
aHQgY2FuY2VsIHRoZSByZXF1ZXN0LCBzbyB3ZSBuZWVkIHRvIGtlZXAgb3Vyc2VsdmVzIGFsaXZl
LiBVbmZvcnR1bmF0ZWx5LAorICAgIC8vIHdlIGNhbid0IHByb3RlY3QgYSBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QsIGJ1dCB3ZSBjYW4gcHJvdGVjdCBtX3Jlc291cmNlLCB3aGljaCBoYXMgdGhlCisg
ICAgLy8gcG93ZXIgdG8ga2lsbCB0aGUgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IChhbmQgd2lsbCBz
d2l0Y2ggaXNMb2FkaW5nKCkgdG8gZmFsc2UgaWYgaXQgZG9lcyBzbykuCisgICAgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3QobV9yZXNvdXJjZSk7CiAgICAgbV9y
ZXNvdXJjZS0+c2V0UmVzcG9uc2UocmVzcG9uc2UpOworICAgIGlmICghcHJvdGVjdC0+aXNMb2Fk
aW5nKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNl
LnRleHRFbmNvZGluZ05hbWUoKTsKICAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQpAQCAtMjY3
LDE4ICsyODcsMjAgQEAKICAgICBpZiAobV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVz
Q29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIW1fcmVzb3VyY2UtPnNob3VsZElnbm9yZUhU
VFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNo
ZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKKyAgICBpZiAobV9yZXNvdXJjZS0+cmVzcG9uc2UoKS5o
dHRwU3RhdHVzQ29kZSgpID49IDQwMCAmJiAhbV9yZXNvdXJjZS0+c2hvdWxkSWdub3JlSFRUUFN0
YXR1c0NvZGVFcnJvcnMoKSkgeworICAgICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNoZWRSZXNv
dXJjZTo6TG9hZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFNldCB0
aGUgZGF0YS4KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAgICAgICAgLy8gVGhlIGxvYWRlciBk
ZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBzZWN0aW9uIGFsbCBhdCBvbmNlLCBzZW5k
IGVvZi4KLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRhdGEgd2lsbCBjaGFuZ2UgYXMgdGhlIG5l
eHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHkuCisgICAgLy8gVGhl
cmUgYXJlIHR3byBjYXNlcyB3aGVyZSB3ZSBtaWdodCBuZWVkIHRvIGNyZWF0ZSBvdXIgb3duIFNo
YXJlZEJ1ZmZlciBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIG9uZSBpbiBSZXNvdXJjZUxvYWRlci4K
KyAgICAvLyAoMSkgTXVsdGlwYXJ0IGNvbnRlbnQ6IFRoZSBsb2FkZXIgZGVsaXZlcnMgdGhlIGRh
dGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgdGhlbiBzZW5kcyBlb2YuCisg
ICAgLy8gICAgIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRoZSBuZXh0IHBhcnQg
aXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5LgorICAgIC8vICgyKSBPdXIgY2xp
ZW50IHJlcXVlc3RlZCB0aGF0IHRoZSBkYXRhIG5vdCBiZSBidWZmZXJlZCBhdCB0aGUgUmVzb3Vy
Y2VMb2FkZXIgbGV2ZWwgdmlhIFJlc291cmNlTG9hZGVyT3B0aW9ucy4gSW4gdGhpcyBjYXNlLAor
ICAgIC8vICAgICBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRhKCkgd2lsbCBiZSBudWxsLiBI
b3dldmVyLCB1bmxpa2UgdGhlIG11bHRpcGFydCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHRlbGwg
dGhlIENhY2hlZFJlc291cmNlCisgICAgLy8gICAgIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gcmVj
ZWl2ZWQgeWV0LgorICAgIGlmIChtX211bHRpcGFydCB8fCAhbG9hZGVyLT5yZXNvdXJjZURhdGEo
KSkgewogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3BpZWREYXRhID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fcmVzb3VyY2UtPmRhdGEoY29waWVk
RGF0YS5yZWxlYXNlKCksIHRydWUpOworICAgICAgICBtX3Jlc291cmNlLT5kYXRhKGNvcGllZERh
dGEucmVsZWFzZSgpLCBtX211bHRpcGFydCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcmVzb3Vy
Y2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOwogfQpAQCAtMjg4LDcgKzMx
MCwxMiBAQAogICAgIEFTU0VSVCghbV9yZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRvcigpKTsKICAg
ICBtX3Jlc291cmNlLT5zZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSk7CiB9
Ci0gICAgCisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRTZW5kRGF0YShTdWJyZXNv
dXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgbV9yZXNvdXJjZS0+ZGlkU2VuZERhdGEo
Ynl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworfQorCiB2b2lkIENhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZW5kKCkKIHsKICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRG9uZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVz
b3VyY2UuY3BwCShyZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE5ICszNyw4NCBA
QAogCiBDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3Qs
IFJhd1Jlc291cmNlKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiB9CiAKIHZvaWQgQ2FjaGVk
UmF3UmVzb3VyY2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQogewotICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKGRhdGEpIHsKKyAg
ICAgICAgLy8gSWYgd2UgYXJlIGJ1ZmZlcmluZyBkYXRhLCB0aGVuIHdlIGFyZSBzYXZpbmcgdGhl
IGJ1ZmZlciBpbiBtX2RhdGEgYW5kIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAgLy8gY2FsY3Vs
YXRlIHRoZSBpbmNyZW1lbnRhbCBkYXRhLiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmluZywgdGhlbiBt
X2RhdGEgd2lsbCBiZSBudWxsIGFuZAorICAgICAgICAvLyB0aGUgYnVmZmVyIGNvbnRhaW5zIG9u
bHkgdGhlIGluY3JlbWVudGFsIGRhdGEuCisgICAgICAgIHNpemVfdCBwcmV2aW91c0RhdGFMZW5n
dGggPSAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgPyBtX2RhdGFM
ZW5ndGggOiAwOworICAgICAgICBBU1NFUlQoZGF0YS0+c2l6ZSgpID49IHByZXZpb3VzRGF0YUxl
bmd0aCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGRhdGEtPmRhdGEo
KSArIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICAgICAgc2l6ZV90IGluY3JlbWVudGFsRGF0YUxl
bmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKworICAgICAgICBpZiAo
aW5jcmVtZW50YWxEYXRhTGVuZ3RoKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgICAgICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCo+KGMpLT5kYXRhUmVjZWl2ZWQodGhpcywgaW5jcmVtZW50YWxEYXRh
LCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlm
IChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJEYXRhKSB7CisgICAgICAgIG1f
ZGF0YUxlbmd0aCA9IGRhdGEgPyBkYXRhLT5zaXplKCkgOiAwOworICAgICAgICBtX2RhdGEgPSBk
YXRhOworICAgIH0KICAgICBDYWNoZWRSZXNvdXJjZTo6ZGF0YShtX2RhdGEsIGFsbERhdGFSZWNl
aXZlZCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAobV9kYXRhKSB7CisgICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPnJlc3BvbnNlUmVjZWl2ZWQodGhpcywg
bV9yZXNwb25zZSk7CisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
Kj4oYyktPmRhdGFSZWNlaXZlZCh0aGlzLCBtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
OworICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworfQorCiB2b2lk
IENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRzUmVtb3ZlZCgpCiB7CiAgICAgaWYgKG1fcmVx
dWVzdCkKICAgICAgICAgbV9yZXF1ZXN0LT5jYW5jZWwoKTsKIH0KIAordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKCFyZXNwb25zZS5pc051bGwo
KSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Cisg
ICAgICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqPihjKS0+cmVkaXJlY3RS
ZWNlaXZlZCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgfQorICAgIENhY2hlZFJlc291
cmNlOjp3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOworfQorCit2b2lkIENhY2hl
ZFJhd1Jlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UocmVzcG9uc2UpOworICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQqPihjKS0+cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNl
KTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkK
K3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hp
bGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPmRhdGFTZW50KHRoaXMsIGJ5dGVzU2Vu
dCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBpZiAobV9yZXF1ZXN0KQorICAgICAg
ICBtX3JlcXVlc3QtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKK30KKwordW5zaWduZWQgbG9u
ZyBDYWNoZWRSYXdSZXNvdXJjZTo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cmVxdWVzdCA/IG1fcmVxdWVzdC0+aWRlbnRpZmllcigpIDogMDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDEyIEBACiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KICAg
ICAgICAgdm9pZCBjYW5jZWwoKTsKIAorICAgICAgICAvLyBGSVhNRTogTGlrZSBDYWNoZWRSZXNv
dXJjZTo6aWRlbnRpZmllcigpLCB0aGlzIGlzIGEgbGFtZSBoYWNrIGZvciBwcmVmbGlnaHQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAg
ICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICAgICAgLy8gRklYTUU6
IFNlZSBDYWNoZWRSYXdSZXNvdXJjZTo6c2V0RGVmZXJzTG9hZGluZygpIGZvciB0aGUgcmVsZXZh
bnQgcmFudC4KKyAgICAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVy
KiwgQ2FjaGVkUmVzb3VyY2UqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKQEAgLTU5LDYgKzY1LDExIEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lk
IGVuZCgpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxv
YWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxv
bmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQp
OworI2VuZGlmCisKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsK
ICAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAg
ICAgICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25Mb2FkZXIuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgSWNvbkxvYWRlcl9oCiAjZGVmaW5lIEljb25Mb2FkZXJfaAogCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTM3LDExICszNywxMSBAQAog
Y2xhc3MgQ2FjaGVkUmF3UmVzb3VyY2U7CiBjbGFzcyBGcmFtZTsKIAotY2xhc3MgSWNvbkxvYWRl
ciA6IHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSWNvbkxvYWRlciA6IHBy
aXZhdGUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEljb25Mb2FkZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc093blB0cjxJY29uTG9hZGVyPiBjcmVhdGUoRnJhbWUqKTsKLSAgICB+SWNvbkxvYWRl
cigpOworICAgIHZpcnR1YWwgfkljb25Mb2FkZXIoKTsKIAogICAgIHZvaWQgc3RhcnRMb2FkaW5n
KCk7CiAgICAgdm9pZCBzdG9wTG9hZGluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTcxNTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
X2gKICNkZWZpbmUgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hl
ZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OCw3ICs0OSw3IEBACiAgICAgY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVudDsKIAot
ICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRl
IFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CisgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVi
bGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZhdGUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgIHsK
ICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVM
b2FkZXJPcHRpb25zJik7CkBAIC03MywyMSArNzQsMjEgQEAKIAogICAgICAgICBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgQmxvY2tp
bmdCZWhhdmlvciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJl
c291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgICAgICB2b2lkIGNsZWFyUmVzb3VyY2Uo
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGRhdGFM
ZW5ndGgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKLQorICAgICAgICAvLyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVj
ZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKICNpZiBQTEFURk9STShD
SFJPTUlVTSkKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIGludCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFEb3du
bG9hZGVkKENhY2hlZFJlc291cmNlKiwgaW50KTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lk
IG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2VzcygpOwpAQCAt
OTgsNyArOTksNyBAQAogCiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigp
IGNvbnN0OwogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7Cisg
ICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNl
OwogICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0
aW9uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOSAr
MzEsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2luY2x1ZGUgIkNy
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAt
NjMsNyArNjMsNyBAQAogUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIFJlZlB0cjxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIoZG9jdW1lbnQsIGNsaWVudCwgTG9hZEFzeW5jaHJvbm91c2x5LCByZXF1ZXN0
LCBvcHRpb25zKSk7Ci0gICAgaWYgKCFsb2FkZXItPm1fbG9hZGVyKQorICAgIGlmICghbG9hZGVy
LT5tX3Jlc291cmNlKQogICAgICAgICBsb2FkZXIgPSAwOwogICAgIHJldHVybiBsb2FkZXIucmVs
ZWFzZSgpOwogfQpAQCAtMTMzLDMxICsxMzMsMzkgQEAKIAogRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9sb2FkZXIpCi0g
ICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOworICAgIGlmIChtX3Jlc291cmNlKQorICAg
ICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAgIGlmICghbV9sb2FkZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICBtX2xvYWRlci0+Y2xlYXJD
bGllbnQoKTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAg
IFJlc291cmNlRXJyb3IgZXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbV9yZXNv
dXJjZS0+dXJsKCksICJMb2FkIGNhbmNlbGxlZCIpOworICAgICAgICBlcnJvci5zZXRJc0NhbmNl
bGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJvcik7CisgICAgfQorICAgIGNsZWFy
UmVzb3VyY2UoKTsKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgaWYgKG1fbG9h
ZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAgaWYg
KG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodmFsdWUp
OwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1
YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpjbGVhclJlc291cmNlKCkKIHsKKyAgICBpZiAobV9yZXNvdXJjZSkgeworICAg
ICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAgIG1fcmVzb3VyY2Ug
PSAwOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0
UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CiAgICAgQVNT
RVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9h
ZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNl
KTsKIAogICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAgICAg
ICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAgLTE2
OSwxOCArMTc3LDE3IEBACiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3Zv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhU2VudChDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzVG9CZVNlbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRf
VU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLQorICAgIEFTU0VSVF9VTlVTRUQo
cmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogICAgIG1fY2xpZW50LT5kaWRTZW5k
RGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIEFTU0VSVChsb2FkZXIg
PT0gbV9sb2FkZXIpOwotICAgIGRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPmlkZW50aWZpZXIo
KSwgcmVzcG9uc2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1f
cmVzb3VyY2UpOworICAgIGRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc291cmNlLT5pZGVudGlmaWVy
KCksIHJlc3BvbnNlKTsKIH0KIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQpAQCAtMjIzLDEwICsyMzAsMTAgQEAKICAgICB9CiB9CiAKLXZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGll
bnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAg
IEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikK
QEAgLTI0MCwyNSArMjQ3LDIwIEBACiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEs
IGRhdGFMZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVj
ZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKICAgICBBU1NFUlQobV9j
bGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwot
Ci0gICAgLy8gUHJlZmxpZ2h0IGRhdGEgc2hvdWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgot
ICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgICAgIAorICAg
IGlmIChtX3Jlc291cmNlICYmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkgfHwgbV9yZXNv
dXJjZS0+d2FzQ2FuY2VsZWQoKSkpIHsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiTmV0
d29yayBSZXF1ZXN0IEZhaWxlZCIsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiUmVzb3VyY2UgZmFp
bGVkIHRvIGxvYWQiKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpCisg
ICAgICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFp
bChlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmcobV9yZXNvdXJj
ZS0+aWRlbnRpZmllcigpLCBtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKIH0KIAotdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgZG91YmxlIGZpbmlzaFRpbWUpCi17Ci0gICAgQVNTRVJUKGxvYWRlciA9
PSBtX2xvYWRlcik7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBkaWRGaW5pc2hMb2FkaW5n
KGxvYWRlci0+aWRlbnRpZmllcigpLCBmaW5pc2hUaW1lKTsKLX0KLQogdm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBkb3VibGUgZmluaXNoVGltZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMjc0LDEy
ICsyNzYsOCBAQAogICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVy
LCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZh
aWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIC8vIG1fbG9hZGVyIG1h
eSBiZSBudWxsIGlmIHdlIGFycml2ZSBoZXJlIHZpYSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
IGluIHRoZSBjdG9yCi0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRl
ciB8fCAhbV9sb2FkZXIpOwotCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVm
bGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGYWlsTG9hZGluZyhtX2RvY3VtZW50LT5mcmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmll
ciwgZXJyb3IpOwpAQCAtMjk1LDYgKzI5Myw4IEBACiAKICAgICBhY3R1YWxSZXF1ZXN0LT5zZXRI
VFRQT3JpZ2luKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogCisgICAgY2xlYXJSZXNv
dXJjZSgpOworCiAgICAgLy8gSXQgc2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5IGNo
ZWNrIHNpbmNlIHdlIGFscmVhZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0Lgog
ICAgIGxvYWRSZXF1ZXN0KCphY3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CiB9CkBA
IC0zMjQsMTkgKzMyNCwxOSBAQAogICAgICAgICAgICAgb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRh
ID0gQnVmZmVyRGF0YTsKICAgICAgICAgfQogCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdS
ZXF1ZXN0KHJlcXVlc3QpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIGlmIChtX2Fj
dHVhbFJlcXVlc3QpIHsKLSAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0KHJl
cXVlc3QpOwogICAgICAgICAgICAgLy8gQmVjYXVzZSB3aWxsU2VuZFJlcXVlc3Qgb25seSBnZXRz
IGNhbGxlZCBkdXJpbmcgcmVkaXJlY3RzLCB3ZSBpbml0aWFsaXplIHRoZSBpZGVudGlmaWVyIGFu
ZCB0aGUgZmlyc3Qgd2lsbFNlbmRSZXF1ZXN0IGhlcmUuCiAgICAgICAgICAgICBtX3ByZWZsaWdo
dFJlcXVlc3RJZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+cGFnZSgpLT5wcm9ncmVz
cygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlZGlyZWN0UmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CiAgICAgICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChtX2RvY3VtZW50LT5mcmFt
ZSgpLCBtX3ByZWZsaWdodFJlcXVlc3RJZGVudGlmaWVyLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7
CiAgICAgICAgIH0KICNlbmRpZgotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhh
dCBhbnkgY2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBo
YXZlIHRoZSBvbGQgbG9hZGVyLgotICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9h
ZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKG1f
ZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5TWVk
aXVtLCBvcHRpb25zKTsKKyAgICAgICAgQVNTRVJUKCFtX3Jlc291cmNlKTsKKyAgICAgICAgbV9y
ZXNvdXJjZSA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RSYXdS
ZXNvdXJjZShuZXdSZXF1ZXN0LCBvcHRpb25zKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UpCisg
ICAgICAgICAgICBtX3Jlc291cmNlLT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCkBAIC0zNjcsNyArMzY3LDcgQEAKIAogICAgIGNvbnN0IGNoYXIqIGJ5dGVz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKICAgICBpbnQgbGVuID0g
c3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0
ZXMsIGxlbik7CisgICAgZGF0YVJlY2VpdmVkKDAsIGJ5dGVzLCBsZW4pOwogCiAgICAgZGlkRmlu
aXNoTG9hZGluZyhpZGVudGlmaWVyLCAwLjApOwogfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA5NzE1MikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdv
cmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTIsMTEgKzIsMTEgQEAKIFRlc3RzIE5ldHdvcmtSZXNvdXJjZXNEYXRhIGxvZ2lj
IGZvciBYSFIgY29udGVudCByZXBsYWNlbWVudC4KIAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2lu
c3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDAKLXJlc291cmNl
LmNvbnRlbnQ6IG51bGwKK3Jlc291cmNlLmNvbnRlbnQ6IAogaHR0cDovLzEyNy4wLjAuMTo4MDAw
L2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0xMDAKIHJlc291
cmNlLmNvbnRlbnQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3Vy
Y2UucGhwP3NpemU9MjAxCi1yZXNvdXJjZS5jb250ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50
OiAKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVz
b3VyY2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTEtMTAtMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBU
ZXN0IHVwZGF0ZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYx
MjI1LgorICAgICAgICBEdWUgdG8gY2hhbmdlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyIChhbmQKKyAgICAgICAgdGhlcmVmb3JlIFhIUiksIHRoaXMg
dGVzdCB3aWxsIGhhdmUgZW1wdHkgKHJhdGhlciB0aGFuIG51bGwpIGNvbnRlbnQKKyAgICAgICAg
aWYgd2UgZ28gb3ZlciB0aGUgbGVuZ3RoIGxpbWl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9u
ZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVkLnR4dDoKKwogMjAxMS0xMC0w
NSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgQ29tcGlsZXJTb3VyY2VNYXBwaW5nUHJvdmlkZXIuCg==
</data>
<flag name="commit-queue"
          id="108094"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111278</attachid>
            <date>2011-10-17 09:58:11 -0700</date>
            <delta_ts>2011-10-17 16:42:38 -0700</delta_ts>
            <desc>Another merge to trunk</desc>
            <filename>cachexhr4.txt</filename>
            <type>text/plain</type>
            <size>38375</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NjI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMDcgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBhIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgdXMgdG8gY2FjaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgYXMKKyAgICAgICAgYXBwcm9w
cmlhdGUgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxMjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBpbnRl
bmRlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qg
c2VuZCBzZXBhcmF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRp
ZEZpbmlzaExvYWRpbmcoKSwgc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2Fs
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAg
IGluc3RlYWQgb2YgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCgpLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEpOiBIYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29t
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50cyBzZXR0aW5nCisgICAgICAgICAgICBEb05vdEJ1ZmZl
ckRhdGEgaW4gUmVzb3VyZUxvYWRlck9wdGlvbnMuIElmIHRoZSBEYXRhQnVmZmVyaW5nUG9saWN5
IGlzIEJ1ZmZlckRhdGEsIHRoZW4gdGhlCisgICAgICAgICAgICAnZGF0YScgaW5wdXQgcGFyYW1l
dGVyIHdpbGwgY29udGFpbiBhbGwgZGF0YSByZWNlaXZlZCBzbyBmYXIsIGFuZCB3ZSBuZWVkIHRv
IGRldGVybWluZSB0aGUKKyAgICAgICAgICAgIGluY3JlbWVudGFsIGRhdGEgdG8gZm9yd2FyZCB0
byB0aGUgY2xpZW50cy4gSWYgdGhlIHBvbGljeSBpcyBEb05vdEJ1ZmZlckRhdGEsICdkYXRhJyBp
cyBqdXN0CisgICAgICAgICAgICB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnByZWxvYWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldExvYWRGaW5pc2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpsb2FkRmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6IEFkZCBzZXZlcmFsIG5ldyBjYWxsYmFja3MgbmVlZGVk
IGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1ZXN0LCBzbyBwcm90ZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oOgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6Om5vdGlmeVJlc3BvbnNlKTogUHJvdGVjdCBiZWZvcmUgc2V0dGluZyByZXNwb25zZSwgc2lu
Y2UgaXQgbWlnaHQga2lsbCB1cy4KKwogMjAxMS0xMC0xMiAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBmaXggaGFuZGxp
bmcgb2Ygc291cmNlIG1hcHBpbmcgZW50cmllcyB3aXRoIG5vIG1hcHBpbmcuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5k
bGUuY3BwCShyZXZpc2lvbiA5NzYyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw3
IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Vycm9yQ29kZSkgeworICAgICAgICBS
ZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICBub3RpZnlS
ZXNwb25zZU9uRXJyb3IoKTsKICAgICAgICAgbm90aWZ5RmluaXNoKCk7CiAgICAgfSBlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NzYyNikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0Nyw2ICsyODQ3LDggQEAKICAgICAgICAg
ICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAgICAgICds
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2YvUmVz
b3VyY2VMb2FkZXJDRk5ldC5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9DYWNo
ZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVt
L0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVy
L2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2Nocm9taXVtL1Jlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdsb2FkZXIvY2hyb21pdW0vU3VicmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAnLApJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hy
b21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NzYy
NikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgog
Ci0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRG93bmxvYWRE
YXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRhdGFEb3dubG9hZGVkKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSwgaW50IGRhdGFMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKICAgICBBU1NFUlQoIW1fYWN0dWFs
UmVxdWVzdCk7CiAKICAgICBtX2NsaWVudC0+ZGlkRG93bmxvYWREYXRhKGRhdGFMZW5ndGgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21p
dW0vQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVt
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZERvd25sb2FkRGF0YShT
dWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVT
RUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIG1fcmVzb3VyY2UtPmRpZERvd25s
b2FkRGF0YShsZW5ndGgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hy
b21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJhd1Jl
c291cmNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3Vy
Y2U6OmRpZERvd25sb2FkRGF0YShpbnQgZGF0YUxlbmd0aCkKK3sKKyAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNl
Q2xpZW50Kj4oYyktPmRhdGFEb3dubG9hZGVkKHRoaXMsIGRhdGFMZW5ndGgpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2Uu
aAkocmV2aXNpb24gOTc2MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmF3UmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjAgKzI0LDU1IEBACiAjZGVmaW5l
IENhY2hlZFJhd1Jlc291cmNlX2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYWNoZWRSYXdSZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiBwdWJsaWM6
CiAgICAgQ2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICAvLyBGSVhN
RTogQXNzb2NpYXRlZFVSTExvYWRlciBzaG91bGRuJ3QgYmUgYSBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgYW5kIHRoZXJlZm9yZSBzaG91bGRuJ3QKKyAgICAvLyB1c2UgQ2FjaGVkUmF3UmVzb3Vy
Y2UuIEhvd2V2ZXIsIGl0IGlzLCBhbmQgaXQgbmVlZHMgdG8gYmUgYWJsZSB0byBkZWZlciBsb2Fk
aW5nLgorICAgIC8vIFRoaXMgY2FuIGJlIGZpeGVkIGJ5IHNwbGl0dGluZyBDT1JTIHByZWZsaWdo
dGluZyBvdXQgb2YgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLgorICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9z
ZWQgZm9yIHRoZSBJbnBzZWN0b3JJbnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCisgICAgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBk
YXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVk
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RG93bmxvYWREYXRhKGludCk7CisjZW5kaWYKKworICAgIHNpemVfdCBtX2RhdGFMZW5ndGg7CiB9
OwogCisKK2NsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IDogcHVibGljIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dCgpIHsgfQorICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudFR5cGUgZXhwZWN0ZWRUeXBl
KCkgeyByZXR1cm4gUmF3UmVzb3VyY2VUeXBlOyB9CisgICAgdmlydHVhbCBDYWNoZWRSZXNvdXJj
ZUNsaWVudFR5cGUgcmVzb3VyY2VDbGllbnRUeXBlKCkgeyByZXR1cm4gZXhwZWN0ZWRUeXBlKCk7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkYXRhU2VudChDYWNoZWRSZXNvdXJjZSosIHVuc2lnbmVk
IGxvbmcgbG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5
dGVzVG9CZVNlbnQgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiAvKiBkYXRhICov
LCBpbnQgLyogbGVuZ3RoICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKSB7IH0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YURv
d25sb2FkZWQoQ2FjaGVkUmVzb3VyY2UqLCBpbnQpIHsgfQorI2VuZGlmCit9OworCiB9CiAKICNl
bmRpZiAvLyBDYWNoZWRSYXdSZXNvdXJjZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDk3NjI2KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODMsNiArODMsNyBAQAogICAgICwgbV9sb2FkUHJpb3JpdHkoZGVmYXVsdFByaW9yaXR5Rm9y
UmVzb3VyY2VUeXBlKHR5cGUpKQogICAgICwgbV9yZXNwb25zZVRpbWVzdGFtcChjdXJyZW50VGlt
ZSgpKQogICAgICwgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUoMCkKKyAgICAsIG1fbG9hZEZpbmlz
aFRpbWUoMCkKICAgICAsIG1fZW5jb2RlZFNpemUoMCkKICAgICAsIG1fZGVjb2RlZFNpemUoMCkK
ICAgICAsIG1fYWNjZXNzQ291bnQoMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCShyZXZpc2lvbiA5NzYyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw4IEBACiAgICAgICAgIEJhc2VSZXNvdXJjZVR5cGUsCiAgICAg
ICAgIEltYWdlVHlwZSwKICAgICAgICAgRm9udFR5cGUsCi0gICAgICAgIFN0eWxlU2hlZXRUeXBl
CisgICAgICAgIFN0eWxlU2hlZXRUeXBlLAorICAgICAgICBSYXdSZXNvdXJjZVR5cGUKICAgICB9
OwogCiAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VDbGllbnQoKSB7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA5NzYy
NikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDYgQEAKICAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRX
aGlsZUNvbXBsZXRlCiAgICAgfTsKICAgICBQcmVsb2FkUmVzdWx0IHByZWxvYWRSZXN1bHQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcmVsb2FkUmVzdWx0PihtX3ByZWxvYWRSZXN1bHQp
OyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCkgeyBtX3JlcXVl
c3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGFsbENs
aWVudHNSZW1vdmVkKCkgeyB9CkBAIC0xNzAsNyArMTY5LDggQEAKIAogICAgIFNoYXJlZEJ1ZmZl
ciogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKCFtX3B1cmdlYWJsZURhdGEpOyByZXR1cm4gbV9kYXRh
LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNwb25zZTsgfQogCiAgICAgLy8gU2V0cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0
YSByZXRyaWV2ZWQgZnJvbSB0aGUgcGxhdGZvcm0ncyBjYWNoZS4KQEAgLTIyOCw3ICsyMjgsMTUg
QEAKICAgICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKTsKICAgICB2
b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKICAgICB2b2lkIHVwZGF0ZVJlc3BvbnNl
QWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3Bv
bnNlKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBs
b25nIC8qIGJ5dGVzU2VudCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0Jl
U2VudCAqLykgeyB9CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRp
ZERvd25sb2FkRGF0YShpbnQpIHsgfQorI2VuZGlmCiAKKyAgICB2b2lkIHNldExvYWRGaW5pc2hU
aW1lKGRvdWJsZSBmaW5pc2hUaW1lKSB7IG1fbG9hZEZpbmlzaFRpbWUgPSBmaW5pc2hUaW1lOyB9
CisgICAgZG91YmxlIGxvYWRGaW5pc2hUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkRmluaXNo
VGltZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjaGVja05vdGlmeSgpOwogCkBAIC0yNjMs
NiArMjcxLDcgQEAKICAgICBSZWZQdHI8Q2FjaGVkTWV0YWRhdGE+IG1fY2FjaGVkTWV0YWRhdGE7
CiAKICAgICBkb3VibGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMgYSAidGhy
YXNoIGd1YXJkIiBpbiB0aGUgY2FjaGUKKyAgICBkb3VibGUgbV9sb2FkRmluaXNoVGltZTsKIAog
ICAgIHVuc2lnbmVkIG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiA5NzYyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2
ICs4Niw4IEBACiAKIENhY2hlZFJlc291cmNlUmVxdWVzdDo6fkNhY2hlZFJlc291cmNlUmVxdWVz
dCgpCiB7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQo
KTsKIH0KIAogUGFzc093blB0cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+IENhY2hlZFJlc291cmNl
UmVxdWVzdDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIs
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQpAQCAtMTM4LDEzICsxNDAsMTMgQEAKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Ojp3aWxsU2VuZFJlcXVlc3QoU3Vi
cmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKQordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OndpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCFtX2NhY2hlZFJlc291cmNl
TG9hZGVyLT5jYW5SZXF1ZXN0KG1fcmVzb3VyY2UtPnR5cGUoKSwgcmVxLnVybCgpKSkgewogICAg
ICAgICBsb2FkZXItPmNhbmNlbCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcmVz
b3VyY2UtPnNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKKyAgICBtX3Jlc291cmNl
LT53aWxsU2VuZFJlcXVlc3QocmVxLCByZXNwb25zZSk7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjpjYW5jZWwoKQpAQCAtMTU0LDggKzE1NiwxOSBAQAogICAgIG1fbG9hZGVyLT5j
YW5jZWwoKTsKIH0KIAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgZG91YmxlKQordW5zaWduZWQgbG9uZyBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OmlkZW50aWZpZXIoKSBjb25zdAogeworICAgIHJldHVybiBtX2xv
YWRlci0+aWRlbnRpZmllcigpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAg
IG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IGRvdWJsZSBmaW5pc2hUaW1lKQorewogICAgIGlmIChtX2ZpbmlzaGluZykKICAgICAgICAgcmV0
dXJuOwogCkBAIC0xNzQsNiArMTg3LDcgQEAKICAgICAvLyBlcnJvciwgc28gd2UgY2FuJ3Qgc2Vu
ZCB0aGUgc3VjY2Vzc2Z1bCBkYXRhKCkgYW5kIGZpbmlzaCgpIGNhbGxiYWNrcy4KICAgICBpZiAo
IW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICBtX2NhY2hlZFJlc291cmNl
TG9hZGVyLT5sb2FkRmluaXNoaW5nKCk7CisgICAgICAgIG1fcmVzb3VyY2UtPnNldExvYWRGaW5p
c2hUaW1lKGZpbmlzaFRpbWUpOwogICAgICAgICBtX3Jlc291cmNlLT5kYXRhKGxvYWRlci0+cmVz
b3VyY2VEYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJy
ZWQoKSkKICAgICAgICAgICAgIG1fcmVzb3VyY2UtPmZpbmlzaCgpOwpAQCAtMjM1LDcgKzI0OSwx
MyBAQAogICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZXZhbGlkYXRpb25GYWlsZWQobV9yZXNvdXJj
ZSk7CiAgICAgfQogCisgICAgLy8gc2V0UmVzcG9uc2UoKSBtaWdodCBjYW5jZWwgdGhlIHJlcXVl
c3QsIHNvIHdlIG5lZWQgdG8ga2VlcCBvdXJzZWx2ZXMgYWxpdmUuIFVuZm9ydHVuYXRlbHksCisg
ICAgLy8gd2UgY2FuJ3QgcHJvdGVjdCBhIENhY2hlZFJlc291cmNlUmVxdWVzdCwgYnV0IHdlIGNh
biBwcm90ZWN0IG1fcmVzb3VyY2UsIHdoaWNoIGhhcyB0aGUKKyAgICAvLyBwb3dlciB0byBraWxs
IHRoZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgKGFuZCB3aWxsIHN3aXRjaCBpc0xvYWRpbmcoKSB0
byBmYWxzZSBpZiBpdCBkb2VzIHNvKS4KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4gcHJvdGVjdChtX3Jlc291cmNlKTsKICAgICBtX3Jlc291cmNlLT5zZXRSZXNwb25z
ZShyZXNwb25zZSk7CisgICAgaWYgKCFwcm90ZWN0LT5pc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgp
OwogICAgIGlmICghZW5jb2RpbmcuaXNOdWxsKCkpCkBAIC0yNjcsMTggKzI4NywyMCBAQAogICAg
IGlmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3Jlc291cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7Ci0g
ICAgICAgIGlmICghbV9yZXNvdXJjZS0+c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMo
KSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJy
b3IpOworICAgIGlmIChtX3Jlc291cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPj0g
NDAwICYmICFtX3Jlc291cmNlLT5zaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpKSB7
CisgICAgICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gU2V0IHRoZSBkYXRhLgotICAgIGlmICht
X211bHRpcGFydCkgewotICAgICAgICAvLyBUaGUgbG9hZGVyIGRlbGl2ZXJzIHRoZSBkYXRhIGlu
IGEgbXVsdGlwYXJ0IHNlY3Rpb24gYWxsIGF0IG9uY2UsIHNlbmQgZW9mLgotICAgICAgICAvLyBU
aGUgcmVzb3VyY2UgZGF0YSB3aWxsIGNoYW5nZSBhcyB0aGUgbmV4dCBwYXJ0IGlzIGxvYWRlZCwg
c28gd2UgbmVlZCB0byBtYWtlIGEgY29weS4KKyAgICAvLyBUaGVyZSBhcmUgdHdvIGNhc2VzIHdo
ZXJlIHdlIG1pZ2h0IG5lZWQgdG8gY3JlYXRlIG91ciBvd24gU2hhcmVkQnVmZmVyIGluc3RlYWQg
b2YgY29weWluZyB0aGUgb25lIGluIFJlc291cmNlTG9hZGVyLgorICAgIC8vICgxKSBNdWx0aXBh
cnQgY29udGVudDogVGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBz
ZWN0aW9uIGFsbCBhdCBvbmNlLCB0aGVuIHNlbmRzIGVvZi4KKyAgICAvLyAgICAgVGhlIHJlc291
cmNlIGRhdGEgd2lsbCBjaGFuZ2UgYXMgdGhlIG5leHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5l
ZWQgdG8gbWFrZSBhIGNvcHkuCisgICAgLy8gKDIpIE91ciBjbGllbnQgcmVxdWVzdGVkIHRoYXQg
dGhlIGRhdGEgbm90IGJlIGJ1ZmZlcmVkIGF0IHRoZSBSZXNvdXJjZUxvYWRlciBsZXZlbCB2aWEg
UmVzb3VyY2VMb2FkZXJPcHRpb25zLiBJbiB0aGlzIGNhc2UsCisgICAgLy8gICAgIFJlc291cmNl
TG9hZGVyOjpyZXNvdXJjZURhdGEoKSB3aWxsIGJlIG51bGwuIEhvd2V2ZXIsIHVubGlrZSB0aGUg
bXVsdGlwYXJ0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gdGVsbCB0aGUgQ2FjaGVkUmVzb3VyY2UK
KyAgICAvLyAgICAgdGhhdCBhbGwgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCisgICAgaWYg
KG1fbXVsdGlwYXJ0IHx8ICFsb2FkZXItPnJlc291cmNlRGF0YSgpKSB7CiAgICAgICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGNvcGllZERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBz
aXplKTsKLSAgICAgICAgbV9yZXNvdXJjZS0+ZGF0YShjb3BpZWREYXRhLnJlbGVhc2UoKSwgdHJ1
ZSk7CisgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEoY29waWVkRGF0YS5yZWxlYXNlKCksIG1fbXVs
dGlwYXJ0KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9yZXNvdXJjZS0+ZGF0YShsb2FkZXItPnJl
c291cmNlRGF0YSgpLCBmYWxzZSk7CiB9CkBAIC0yODgsNyArMzEwLDEyIEBACiAgICAgQVNTRVJU
KCFtX3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOwogICAgIG1fcmVzb3VyY2UtPnNldFNl
cmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXplKTsKIH0KLSAgICAKKwordm9pZCBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCkKK3sKKyAgICBtX3Jlc291cmNlLT5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0
ZXNUb0JlU2VudCk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjplbmQoKQogewog
ICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWREb25lKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHJldmlzaW9u
IDk3NjI2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTkgKzM3LDg0IEBACiAKIENhY2hlZFJhd1Jlc291
cmNlOjpDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkK
ICAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgUmF3UmVzb3VyY2UpCisgICAg
LCBtX2RhdGFMZW5ndGgoMCkKIHsKIH0KIAogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6ZGF0YShQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0g
ICAgbV9kYXRhID0gZGF0YTsKKyAgICBpZiAoZGF0YSkgeworICAgICAgICAvLyBJZiB3ZSBhcmUg
YnVmZmVyaW5nIGRhdGEsIHRoZW4gd2UgYXJlIHNhdmluZyB0aGUgYnVmZmVyIGluIG1fZGF0YSBh
bmQgbmVlZCB0byBtYW51YWxseQorICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGluY3JlbWVudGFs
IGRhdGEuIElmIHdlIGFyZSBub3QgYnVmZmVyaW5nLCB0aGVuIG1fZGF0YSB3aWxsIGJlIG51bGwg
YW5kCisgICAgICAgIC8vIHRoZSBidWZmZXIgY29udGFpbnMgb25seSB0aGUgaW5jcmVtZW50YWwg
ZGF0YS4KKyAgICAgICAgc2l6ZV90IHByZXZpb3VzRGF0YUxlbmd0aCA9IChtX29wdGlvbnMuc2hv
dWxkQnVmZmVyRGF0YSA9PSBCdWZmZXJEYXRhKSA/IG1fZGF0YUxlbmd0aCA6IDA7CisgICAgICAg
IEFTU0VSVChkYXRhLT5zaXplKCkgPj0gcHJldmlvdXNEYXRhTGVuZ3RoKTsKKyAgICAgICAgY29u
c3QgY2hhciogaW5jcmVtZW50YWxEYXRhID0gZGF0YS0+ZGF0YSgpICsgcHJldmlvdXNEYXRhTGVu
Z3RoOworICAgICAgICBzaXplX3QgaW5jcmVtZW50YWxEYXRhTGVuZ3RoID0gZGF0YS0+c2l6ZSgp
IC0gcHJldmlvdXNEYXRhTGVuZ3RoOworCisgICAgICAgIGlmIChpbmNyZW1lbnRhbERhdGFMZW5n
dGgpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jl
c291cmNlQ2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgICAgICAgICB3aGlsZSAoQ2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgICAgICAgICBjLT5kYXRhUmVj
ZWl2ZWQodGhpcywgaW5jcmVtZW50YWxEYXRhLCBpbmNyZW1lbnRhbERhdGFMZW5ndGgpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChtX29wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9
PSBCdWZmZXJEYXRhKSB7CisgICAgICAgIG1fZGF0YUxlbmd0aCA9IGRhdGEgPyBkYXRhLT5zaXpl
KCkgOiAwOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgIH0KICAgICBDYWNoZWRSZXNvdXJj
ZTo6ZGF0YShtX2RhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAo
bV9kYXRhKSB7CisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4o
YyktPnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7CisgICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Kj4oYyktPmRhdGFSZWNlaXZlZCh0aGlzLCBtX2Rh
dGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOworICAgIH0KKyAgICBDYWNoZWRSZXNvdXJjZTo6
ZGlkQWRkQ2xpZW50KGMpOworfQorCiB2b2lkIENhY2hlZFJhd1Jlc291cmNlOjphbGxDbGllbnRz
UmVtb3ZlZCgpCiB7CiAgICAgaWYgKG1fcmVxdWVzdCkKICAgICAgICAgbV9yZXF1ZXN0LT5jYW5j
ZWwoKTsKIH0KIAordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgaWYgKCFyZXNwb25zZS5pc051bGwoKSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgICAg
ICB3aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAg
ICAgIGMtPnJlZGlyZWN0UmVjZWl2ZWQodGhpcywgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIH0K
KyAgICBDYWNoZWRSZXNvdXJjZTo6d2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsK
K30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKHJl
c3BvbnNlKTsKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJj
ZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVu
dCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVz
cG9uc2UpOworfQorCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRTZW5kRGF0YSh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KQoreworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZFJhd1Jlc291cmNl
Q2xpZW50PiB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmRhdGFTZW50KHRoaXMsIGJ5dGVzU2VudCwgdG90
YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6c2V0RGVmZXJz
TG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBpZiAobV9yZXF1ZXN0KQorICAgICAgICBtX3Jl
cXVlc3QtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKK30KKwordW5zaWduZWQgbG9uZyBDYWNo
ZWRSYXdSZXNvdXJjZTo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVxdWVz
dCA/IG1fcmVxdWVzdC0+aWRlbnRpZmllcigpIDogMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gOTc2MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDEyIEBACiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IH0KICAgICAgICAg
dm9pZCBjYW5jZWwoKTsKIAorICAgICAgICAvLyBGSVhNRTogTGlrZSBDYWNoZWRSZXNvdXJjZTo6
aWRlbnRpZmllcigpLCB0aGlzIGlzIGEgbGFtZSBoYWNrIGZvciBwcmVmbGlnaHQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICAgICAgLy8gRklYTUU6IFNlZSBD
YWNoZWRSYXdSZXNvdXJjZTo6c2V0RGVmZXJzTG9hZGluZygpIGZvciB0aGUgcmVsZXZhbnQgcmFu
dC4KKyAgICAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2UqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJy
ZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKQEAgLTU5LDYgKzY1LDExIEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGVuZCgp
OwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0
b3RhbEJ5dGVzVG9CZVNlbnQqLyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQpOworI2Vu
ZGlmCisKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgICAg
IENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25Mb2FkZXIuaAkocmV2aXNpb24gOTc2MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgSWNvbkxvYWRlcl9oCiAjZGVmaW5lIEljb25Mb2FkZXJfaAogCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTM3LDExICszNywxMSBAQAogY2xhc3Mg
Q2FjaGVkUmF3UmVzb3VyY2U7CiBjbGFzcyBGcmFtZTsKIAotY2xhc3MgSWNvbkxvYWRlciA6IHBy
aXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSWNvbkxvYWRlciA6IHByaXZhdGUg
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEljb25M
b2FkZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c093blB0cjxJY29uTG9hZGVyPiBjcmVhdGUoRnJhbWUqKTsKLSAgICB+SWNvbkxvYWRlcigpOwor
ICAgIHZpcnR1YWwgfkljb25Mb2FkZXIoKTsKIAogICAgIHZvaWQgc3RhcnRMb2FkaW5nKCk7CiAg
ICAgdm9pZCBzdG9wTG9hZGluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTc2MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKICNk
ZWZpbmUgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hlZFJhd1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OCw3ICs0OSw3IEBACiAgICAgY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVudDsKIAotICAgIGNs
YXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50ICB7CisgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRo
cmVhZGFibGVMb2FkZXIsIHByaXZhdGUgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgIHsKICAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJP
cHRpb25zJik7CkBAIC03MywyMSArNzQsMjEgQEAKIAogICAgICAgICBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgQmxvY2tpbmdCZWhh
dmlvciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNl
TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgICAgICB2b2lkIGNsZWFyUmVzb3VyY2UoKTsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGRhdGFMZW5ndGgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKLQorICAgICAgICAvLyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQo
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKICNpZiBQTEFURk9STShDSFJPTUlV
TSkKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciosIGludCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFEb3dubG9hZGVk
KENhY2hlZFJlc291cmNlKiwgaW50KTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNv
dXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVx
dWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIG1ha2VD
cm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2VzcygpOwpAQCAtOTgsNyAr
OTksNyBAQAogCiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0
OwogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNlOwogICAg
ICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCShyZXZpc2lvbiA5NzYyNikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOSArMzEsMTkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmF3UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2luY2x1ZGUgIkNyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgot
I2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJy
b3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtNjMsNyAr
NjMsNyBAQAogUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIFJlZlB0cjxEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIoZG9jdW1lbnQsIGNsaWVudCwgTG9hZEFzeW5jaHJvbm91c2x5LCByZXF1ZXN0LCBvcHRp
b25zKSk7Ci0gICAgaWYgKCFsb2FkZXItPm1fbG9hZGVyKQorICAgIGlmICghbG9hZGVyLT5tX3Jl
c291cmNlKQogICAgICAgICBsb2FkZXIgPSAwOwogICAgIHJldHVybiBsb2FkZXIucmVsZWFzZSgp
OwogfQpAQCAtMTMzLDMxICsxMzMsMzkgQEAKIAogRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp+
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAg
IG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBt
X3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAgIGlmICghbV9sb2FkZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQo
KTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIFJlc291
cmNlRXJyb3IgZXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbV9yZXNvdXJjZS0+
dXJsKCksICJMb2FkIGNhbmNlbGxlZCIpOworICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlv
bih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJvcik7CisgICAgfQorICAgIGNsZWFyUmVzb3Vy
Y2UoKTsKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgaWYgKG1fbG9hZGVyKQot
ICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAgaWYgKG1fcmVz
b3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOwogfQog
Ci12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291
cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpjbGVhclJlc291cmNlKCkKIHsKKyAgICBpZiAobV9yZXNvdXJjZSkgeworICAgICAgICBt
X3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOwor
ICAgIH0KK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UmVjZWl2
ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CiAgICAgQVNTRVJUKG1f
Y2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAog
ICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAgLTE2OSwxOCAr
MTc3LDE3IEBACiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
U2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkYXRhU2VudChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Us
IHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VE
KGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLQorICAgIEFTU0VSVF9VTlVTRUQocmVzb3Vy
Y2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YShi
eXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIEFTU0VSVChsb2FkZXIgPT0gbV9s
b2FkZXIpOwotICAgIGRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPmlkZW50aWZpZXIoKSwgcmVz
cG9uc2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3Vy
Y2UpOworICAgIGRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc291cmNlLT5pZGVudGlmaWVyKCksIHJl
c3BvbnNlKTsKIH0KIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQpAQCAtMjIzLDEwICsyMzAsMTAgQEAKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9h
ZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwot
ICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKQEAgLTI0
MCwyNSArMjQ3LDIwIEBACiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGRhdGFM
ZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUNh
Y2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQp
OwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCi0gICAg
Ly8gUHJlZmxpZ2h0IGRhdGEgc2hvdWxkIGJlIGludmlzaWJsZSB0byBjbGllbnRzLgotICAgIGlm
IChtX2FjdHVhbFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlQ2FjaGVkTWV0YWRhdGEoZGF0YSwgZGF0YUxlbmd0aCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgICAgIAorICAgIGlmICht
X3Jlc291cmNlICYmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkgfHwgbV9yZXNvdXJjZS0+
d2FzQ2FuY2VsZWQoKSkpIHsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiTmV0d29yayBS
ZXF1ZXN0IEZhaWxlZCIsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiUmVzb3VyY2UgZmFpbGVkIHRv
IGxvYWQiKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpCisgICAgICAg
ICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJv
cik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmcobV9yZXNvdXJjZS0+aWRl
bnRpZmllcigpLCBtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKIH0KIAotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgZG91YmxlIGZpbmlzaFRpbWUpCi17Ci0gICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRl
ci0+aWRlbnRpZmllcigpLCBmaW5pc2hUaW1lKTsKLX0KLQogdm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3Vi
bGUgZmluaXNoVGltZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMjc0LDEyICsyNzYs
OCBAQAogICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5p
c2hUaW1lKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3Vi
cmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIC8vIG1fbG9hZGVyIG1heSBiZSBu
dWxsIGlmIHdlIGFycml2ZSBoZXJlIHZpYSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIGluIHRo
ZSBjdG9yCi0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAh
bV9sb2FkZXIpOwotCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRS
ZXF1ZXN0SWRlbnRpZmllcikKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRG
YWlsTG9hZGluZyhtX2RvY3VtZW50LT5mcmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgZXJy
b3IpOwpAQCAtMjk1LDYgKzI5Myw4IEBACiAKICAgICBhY3R1YWxSZXF1ZXN0LT5zZXRIVFRQT3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogCisgICAgY2xlYXJSZXNvdXJjZSgp
OworCiAgICAgLy8gSXQgc2hvdWxkIGJlIG9rIHRvIHNraXAgdGhlIHNlY3VyaXR5IGNoZWNrIHNp
bmNlIHdlIGFscmVhZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0LgogICAgIGxv
YWRSZXF1ZXN0KCphY3R1YWxSZXF1ZXN0LCBTa2lwU2VjdXJpdHlDaGVjayk7CiB9CkBAIC0zMjQs
MTkgKzMyNCwxOSBAQAogICAgICAgICAgICAgb3B0aW9ucy5zaG91bGRCdWZmZXJEYXRhID0gQnVm
ZmVyRGF0YTsKICAgICAgICAgfQogCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0
KHJlcXVlc3QpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIGlmIChtX2FjdHVhbFJl
cXVlc3QpIHsKLSAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0KHJlcXVlc3Qp
OwogICAgICAgICAgICAgLy8gQmVjYXVzZSB3aWxsU2VuZFJlcXVlc3Qgb25seSBnZXRzIGNhbGxl
ZCBkdXJpbmcgcmVkaXJlY3RzLCB3ZSBpbml0aWFsaXplIHRoZSBpZGVudGlmaWVyIGFuZCB0aGUg
Zmlyc3Qgd2lsbFNlbmRSZXF1ZXN0IGhlcmUuCiAgICAgICAgICAgICBtX3ByZWZsaWdodFJlcXVl
c3RJZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+cGFnZSgpLT5wcm9ncmVzcygpLT5j
cmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJl
ZGlyZWN0UmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CiAgICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChtX2RvY3VtZW50LT5mcmFtZSgpLCBt
X3ByZWZsaWdodFJlcXVlc3RJZGVudGlmaWVyLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKSwgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAg
ICAgIH0KICNlbmRpZgotCi0gICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhhdCBhbnkg
Y2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBoYXZlIHRo
ZSBvbGQgbG9hZGVyLgotICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9hZGVyID0g
cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKG1fZG9jdW1l
bnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtLCBv
cHRpb25zKTsKKyAgICAgICAgQVNTRVJUKCFtX3Jlc291cmNlKTsKKyAgICAgICAgbV9yZXNvdXJj
ZSA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RSYXdSZXNvdXJj
ZShuZXdSZXF1ZXN0LCBvcHRpb25zKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAg
ICAgICBtX3Jlc291cmNlLT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC0zNjcsNyArMzY3LDcgQEAKIAogICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKICAgICBpbnQgbGVuID0gc3RhdGlj
X2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxl
bik7CisgICAgZGF0YVJlY2VpdmVkKDAsIGJ5dGVzLCBsZW4pOwogCiAgICAgZGlkRmluaXNoTG9h
ZGluZyhpZGVudGlmaWVyLCAwLjApOwogfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3
b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biA5NzYyNikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0
d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTIsMTEgKzIsMTEgQEAKIFRlc3RzIE5ldHdvcmtSZXNvdXJjZXNEYXRhIGxvZ2ljIGZvciBY
SFIgY29udGVudCByZXBsYWNlbWVudC4KIAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rv
ci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDAKLXJlc291cmNlLmNvbnRl
bnQ6IG51bGwKK3Jlc291cmNlLmNvbnRlbnQ6IAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3Bl
Y3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0xMDAKIHJlc291cmNlLmNv
bnRlbnQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2UucGhw
P3NpemU9MjAxCi1yZXNvdXJjZS5jb250ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50OiAKIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2Uu
cGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NjI2KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAt
MDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXN0IHVw
ZGF0ZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjI1Lgor
ICAgICAgICBEdWUgdG8gY2hhbmdlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyIChhbmQKKyAgICAgICAgdGhlcmVmb3JlIFhIUiksIHRoaXMgdGVzdCB3
aWxsIGhhdmUgZW1wdHkgKHJhdGhlciB0aGFuIG51bGwpIGNvbnRlbnQKKyAgICAgICAgaWYgd2Ug
Z28gb3ZlciB0aGUgbGVuZ3RoIGxpbWl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3Jr
LWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVkLnR4dDoKKwogMjAxMS0xMC0xNyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYXJlZCBhIHN0cmF5IGV4
ZWN1dGFibGUgYml0Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111346</attachid>
            <date>2011-10-17 16:42:43 -0700</date>
            <delta_ts>2011-10-18 08:48:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-61225-20111017164242.patch</filename>
            <type>text/plain</type>
            <size>39297</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NjY5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMDcgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBhIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgdXMgdG8gY2FjaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgYXMKKyAgICAgICAgYXBwcm9w
cmlhdGUgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxMjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlz
dG8uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBpbnRl
bmRlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qg
c2VuZCBzZXBhcmF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRp
ZEZpbmlzaExvYWRpbmcoKSwgc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2Fs
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAg
IGluc3RlYWQgb2YgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCgpLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEpOiBIYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29t
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50cyBzZXR0aW5nCisgICAgICAgICAgICBEb05vdEJ1ZmZl
ckRhdGEgaW4gUmVzb3VyZUxvYWRlck9wdGlvbnMuIElmIHRoZSBEYXRhQnVmZmVyaW5nUG9saWN5
IGlzIEJ1ZmZlckRhdGEsIHRoZW4gdGhlCisgICAgICAgICAgICAnZGF0YScgaW5wdXQgcGFyYW1l
dGVyIHdpbGwgY29udGFpbiBhbGwgZGF0YSByZWNlaXZlZCBzbyBmYXIsIGFuZCB3ZSBuZWVkIHRv
IGRldGVybWluZSB0aGUKKyAgICAgICAgICAgIGluY3JlbWVudGFsIGRhdGEgdG8gZm9yd2FyZCB0
byB0aGUgY2xpZW50cy4gSWYgdGhlIHBvbGljeSBpcyBEb05vdEJ1ZmZlckRhdGEsICdkYXRhJyBp
cyBqdXN0CisgICAgICAgICAgICB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnByZWxvYWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldExvYWRGaW5pc2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpsb2FkRmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6IEFkZCBzZXZlcmFsIG5ldyBjYWxsYmFja3MgbmVlZGVk
IGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1ZXN0LCBzbyBwcm90ZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oOgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6Om5vdGlmeVJlc3BvbnNlKTogUHJvdGVjdCBiZWZvcmUgc2V0dGluZyByZXNwb25zZSwgc2lu
Y2UgaXQgbWlnaHQga2lsbCB1cy4KKwogMjAxMS0xMC0xNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxl
aXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBidXR0b25zIG9mIG51bWJlciB0eXBlIDxp
bnB1dD4gY29udHJvbHMgYXJlIG5vdCBmdWxseSBhY2Nlc3NpYmxlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA5NzY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjg1MSw2ICsyODUxLDggQEAKICAgICAgICAgICAgICdsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvTWVt
b3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2YvUmVzb3VyY2VMb2FkZXJDRk5l
dC5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNo
cm9taXVtLmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNl
UmVxdWVzdENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2No
cm9taXVtL1Jlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2hyb21pdW0vU3VicmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlz
aW9uIDk3NjY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5ICszMSwxOSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgogCi0jaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3UKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJl
ZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3lu
Y2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRl
cikKKyAgICBpZiAoIWxvYWRlci0+bV9yZXNvdXJjZSkKICAgICAgICAgbG9hZGVyID0gMDsKICAg
ICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KQEAgLTEzMywzMSArMTMzLDM5IEBAIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3MKIAogRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOworICAgIGlmIChtX3Jlc291cmNlKQor
ICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAgIGlmICghbV9sb2FkZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICBtX2xvYWRlci0+Y2xl
YXJDbGllbnQoKTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAg
ICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbV9y
ZXNvdXJjZS0+dXJsKCksICJMb2FkIGNhbmNlbGxlZCIpOworICAgICAgICBlcnJvci5zZXRJc0Nh
bmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJvcik7CisgICAgfQorICAgIGNs
ZWFyUmVzb3VyY2UoKTsKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodmFs
dWUpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpjbGVhclJlc291cmNlKCkKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkgewor
ICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSAwOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGly
ZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAg
QVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1f
bG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291
cmNlKTsKIAogICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAg
ICAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAg
LTE2OSwxOCArMTc3LDE3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp3aWxsU2Vu
ZFIKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRTZW5kRGF0
YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRhdGFTZW50KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVy
LCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVz
b3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKGJ5dGVzU2Vu
dCwgdG90YWxCeXRlc1RvQmVTZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7
Ci0gICAgZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+aWRlbnRpZmllcigpLCByZXNwb25zZSk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7Cisg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgcmVzcG9uc2Up
OwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCkBAIC0yMjMsMTAgKzIzMCwxMCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFM
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRl
ciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNv
dXJjZSA9PSBtX3Jlc291cmNlKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1f
cHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIpCkBAIC0yNDAsMjMgKzI0NywxOCBAQCB2b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2CiAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQotewotICAgIEFTU0VSVChtX2NsaWVu
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KLSAg
ICAvLyBQcmVmbGlnaHQgZGF0YSBzaG91bGQgYmUgaW52aXNpYmxlIHRvIGNsaWVudHMuCi0gICAg
aWYgKG1fYWN0dWFsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBkYXRhTGVuZ3RoKTsKLX0KLQotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewotICAgIEFTU0VS
VChsb2FkZXIgPT0gbV9sb2FkZXIpOwogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgZGlkRmlu
aXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSwgZmluaXNoVGltZSk7CisgICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgICAgIAorICAg
IGlmIChtX3Jlc291cmNlICYmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkgfHwgbV9yZXNv
dXJjZS0+d2FzQ2FuY2VsZWQoKSkpIHsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiTmV0
d29yayBSZXF1ZXN0IEZhaWxlZCIsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiUmVzb3VyY2UgZmFp
bGVkIHRvIGxvYWQiKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpCisg
ICAgICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFp
bChlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmcobV9yZXNvdXJj
ZS0+aWRlbnRpZmllcigpLCBtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKIH0KIAogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSkKQEAgLTI3NCwxMiArMjc2LDggQEAgdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBBU1NFUlQobV9j
bGllbnQpOwotICAgIC8vIG1fbG9hZGVyIG1heSBiZSBudWxsIGlmIHdlIGFycml2ZSBoZXJlIHZp
YSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIGluIHRoZSBjdG9yCi0gICAgQVNTRVJUX1VOVVNF
RChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9sb2FkZXIpOwotCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhtX2RvY3VtZW50LT5m
cmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgZXJyb3IpOwpAQCAtMjk1LDYgKzI5Myw4IEBA
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHQKIAogICAgIGFjdHVhbFJl
cXVlc3QtPnNldEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKKyAg
ICBjbGVhclJlc291cmNlKCk7CisKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUg
c2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0
IHJlcXVlc3QuCiAgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNo
ZWNrKTsKIH0KQEAgLTMyNCwxOSArMzI0LDE5IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWUKICAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9IEJ1
ZmZlckRhdGE7CiAgICAgICAgIH0KIAorICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVz
dChyZXF1ZXN0KTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAobV9hY3R1YWxS
ZXF1ZXN0KSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0
KTsKICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2lsbFNlbmRSZXF1ZXN0IG9ubHkgZ2V0cyBjYWxs
ZWQgZHVyaW5nIHJlZGlyZWN0cywgd2UgaW5pdGlhbGl6ZSB0aGUgaWRlbnRpZmllciBhbmQgdGhl
IGZpcnN0IHdpbGxTZW5kUmVxdWVzdCBoZXJlLgogICAgICAgICAgICAgbV9wcmVmbGlnaHRSZXF1
ZXN0SWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+
Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZWRpcmVjdFJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QobV9kb2N1bWVudC0+ZnJhbWUoKSwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
ICAgICB9CiAjZW5kaWYKLQotICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55
IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0
aGUgb2xkIGxvYWRlci4KLSAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChtX2RvY3Vt
ZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSwg
b3B0aW9ucyk7CisgICAgICAgIEFTU0VSVCghbV9yZXNvdXJjZSk7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0UmF3UmVzb3Vy
Y2UobmV3UmVxdWVzdCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChtX3Jlc291cmNlKQorICAgICAg
ICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWUKIAogICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEuZGF0YSgpKTsKICAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRh
LnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAgZGF0YVJl
Y2VpdmVkKDAsIGJ5dGVzLCBsZW4pOwogCiAgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVy
LCAwLjApOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTc2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMx
LDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKICNkZWZpbmUgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5
cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC00OCw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Owog
Ci0gICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZh
dGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKKyAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCAg
ewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAg
IHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMmKTsKQEAgLTczLDIxICs3NCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGRhdGFMZW5ndGgpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKKyAgICAgICAgdm9pZCBjbGVhclJlc291cmNlKCk7CiAKKyAgICAgICAgLy8gQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hl
ZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGRhdGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRE
b3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSosIGludCk7CiAjZW5k
aWYKIAogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAg
ICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKQEAgLTk4LDcgKzk5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCi0gICAg
ICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNlOwogICAgICAgICBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAko
cmV2aXNpb24gOTc2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOSArMzcsODQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJj
ZVJlcXVlc3QsIFJhd1Jlc291cmNlKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiB9CiAKIHZv
aWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKGRh
dGEpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGJ1ZmZlcmluZyBkYXRhLCB0aGVuIHdlIGFyZSBz
YXZpbmcgdGhlIGJ1ZmZlciBpbiBtX2RhdGEgYW5kIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAg
Ly8gY2FsY3VsYXRlIHRoZSBpbmNyZW1lbnRhbCBkYXRhLiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmlu
ZywgdGhlbiBtX2RhdGEgd2lsbCBiZSBudWxsIGFuZAorICAgICAgICAvLyB0aGUgYnVmZmVyIGNv
bnRhaW5zIG9ubHkgdGhlIGluY3JlbWVudGFsIGRhdGEuCisgICAgICAgIHNpemVfdCBwcmV2aW91
c0RhdGFMZW5ndGggPSAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkg
PyBtX2RhdGFMZW5ndGggOiAwOworICAgICAgICBBU1NFUlQoZGF0YS0+c2l6ZSgpID49IHByZXZp
b3VzRGF0YUxlbmd0aCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGRh
dGEtPmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICAgICAgc2l6ZV90IGluY3JlbWVu
dGFsRGF0YUxlbmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKworICAg
ICAgICBpZiAoaW5jcmVtZW50YWxEYXRhTGVuZ3RoKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwor
ICAgICAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkp
CisgICAgICAgICAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIGluY3JlbWVudGFsRGF0YSwg
aW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgeworICAgICAgICBtX2Rh
dGFMZW5ndGggPSBkYXRhID8gZGF0YS0+c2l6ZSgpIDogMDsKKyAgICAgICAgbV9kYXRhID0gZGF0
YTsKKyAgICB9CiAgICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2
ZWQpOwogfQogCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGMpCit7CisgICAgaWYgKG1fZGF0YSkgeworICAgICAgICBzdGF0aWNfY2Fz
dDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1f
cmVzcG9uc2UpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+
KGMpLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsK
KyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsKK30KKwogdm9pZCBD
YWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewogICAgIGlmIChtX3JlcXVl
c3QpCiAgICAgICAgIG1fcmVxdWVzdC0+Y2FuY2VsKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UuaXNOdWxsKCkp
IHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xp
ZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAgICBjLT5yZWRpcmVjdFJlY2VpdmVkKHRoaXMs
IHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OnNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENh
Y2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShyZXNwb25zZSk7CisgICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3
aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+
cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdo
aWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5k
YXRhU2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQg
Q2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAg
aWYgKG1fcmVxdWVzdCkKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVy
cyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmF3UmVzb3VyY2U6OmlkZW50aWZpZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlcXVlc3QgPyBtX3JlcXVlc3QtPmlkZW50aWZpZXIoKSA6
IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCShyZXZpc2lvbiA5NzY2OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxOCArMjQsNTMgQEAKICNkZWZpbmUgQ2FjaGVkUmF3UmVzb3VyY2VfaAog
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNs
aWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNl
IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKIHB1YmxpYzoKICAgICBDYWNoZWRSYXdSZXNvdXJj
ZShSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIC8vIEZJWE1FOiBBc3NvY2lhdGVkVVJMTG9hZGVy
IHNob3VsZG4ndCBiZSBhIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhbmQgdGhlcmVmb3JlIHNo
b3VsZG4ndAorICAgIC8vIHVzZSBDYWNoZWRSYXdSZXNvdXJjZS4gSG93ZXZlciwgaXQgaXMsIGFu
ZCBpdCBuZWVkcyB0byBiZSBhYmxlIHRvIGRlZmVyIGxvYWRpbmcuCisgICAgLy8gVGhpcyBjYW4g
YmUgZml4ZWQgYnkgc3BsaXR0aW5nIENPUlMgcHJlZmxpZ2h0aW5nIG91dCBvZiBEb2N1bWVudFRo
cmVhY2FibGVMb2FkZXIuCisgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7
CiAgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIElucHNlY3Rvcklu
c3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
IEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KKyAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBj
b25zdDsKKwogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoaW50KTsKKyNl
bmRpZgorCisgICAgc2l6ZV90IG1fZGF0YUxlbmd0aDsKK307CisKKworY2xhc3MgQ2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50KCkgeyB9CisgICAgc3RhdGljIENh
Y2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBSYXdSZXNvdXJj
ZVR5cGU7IH0KKyAgICB2aXJ0dWFsIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNs
aWVudFR5cGUoKSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQorCisgICAgdmlydHVhbCB2b2lk
IGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2Vu
dCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIGludCAvKiBsZW5ndGggKi8pIHsg
fQorICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJj
ZSosIGludCkgeyB9CisjZW5kaWYKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTc2NjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw2ICs4Nyw3IEBAIENhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBS
ZXMKICAgICAsIG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0
eXBlKSkKICAgICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoY3VycmVudFRpbWUoKSkKICAgICAsIG1f
bGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCisgICAgLCBtX2xvYWRGaW5pc2hUaW1lKDApCiAgICAg
LCBtX2VuY29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRTaXplKDApCiAgICAgLCBtX2FjY2Vz
c0NvdW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaAkocmV2aXNpb24gOTc2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlCiAgICAgfTsKICAgICBQ
cmVsb2FkUmVzdWx0IHByZWxvYWRSZXN1bHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
cmVsb2FkUmVzdWx0PihtX3ByZWxvYWRSZXN1bHQpOyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRG
cm9tTmV0d29ya2luZ0xheWVyKCkgeyBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0
cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgeyB9CkBAIC0xNzMs
NyArMTcyLDggQEAgcHVibGljOgogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgY29uc3QgeyBB
U1NFUlQoIW1fcHVyZ2VhYmxlRGF0YSk7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KIAotICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9
CiAKICAgICAvLyBTZXRzIHRoZSBzZXJpYWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRo
ZSBwbGF0Zm9ybSdzIGNhY2hlLgpAQCAtMjMxLDYgKzIzMSwxNCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CiAgICAgdm9pZCBjbGVhclJl
c291cmNlVG9SZXZhbGlkYXRlKCk7CiAgICAgdm9pZCB1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxp
ZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKiBieXRl
c1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsg
fQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERh
dGEoaW50KSB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRMb2FkRmluaXNoVGltZShkb3VibGUg
ZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmluaXNoVGltZTsgfQorICAgIGRvdWJs
ZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7IH0KIAog
cHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKQEAgLTI2Niw2ICsyNzQsNyBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxDYWNoZWRNZXRhZGF0YT4gbV9jYWNoZWRNZXRhZGF0YTsKIAog
ICAgIGRvdWJsZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJhc2gg
Z3VhcmQiIGluIHRoZSBjYWNoZQorICAgIGRvdWJsZSBtX2xvYWRGaW5pc2hUaW1lOwogCiAgICAg
dW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKICAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXplOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50LmgJKHJldmlzaW9uIDk3NjY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDggQEAgcHVi
bGljOgogICAgICAgICBCYXNlUmVzb3VyY2VUeXBlLAogICAgICAgICBJbWFnZVR5cGUsCiAgICAg
ICAgIEZvbnRUeXBlLAotICAgICAgICBTdHlsZVNoZWV0VHlwZQorICAgICAgICBTdHlsZVNoZWV0
VHlwZSwKKyAgICAgICAgUmF3UmVzb3VyY2VUeXBlCiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkNh
Y2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTc2Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6
OkNhY2hlZFJlc291cmNlUmVxCiAKIENhY2hlZFJlc291cmNlUmVxdWVzdDo6fkNhY2hlZFJlc291
cmNlUmVxdWVzdCgpCiB7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2xl
YXJDbGllbnQoKTsKIH0KIAogUGFzc093blB0cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+IENhY2hl
ZFJlc291cmNlUmVxdWVzdDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJiBvcHRpb25zKQpAQCAtMTQyLDEzICsxNDQsMTMgQEAgUGFzc093blB0cjxDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q+IENhY2hlZAogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcSwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAoIW1fY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmNhblJlcXVlc3QobV9yZXNvdXJjZS0+dHlwZSgpLCByZXEudXJsKCkpKSB7CiAgICAgICAgIGxv
YWRlci0+Y2FuY2VsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9yZXNvdXJjZS0+
c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOworICAgIG1fcmVzb3VyY2UtPndpbGxT
ZW5kUmVxdWVzdChyZXEsIHJlc3BvbnNlKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVl
c3Q6OmNhbmNlbCgpCkBAIC0xNTgsNyArMTYwLDE4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OjpjYW5jZWwoKQogICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKIH0KIAotdm9pZCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgZG91YmxlKQordW5zaWduZWQgbG9uZyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmlkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xvYWRlci0+aWRlbnRpZmllcigpOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykK
K3sKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KGRlZmVycyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2Fk
aW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewogICAg
IGlmIChtX2ZpbmlzaGluZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDYgKzE5MSw3IEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2EKICAgICAvLyBlcnJvciwgc28g
d2UgY2FuJ3Qgc2VuZCB0aGUgc3VjY2Vzc2Z1bCBkYXRhKCkgYW5kIGZpbmlzaCgpIGNhbGxiYWNr
cy4KICAgICBpZiAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICBtX2Nh
Y2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRmluaXNoaW5nKCk7CisgICAgICAgIG1fcmVzb3VyY2Ut
PnNldExvYWRGaW5pc2hUaW1lKGZpbmlzaFRpbWUpOwogICAgICAgICBtX3Jlc291cmNlLT5kYXRh
KGxvYWRlci0+cmVzb3VyY2VEYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIW1fcmVzb3VyY2Ut
PmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgICAgIG1fcmVzb3VyY2UtPmZpbmlzaCgpOwpAQCAt
MjM5LDcgKzI1MywxMyBAQCB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkUmVjZWl2ZVJl
CiAgICAgICAgIG1lbW9yeUNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChtX3Jlc291cmNlKTsK
ICAgICB9CiAKKyAgICAvLyBzZXRSZXNwb25zZSgpIG1pZ2h0IGNhbmNlbCB0aGUgcmVxdWVzdCwg
c28gd2UgbmVlZCB0byBrZWVwIG91cnNlbHZlcyBhbGl2ZS4gVW5mb3J0dW5hdGVseSwKKyAgICAv
LyB3ZSBjYW4ndCBwcm90ZWN0IGEgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LCBidXQgd2UgY2FuIHBy
b3RlY3QgbV9yZXNvdXJjZSwgd2hpY2ggaGFzIHRoZQorICAgIC8vIHBvd2VyIHRvIGtpbGwgdGhl
IENhY2hlZFJlc291cmNlUmVxdWVzdCAoYW5kIHdpbGwgc3dpdGNoIGlzTG9hZGluZygpIHRvIGZh
bHNlIGlmIGl0IGRvZXMgc28pLgorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiBwcm90ZWN0KG1fcmVzb3VyY2UpOwogICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJl
c3BvbnNlKTsKKyAgICBpZiAoIXByb3RlY3QtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgZW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CiAg
ICAgaWYgKCFlbmNvZGluZy5pc051bGwoKSkKQEAgLTI3MSwxOCArMjkxLDIwIEBAIHZvaWQgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRSZWNlaXZlRGEKICAgICBpZiAobV9yZXNvdXJjZS0+ZXJy
b3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXNvdXJjZS0+cmVz
cG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIW1fcmVzb3Vy
Y2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0gICAgICAgICAgICBtX3Jl
c291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKKyAgICBpZiAobV9yZXNv
dXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCAmJiAhbV9yZXNvdXJjZS0+
c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSkgeworICAgICAgICBtX3Jlc291cmNl
LT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIFNldCB0aGUgZGF0YS4KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAgICAg
ICAgLy8gVGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBzZWN0aW9u
IGFsbCBhdCBvbmNlLCBzZW5kIGVvZi4KLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRhdGEgd2ls
bCBjaGFuZ2UgYXMgdGhlIG5leHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBh
IGNvcHkuCisgICAgLy8gVGhlcmUgYXJlIHR3byBjYXNlcyB3aGVyZSB3ZSBtaWdodCBuZWVkIHRv
IGNyZWF0ZSBvdXIgb3duIFNoYXJlZEJ1ZmZlciBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIG9uZSBp
biBSZXNvdXJjZUxvYWRlci4KKyAgICAvLyAoMSkgTXVsdGlwYXJ0IGNvbnRlbnQ6IFRoZSBsb2Fk
ZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwg
dGhlbiBzZW5kcyBlb2YuCisgICAgLy8gICAgIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdl
IGFzIHRoZSBuZXh0IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5Lgor
ICAgIC8vICgyKSBPdXIgY2xpZW50IHJlcXVlc3RlZCB0aGF0IHRoZSBkYXRhIG5vdCBiZSBidWZm
ZXJlZCBhdCB0aGUgUmVzb3VyY2VMb2FkZXIgbGV2ZWwgdmlhIFJlc291cmNlTG9hZGVyT3B0aW9u
cy4gSW4gdGhpcyBjYXNlLAorICAgIC8vICAgICBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRh
KCkgd2lsbCBiZSBudWxsLiBIb3dldmVyLCB1bmxpa2UgdGhlIG11bHRpcGFydCBjYXNlLCB3ZSBk
b24ndCB3YW50IHRvIHRlbGwgdGhlIENhY2hlZFJlc291cmNlCisgICAgLy8gICAgIHRoYXQgYWxs
IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgorICAgIGlmIChtX211bHRpcGFydCB8fCAhbG9h
ZGVyLT5yZXNvdXJjZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3Bp
ZWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fcmVz
b3VyY2UtPmRhdGEoY29waWVkRGF0YS5yZWxlYXNlKCksIHRydWUpOworICAgICAgICBtX3Jlc291
cmNlLT5kYXRhKGNvcGllZERhdGEucmVsZWFzZSgpLCBtX211bHRpcGFydCk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2Up
OwogfQpAQCAtMjkyLDcgKzMxNCwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlk
UmVjZWl2ZUNhCiAgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOwog
ICAgIG1fcmVzb3VyY2UtPnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXplKTsK
IH0KLSAgICAKKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZFNlbmREYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBtX3Jlc291cmNlLT5kaWRTZW5kRGF0
YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjplbmQoKQogewogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWREb25l
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA5NzY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNl
TG9hZGVyOyB9CiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklYTUU6IExp
a2UgQ2FjaGVkUmVzb3VyY2U6OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFjayBmb3Ig
cHJlZmxpZ2h0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuCisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCisgICAg
ICAgIC8vIEZJWE1FOiBTZWUgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoKSBm
b3IgdGhlIHJlbGV2YW50IHJhbnQuCisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29s
KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChDYWNoZWRS
ZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC01OSw2ICs2NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGVuZCgpOwogCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9u
ZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQq
Lyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWREb3du
bG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQpOworI2VuZGlmCisKICAgICAgICAgUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgICAgIENhY2hlZFJlc291cmNlKiBt
X3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJh
d1Jlc291cmNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWREb3dubG9h
ZERhdGEoaW50IGRhdGFMZW5ndGgpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIg
dyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4
dCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5k
YXRhRG93bmxvYWRlZCh0aGlzLCBkYXRhTGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2Fk
ZXIgPT0gbV9sb2FkZXIpOworICAgIG1fcmVzb3VyY2UtPmRpZERvd25sb2FkRGF0YShsZW5ndGgp
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDk3NjY5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMx
LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyLmgiCiAKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNh
Y2hlZFJhd1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGRhdGFMZW5ndGgp
Cit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YURvd25sb2FkZWQoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQp
OwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogICAgIEFTU0VS
VCghbV9hY3R1YWxSZXF1ZXN0KTsKIAogICAgIG1fY2xpZW50LT5kaWREb3dubG9hZERhdGEoZGF0
YUxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oCShy
ZXZpc2lvbiA5NzY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBJY29uTG9hZGVyX2gK
ICNkZWZpbmUgSWNvbkxvYWRlcl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5o
IgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtMzcsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENhY2hlZFJhd1Jlc291cmNlOwogY2xhc3MgRnJhbWU7CiAKLWNsYXNzIEljb25Mb2FkZXIgOiBw
cml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIEljb25Mb2FkZXIgOiBwcml2YXRl
IENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJY29u
TG9hZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8SWNvbkxvYWRlcj4gY3JlYXRlKEZyYW1lKik7Ci0gICAgfkljb25Mb2FkZXIoKTsK
KyAgICB2aXJ0dWFsIH5JY29uTG9hZGVyKCk7CiAKICAgICB2b2lkIHN0YXJ0TG9hZGluZygpOwog
ICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDk3NjY5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNiArNTM4LDcgQEAgdm9pZCBCbG9iUmVzb3VyY2VI
YW5kbGU6Om5vdGlmeVJlc3BvbnNlKAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lcnJv
ckNvZGUpIHsKKyAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCh0aGlz
KTsKICAgICAgICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAgICAgIG5vdGlmeUZpbmlz
aCgpOwogICAgIH0gZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTc2NjkpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMC0wMyAg
TmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRlc3QgdXBkYXRl
IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMjUuCisgICAg
ICAgIER1ZSB0byBjaGFuZ2VzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIgKGFuZAorICAgICAgICB0aGVyZWZvcmUgWEhSKSwgdGhpcyB0ZXN0IHdpbGwg
aGF2ZSBlbXB0eSAocmF0aGVyIHRoYW4gbnVsbCkgY29udGVudAorICAgICAgICBpZiB3ZSBnbyBv
dmVyIHRoZSBsZW5ndGggbGltaXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlz
dG8uCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29u
dGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0OgorCiAyMDExLTEwLTE3ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IGJ1dHRvbnMgb2Yg
bnVtYmVyIHR5cGUgPGlucHV0PiBjb250cm9scyBhcmUgbm90IGZ1bGx5IGFjY2Vzc2libGUKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250
ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1l
bnQteGhyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTc2NjkpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHIt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDExICsyLDExIEBAIENPTlNPTEUgTUVT
U0FHRTogbGluZSAzOTogRG9uZS4KIFRlc3RzIE5ldHdvcmtSZXNvdXJjZXNEYXRhIGxvZ2ljIGZv
ciBYSFIgY29udGVudCByZXBsYWNlbWVudC4KIAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3Bl
Y3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDAKLXJlc291cmNlLmNv
bnRlbnQ6IG51bGwKK3Jlc291cmNlLmNvbnRlbnQ6IAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2lu
c3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0xMDAKIHJlc291cmNl
LmNvbnRlbnQ6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2Uu
cGhwP3NpemU9MjAxCi1yZXNvdXJjZS5jb250ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50OiAK
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3Vy
Y2UucGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111448</attachid>
            <date>2011-10-18 08:49:03 -0700</date>
            <delta_ts>2011-10-24 14:46:38 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-61225-20111018084902.patch</filename>
            <type>text/plain</type>
            <size>39254</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMDcgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBhIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgdXMgdG8gY2FjaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgYXMKKyAgICAgICAgYXBwcm9w
cmlhdGUgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxMjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlz
dG8uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBpbnRl
bmRlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qg
c2VuZCBzZXBhcmF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRp
ZEZpbmlzaExvYWRpbmcoKSwgc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2Fs
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAg
IGluc3RlYWQgb2YgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCgpLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEpOiBIYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29t
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50cyBzZXR0aW5nCisgICAgICAgICAgICBEb05vdEJ1ZmZl
ckRhdGEgaW4gUmVzb3VyZUxvYWRlck9wdGlvbnMuIElmIHRoZSBEYXRhQnVmZmVyaW5nUG9saWN5
IGlzIEJ1ZmZlckRhdGEsIHRoZW4gdGhlCisgICAgICAgICAgICAnZGF0YScgaW5wdXQgcGFyYW1l
dGVyIHdpbGwgY29udGFpbiBhbGwgZGF0YSByZWNlaXZlZCBzbyBmYXIsIGFuZCB3ZSBuZWVkIHRv
IGRldGVybWluZSB0aGUKKyAgICAgICAgICAgIGluY3JlbWVudGFsIGRhdGEgdG8gZm9yd2FyZCB0
byB0aGUgY2xpZW50cy4gSWYgdGhlIHBvbGljeSBpcyBEb05vdEJ1ZmZlckRhdGEsICdkYXRhJyBp
cyBqdXN0CisgICAgICAgICAgICB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnByZWxvYWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldExvYWRGaW5pc2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpsb2FkRmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6IEFkZCBzZXZlcmFsIG5ldyBjYWxsYmFja3MgbmVlZGVk
IGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1ZXN0LCBzbyBwcm90ZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oOgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6Om5vdGlmeVJlc3BvbnNlKTogUHJvdGVjdCBiZWZvcmUgc2V0dGluZyByZXNwb25zZSwgc2lu
Y2UgaXQgbWlnaHQga2lsbCB1cy4KKwogMjAxMS0xMC0xOCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxl
aXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBidXR0b25zIG9mIG51bWJlciB0eXBlIDxp
bnB1dD4gY29udHJvbHMgYXJlIG5vdCBmdWxseSBhY2Nlc3NpYmxlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjg1Myw2ICsyODUzLDggQEAKICAgICAgICAgICAgICdsb2FkZXIvY2Fj
aGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvTWVt
b3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2YvUmVzb3VyY2VMb2FkZXJDRk5l
dC5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNo
cm9taXVtLmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNl
UmVxdWVzdENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2No
cm9taXVtL1Jlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2hyb21pdW0vU3VicmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlz
aW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE5ICszMSwxOSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgogCi0jaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3UKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJl
ZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3lu
Y2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRl
cikKKyAgICBpZiAoIWxvYWRlci0+bV9yZXNvdXJjZSkKICAgICAgICAgbG9hZGVyID0gMDsKICAg
ICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KQEAgLTEzMywzMSArMTMzLDM5IEBAIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3MKIAogRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgIG1fbG9hZGVyLT5jbGVhckNsaWVudCgpOworICAgIGlmIChtX3Jlc291cmNlKQor
ICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogewotICAgIGlmICghbV9sb2FkZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICBtX2xvYWRlci0+Y2xl
YXJDbGllbnQoKTsKLSAgICBtX2xvYWRlciA9IDA7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAg
ICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbV9y
ZXNvdXJjZS0+dXJsKCksICJMb2FkIGNhbmNlbGxlZCIpOworICAgICAgICBlcnJvci5zZXRJc0Nh
bmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFpbChlcnJvcik7CisgICAgfQorICAgIGNs
ZWFyUmVzb3VyY2UoKTsKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgdmFsdWUpCiB7Ci0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh2YWx1ZSk7CisgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodmFs
dWUpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpjbGVhclJlc291cmNlKCkKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkgewor
ICAgICAgICBtX3Jlc291cmNlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSAwOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGly
ZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAg
QVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1f
bG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291
cmNlKTsKIAogICAgIGlmICghaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAg
ICAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAg
LTE2OSwxOCArMTc3LDE3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp3aWxsU2Vu
ZFIKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRTZW5kRGF0
YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQordm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRhdGFTZW50KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVy
LCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVz
b3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKGJ5dGVzU2Vu
dCwgdG90YWxCeXRlc1RvQmVTZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7
Ci0gICAgZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+aWRlbnRpZmllcigpLCByZXNwb25zZSk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7Cisg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgcmVzcG9uc2Up
OwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCkBAIC0yMjMsMTAgKzIzMCwxMCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFM
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRl
ciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNv
dXJjZSA9PSBtX3Jlc291cmNlKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1f
cHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIpCkBAIC0yNDAsMjMgKzI0NywxOCBAQCB2b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2CiAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKGRhdGEsIGRhdGFMZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQotewotICAgIEFTU0VSVChtX2NsaWVu
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KLSAg
ICAvLyBQcmVmbGlnaHQgZGF0YSBzaG91bGQgYmUgaW52aXNpYmxlIHRvIGNsaWVudHMuCi0gICAg
aWYgKG1fYWN0dWFsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBkYXRhTGVuZ3RoKTsKLX0KLQotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewotICAgIEFTU0VS
VChsb2FkZXIgPT0gbV9sb2FkZXIpOwogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgZGlkRmlu
aXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSwgZmluaXNoVGltZSk7CisgICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJjZSk7CisgICAgICAgIAorICAg
IGlmIChtX3Jlc291cmNlICYmIChtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkgfHwgbV9yZXNv
dXJjZS0+d2FzQ2FuY2VsZWQoKSkpIHsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiTmV0
d29yayBSZXF1ZXN0IEZhaWxlZCIsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiUmVzb3VyY2UgZmFp
bGVkIHRvIGxvYWQiKTsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpCisg
ICAgICAgICAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICAgICAgZGlkRmFp
bChlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIGRpZEZpbmlzaExvYWRpbmcobV9yZXNvdXJj
ZS0+aWRlbnRpZmllcigpLCBtX3Jlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKIH0KIAogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSkKQEAgLTI3NCwxMiArMjc2LDggQEAgdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyLCBmaW5pc2hUaW1lKTsKIH0KIAotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBBU1NFUlQobV9j
bGllbnQpOwotICAgIC8vIG1fbG9hZGVyIG1heSBiZSBudWxsIGlmIHdlIGFycml2ZSBoZXJlIHZp
YSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIGluIHRoZSBjdG9yCi0gICAgQVNTRVJUX1VOVVNF
RChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlciB8fCAhbV9sb2FkZXIpOwotCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBpZiAobV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllcikKICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGYWlsTG9hZGluZyhtX2RvY3VtZW50LT5m
cmFtZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgZXJyb3IpOwpAQCAtMjk1LDYgKzI5Myw4IEBA
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHQKIAogICAgIGFjdHVhbFJl
cXVlc3QtPnNldEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAKKyAg
ICBjbGVhclJlc291cmNlKCk7CisKICAgICAvLyBJdCBzaG91bGQgYmUgb2sgdG8gc2tpcCB0aGUg
c2VjdXJpdHkgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0aGUgcHJlZmxpZ2h0
IHJlcXVlc3QuCiAgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIFNraXBTZWN1cml0eUNo
ZWNrKTsKIH0KQEAgLTMyNCwxOSArMzI0LDE5IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWUKICAgICAgICAgICAgIG9wdGlvbnMuc2hvdWxkQnVmZmVyRGF0YSA9IEJ1
ZmZlckRhdGE7CiAgICAgICAgIH0KIAorICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVz
dChyZXF1ZXN0KTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAobV9hY3R1YWxS
ZXF1ZXN0KSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0
KTsKICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2lsbFNlbmRSZXF1ZXN0IG9ubHkgZ2V0cyBjYWxs
ZWQgZHVyaW5nIHJlZGlyZWN0cywgd2UgaW5pdGlhbGl6ZSB0aGUgaWRlbnRpZmllciBhbmQgdGhl
IGZpcnN0IHdpbGxTZW5kUmVxdWVzdCBoZXJlLgogICAgICAgICAgICAgbV9wcmVmbGlnaHRSZXF1
ZXN0SWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+
Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZWRpcmVjdFJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVlc3QobV9kb2N1bWVudC0+ZnJhbWUoKSwg
bV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCksIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAg
ICAgICB9CiAjZW5kaWYKLQotICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55
IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0
aGUgb2xkIGxvYWRlci4KLSAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChtX2RvY3Vt
ZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bSwg
b3B0aW9ucyk7CisgICAgICAgIEFTU0VSVCghbV9yZXNvdXJjZSk7CisgICAgICAgIG1fcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0UmF3UmVzb3Vy
Y2UobmV3UmVxdWVzdCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChtX3Jlc291cmNlKQorICAgICAg
ICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWUKIAogICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEuZGF0YSgpKTsKICAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRh
LnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAgZGF0YVJl
Y2VpdmVkKDAsIGJ5dGVzLCBsZW4pOwogCiAgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVy
LCAwLjApOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gOTc3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMx
LDkgQEAKICNpZm5kZWYgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyX2gKICNkZWZpbmUgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyX2gKIAorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5
cGVzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC00OCw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Owog
Ci0gICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZh
dGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKKyAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCAg
ewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAg
IHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMmKTsKQEAgLTczLDIxICs3NCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGRhdGFMZW5ndGgpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqLCBkb3VibGUpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKKyAgICAgICAgdm9pZCBjbGVhclJlc291cmNlKCk7CiAKKyAgICAgICAgLy8gQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hl
ZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGRhdGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKik7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRE
b3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSosIGludCk7CiAjZW5k
aWYKIAogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAg
ICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKQEAgLTk4LDcgKzk5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCi0gICAg
ICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX3Jlc291cmNlOwogICAgICAgICBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcAko
cmV2aXNpb24gOTc3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOSArMzcsODQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJj
ZVJlcXVlc3QsIFJhd1Jlc291cmNlKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiB9CiAKIHZv
aWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIG1fZGF0YSA9IGRhdGE7CisgICAgaWYgKGRh
dGEpIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGJ1ZmZlcmluZyBkYXRhLCB0aGVuIHdlIGFyZSBz
YXZpbmcgdGhlIGJ1ZmZlciBpbiBtX2RhdGEgYW5kIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAg
Ly8gY2FsY3VsYXRlIHRoZSBpbmNyZW1lbnRhbCBkYXRhLiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmlu
ZywgdGhlbiBtX2RhdGEgd2lsbCBiZSBudWxsIGFuZAorICAgICAgICAvLyB0aGUgYnVmZmVyIGNv
bnRhaW5zIG9ubHkgdGhlIGluY3JlbWVudGFsIGRhdGEuCisgICAgICAgIHNpemVfdCBwcmV2aW91
c0RhdGFMZW5ndGggPSAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkg
PyBtX2RhdGFMZW5ndGggOiAwOworICAgICAgICBBU1NFUlQoZGF0YS0+c2l6ZSgpID49IHByZXZp
b3VzRGF0YUxlbmd0aCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGRh
dGEtPmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICAgICAgc2l6ZV90IGluY3JlbWVu
dGFsRGF0YUxlbmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKworICAg
ICAgICBpZiAoaW5jcmVtZW50YWxEYXRhTGVuZ3RoKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNv
dXJjZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwor
ICAgICAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkp
CisgICAgICAgICAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIGluY3JlbWVudGFsRGF0YSwg
aW5jcmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgeworICAgICAgICBtX2Rh
dGFMZW5ndGggPSBkYXRhID8gZGF0YS0+c2l6ZSgpIDogMDsKKyAgICAgICAgbV9kYXRhID0gZGF0
YTsKKyAgICB9CiAgICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2
ZWQpOwogfQogCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIGMpCit7CisgICAgaWYgKG1fZGF0YSkgeworICAgICAgICBzdGF0aWNfY2Fz
dDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1f
cmVzcG9uc2UpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+
KGMpLT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsK
KyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsKK30KKwogdm9pZCBD
YWNoZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewogICAgIGlmIChtX3JlcXVl
c3QpCiAgICAgICAgIG1fcmVxdWVzdC0+Y2FuY2VsKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVz
b3VyY2U6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UuaXNOdWxsKCkp
IHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xp
ZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAgICBjLT5yZWRpcmVjdFJlY2VpdmVkKHRoaXMs
IHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OndpbGxTZW5k
UmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6
OnNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENh
Y2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShyZXNwb25zZSk7CisgICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3
aGlsZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+
cmVzcG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdo
aWxlIChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5k
YXRhU2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQg
Q2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAg
aWYgKG1fcmVxdWVzdCkKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVy
cyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmF3UmVzb3VyY2U6OmlkZW50aWZpZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlcXVlc3QgPyBtX3JlcXVlc3QtPmlkZW50aWZpZXIoKSA6
IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCShyZXZpc2lvbiA5Nzc1NykKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxOCArMjQsNTMgQEAKICNkZWZpbmUgQ2FjaGVkUmF3UmVzb3VyY2VfaAog
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNs
aWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNl
IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKIHB1YmxpYzoKICAgICBDYWNoZWRSYXdSZXNvdXJj
ZShSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIC8vIEZJWE1FOiBBc3NvY2lhdGVkVVJMTG9hZGVy
IHNob3VsZG4ndCBiZSBhIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhbmQgdGhlcmVmb3JlIHNo
b3VsZG4ndAorICAgIC8vIHVzZSBDYWNoZWRSYXdSZXNvdXJjZS4gSG93ZXZlciwgaXQgaXMsIGFu
ZCBpdCBuZWVkcyB0byBiZSBhYmxlIHRvIGRlZmVyIGxvYWRpbmcuCisgICAgLy8gVGhpcyBjYW4g
YmUgZml4ZWQgYnkgc3BsaXR0aW5nIENPUlMgcHJlZmxpZ2h0aW5nIG91dCBvZiBEb2N1bWVudFRo
cmVhY2FibGVMb2FkZXIuCisgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7
CiAgICAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIElucHNlY3Rvcklu
c3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBpbiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
IEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KKyAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBj
b25zdDsKKwogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoaW50KTsKKyNl
bmRpZgorCisgICAgc2l6ZV90IG1fZGF0YUxlbmd0aDsKK307CisKKworY2xhc3MgQ2FjaGVkUmF3
UmVzb3VyY2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkNhY2hlZFJhd1Jlc291cmNlQ2xpZW50KCkgeyB9CisgICAgc3RhdGljIENh
Y2hlZFJlc291cmNlQ2xpZW50VHlwZSBleHBlY3RlZFR5cGUoKSB7IHJldHVybiBSYXdSZXNvdXJj
ZVR5cGU7IH0KKyAgICB2aXJ0dWFsIENhY2hlZFJlc291cmNlQ2xpZW50VHlwZSByZXNvdXJjZUNs
aWVudFR5cGUoKSB7IHJldHVybiBleHBlY3RlZFR5cGUoKTsgfQorCisgICAgdmlydHVhbCB2b2lk
IGRhdGFTZW50KENhY2hlZFJlc291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qIGJ5dGVzU2Vu
dCAqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qIHRvdGFsQnl0ZXNUb0JlU2VudCAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIGludCAvKiBsZW5ndGggKi8pIHsg
fQorICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJj
ZSosIGludCkgeyB9CisjZW5kaWYKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gOTc3NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw2ICs4Nyw3IEBAIENhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBS
ZXMKICAgICAsIG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0
eXBlKSkKICAgICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoY3VycmVudFRpbWUoKSkKICAgICAsIG1f
bGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCisgICAgLCBtX2xvYWRGaW5pc2hUaW1lKDApCiAgICAg
LCBtX2VuY29kZWRTaXplKDApCiAgICAgLCBtX2RlY29kZWRTaXplKDApCiAgICAgLCBtX2FjY2Vz
c0NvdW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaAkocmV2aXNpb24gOTc3NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlCiAgICAgfTsKICAgICBQ
cmVsb2FkUmVzdWx0IHByZWxvYWRSZXN1bHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
cmVsb2FkUmVzdWx0PihtX3ByZWxvYWRSZXN1bHQpOyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRG
cm9tTmV0d29ya2luZ0xheWVyKCkgeyBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0
cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCkgeyB9CkBAIC0xNzMs
NyArMTcyLDggQEAgcHVibGljOgogCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgY29uc3QgeyBB
U1NFUlQoIW1fcHVyZ2VhYmxlRGF0YSk7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KIAotICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9
CiAKICAgICAvLyBTZXRzIHRoZSBzZXJpYWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRo
ZSBwbGF0Zm9ybSdzIGNhY2hlLgpAQCAtMjMxLDYgKzIzMSwxNCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CiAgICAgdm9pZCBjbGVhclJl
c291cmNlVG9SZXZhbGlkYXRlKCk7CiAgICAgdm9pZCB1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxp
ZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKiBieXRl
c1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsg
fQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERh
dGEoaW50KSB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRMb2FkRmluaXNoVGltZShkb3VibGUg
ZmluaXNoVGltZSkgeyBtX2xvYWRGaW5pc2hUaW1lID0gZmluaXNoVGltZTsgfQorICAgIGRvdWJs
ZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7IH0KIAog
cHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKQEAgLTI2Niw2ICsyNzQsNyBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxDYWNoZWRNZXRhZGF0YT4gbV9jYWNoZWRNZXRhZGF0YTsKIAog
ICAgIGRvdWJsZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJhc2gg
Z3VhcmQiIGluIHRoZSBjYWNoZQorICAgIGRvdWJsZSBtX2xvYWRGaW5pc2hUaW1lOwogCiAgICAg
dW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKICAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXplOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50LmgJKHJldmlzaW9uIDk3NzU3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDggQEAgcHVi
bGljOgogICAgICAgICBCYXNlUmVzb3VyY2VUeXBlLAogICAgICAgICBJbWFnZVR5cGUsCiAgICAg
ICAgIEZvbnRUeXBlLAotICAgICAgICBTdHlsZVNoZWV0VHlwZQorICAgICAgICBTdHlsZVNoZWV0
VHlwZSwKKyAgICAgICAgUmF3UmVzb3VyY2VUeXBlCiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkNh
Y2hlZFJlc291cmNlQ2xpZW50KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTc3NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6
OkNhY2hlZFJlc291cmNlUmVxCiAKIENhY2hlZFJlc291cmNlUmVxdWVzdDo6fkNhY2hlZFJlc291
cmNlUmVxdWVzdCgpCiB7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+Y2xl
YXJDbGllbnQoKTsKIH0KIAogUGFzc093blB0cjxDYWNoZWRSZXNvdXJjZVJlcXVlc3Q+IENhY2hl
ZFJlc291cmNlUmVxdWVzdDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJiBvcHRpb25zKQpAQCAtMTQyLDEzICsxNDQsMTMgQEAgUGFzc093blB0cjxDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q+IENhY2hlZAogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcSwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAoIW1fY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmNhblJlcXVlc3QobV9yZXNvdXJjZS0+dHlwZSgpLCByZXEudXJsKCkpKSB7CiAgICAgICAgIGxv
YWRlci0+Y2FuY2VsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9yZXNvdXJjZS0+
c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOworICAgIG1fcmVzb3VyY2UtPndpbGxT
ZW5kUmVxdWVzdChyZXEsIHJlc3BvbnNlKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVl
c3Q6OmNhbmNlbCgpCkBAIC0xNTgsNyArMTYwLDE4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OjpjYW5jZWwoKQogICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKIH0KIAotdm9pZCBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgZG91YmxlKQordW5zaWduZWQgbG9uZyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmlkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xvYWRlci0+aWRlbnRpZmllcigpOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykK
K3sKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KGRlZmVycyk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2Fk
aW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQogewogICAg
IGlmIChtX2ZpbmlzaGluZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDYgKzE5MSw3IEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRGaW5pc2hMb2EKICAgICAvLyBlcnJvciwgc28g
d2UgY2FuJ3Qgc2VuZCB0aGUgc3VjY2Vzc2Z1bCBkYXRhKCkgYW5kIGZpbmlzaCgpIGNhbGxiYWNr
cy4KICAgICBpZiAoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICBtX2Nh
Y2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRmluaXNoaW5nKCk7CisgICAgICAgIG1fcmVzb3VyY2Ut
PnNldExvYWRGaW5pc2hUaW1lKGZpbmlzaFRpbWUpOwogICAgICAgICBtX3Jlc291cmNlLT5kYXRh
KGxvYWRlci0+cmVzb3VyY2VEYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIW1fcmVzb3VyY2Ut
PmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgICAgIG1fcmVzb3VyY2UtPmZpbmlzaCgpOwpAQCAt
MjM5LDcgKzI1MywxMyBAQCB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkUmVjZWl2ZVJl
CiAgICAgICAgIG1lbW9yeUNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChtX3Jlc291cmNlKTsK
ICAgICB9CiAKKyAgICAvLyBzZXRSZXNwb25zZSgpIG1pZ2h0IGNhbmNlbCB0aGUgcmVxdWVzdCwg
c28gd2UgbmVlZCB0byBrZWVwIG91cnNlbHZlcyBhbGl2ZS4gVW5mb3J0dW5hdGVseSwKKyAgICAv
LyB3ZSBjYW4ndCBwcm90ZWN0IGEgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LCBidXQgd2UgY2FuIHBy
b3RlY3QgbV9yZXNvdXJjZSwgd2hpY2ggaGFzIHRoZQorICAgIC8vIHBvd2VyIHRvIGtpbGwgdGhl
IENhY2hlZFJlc291cmNlUmVxdWVzdCAoYW5kIHdpbGwgc3dpdGNoIGlzTG9hZGluZygpIHRvIGZh
bHNlIGlmIGl0IGRvZXMgc28pLgorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiBwcm90ZWN0KG1fcmVzb3VyY2UpOwogICAgIG1fcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJl
c3BvbnNlKTsKKyAgICBpZiAoIXByb3RlY3QtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgZW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7CiAg
ICAgaWYgKCFlbmNvZGluZy5pc051bGwoKSkKQEAgLTI3MSwxOCArMjkxLDIwIEBAIHZvaWQgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRSZWNlaXZlRGEKICAgICBpZiAobV9yZXNvdXJjZS0+ZXJy
b3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXNvdXJjZS0+cmVz
cG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIW1fcmVzb3Vy
Y2UtPnNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0gICAgICAgICAgICBtX3Jl
c291cmNlLT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKKyAgICBpZiAobV9yZXNv
dXJjZS0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCAmJiAhbV9yZXNvdXJjZS0+
c2hvdWxkSWdub3JlSFRUUFN0YXR1c0NvZGVFcnJvcnMoKSkgeworICAgICAgICBtX3Jlc291cmNl
LT5lcnJvcihDYWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIFNldCB0aGUgZGF0YS4KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAgICAg
ICAgLy8gVGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBzZWN0aW9u
IGFsbCBhdCBvbmNlLCBzZW5kIGVvZi4KLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRhdGEgd2ls
bCBjaGFuZ2UgYXMgdGhlIG5leHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBh
IGNvcHkuCisgICAgLy8gVGhlcmUgYXJlIHR3byBjYXNlcyB3aGVyZSB3ZSBtaWdodCBuZWVkIHRv
IGNyZWF0ZSBvdXIgb3duIFNoYXJlZEJ1ZmZlciBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIG9uZSBp
biBSZXNvdXJjZUxvYWRlci4KKyAgICAvLyAoMSkgTXVsdGlwYXJ0IGNvbnRlbnQ6IFRoZSBsb2Fk
ZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwg
dGhlbiBzZW5kcyBlb2YuCisgICAgLy8gICAgIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdl
IGFzIHRoZSBuZXh0IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5Lgor
ICAgIC8vICgyKSBPdXIgY2xpZW50IHJlcXVlc3RlZCB0aGF0IHRoZSBkYXRhIG5vdCBiZSBidWZm
ZXJlZCBhdCB0aGUgUmVzb3VyY2VMb2FkZXIgbGV2ZWwgdmlhIFJlc291cmNlTG9hZGVyT3B0aW9u
cy4gSW4gdGhpcyBjYXNlLAorICAgIC8vICAgICBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRh
KCkgd2lsbCBiZSBudWxsLiBIb3dldmVyLCB1bmxpa2UgdGhlIG11bHRpcGFydCBjYXNlLCB3ZSBk
b24ndCB3YW50IHRvIHRlbGwgdGhlIENhY2hlZFJlc291cmNlCisgICAgLy8gICAgIHRoYXQgYWxs
IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgorICAgIGlmIChtX211bHRpcGFydCB8fCAhbG9h
ZGVyLT5yZXNvdXJjZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3Bp
ZWREYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fcmVz
b3VyY2UtPmRhdGEoY29waWVkRGF0YS5yZWxlYXNlKCksIHRydWUpOworICAgICAgICBtX3Jlc291
cmNlLT5kYXRhKGNvcGllZERhdGEucmVsZWFzZSgpLCBtX211bHRpcGFydCk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2Up
OwogfQpAQCAtMjkyLDcgKzMxNCwxMiBAQCB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlk
UmVjZWl2ZUNhCiAgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5pc0NhY2hlVmFsaWRhdG9yKCkpOwog
ICAgIG1fcmVzb3VyY2UtPnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXplKTsK
IH0KLSAgICAKKwordm9pZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZFNlbmREYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBtX3Jlc291cmNlLT5kaWRTZW5kRGF0
YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OjplbmQoKQogewogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWREb25l
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJlc291cmNl
TG9hZGVyOyB9CiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklYTUU6IExp
a2UgQ2FjaGVkUmVzb3VyY2U6OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFjayBmb3Ig
cHJlZmxpZ2h0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuCisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworCisgICAg
ICAgIC8vIEZJWE1FOiBTZWUgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoKSBm
b3IgdGhlIHJlbGV2YW50IHJhbnQuCisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29s
KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChDYWNoZWRS
ZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC01OSw2ICs2NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIGVuZCgpOwogCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9u
ZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQq
Lyk7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWREb3du
bG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQpOworI2VuZGlmCisKICAgICAgICAgUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xvYWRlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgICAgIENhY2hlZFJlc291cmNlKiBt
X3Jlc291cmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJh
d1Jlc291cmNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWREb3dubG9h
ZERhdGEoaW50IGRhdGFMZW5ndGgpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8
Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+ZGF0YURvd25sb2Fk
ZWQodGhpcywgZGF0YUxlbmd0aCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENo
cm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1
bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
UmVxdWVzdC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0OjpkaWREb3dubG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
aW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9h
ZGVyKTsKKyAgICBtX3Jlc291cmNlLT5kaWREb3dubG9hZERhdGEobGVuZ3RoKTsKK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hy
b21pdW0vRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5Nzc1
NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgog
Ci0jaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRG93bmxvYWRE
YXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRhdGFEb3dubG9hZGVkKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSwgaW50IGRhdGFMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKICAgICBBU1NFUlQoIW1fYWN0dWFs
UmVxdWVzdCk7CiAKICAgICBtX2NsaWVudC0+ZGlkRG93bmxvYWREYXRhKGRhdGFMZW5ndGgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuaAkocmV2aXNpb24gOTc3
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSWNvbkxvYWRlcl9oCiAjZGVmaW5lIElj
b25Mb2FkZXJfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRl
ICJDYWNoZWRSYXdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTM3LDExICszNywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRSYXdS
ZXNvdXJjZTsKIGNsYXNzIEZyYW1lOwogCi1jbGFzcyBJY29uTG9hZGVyIDogcHJpdmF0ZSBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBJY29uTG9hZGVyIDogcHJpdmF0ZSBDYWNoZWRSYXdS
ZXNvdXJjZUNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSWNvbkxvYWRlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElj
b25Mb2FkZXI+IGNyZWF0ZShGcmFtZSopOwotICAgIH5JY29uTG9hZGVyKCk7CisgICAgdmlydHVh
bCB+SWNvbkxvYWRlcigpOwogCiAgICAgdm9pZCBzdGFydExvYWRpbmcoKTsKICAgICB2b2lkIHN0
b3BMb2FkaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JS
ZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpub3Rp
ZnlSZXNwb25zZSgKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZXJyb3JDb2RlKSB7Cisg
ICAgICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+IHByb3RlY3QodGhpcyk7CiAgICAgICAg
IG5vdGlmeVJlc3BvbnNlT25FcnJvcigpOwogICAgICAgICBub3RpZnlGaW5pc2goKTsKICAgICB9
IGVsc2UKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzU3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDMgIE5hdGUgQ2hhcGlu
ICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXN0IHVwZGF0ZSBmb3IgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjI1LgorICAgICAgICBEdWUgdG8g
Y2hhbmdlcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
IChhbmQKKyAgICAgICAgdGhlcmVmb3JlIFhIUiksIHRoaXMgdGVzdCB3aWxsIGhhdmUgZW1wdHkg
KHJhdGhlciB0aGFuIG51bGwpIGNvbnRlbnQKKyAgICAgICAgaWYgd2UgZ28gb3ZlciB0aGUgbGVu
Z3RoIGxpbWl0LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFj
ZW1lbnQteGhyLWV4cGVjdGVkLnR4dDoKKwogMjAxMS0xMC0xOCAgTWlobmVhIE92aWRlbmllICA8
bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFF0IHJlYmFzZWxpbmUgYWZ0
ZXIgcjk3NzM4LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29y
ay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQteGhyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29u
dGVudC1yZXBsYWNlbWVudC14aHItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5Nzc1NykKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJl
cGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMTEgKzIsMTEg
QEAgQ09OU09MRSBNRVNTQUdFOiBsaW5lIDM5OiBEb25lLgogVGVzdHMgTmV0d29ya1Jlc291cmNl
c0RhdGEgbG9naWMgZm9yIFhIUiBjb250ZW50IHJlcGxhY2VtZW50LgogCiBodHRwOi8vMTI3LjAu
MC4xOjgwMDAvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTIw
MAotcmVzb3VyY2UuY29udGVudDogbnVsbAorcmVzb3VyY2UuY29udGVudDogCiBodHRwOi8vMTI3
LjAuMC4xOjgwMDAvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXpl
PTEwMAogcmVzb3VyY2UuY29udGVudDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291
cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0yMDEKLXJlc291cmNlLmNvbnRlbnQ6IG51bGwKK3Jlc291
cmNlLmNvbnRlbnQ6IAogaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9uZXR3b3JrL3Jl
c291cmNlcy9yZXNvdXJjZS5waHA/c2l6ZT0xMDAKIHJlc291cmNlLmNvbnRlbnQ6ICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112252</attachid>
            <date>2011-10-24 14:46:38 -0700</date>
            <delta_ts>2011-10-25 12:49:34 -0700</delta_ts>
            <desc>Address issues from revert</desc>
            <filename>cachexhragain.txt</filename>
            <type>text/plain</type>
            <size>38895</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MjgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMjQgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlciBhIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgdXMgdG8gY2FjaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudHMgYXMKKyAgICAgICAgYXBwcm9w
cmlhdGUgaW4gYSBsYXRlciBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxMjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlz
dG8uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBpbnRl
bmRlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQpOiBDYWNoZWRSZXNvdXJjZUNsaWVudHMgZG9uJ3Qg
c2VuZCBzZXBhcmF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgIGZvciBkaWRGYWlsKCkgYW5kIGRp
ZEZpbmlzaExvYWRpbmcoKSwgc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KTogQ2Fs
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKCkKKyAgICAgICAgICAg
IGluc3RlYWQgb2YgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVN1YnJlc291cmNlTG9h
ZCgpLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmRhdGEpOiBIYW5kbGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29t
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50cyBzZXR0aW5nCisgICAgICAgICAgICBEb05vdEJ1ZmZl
ckRhdGEgaW4gUmVzb3VyZUxvYWRlck9wdGlvbnMuIElmIHRoZSBEYXRhQnVmZmVyaW5nUG9saWN5
IGlzIEJ1ZmZlckRhdGEsIHRoZW4gdGhlCisgICAgICAgICAgICAnZGF0YScgaW5wdXQgcGFyYW1l
dGVyIHdpbGwgY29udGFpbiBhbGwgZGF0YSByZWNlaXZlZCBzbyBmYXIsIGFuZCB3ZSBuZWVkIHRv
IGRldGVybWluZSB0aGUKKyAgICAgICAgICAgIGluY3JlbWVudGFsIGRhdGEgdG8gZm9yd2FyZCB0
byB0aGUgY2xpZW50cy4gSWYgdGhlIHBvbGljeSBpcyBEb05vdEJ1ZmZlckRhdGEsICdkYXRhJyBp
cyBqdXN0CisgICAgICAgICAgICB0aGUgaW5jcmVtZW50YWwgZGF0YS4KKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnByZWxvYWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldExvYWRGaW5pc2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpsb2FkRmluaXNoVGltZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6IEFkZCBzZXZlcmFsIG5ldyBjYWxsYmFja3MgbmVlZGVk
IGJ5IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
UmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNl
KCkgY2FuIG5vdyBjYW5jZWwKKyAgICAgICAgICAgIHRoZSByZXF1ZXN0LCBzbyBwcm90ZWN0IGFw
cHJvcHJpYXRlbHkuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVz
dC5oOgorICAgICAgICAqIGxvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcDogQWRkZWQgKHBsdW1iIGRpZERvd25sb2FkRGF0YSgpIHRvIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcikuCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVzb3VyY2VIYW5k
bGU6Om5vdGlmeVJlc3BvbnNlKTogUHJvdGVjdCBiZWZvcmUgc2V0dGluZyByZXNwb25zZSwgc2lu
Y2UgaXQgbWlnaHQga2lsbCB1cy4KKwogMjAxMS0xMC0yNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgZG9lc24ndCBidWlsZCB3aXRoIHJlY2Vu
dCBjaGFuZ2VzIHRvIGxpYmRpc3BhdGNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA5ODI4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw3IEBACiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChtX2Vycm9yQ29kZSkgeworICAgICAgICBSZWZQdHI8QmxvYlJlc291cmNlSGFu
ZGxlPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICBub3RpZnlSZXNwb25zZU9uRXJyb3IoKTsKICAg
ICAgICAgbm90aWZ5RmluaXNoKCk7CiAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiA5ODI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtMjg1OCw2ICsyODU4LDggQEAKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5oJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2YvUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAn
LAorICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVt
LmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVz
dENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVt
L1Jlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2hyb21p
dW0vU3VicmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5ODI4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgogCi0jaW5jbHVkZSAiU3VicmVzb3Vy
Y2VMb2FkZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlRo
cmVhZGFibGVMb2FkZXJDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRG93bmxvYWREYXRhKFN1YnJlc291cmNlTG9hZGVy
KiBsb2FkZXIsIGludCBkYXRhTGVuZ3RoKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmRhdGFEb3dubG9hZGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgaW50IGRhdGFMZW5ndGgp
CiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9h
ZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9
PSBtX3Jlc291cmNlKTsKICAgICBBU1NFUlQoIW1fYWN0dWFsUmVxdWVzdCk7CiAKICAgICBtX2Ns
aWVudC0+ZGlkRG93bmxvYWREYXRhKGRhdGFMZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2Nocm9taXVtL0NhY2hlZFJlc291cmNlUmVxdWVzdENocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA5ODI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jaHJvbWl1bS9DYWNoZWRSZXNvdXJjZVJlcXVlc3RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2lu
Y2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmRpZERvd25sb2FkRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2Fk
ZXIgPT0gbV9sb2FkZXIpOworICAgIG1fcmVzb3VyY2UtPmRpZERvd25sb2FkRGF0YShsZW5ndGgp
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3
UmVzb3VyY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2Nocm9taXVtL0NhY2hlZFJhd1Jlc291cmNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5ODI4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OmRpZERv
d25sb2FkRGF0YShpbnQgZGF0YUxlbmd0aCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdh
bGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChD
YWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5kYXRhRG93
bmxvYWRlZCh0aGlzLCBkYXRhTGVuZ3RoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDk4MjgwKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDIwICsyNCw1NSBAQAogI2RlZmluZSBDYWNoZWRSYXdSZXNvdXJjZV9o
CiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmF3UmVzb3Vy
Y2UgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewogcHVibGljOgogICAgIENhY2hlZFJhd1Jlc291
cmNlKFJlc291cmNlUmVxdWVzdCYpOworCisgICAgLy8gRklYTUU6IEFzc29jaWF0ZWRVUkxMb2Fk
ZXIgc2hvdWxkbid0IGJlIGEgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIGFuZCB0aGVyZWZvcmUg
c2hvdWxkbid0CisgICAgLy8gdXNlIENhY2hlZFJhd1Jlc291cmNlLiBIb3dldmVyLCBpdCBpcywg
YW5kIGl0IG5lZWRzIHRvIGJlIGFibGUgdG8gZGVmZXIgbG9hZGluZy4KKyAgICAvLyBUaGlzIGNh
biBiZSBmaXhlZCBieSBzcGxpdHRpbmcgQ09SUyBwcmVmbGlnaHRpbmcgb3V0IG9mIERvY3VtZW50
VGhyZWFjYWJsZUxvYWRlci4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29s
KTsKICAgICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9y
SW5zdHJ1bWVudGF0aW9uIGZvciBwcmVmbGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
ci4gSXQncyBhbHNvIHJlYWxseSBsYW1lLgorICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigp
IGNvbnN0OworCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCiAgICAgdmlydHVhbCBib29s
IHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgdmlydHVhbCB2
b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShpbnQpOwor
I2VuZGlmCisKKyAgICBzaXplX3QgbV9kYXRhTGVuZ3RoOwogfTsKIAorCitjbGFzcyBDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQoKSB7IH0KKyAgICBzdGF0aWMg
Q2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIGV4cGVjdGVkVHlwZSgpIHsgcmV0dXJuIFJhd1Jlc291
cmNlVHlwZTsgfQorICAgIHZpcnR1YWwgQ2FjaGVkUmVzb3VyY2VDbGllbnRUeXBlIHJlc291cmNl
Q2xpZW50VHlwZSgpIHsgcmV0dXJuIGV4cGVjdGVkVHlwZSgpOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGF0YVNlbnQoQ2FjaGVkUmVzb3VyY2UqLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogYnl0ZXNT
ZW50ICovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyogdG90YWxCeXRlc1RvQmVTZW50ICovKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgaW50IC8qIGxlbmd0aCAqLykg
eyB9CisgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgdmlydHVhbCB2b2lkIGRhdGFEb3dubG9hZGVkKENhY2hlZFJlc291
cmNlKiwgaW50KSB7IH0KKyNlbmRpZgorfTsKKwogfQogCiAjZW5kaWYgLy8gQ2FjaGVkUmF3UmVz
b3VyY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuY3BwCShyZXZpc2lvbiA5ODI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDkgQEAKICAg
ICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7CiAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlOgorICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKICAg
ICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6UmF3UmVzb3VyY2U6CiAgICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3c7CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkxpbmtQcmVmZXRjaDoKQEAgLTg3LDYgKzg3LDcgQEAKICAgICAsIG1fbG9hZFByaW9y
aXR5KGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0eXBlKSkKICAgICAsIG1fcmVzcG9u
c2VUaW1lc3RhbXAoY3VycmVudFRpbWUoKSkKICAgICAsIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1l
KDApCisgICAgLCBtX2xvYWRGaW5pc2hUaW1lKDApCiAgICAgLCBtX2VuY29kZWRTaXplKDApCiAg
ICAgLCBtX2RlY29kZWRTaXplKDApCiAgICAgLCBtX2FjY2Vzc0NvdW50KDApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAko
cmV2aXNpb24gOTgyODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOCBAQAogICAgICAgICBC
YXNlUmVzb3VyY2VUeXBlLAogICAgICAgICBJbWFnZVR5cGUsCiAgICAgICAgIEZvbnRUeXBlLAot
ICAgICAgICBTdHlsZVNoZWV0VHlwZQorICAgICAgICBTdHlsZVNoZWV0VHlwZSwKKyAgICAgICAg
UmF3UmVzb3VyY2VUeXBlCiAgICAgfTsKIAogICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlQ2xp
ZW50KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaAkocmV2aXNpb24gOTgyODApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw2IEBACiAgICAg
ICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQogICAgIH07CiAgICAgUHJlbG9hZFJl
c3VsdCBwcmVsb2FkUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHJlbG9hZFJl
c3VsdD4obV9wcmVsb2FkUmVzdWx0KTsgfQotICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdv
cmtpbmdMYXllcigpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwog
ICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQpAQCAtMTczLDcgKzE3Miw4
IEBACiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFTU0VSVCghbV9wdXJnZWFi
bGVEYXRhKTsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyBtX3JlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KIAogICAgIC8vIFNldHMg
dGhlIHNlcmlhbGl6ZWQgbWV0YWRhdGEgcmV0cmlldmVkIGZyb20gdGhlIHBsYXRmb3JtJ3MgY2Fj
aGUuCkBAIC0yMzEsNyArMjMxLDE1IEBACiAgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlk
YXRlZFJlc291cmNlKCk7CiAgICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CiAg
ICAgdm9pZCB1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZFNl
bmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKiBieXRlc1NlbnQgKi8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKiB0b3RhbEJ5dGVzVG9CZVNlbnQgKi8pIHsgfQorI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoaW50KSB7IH0KKyNlbmRpZgogCisg
ICAgdm9pZCBzZXRMb2FkRmluaXNoVGltZShkb3VibGUgZmluaXNoVGltZSkgeyBtX2xvYWRGaW5p
c2hUaW1lID0gZmluaXNoVGltZTsgfQorICAgIGRvdWJsZSBsb2FkRmluaXNoVGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9hZEZpbmlzaFRpbWU7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY2hl
Y2tOb3RpZnkoKTsKIApAQCAtMjY2LDYgKzI3NCw3IEBACiAgICAgUmVmUHRyPENhY2hlZE1ldGFk
YXRhPiBtX2NhY2hlZE1ldGFkYXRhOwogCiAgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NU
aW1lOyAvLyBVc2VkIGFzIGEgInRocmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisgICAgZG91Ymxl
IG1fbG9hZEZpbmlzaFRpbWU7CiAKICAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwogICAgIHVu
c2lnbmVkIG1fZGVjb2RlZFNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTgyODApCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQAogCiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6
On5DYWNoZWRSZXNvdXJjZVJlcXVlc3QoKQogeworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAg
bV9sb2FkZXItPmNsZWFyQ2xpZW50KCk7CiB9CiAKIFBhc3NPd25QdHI8Q2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0PiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKQEAgLTE0MiwxMyArMTQ0LDEzIEBACiAgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlUmVxdWVz
dDo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVx
dWVzdCYgcmVxLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0Ojp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAg
IGlmICghbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+Y2FuUmVxdWVzdChtX3Jlc291cmNlLT50eXBl
KCksIHJlcS51cmwoKSkpIHsKICAgICAgICAgbG9hZGVyLT5jYW5jZWwoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBtX3Jlc291cmNlLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xh
eWVyKCk7CisgICAgbV9yZXNvdXJjZS0+d2lsbFNlbmRSZXF1ZXN0KHJlcSwgcmVzcG9uc2UpOwog
fQogCiB2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6Y2FuY2VsKCkKQEAgLTE1OCw4ICsxNjAs
MTkgQEAKICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJs
ZSkKK3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjppZGVudGlmaWVyKCkgY29u
c3QKIHsKKyAgICByZXR1cm4gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3Q6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMp
OworfQorCit2b2lkIENhY2hlZFJlc291cmNlUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyhTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKK3sKICAgICBpZiAobV9m
aW5pc2hpbmcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTc4LDYgKzE5MSw3IEBACiAgICAgLy8g
ZXJyb3IsIHNvIHdlIGNhbid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwgZGF0YSgpIGFuZCBmaW5pc2go
KSBjYWxsYmFja3MuCiAgICAgaWYgKCFtX3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKICAg
ICAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+bG9hZEZpbmlzaGluZygpOworICAgICAgICBt
X3Jlc291cmNlLT5zZXRMb2FkRmluaXNoVGltZShmaW5pc2hUaW1lKTsKICAgICAgICAgbV9yZXNv
dXJjZS0+ZGF0YShsb2FkZXItPnJlc291cmNlRGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFt
X3Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgICAgICBtX3Jlc291cmNlLT5maW5p
c2goKTsKQEAgLTIzOSw3ICsyNTMsMTMgQEAKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmV2YWxp
ZGF0aW9uRmFpbGVkKG1fcmVzb3VyY2UpOwogICAgIH0KIAorICAgIC8vIHNldFJlc3BvbnNlKCkg
bWlnaHQgY2FuY2VsIHRoZSByZXF1ZXN0LCBzbyB3ZSBuZWVkIHRvIGtlZXAgb3Vyc2VsdmVzIGFs
aXZlLiBVbmZvcnR1bmF0ZWx5LAorICAgIC8vIHdlIGNhbid0IHByb3RlY3QgYSBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QsIGJ1dCB3ZSBjYW4gcHJvdGVjdCBtX3Jlc291cmNlLCB3aGljaCBoYXMgdGhl
CisgICAgLy8gcG93ZXIgdG8ga2lsbCB0aGUgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IChhbmQgd2ls
bCBzd2l0Y2ggaXNMb2FkaW5nKCkgdG8gZmFsc2UgaWYgaXQgZG9lcyBzbykuCisgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3QobV9yZXNvdXJjZSk7CiAgICAg
bV9yZXNvdXJjZS0+c2V0UmVzcG9uc2UocmVzcG9uc2UpOworICAgIGlmICghcHJvdGVjdC0+aXNM
b2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3Bv
bnNlLnRleHRFbmNvZGluZ05hbWUoKTsKICAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQpAQCAt
MjcxLDE4ICsyOTEsMjAgQEAKICAgICBpZiAobV9yZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZXNvdXJjZS0+cmVzcG9uc2UoKS5odHRwU3Rh
dHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICBpZiAoIW1fcmVzb3VyY2UtPnNob3VsZElnbm9y
ZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkpCi0gICAgICAgICAgICBtX3Jlc291cmNlLT5lcnJvcihD
YWNoZWRSZXNvdXJjZTo6TG9hZEVycm9yKTsKKyAgICBpZiAobV9yZXNvdXJjZS0+cmVzcG9uc2Uo
KS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCAmJiAhbV9yZXNvdXJjZS0+c2hvdWxkSWdub3JlSFRU
UFN0YXR1c0NvZGVFcnJvcnMoKSkgeworICAgICAgICBtX3Jlc291cmNlLT5lcnJvcihDYWNoZWRS
ZXNvdXJjZTo6TG9hZEVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFNl
dCB0aGUgZGF0YS4KLSAgICBpZiAobV9tdWx0aXBhcnQpIHsKLSAgICAgICAgLy8gVGhlIGxvYWRl
ciBkZWxpdmVycyB0aGUgZGF0YSBpbiBhIG11bHRpcGFydCBzZWN0aW9uIGFsbCBhdCBvbmNlLCBz
ZW5kIGVvZi4KLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRhdGEgd2lsbCBjaGFuZ2UgYXMgdGhl
IG5leHQgcGFydCBpcyBsb2FkZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBhIGNvcHkuCisgICAgLy8g
VGhlcmUgYXJlIHR3byBjYXNlcyB3aGVyZSB3ZSBtaWdodCBuZWVkIHRvIGNyZWF0ZSBvdXIgb3du
IFNoYXJlZEJ1ZmZlciBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlIG9uZSBpbiBSZXNvdXJjZUxvYWRl
ci4KKyAgICAvLyAoMSkgTXVsdGlwYXJ0IGNvbnRlbnQ6IFRoZSBsb2FkZXIgZGVsaXZlcnMgdGhl
IGRhdGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgdGhlbiBzZW5kcyBlb2Yu
CisgICAgLy8gICAgIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRoZSBuZXh0IHBh
cnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5LgorICAgIC8vICgyKSBPdXIg
Y2xpZW50IHJlcXVlc3RlZCB0aGF0IHRoZSBkYXRhIG5vdCBiZSBidWZmZXJlZCBhdCB0aGUgUmVz
b3VyY2VMb2FkZXIgbGV2ZWwgdmlhIFJlc291cmNlTG9hZGVyT3B0aW9ucy4gSW4gdGhpcyBjYXNl
LAorICAgIC8vICAgICBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRhKCkgd2lsbCBiZSBudWxs
LiBIb3dldmVyLCB1bmxpa2UgdGhlIG11bHRpcGFydCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHRl
bGwgdGhlIENhY2hlZFJlc291cmNlCisgICAgLy8gICAgIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4g
cmVjZWl2ZWQgeWV0LgorICAgIGlmIChtX211bHRpcGFydCB8fCAhbG9hZGVyLT5yZXNvdXJjZURh
dGEoKSkgewogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3BpZWREYXRhID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIG1fcmVzb3VyY2UtPmRhdGEoY29w
aWVkRGF0YS5yZWxlYXNlKCksIHRydWUpOworICAgICAgICBtX3Jlc291cmNlLT5kYXRhKGNvcGll
ZERhdGEucmVsZWFzZSgpLCBtX211bHRpcGFydCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcmVz
b3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOwogfQpAQCAtMjkyLDcg
KzMxNCwxMiBAQAogICAgIEFTU0VSVCghbV9yZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRvcigpKTsK
ICAgICBtX3Jlc291cmNlLT5zZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSk7
CiB9Ci0gICAgCisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0OjpkaWRTZW5kRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgbV9yZXNvdXJjZS0+ZGlkU2VuZERh
dGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOworfQorCiB2b2lkIENhY2hlZFJlc291
cmNlUmVxdWVzdDo6ZW5kKCkKIHsKICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5sb2FkRG9u
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCShyZXZpc2lvbiA5ODI4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE5ICszNyw4
NSBAQAogCiBDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1
ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiAgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVl
c3QsIFJhd1Jlc291cmNlKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiB9CiAKIHZvaWQgQ2Fj
aGVkUmF3UmVzb3VyY2U6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogewotICAgIG1fZGF0YSA9IGRhdGE7CisgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHByb3RlY3QodGhpcyk7CisgICAgaWYgKGRhdGEp
IHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGJ1ZmZlcmluZyBkYXRhLCB0aGVuIHdlIGFyZSBzYXZp
bmcgdGhlIGJ1ZmZlciBpbiBtX2RhdGEgYW5kIG5lZWQgdG8gbWFudWFsbHkKKyAgICAgICAgLy8g
Y2FsY3VsYXRlIHRoZSBpbmNyZW1lbnRhbCBkYXRhLiBJZiB3ZSBhcmUgbm90IGJ1ZmZlcmluZywg
dGhlbiBtX2RhdGEgd2lsbCBiZSBudWxsIGFuZAorICAgICAgICAvLyB0aGUgYnVmZmVyIGNvbnRh
aW5zIG9ubHkgdGhlIGluY3JlbWVudGFsIGRhdGEuCisgICAgICAgIHNpemVfdCBwcmV2aW91c0Rh
dGFMZW5ndGggPSAobV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgPyBt
X2RhdGFMZW5ndGggOiAwOworICAgICAgICBBU1NFUlQoZGF0YS0+c2l6ZSgpID49IHByZXZpb3Vz
RGF0YUxlbmd0aCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY3JlbWVudGFsRGF0YSA9IGRhdGEt
PmRhdGEoKSArIHByZXZpb3VzRGF0YUxlbmd0aDsKKyAgICAgICAgc2l6ZV90IGluY3JlbWVudGFs
RGF0YUxlbmd0aCA9IGRhdGEtPnNpemUoKSAtIHByZXZpb3VzRGF0YUxlbmd0aDsKKworICAgICAg
ICBpZiAoaW5jcmVtZW50YWxEYXRhTGVuZ3RoKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAg
ICAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisg
ICAgICAgICAgICAgICAgYy0+ZGF0YVJlY2VpdmVkKHRoaXMsIGluY3JlbWVudGFsRGF0YSwgaW5j
cmVtZW50YWxEYXRhTGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV9v
cHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPT0gQnVmZmVyRGF0YSkgeworICAgICAgICBtX2RhdGFM
ZW5ndGggPSBkYXRhID8gZGF0YS0+c2l6ZSgpIDogMDsKKyAgICAgICAgbV9kYXRhID0gZGF0YTsK
KyAgICB9CiAgICAgQ2FjaGVkUmVzb3VyY2U6OmRhdGEobV9kYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OwogfQogCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQqIGMpCit7CisgICAgaWYgKG1fZGF0YSkgeworICAgICAgICBzdGF0aWNfY2FzdDxD
YWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMpLT5yZXNwb25zZVJlY2VpdmVkKHRoaXMsIG1fcmVz
cG9uc2UpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCo+KGMp
LT5kYXRhUmVjZWl2ZWQodGhpcywgbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKTsKKyAg
ICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChjKTsKK30KKwogdm9pZCBDYWNo
ZWRSYXdSZXNvdXJjZTo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewogICAgIGlmIChtX3JlcXVlc3Qp
CiAgICAgICAgIG1fcmVxdWVzdC0+Y2FuY2VsKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3UmVzb3Vy
Y2U6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmICghcmVzcG9uc2UuaXNOdWxsKCkpIHsK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGll
bnQ+IHcobV9jbGllbnRzKTsKKyAgICAgICAgd2hpbGUgKENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
KiBjID0gdy5uZXh0KCkpCisgICAgICAgICAgICBjLT5yZWRpcmVjdFJlY2VpdmVkKHRoaXMsIHJl
cXVlc3QsIHJlc3BvbnNlKTsKKyAgICB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OndpbGxTZW5kUmVx
dWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnNl
dFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIENhY2hl
ZFJlc291cmNlOjpzZXRSZXNwb25zZShyZXNwb25zZSk7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXI8Q2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ+IHcobV9jbGllbnRzKTsKKyAgICB3aGls
ZSAoQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+cmVz
cG9uc2VSZWNlaXZlZCh0aGlzLCBtX3Jlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNv
dXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOworICAgIHdoaWxl
IChDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKQorICAgICAgICBjLT5kYXRh
U2VudCh0aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQgQ2Fj
aGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCit7CisgICAgaWYg
KG1fcmVxdWVzdCkKKyAgICAgICAgbV9yZXF1ZXN0LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7
Cit9CisKK3Vuc2lnbmVkIGxvbmcgQ2FjaGVkUmF3UmVzb3VyY2U6OmlkZW50aWZpZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlcXVlc3QgPyBtX3JlcXVlc3QtPmlkZW50aWZpZXIoKSA6IDA7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDk4Mjgw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMiBAQAogICAgICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFJl
c291cmNlTG9hZGVyOyB9CiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAKKyAgICAgICAgLy8gRklY
TUU6IExpa2UgQ2FjaGVkUmVzb3VyY2U6OmlkZW50aWZpZXIoKSwgdGhpcyBpcyBhIGxhbWUgaGFj
ayBmb3IgcHJlZmxpZ2h0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBpbiBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuCisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0Owor
CisgICAgICAgIC8vIEZJWE1FOiBTZWUgQ2FjaGVkUmF3UmVzb3VyY2U6OnNldERlZmVyc0xvYWRp
bmcoKSBmb3IgdGhlIHJlbGV2YW50IHJhbnQuCisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGlu
Zyhib29sKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdChD
YWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlKik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC01OSw2ICs2NSwxMSBAQAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKICAgICAgICAgdm9pZCBlbmQoKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQq
LywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pOworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgaW50KTsKKyNlbmRpZgorCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJj
ZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBtX2NhY2hl
ZFJlc291cmNlTG9hZGVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgJKHJldmlzaW9uIDk4Mjgw
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEljb25Mb2FkZXJfaAogI2RlZmluZSBJY29u
TG9hZGVyX2gKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmF3UmVzb3VyY2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBA
IC0zNywxMSArMzcsMTEgQEAKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNlOwogY2xhc3MgRnJhbWU7
CiAKLWNsYXNzIEljb25Mb2FkZXIgOiBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2Ns
YXNzIEljb25Mb2FkZXIgOiBwcml2YXRlIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJY29uTG9hZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SWNvbkxvYWRlcj4gY3JlYXRlKEZyYW1l
Kik7Ci0gICAgfkljb25Mb2FkZXIoKTsKKyAgICB2aXJ0dWFsIH5JY29uTG9hZGVyKCk7CiAKICAg
ICB2b2lkIHN0YXJ0TG9hZGluZygpOwogICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJl
dmlzaW9uIDk4MjgwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw5IEBACiAjaWZuZGVmIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcl9oCiAjZGVmaW5lIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcl9o
CiAKKyNpbmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlN1
YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDgs
NyArNDksNyBAQAogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQ7CiAKLSAgICBjbGFzcyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFk
YWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCAgeworICAgIGNsYXNz
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIENhY2hlZFJh
d1Jlc291cmNlQ2xpZW50ICB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShE
b2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQm
LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpAQCAtNzMsMjEgKzc0LDIxIEBACiAK
ICAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIEJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKKyAgICAgICAg
dm9pZCBjbGVhclJlc291cmNlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgY2hhciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgZGF0
YUxlbmd0aCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291
cmNlTG9hZGVyKiwgZG91YmxlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KKyAgICAgICAgLy8gQ2FjaGVk
UmF3UmVzb3VyY2VDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFTZW50KENhY2hlZFJl
c291cmNlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0
YSwgaW50IGRhdGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
Kik7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWREb3du
bG9hZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkYXRhRG93bmxvYWRlZChDYWNoZWRSZXNvdXJjZSosIGludCk7CiAjZW5kaWYK
IAogICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAg
ICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2b2lkIG1ha2VT
aW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZs
aWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZs
aWdodFN1Y2Nlc3MoKTsKQEAgLTk4LDcgKzk5LDcgQEAKIAogICAgICAgICBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VM
b2FkZXI+IG1fbG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdS
ZXNvdXJjZT4gbV9yZXNvdXJjZTsKICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogbV9j
bGllbnQ7CiAgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgICAgICBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gOTgyODApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxv
YWRlci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKQEAgLTYzLDcgKzYzLDcgQEAKIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCog
ZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJl
ZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3lu
Y2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykpOwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRl
cikKKyAgICBpZiAoIWxvYWRlci0+bV9yZXNvdXJjZSkKICAgICAgICAgbG9hZGVyID0gMDsKICAg
ICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KQEAgLTEzMywzMSArMTMzLDM5IEBACiAKIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCiB7Ci0g
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+Y2xlYXJDbGllbnQoKTsKKyAgICBp
ZiAobV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwog
fQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2FuY2VsKCkKIHsKLSAgICBpZiAo
IW1fbG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0g
ICAgbV9sb2FkZXItPmNsZWFyQ2xpZW50KCk7Ci0gICAgbV9sb2FkZXIgPSAwOworICAgIGlmICht
X2NsaWVudCkgeworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGVycm9yRG9tYWluV2ViS2l0
SW50ZXJuYWwsIDAsIG1fcmVzb3VyY2UtPnVybCgpLCAiTG9hZCBjYW5jZWxsZWQiKTsKKyAgICAg
ICAgZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3Ip
OworICAgIH0KKyAgICBjbGVhclJlc291cmNlKCk7CiAgICAgbV9jbGllbnQgPSAwOwogfQogCiB2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIHZhbHVl
KQogewotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcodmFsdWUpOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXRE
ZWZlcnNMb2FkaW5nKHZhbHVlKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZSgpCiB7CisgICAgaWYg
KG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwor
ICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpyZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQorewogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2Fk
ZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVz
b3VyY2UgPT0gbV9yZXNvdXJjZSk7CiAKICAgICBpZiAoIWlzQWxsb3dlZFJlZGlyZWN0KHJlcXVl
c3QudXJsKCkpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHBy
b3RlY3QodGhpcyk7CkBAIC0xNjksMTggKzE3NywxNyBAQAogICAgIH0KIH0KIAotdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bEJ5dGVzVG9CZVNlbnQpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVNlbnQo
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVChtX2Ns
aWVudCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0K
KyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKICAg
ICBtX2NsaWVudC0+ZGlkU2VuZERhdGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwog
fQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1
YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2Uo
bG9hZGVyLT5pZGVudGlmaWVyKCksIHJlc3BvbnNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291
cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UobV9y
ZXNvdXJjZS0+aWRlbnRpZmllcigpLCByZXNwb25zZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTIyMywxMCArMjMwLDEwIEBA
CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZURh
dGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFM
ZW5ndGgpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGF0YVJlY2VpdmVkKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCiB7
CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBt
X3Jlc291cmNlKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKG1fcHJlZmxpZ2h0
UmVxdWVzdElkZW50aWZpZXIpCkBAIC0yNDAsMjUgKzI0NywyMCBAQAogICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlRGF0YShkYXRhLCBkYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKK3ZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Up
CiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9h
ZGVyID09IG1fbG9hZGVyKTsKLQotICAgIC8vIFByZWZsaWdodCBkYXRhIHNob3VsZCBiZSBpbnZp
c2libGUgdG8gY2xpZW50cy4KLSAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGRhdGEsIGRhdGFM
ZW5ndGgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3Vy
Y2UpOworICAgICAgICAKKyAgICBpZiAobV9yZXNvdXJjZSAmJiAobV9yZXNvdXJjZS0+ZXJyb3JP
Y2N1cnJlZCgpIHx8IG1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpKSB7CisgICAgICAgIFJlc291
cmNlRXJyb3IgZXJyb3IoIk5ldHdvcmsgUmVxdWVzdCBGYWlsZWQiLCAwLCBtX3Jlc291cmNlLT51
cmwoKSwgIlJlc291cmNlIGZhaWxlZCB0byBsb2FkIik7CisgICAgICAgIGlmIChtX3Jlc291cmNl
LT53YXNDYW5jZWxlZCgpKQorICAgICAgICAgICAgZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1
ZSk7CisgICAgICAgIGRpZEZhaWwoZXJyb3IpOworICAgIH0gZWxzZQorICAgICAgICBkaWRGaW5p
c2hMb2FkaW5nKG1fcmVzb3VyY2UtPmlkZW50aWZpZXIoKSwgbV9yZXNvdXJjZS0+bG9hZEZpbmlz
aFRpbWUoKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQotewot
ICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0g
ICAgZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSwgZmluaXNoVGltZSk7Ci19
Ci0KIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKQEAgLTI3NCwxMiArMjc2LDggQEAKICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlz
aExvYWRpbmcoaWRlbnRpZmllciwgZmluaXNoVGltZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsK
LSAgICAvLyBtX2xvYWRlciBtYXkgYmUgbnVsbCBpZiB3ZSBhcnJpdmUgaGVyZSB2aWEgU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSBpbiB0aGUgY3RvcgotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVy
LCBsb2FkZXIgPT0gbV9sb2FkZXIgfHwgIW1fbG9hZGVyKTsKLQogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgaWYgKG1fcHJlZmxpZ2h0UmVxdWVzdElkZW50aWZpZXIpCiAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmFpbExvYWRpbmcobV9kb2N1bWVudC0+ZnJhbWUoKSwg
bV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIG1fcHJlZmxp
Z2h0UmVxdWVzdElkZW50aWZpZXIsIGVycm9yKTsKQEAgLTI5NSw2ICsyOTMsOCBAQAogCiAgICAg
YWN0dWFsUmVxdWVzdC0+c2V0SFRUUE9yaWdpbihzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
KTsKIAorICAgIGNsZWFyUmVzb3VyY2UoKTsKKwogICAgIC8vIEl0IHNob3VsZCBiZSBvayB0byBz
a2lwIHRoZSBzZWN1cml0eSBjaGVjayBzaW5jZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0IHRoZSBw
cmVmbGlnaHQgcmVxdWVzdC4KICAgICBsb2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgU2tpcFNl
Y3VyaXR5Q2hlY2spOwogfQpAQCAtMzI0LDE5ICszMjQsMTkgQEAKICAgICAgICAgICAgIG9wdGlv
bnMuc2hvdWxkQnVmZmVyRGF0YSA9IEJ1ZmZlckRhdGE7CiAgICAgICAgIH0KIAorICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0KTsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJl
cXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0KTsKICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2lsbFNl
bmRSZXF1ZXN0IG9ubHkgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlZGlyZWN0cywgd2UgaW5pdGlhbGl6
ZSB0aGUgaWRlbnRpZmllciBhbmQgdGhlIGZpcnN0IHdpbGxTZW5kUmVxdWVzdCBoZXJlLgogICAg
ICAgICAgICAgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1l
KCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgICAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSByZWRpcmVjdFJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25z
ZSgpOwogICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFJlcXVl
c3QobV9kb2N1bWVudC0+ZnJhbWUoKSwgbV9wcmVmbGlnaHRSZXF1ZXN0SWRlbnRpZmllciwgbV9k
b2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCksIG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgICB9CiAjZW5kaWYKLQotICAgICAgICAvLyBDbGVh
ciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVy
OjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KLSAgICAgICAgbV9sb2FkZXIg
PSAwOwotICAgICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVs
ZVN1YnJlc291cmNlTG9hZChtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eU1lZGl1bSwgb3B0aW9ucyk7CisgICAgICAgIEFTU0VSVCghbV9yZXNv
dXJjZSk7CisgICAgICAgIG1fcmVzb3VyY2UgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5yZXF1ZXN0UmF3UmVzb3VyY2UobmV3UmVxdWVzdCwgb3B0aW9ucyk7CisgICAgICAg
IGlmIChtX3Jlc291cmNlKQorICAgICAgICAgICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzY3LDcgKzM2Nyw3IEBACiAKICAg
ICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEo
KSk7CiAgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGRp
ZFJlY2VpdmVEYXRhKDAsIGJ5dGVzLCBsZW4pOworICAgIGRhdGFSZWNlaXZlZCgwLCBieXRlcywg
bGVuKTsKIAogICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllciwgMC4wKTsKIH0KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50
LXJlcGxhY2VtZW50LXhoci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9uZXR3b3JrLWNvbnRlbnQtcmVwbGFjZW1lbnQt
eGhyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTgyODApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstY29udGVudC1yZXBsYWNlbWVudC14aHItZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDExICsyLDExIEBACiBUZXN0cyBOZXR3b3Jr
UmVzb3VyY2VzRGF0YSBsb2dpYyBmb3IgWEhSIGNvbnRlbnQgcmVwbGFjZW1lbnQuCiAKIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2UucGhw
P3NpemU9MjAwCi1yZXNvdXJjZS5jb250ZW50OiBudWxsCityZXNvdXJjZS5jb250ZW50OiAKIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZXMvcmVzb3VyY2Uu
cGhwP3NpemU9MTAwCiByZXNvdXJjZS5jb250ZW50OiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL25ldHdv
cmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTIwMQotcmVzb3VyY2UuY29udGVudDogbnVs
bAorcmVzb3VyY2UuY29udGVudDogCiBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL25l
dHdvcmsvcmVzb3VyY2VzL3Jlc291cmNlLnBocD9zaXplPTEwMAogcmVzb3VyY2UuY29udGVudDog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5ODI4MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDExLTEwLTI0ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgVGVzdCB1cGRhdGUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MTIyNS4KKyAgICAgICAgRHVlIHRvIGNoYW5nZXMgaW4gdGhlIGlt
cGxlbWVudGF0aW9uIG9mIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciAoYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBYSFIpLCB0aGlzIHRlc3Qgd2lsbCBoYXZlIGVtcHR5IChyYXRoZXIgdGhhbiBudWxs
KSBjb250ZW50CisgICAgICAgIGlmIHdlIGdvIG92ZXIgdGhlIGxlbmd0aCBsaW1pdC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
aW5zcGVjdG9yL25ldHdvcmsvbmV0d29yay1jb250ZW50LXJlcGxhY2VtZW50LXhoci1leHBlY3Rl
ZC50eHQ6CisKIDIwMTEtMTAtMjQgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBJbmRleGVkREI6IFRocm93IERBVEFfRVJSIG9uIGludmFsaWQga2V5cywgcmVt
b3ZlIG51bGwga2V5IHN1cHBvcnQK
</data>

          </attachment>
      

    </bug>

</bugzilla>